Pyomo 调用集合的值
Pyomo calling the value of a set
让我们考虑以下集合:
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'
索引其他对象,然后在我的代码中使用它。
例如:
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
问题:从 m.sub_sit
pyomo set 对象调用这个 'Mid'
字符串,比我建议的更好吗?
btw m.sub_sit.value
给出了一个输出,几乎是我所需要的:{'Mid'}
首先将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'
您永远不必使用方括号索引 Pyomo 集。如果您发现自己想要这样做,那么您可能需要重新考虑使用 Pyomo Set 而不是原生 Python 列表的动机。
如果您的目标是遍历 Pyomo 集合中的值并使用这些值索引到 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 传感器放置包的存储库。特别是您可以看到使用 Pandas DataFrame 中的值创建 Pyomo 集的示例,以及如何编写使用 DataFrame 中的数据的约束。
让我们考虑以下集合:
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'
索引其他对象,然后在我的代码中使用它。
例如:
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
问题:从 m.sub_sit
pyomo set 对象调用这个 'Mid'
字符串,比我建议的更好吗?
btw m.sub_sit.value
给出了一个输出,几乎是我所需要的:{'Mid'}
首先将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'
您永远不必使用方括号索引 Pyomo 集。如果您发现自己想要这样做,那么您可能需要重新考虑使用 Pyomo Set 而不是原生 Python 列表的动机。
如果您的目标是遍历 Pyomo 集合中的值并使用这些值索引到 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 传感器放置包的存储库。特别是您可以看到使用 Pandas DataFrame 中的值创建 Pyomo 集的示例,以及如何编写使用 DataFrame 中的数据的约束。