2016-11-27 41 views
0

我在Gurobi Python Interface中解決了MIP。解決優化模型後,我需要按降序對一些決策變量進行排序,並在模型的最後進行一些修改/計算。然後,再次運行我的模型並獲得D.V.值。我需要重複這個過程幾次。然而,當我使用'排序'語法,我得到的錯誤說: a = {} a = sorted(x [i,j,k],reverse = True) TypeError:'Var'對象不可迭代 我也想知道,如果我有一個決策變量,如:gurbi.Var x3,2,1(值1.0),是否可以在一個矩陣中有索引(3,2,4),其他矩陣中的對應值是1.0 ? 我是新來的古羅比,並想知道如果你能幫助我。 Regards在Gurobi Python Interface中排序決策變量的值

+0

你用於決策變量x的數據結構是什麼?你是如何產生它們的? –

+0

我正在使用字典。如下面的代碼:x = {} 對於範圍(3)中的i: 對於範圍(2)中的j: 對於範圍(80)中的t: x [(i + 1,j + 1,t + 1)] = m.addVar(lb = 0,ub = GRB.INFINITY,vtype = GRB.INTEGER,name =「x%d,%d,%d」%(i + 1,j + 1,t + 1 )) – hsi

回答

0

Python sorted() function需要一個可變序列(如列表),並根據鍵或比較函數對其進行排序。最多的Pythonic選項是創建一個Gurobi Var objects的列表,並根據他們的解決方案值對它們進行排序。例如,以降序它們的最佳值的順序的變量進行排序,嘗試:

vars = m.getVars() 
vars.sort(key=lambda y:y.X, reverse=True) 

其中lambda函數的功對象檢索溶液值(X屬性)。現在,如果您想對鍵列表進行排序,請嘗試:

keys = # your list of keys ... 
keys.sort(key=lambda k:x[k].X, reverse=True) 

其中x是您的變量字典。

+0

非常感謝格洛克納博士。它確實有幫助。問候 – hsi

+0

好,那麼你應該標誌着這個答案解決了你的問題。 –

+0

現在我已經對變量的值和鍵進行了排序,並決定在排序後的變量列表中選擇一個值,我如何訪問相應的鍵。我需要那個鑰匙。我嘗試了不同的方式。但是,據說對象值是不可迭代的。例如,我有:(4.0,3.0,1.0)變量與(3,1,45),(2,1,80),(3,1,37)鍵。如果我在變量中選擇3.0,我怎樣才能訪問鍵(2,1,80)? Regards – hsi