Pyomo调用一组的值

问题描述 投票:-1回答:2

让我们考虑以下集合:

m.sub_sit = pyomo.Set(
    initialize=[site],
    doc='site of sub problem')

在这种情况下,m.sub_sitcreate_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'}

python indexing pyomo
2个回答
1
投票

你永远不必使用方括号索引到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中的数据的约束。


0
投票

首先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'
© www.soinside.com 2019 - 2024. All rights reserved.