1 回答

TA貢獻1828條經驗 獲得超4個贊
你有 2 個選擇....要么用你想要的索引手動構建一個集合(我下面的例子)并在整個模型中使用它,或者你可以(小心地)只在你使用和循環(huán)時創(chuàng)建/調用I合法J索引或即時制作合法索引。
# ragged set
from pyomo.environ import *
model = ConcreteModel()
# SETS
model.J = Set(initialize=range(3))
model.I = Set(initialize=range(3))
# construct the ragged set
ij = [(i, j) for j in range(3) for i in range(j + 1)]
model.IJ = Set(within=model.I * model.J, initialize=ij)
# VARIABLE
model.x = Var(model.IJ, domain=NonNegativeReals)
model.pprint()
產量:
4 Set Declarations
I : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=(0, 2)
[0, 1, 2]
IJ : Dim=0, Dimen=2, Size=6, Domain=IJ_domain, Ordered=False, Bounds=None
[(0, 0), (0, 1), (0, 2), (1, 1), (1, 2), (2, 2)]
IJ_domain : Dim=0, Dimen=2, Size=9, Domain=None, Ordered=False, Bounds=None
Virtual
J : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=(0, 2)
[0, 1, 2]
1 Var Declarations
x : Size=6, Index=IJ
Key : Lower : Value : Upper : Fixed : Stale : Domain
(0, 0) : 0 : None : None : False : True : NonNegativeReals
(0, 1) : 0 : None : None : False : True : NonNegativeReals
(0, 2) : 0 : None : None : False : True : NonNegativeReals
(1, 1) : 0 : None : None : False : True : NonNegativeReals
(1, 2) : 0 : None : None : False : True : NonNegativeReals
(2, 2) : 0 : None : None : False : True : NonNegativeReals
5 Declarations: J I IJ_domain IJ x
[Finished in 2.5s]
添加回答
舉報