在the documentation的第16章,说了以下内容:
将信息导出到求解器或算法以帮助求解数学程序(例如,热启动信息,可变分支优先级)。
然而,我无法找到如何设置变量优先级的示例(对于可兼容的求解器)。我在源代码中找不到相关内容。
因为设置变量优先级是特定于求解器的:哪个求解器可以工作?更具体地说:如何使用CPLEX或Gurobi执行此操作?它可能也适用于开源求解器吗?
答案 0 :(得分:2)
现在可以使用CP OSType
的分叉使用CPLEX LP解算器。
pyomo
您现在应该在CPLEX运行的日志中看到类似于此屏幕截图的内容:
要当前运行此程序,您需要安装pyomo的特定dev分支,如下所示:
m = ConcreteModel()
m.x = Var(domain=Integers)
m.s = RangeSet(10)
m.y = Var(m.s, domain=Integers)
m.o = Objective(expr=m.x + sum(m.y), sense=minimize)
m.c = Constraint(expr=m.x >= 1)
m.c2 = Constraint(expr=quicksum(m.y[i] for i in m.s) >= 10)
m.priority = Suffix(direction=Suffix.EXPORT, datatype=Suffix.INT)
m.direction = Suffix(direction=Suffix.EXPORT, datatype=Suffix.INT) # this is optional
m.priority.set_value(m.x, 1)
m.priority.set_value(m.y, 2)
m.direction.set_value(m.y, BranchDirection.down)
m.direction.set_value(m.y[10], 1)
with SolverFactory('cplex', solver_io='lp') as opt:
opt.solve(model, priorities=True)
应该将其提供给pyomo的pip install git+https://github.com/Pyomo/pyomo.git@refs/pull/1300/merge
开发版,并在适当的时候发布pyomo。
答案 1 :(得分:0)
Pyomo有一个系统可以将选项传递给求解器。在大多数情况下,这些都完全按照指定的方式传递,因此您可以查看Gurobi或CPLEX文档,了解接受的关键字和值。