提取古罗比溶液指数

时间:2018-07-23 21:55:10

标签: python indexing gurobi

我有一堆gurobi变量 y [0],y [1],...,y [n] x [0],x [1],...,x [m]。 我希望能够找出不为零的最优y的索引。换句话说,如果最优解为y [0] = 0,y [1] = 5,y [2] = 0,y [3] = 1,我想返回[1,3]。到目前为止,我已经

F = []
for v in model.getVars():
   if v.varName[0]=='y' and v.x>0:
     F.append[v.varName]

在上面的示例中,这将给我['y [1]','y [3]']。由于此输出是字符串,因此我不确定如何从中获取1和3。请帮忙。

谢谢!

2 个答案:

答案 0 :(得分:0)

我正在使用以下有效的方法:

Index_List = []
for v in m.getVars():
       if v.varName[0] == 'y' and v.x>0:

           Index = int(v.varName[2]) 

           for j in range(3,3+100)):
               BOOL = False 
               try:
                   IndexNEW =int(v.varName[j])
                   Index = 10*Index+IndexNEW
                   BOOL = True
               except ValueError:
                   ()
               if not BOOL:
                   break
       Index_List.append(Index)

生成的Index_List是所需的。当然,必须有更好的方法。

答案 1 :(得分:0)

假设

from gurobipy import *
m = Model()

如果您使用以下方法为变量创建Gurobi元组

x = m.addVars(nx, vtype=GRB.INTEGER, name="x")
y = m.addVars(ny, vtype=GRB.INTEGER, name="y")
# ...your constraints and objective here..

然后,您可以直接调用变量的属性(在当前情况下,为变量值的.X属性)。使用列表理解可以做到:

m.optimize()
if m.status == GRB.OPTIMAL:
    indices = [i for i in range(ny) if y[i].X > 0]

其中nxny是变量的数量。