使用混合整数编程的所有文档Xpress
都是用于在纯 python 中制定问题,但我找不到像Pyomo
.
首先,如何设置Pyomo
运行 MIP 模型?即使我的问题是可行的,二进制变量也不是二进制的。
其次,我想设置参数,miptol
比如in 。使用纯 Python,我会做. 但目前尚不清楚我将如何使用.miprelstop
xpress
Pyomo
p.setControl('miprelstop', 1e-9)
Pyomo
使用混合整数编程的所有文档Xpress
都是用于在纯 python 中制定问题,但我找不到像Pyomo
.
首先,如何设置Pyomo
运行 MIP 模型?即使我的问题是可行的,二进制变量也不是二进制的。
其次,我想设置参数,miptol
比如in 。使用纯 Python,我会做. 但目前尚不清楚我将如何使用.miprelstop
xpress
Pyomo
p.setControl('miprelstop', 1e-9)
Pyomo
为了将变量标记为二进制,您必须将其定义为within
约束Binary
:
model.z = pyo.Var(bounds=(0, 1)), within=pyo.Binary)
options
使用求解器的属性设置控件。这是一个简短的示例,它创建一个简单的模型、设置选项和求解。
import pyomo.environ as pyo
model = pyo.ConcreteModel()
model.x = pyo.Var(bounds=(0, 1))
model.y = pyo.Var(bounds=(0, 1))
model.z = pyo.Var(bounds=(0, 1), within=pyo.Binary)
model.c = pyo.Constraint(expr = model.z >= 0.5)
model.obj = pyo.Objective(expr = model.x - 2 * model.y + 3 * model.z,
sense = pyo.minimize)
opt = pyo.SolverFactory('xpress_direct')
opt.options['miprelstop'] = 1e-9
opt.options['miptol'] = 0.5
results = opt.solve(model)
print('x =', pyo.value(model.x))
print('y =', pyo.value(model.y))
print('z =', pyo.value(model.z))
这输出(除其他外)
x = 0.0
y = 1.0
z = 1.0
这表明二元条件 onz
得到了尊重(否则,最佳值z
将是 0.5)。它还在输出日志中显示修改后的参数值。