Gurobi的addConstrs内嵌套循环添加取派节点时间约束报错如何解决
问题原因
你数据表中associati列的每个单元格存储的是关联取件节点ID的列表,原有代码中遍历df_d.loc[df_d.id == i,"associati"]拿到的j是完整列表,不是单个节点ID,传入B[j]时会触发索引类型不匹配报错。
解决方案
直接对列表内的节点ID做二次遍历即可,参考修改代码如下:
for i in df_d.id: # 先取到当前派件节点i对应的关联取件节点列表,再遍历列表内的每个节点ID m.addConstrs((B[i] >= B[j] for assoc_list in df_d.loc[df_d.id == i, "associati"] for j in assoc_list), name=f"temporal_{i}")
如果id是df_d的主键、每个id仅对应一行数据,可以简化为更易读的写法:
for i in df_d.id: related_pickup_ids = df_d.loc[df_d.id == i, "associati"].iloc[0] m.addConstrs((B[i] >= B[j] for j in related_pickup_ids), name=f"temporal_{i}")
内容的提问来源于stack exchange,提问作者user12239061
相关产品推荐
相关产品推荐

