Pyomo框架运行优化模型报KeyError(0,0)错误,该如何排查解决?
错误产生原因
- 索引不匹配是核心诱因
你定义的成本字典d的键是从1开始的二元组((1,1)到(3,4)),但你给模型定义的Locations集合是range(3)也就是取值为0,1,2,Customers集合是range(4)也就是取值为0,1,2,3。在目标函数计算时会尝试访问d[0,0]这个不存在的键,直接触发KeyError: (0, 0)。 - 代码还存在两个潜在运行错误
- 约束
single_x的求和语句里误用了未定义的变量model.Locations,你的模型实例命名是seq,这里会触发NameError - 约束
bound_y里的<是HTML转义字符,实际Python代码中要替换为<=才可以正常解析
- 约束
修复方案
你可以选择调整集合索引对齐字典的起始值,修改集合定义部分即可:
# 原来的定义是从0开始,修改为从1开始和d字典的键对齐 seq.Locations = range(1, N+1) #Set N seq.Customers = range(1, M+1) #Set M
同时替换两个错误代码段:
- 把
sum(seq.x[n,m] for n in model.Locations )改为sum(seq.x[n,m] for n in seq.Locations ) - 把
seq.x[n,m] <= seq.y[n]改为seq.x[n,m] <= seq.y[n]
内容的提问来源于stack exchange,提问作者errenmike1806
相关产品推荐
相关产品推荐

