如何创建来自解x[i,j]的路由列表?



我正在尝试创建一种自动方法,通过在我的模型中获得的解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]

最新更新