我正在尝试创建一种自动方法,通过在我的模型中获得的解x[i,j]
,设法生成一个所有路由的列表[list],它在每次迭代中收集每个解x
,但没有重复。
的例子:
routes = []
for i in range(N):
for j in range(N):
if x[i,j].x:
print(x[i,j])
routes.append([x[i,j]])
得到的解如下:
<gurobi.Var x[0,1] (value 1.0)>
<gurobi.Var x[1,3] (value 1.0)>
<gurobi.Var x[3,0] (value 1.0)>
这个解决方案是可以接受的,但我认为通过做routes.append([x[i,j]])
,数组以routes=[[(0, 1), (1, 3), (3,0)]]
格式出现,这是我想要工作的格式,更简单。
相反,我得到的结果是[[<gurobi.Var x[0,1] (value 1.0)>], [<gurobi.Var x[1,3] (value 1.0)>], [<gurobi.Var x[3,0] (value 1.0)>]]
,这对我没有帮助。
我应该用另一种格式吗?顺便问一下,你能帮我创建一种方法,每次迭代和解决方案,先检查routes
,避免重复插入相同的路由吗?
查找x[i,j]为1的索引。代码应该看起来像这样:
routes = []
for i in range(N):
for j in range(N):
if x[i,j].x:
print(x[i,j])
routes.append((i,j))
或者,使用Python列表推导来创建路由列表:
routes = [(i,j) for i in range(N) for j in range(N) if x[i,j].X > 0.5]
如果x是一个字典(或一个Gurobi元字典),您可以将其简化为:
routes = [(i,j) for i,j in x.keys() if x[i,j].X > 0.5]