2016-11-27 40 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