我正在尝试在 pyomo 中开发一个具体模型。
model.P = pyo.Set(initialize=[ i for i, data in network["nodes"].items() if data["Node_type"] in ["Production"]])
这个效果很好。
用于参数创建,
model.GMin = pyo.Param(model.P, initialize=[data["GMin"] for i, data in network["nodes"].items() if data["Node_type"] in ["Production"]])
这显示错误,
KeyError:“索引‘0’对于索引组件‘GMin’无效”
我的,network["nodes"].items()如下,
dict_items([(1, {'Node_type': '生产', 'GMin': 30, 'GMax': 146.5,'HMin': 210, 'HMax': 1025.5}), (2, {'Node_type': '交界处', 'GMin':0, 'GMax': 0.0, 'HMin': 0, 'HMax': 0.0}), (3, {'Node_type': '交界处', 'GMin': 0, 'GMax ': 0.0, 'HMin': 0, 'HMax': 0.0}), (4 {'Node_type': '结点', 'GMin': 0, 'GMax': 0.0, 'HMin': 0, 'HMax' : 0.0}), (5, {'Node_type': '市场', 'GMin': 0, 'GMax': 0.0, 'HMin': 0, 'HMax': 0.0}), (6, {'Node_type' : '市场', 'GMin': 0, 'GMax': 0.0, 'HMin': 0, 'HMax': 0.0}), (7, {'Node_type': '市场', 'GMin': 0, ' GMax': 0.0, 'HMin': 0, 'HMax': 0.0}), (8, {'Node_type': '市场', 'GMin': 0, 'GMax': 0.0, 'HMin': 0, ' HMax': 0.0}), (9, {'Node_type': '结点', 'GMin': 0, 'GMax': 0.0, 'HMin': 0, 'HMax': 0.0}), (10, {' Node_type': '市场', 'GMin': 0, 'GMax': 0.0, 'HMin': 0, 'HMax': 0.0}), (11, {'Node_type': '生产', 'GMin': 25 , 'GMax': 93.7, 'HMin': 175, 'HMax': 655.9}), (12, {'Node_type': '结点', 'GMin': 0, 'GMax': 0.0, 'HMin': 0 ,'HMax':0.0})])
如何解决按键错误?
如果我尝试使用带有 if 条件的 for 循环,我可以打印所需的输出。
def GMin():
for i, data in network["nodes"].items():
if data["Node_type"] in ["Production"]:
print(data["GMin"])
GMin()
要解决此问题,您可以创建一个字典理解,将
model.P
的元素映射到其相应的 GMin
值。
model.GMin = pyo.Param(model.P, initialize={i: data["GMin"] for i, data in network["nodes"].items() if data["Node_type"] == "Production"})
我用大括号
[]
替换了方括号 {}
以创建字典理解。