Pyomo:设置变量分支优先级

时间:2017-12-19 12:57:55

标签: pyomo

the documentation的第16章,说了以下内容:

  

将信息导出到求解器或算法以帮助求解数学程序(例如,热启动信息,可变分支优先级)。

然而,我无法找到如何设置变量优先级的示例(对于可兼容的求解器)。我在源代码中找不到相关内容。

因为设置变量优先级是特定于求解器的:哪个求解器可以工作?更具体地说:如何使用CPLEX或Gurobi执行此操作?它可能也适用于开源求解器吗?

2 个答案:

答案 0 :(得分:2)

现在可以使用CP OSType的分叉使用CPLEX LP解算器。

pyomo

您现在应该在CPLEX运行的日志中看到类似于此屏幕截图的内容:

enter image description here

要当前运行此程序,您需要安装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文档,了解接受的关键字和值。