我有一堆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。请帮忙。
谢谢!
答案 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]
其中nx
和ny
是变量的数量。