让我们考虑以下集合:
m.sub_sit = pyomo.Set(
initialize=[site],
doc='site of sub problem')
在这种情况下,m.sub_sit
由create_model()
函数创建,参数为'Mid'
:
inst = create_model(site='Mid')
我通过调用inst.sub_sit.pprint()
得到的:
在:
inst.sub_sit.pprint()
日期:
sub_sit : site of sub problem
Dim=0, Dimen=1, Size=1, Domain=None, Ordered=False, Bounds=None
['Mid']
我真正想要输出的是'Mid'
,所以我可以使用'Mid'
索引其他对象,然后我可以在我的代码中使用它。
e.f.:
IN1:PiZero
IN2:PiZero[inst.sub_sit[1]]
IN3:PiZero['Mid']
输出1:
sub_sit
Mid -1.0
Name: sub_costs, dtype: float64
Out2:-1.0
Out3:-1.0
问题:无论如何,从'Mid'
pyomo设置对象调用这个m.sub_sit
字符串,比我的建议更好吗?
btw m.sub_sit.value
给出了一个输出,几乎是我需要的:{'Mid'}
你永远不必使用方括号索引到Pyomo Set。如果您发现自己想要这样做,那么您可能想重新考虑使用Pyomo Set而不是本机Python列表的动机。
如果您的目标是迭代Pyomo Set中的值并使用它们索引到Pandas对象,那么您可以执行以下操作:
for s in m.sub_sit:
v = PiZero[s]
# Do something with v
或者,您可以将Pyomo Set转换为列表并使用列表:
s = list(m.sub_sit)
但是,如果你要这样做,你真的需要Pyomo套装吗?
如果您想要更多使用Pandas和Pyomo的示例,请查看this github repo以获取传感器放置包。特别是,您可以看到使用Pandas DataFrame中的值创建Pyomo集的示例,以及如何编写使用DataFrame中的数据的约束。
首先ordered=True
被添加到m.sub_sit
。然后'Mid'
与inst.sub_sit[1]
可以联系。它应该是有序的,否则会产生错误,你无法调用无序集的第一个对象。
m.sub_sit = pyomo.Set(
initialize=[site],
ordered=True,
doc='site of sub problem')
在:
inst.sub_sit[1]
日期:
'Mid'