如何在Python中使用Pyomo为i的每个值定义一个二进制变量?



我有一个变量bIb是一个二元变量,表示是否购买产品i

i

取值范围为1 ~ 3。在数学格式中,我要声明的二进制变量如下所示:

bi∈{0,1}i = 1,2,3

我知道变量可以在Pyomo中使用以下代码声明

from pyomo.environ import *
b = Var(domain = Binary)

但我不确定如何才能证明b仅为给定值的二进制I。我如何在Python中使用Pyomo表示给定值的上述二进制变量?

您只需要声明索引集,然后索引集(或多个集,如果有多个索引)引用是变量创建的第一个参数。在文档和本节中有几个例子。

import pyomo.environ as pyo
m = pyo.ConcreteModel('example')
m.I = pyo.Set(initialize=[1, 2, 3])
m.b = pyo.Var(m.I, domain=pyo.Binary)
# some nonsense objective...
m.obj = pyo.Objective(expr=sum(m.b[i] for i in m.I))
m.pprint()

另一种方法似乎如下:

from pyomo.environ import *
model = ConcreteModel()

model.i = RangeSet(1,3)
model.b = Var(model.i, domain = Binary)

最新更新