add.Constrs Gurobi 内的嵌套循环

Nested loop inside add.Constrs Gurobi

我正在尝试在取货节点和投递节点之间添加一些时间约束,并且我想对投递节点的时间高于与其关联的取货节点的时间这一事实进行建模。

这是我的代码:

for i in df_d.id:
m.addConstrs((B[i] >= B[j] for j in df_d.loc[df_d.id == i,"associati"]), name="temporal")

我收到这个错误:

结果:

for i in df_d.id:
    for j in df_d.loc[df_d.id == i,"associati"]:
         print(j)

类似于:

所以问题是,当我将 j 传递给 B[j] 时,它是一个列表而不是一个 int,我需要遍历该列表。

Model.addConstrs() 的想法是将生成器表达式(循环)合并到表达式中,因此我将其重写为:

m.addConstrs((B[i] >= B[j] for i in df_d.id
                           for j in df_d.loc[df_d.id == i,"associati"]),
             name="temporal")

如果失败,请调查您的数据框 df_d。

这似乎有效:

m.addConstrs((B[j] >= B[i]  for index_i,i in df_p.id.items()          
                            for j in df_p.loc[index_i,"associati"]),name="temporal")