簡體   English   中英

如何在 Python cplex api 中讀取變量值?

[英]How to read variable values in Python cplex api?

我在 Python Cplex API 中模擬了一個 MIP 問題。 有什么方法可以讀取變量值 - 明智的?

目前我正在將變量值讀入一個列表並從 LP 文件中映射這些值”

    for i, j in zip(cpx.variables.get_names(), cpx.solution.get_values()):
        cplex_details_inp.append((i, j))

通過這種方法,我可以一次讀取所有變量值,但是由於有 500k 個變量,這種方法會導致內存問題。

如何明智地讀取值變量? 我沒有找到任何具體的文檔或示例。

for i in cpx.variables.get_names():
           cplex_details_inp.append([i,cpx.solution.get_values(i)])

此代碼可以提供幫助。

查看參考文檔,我們可以看到有多種選項可以調用此函數:

  • solution.get_values()返回問題中所有變量的值。
  • solution.get_values(i) i 必須是變量名或索引。 返回索引或名稱為 i 的變量的值。
  • solution.get_values(s) s 必須是變量名稱或索引的序列。 返回帶有索引 s 成員的變量的值。 相當於 [solution.get_values(i) for i in s]
  • solution.get_values(begin, end) begin 和 end 必須是變量索引或變量名。 返回索引在開始和結束之間的變量的值,包括結束。 相當於 solution.get_values(range(begin, end + 1))。

因此,您可以僅將要讀取變量的變量指定為函數的參數。 要么一一指定變量,要么分塊讀取變量。

你所有的變量都是非零的嗎? 如果您的解向量稀疏,以下方法可以解決內存問題:

cplex_details_inp = [[i, cpx.solution.get_values(i)] for i in cpx.variables.get_names() if cpx.solution.get_values(i) > 0]

與一直append到列表相比,它甚至可能加快進程。 為了將非常小的變量視為零,您可能需要使用round()

cplex_details_inp = [[i, cpx.solution.get_values(i)] for i in cpx.variables.get_names() if round(cpx.solution.get_values(i), precision) > 0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM