【问题标题】:Pyomo: Setting variable branching prioritiesPyomo:设置可变分支优先级
【发布时间】:2017-12-19 12:57:55
【问题描述】:

the documentation 第 16 章有如下说法:

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

但我找不到如何设置可变优先级的示例(对于兼容的求解器)。我在源代码中找不到这方面的内容。

由于设置变量优先级是特定于求解器的:这适用于哪些求解器?更具体地说:如何使用 CPLEX 或 Gurobi 执行此操作?它是否也适用于开源求解器?

【问题讨论】:

    标签: pyomo


    【解决方案1】:

    这现在可以通过使用 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。

    【讨论】:

      【解决方案2】:

      Pyomo 有一个将选项传递给求解器的系统。在大多数情况下,这些都是完全按照指定传递的,因此您可以查看 Gurobi 或 CPLEX 文档以了解接受的关键字和值是什么。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-17
      • 2013-06-26
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 2012-12-07
      • 2014-10-28
      • 2013-01-17
      相关资源
      最近更新 更多