【发布时间】:2017-12-19 12:57:55
【问题描述】:
the documentation 第 16 章有如下说法:
将信息导出到求解器或算法以帮助求解数学程序(例如,热启动信息、可变分支优先级)。
但我找不到如何设置可变优先级的示例(对于兼容的求解器)。我在源代码中找不到这方面的内容。
由于设置变量优先级是特定于求解器的:这适用于哪些求解器?更具体地说:如何使用 CPLEX 或 Gurobi 执行此操作?它是否也适用于开源求解器?
【问题讨论】:
标签: pyomo
the documentation 第 16 章有如下说法:
将信息导出到求解器或算法以帮助求解数学程序(例如,热启动信息、可变分支优先级)。
但我找不到如何设置可变优先级的示例(对于兼容的求解器)。我在源代码中找不到这方面的内容。
由于设置变量优先级是特定于求解器的:这适用于哪些求解器?更具体地说:如何使用 CPLEX 或 Gurobi 执行此操作?它是否也适用于开源求解器?
【问题讨论】:
标签: pyomo
这现在可以通过使用 pyomo 的分支的 CPLEX LP 求解器实现。
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)
您现在应该在 CPLEX 运行的日志中看到类似于此屏幕截图的内容:
要在当前运行它,您需要安装 pyomo 的特定 dev 分支,如下所示:
pip install git+https://github.com/Pyomo/pyomo.git@refs/pull/1300/merge
这应该提供给 pyomo 的 master dev 版本,并最终在适当的时候发布 pyomo。
【讨论】:
Pyomo 有一个将选项传递给求解器的系统。在大多数情况下,这些都是完全按照指定传递的,因此您可以查看 Gurobi 或 CPLEX 文档以了解接受的关键字和值是什么。
【讨论】: