Pyomo - 是否可以在变量集上定义条件域?
Pyomo - is it possible to define conditional domains on a variable set?
我想定义一个变量数组x
,其中一些是整数变量,一些是实数(连续)变量。例如,我有三组:
model = pyo.AbstractModel()
model.N = pyo.Set()
model.NL = pyo.Set()
model.NN = pyo.Set()
NL
和NN
是互斥的集合,其并集是N
.
我想定义以下变量:
model.x = pyo.Var(model.N, within = pyo.Integers) # if x in NL
model.x = pyo.Var(model.N, within = pyo.Reals) # if x in NN
我当然可以重命名 xL
和 xN
,但是是否可以使用子集相关域设置单个变量集 x
?
非常感谢。
是的。有几种方法可以做到这一点:
domain
(或within
)参数可以取一个规则:
def x_domain(m, i):
if i in m.NL:
return pyo.Integers
else:
return pyo.Reals
model.x = pyo.Var(model.N, within=x_domain)
您可以将 Var 设置为一个域,然后在事后更新域:
model.x = pyo.Var(model.N, within=Reals)
for i in model.NL:
model.x[i].domain = Integers
我想定义一个变量数组x
,其中一些是整数变量,一些是实数(连续)变量。例如,我有三组:
model = pyo.AbstractModel()
model.N = pyo.Set()
model.NL = pyo.Set()
model.NN = pyo.Set()
NL
和NN
是互斥的集合,其并集是N
.
我想定义以下变量:
model.x = pyo.Var(model.N, within = pyo.Integers) # if x in NL
model.x = pyo.Var(model.N, within = pyo.Reals) # if x in NN
我当然可以重命名 xL
和 xN
,但是是否可以使用子集相关域设置单个变量集 x
?
非常感谢。
是的。有几种方法可以做到这一点:
domain
(或within
)参数可以取一个规则:def x_domain(m, i): if i in m.NL: return pyo.Integers else: return pyo.Reals model.x = pyo.Var(model.N, within=x_domain)
您可以将 Var 设置为一个域,然后在事后更新域:
model.x = pyo.Var(model.N, within=Reals) for i in model.NL: model.x[i].domain = Integers