Pyomo使用索引Set时报字符串索引必须为整数错误如何解决
问题修复方案
报错根因
你触发报错的核心原因是FlowBalance_rule约束的写法存在两处逻辑错误:
- 你定义的
NodesIn[node]、NodesOut[node]存储的本身就是管道名称字符串,无需做二次索引。你写的m.Flow[m.NodesIn[node][pipe]]会把字符串类型的pipe当成列表的整数下标使用,直接触发索引类型不匹配的报错。 - 流出节点的流量求和部分,你错误引用了
NodesIn集合,应该直接使用NodesOut里存储的管道名称。
修正代码
仅需替换FlowBalance_rule函数即可:
def FlowBalance_rule(m, node): return m.Supply[node] \ + sum(m.Flow[pipe] for pipe in m.NodesIn[node]) \ - m.Demand[node] \ - sum(m.Flow[pipe] for pipe in m.NodesOut[node]) \ == 0
验证结果
替换后代码可正常创建实例并求解,计算结果和官方参考版本完全一致:管道AB流量为1、管道AC流量为1、管道CB流量为0,最小总成本为4.1,完全符合你的管道名索引的需求。
内容的提问来源于stack exchange,提问作者MaxImal
相关产品推荐
相关产品推荐

