Мне не совсем понятно, что пытается сделать ваша модель, но вы можете создать перекрестное произведение двух наборов в Pyomo, умножив их на два.
import pyomo.environ as pe
m = pe.ConcreteModel()
m.K = pe.Set(initialize=[1, 2, 3])
m.n = pe.Set(initialize=[4, 5, 6, 7])
m.position_phi = m.K * m.n
Это сделает элементы m.position_phi
be [(1, 4), (1, 5), ...]
Затем вы можете использовать этот набор следующим образом:
m.whatever = pe.Param(m.position_phi, intitialize={(1, 4):4, (3, 6):6}, default=0)
И затем при вызове m.pprint()
вы увидите что-то вроде этого:
3 Set Declarations
K : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=(1, 3)
[1, 2, 3]
n : Dim=0, Dimen=1, Size=4, Domain=None, Ordered=False, Bounds=(4, 7)
[4, 5, 6, 7]
position_phi : Dim=0, Dimen=2, Size=12, Domain=None, Ordered=False, Bounds=None
Virtual
1 Param Declarations
whatever : Size=12, Index=position_phi, Domain=Any, Default=0, Mutable=False
Key : Value
(1, 4) : 4
(3, 6) : 6
4 Declarations: K n position_phi whatever
Кроме того, вызов list()
с более чем 1 аргументом в Python должен вызывать ошибку TypeError.