【发布时间】:2019-09-01 21:57:11
【问题描述】:
我正在使用由多个集合索引的 pyomo 变量。我已经沿着一些集合创建了切片,并希望使用这些切片来访问变量值,给定切片集合的索引。
我希望能工作的代码是:
from pyomo.environ import *
m = ConcreteModel()
m.time = Set(initialize=[1,2,3])
m.space = Set(initialize=[1,2,3])
m.comp = Set(initialize=['a','b','c'])
m.v = Var(m.time, m.space, m.comp, initialize=1)
slice = m.v[:, :, 'a']
for x in m.space:
value_list = []
for t in m.time:
value_list.append(slice[t, x].value)
# write value_list to csv file
但这给了我:
>>> value_list
[<pyomo.core.base.indexed_component_slice._IndexedComponent_slice object at 0x7f4db9104a58>, <pyomo.core.base.indexed_component_slice._IndexedComponent_slice object at 0x7f4db9104a58>, <pyomo.core.base.indexed_component_slice._IndexedComponent_slice object at 0x7f4db9104a58>]
而不是我希望的值列表。
是否可以仅从通配符索引访问与变量切片对应的值?
我尝试使用 _IndexedComponent_slice 的一些方法,但没有成功。例如:
>>> for item in slice.wildcard_items(): item
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/rparker1/Idaes/pyomo/pyomo/core/base/indexed_component_slice.py", line 194, in <genexpr>
return ((_iter.get_last_index_wildcards(), _) for _ in _iter)
File "/home/rparker1/Idaes/pyomo/pyomo/core/base/indexed_component_slice.py", line 350, in __next__
_comp = _comp.__getitem__( _call[1] )
AttributeError: '_GeneralVarData' object has no attribute '__getitem__'
我希望某种方法可以为我提供一个将通配符索引映射到 vardata 对象的字典,但找不到。非常感谢您对查找此类字典或其他解决方案的任何帮助。
【问题讨论】: