无法通过初始化选项中的for循环和if条件获取pyomo中的参数值

问题描述 投票:0回答:1

我正在尝试在 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()
python list parameters pyomo
1个回答
0
投票

要解决此问题,您可以创建一个字典理解,将

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"})

我用大括号

[]
替换了方括号
{}
以创建字典理解。

© www.soinside.com 2019 - 2024. All rights reserved.