如何创建来自解决方案 x[i,j] 的路由列表?
How to create an list of routes that come from a solution x[i,j]?
我正在尝试创建一种自动方法,通过在我的模型中获得的解决方案 x[i,j]
,设法生成所有路线的列表[列表],该列表收集每个解决方案 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 list comprehension 创建路由列表:
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]
我正在尝试创建一种自动方法,通过在我的模型中获得的解决方案 x[i,j]
,设法生成所有路线的列表[列表],该列表收集每个解决方案 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 list comprehension 创建路由列表:
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]