如何使用 for 循环编写 Pyomo 变量

我正在尝试编写一个 Pyomo 模型,其中我有一组变量,由 {1,2,...,N} 中的 aj 索引,并且对于每个 j,{1,...,N_j} 中的 ai。


我现在的代码是:


n0=28

n1=8

n2=8

n3=8

n4=10


N=[n0, n1, n2, n3, n4]

rN=range(5)


model = ConcreteModel()


model.J = [RangeSet(1,N[i]) for i in rN]

model.X = [Var(model.J[i], within=NonNegativeReals) for i in rN]

当我尝试访问变量时,出现错误:


>>>model.X[0][0]

Traceback (most recent call last):


  File "<ipython-input-177-297a76d94388>", line 1, in <module>

    model.X[0][0]


  File "/path/anaconda3/lib/python3.7/site- 

packages/pyomo/core/base/indexed_component.py", line 374, in __getitem__

    self._not_constructed_error(index)


  File "/path/anaconda3/lib/python3.7/site- 

   packages/pyomo/core/base/indexed_component.py", line 520, in _not_constructed_error

    "not been constructed." % (self.name, idx_str,))


ValueError: Error retrieving component IndexedVar[1]: The component has not been constructed.

我认为错误可能是我无法在列表中写入变量,但我想不出任何其他解决方案。


萧十郎
浏览 82回答 1
1回答

明月笑刀无情

你有 2 个选择....要么用你想要的索引手动构建一个集合(我下面的例子)并在整个模型中使用它,或者你可以(小心地)只在你使用和循环时创建/调用I合法J索引或即时制作合法索引。# ragged setfrom pyomo.environ import *model = ConcreteModel()# SETSmodel.J = Set(initialize=range(3))model.I = Set(initialize=range(3))# construct the ragged setij = [(i, j) for j in range(3) for i in range(j + 1)]model.IJ = Set(within=model.I * model.J, initialize=ij)# VARIABLEmodel.x = Var(model.IJ, domain=NonNegativeReals)model.pprint()产量:4 Set Declarations&nbsp; &nbsp; I : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=(0, 2)&nbsp; &nbsp; &nbsp; &nbsp; [0, 1, 2]&nbsp; &nbsp; IJ : Dim=0, Dimen=2, Size=6, Domain=IJ_domain, Ordered=False, Bounds=None&nbsp; &nbsp; &nbsp; &nbsp; [(0, 0), (0, 1), (0, 2), (1, 1), (1, 2), (2, 2)]&nbsp; &nbsp; IJ_domain : Dim=0, Dimen=2, Size=9, Domain=None, Ordered=False, Bounds=None&nbsp; &nbsp; &nbsp; &nbsp; Virtual&nbsp; &nbsp; J : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=(0, 2)&nbsp; &nbsp; &nbsp; &nbsp; [0, 1, 2]1 Var Declarations&nbsp; &nbsp; x : Size=6, Index=IJ&nbsp; &nbsp; &nbsp; &nbsp; Key&nbsp; &nbsp; : Lower : Value : Upper : Fixed : Stale : Domain&nbsp; &nbsp; &nbsp; &nbsp; (0, 0) :&nbsp; &nbsp; &nbsp;0 :&nbsp; None :&nbsp; None : False :&nbsp; True : NonNegativeReals&nbsp; &nbsp; &nbsp; &nbsp; (0, 1) :&nbsp; &nbsp; &nbsp;0 :&nbsp; None :&nbsp; None : False :&nbsp; True : NonNegativeReals&nbsp; &nbsp; &nbsp; &nbsp; (0, 2) :&nbsp; &nbsp; &nbsp;0 :&nbsp; None :&nbsp; None : False :&nbsp; True : NonNegativeReals&nbsp; &nbsp; &nbsp; &nbsp; (1, 1) :&nbsp; &nbsp; &nbsp;0 :&nbsp; None :&nbsp; None : False :&nbsp; True : NonNegativeReals&nbsp; &nbsp; &nbsp; &nbsp; (1, 2) :&nbsp; &nbsp; &nbsp;0 :&nbsp; None :&nbsp; None : False :&nbsp; True : NonNegativeReals&nbsp; &nbsp; &nbsp; &nbsp; (2, 2) :&nbsp; &nbsp; &nbsp;0 :&nbsp; None :&nbsp; None : False :&nbsp; True : NonNegativeReals5 Declarations: J I IJ_domain IJ x[Finished in 2.5s]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python