跳转到主要内容

与presolve增量解决是如何工作的?

回答

评论

4评论

  • JaromiłNajman
    Gurobi员工Gurobi员工

    你好,

    你能提供更多的日志输出吗?你能提供更多的信息关于你的模型和代码片段的你如何称呼Model.optimize ()函数两次?

    一般来说,Gurobi总是试图利用信息从先前的运行。当解决一次MIP,随后添加一个约束,然后再解决MIP, Gurobi将首先检查是否最优解的解决提供了一个初始可行点第二个优化。为有限合伙人Gurobi将试图重用最佳依据第二优化运行,不得打印presolve消息。

    最好的问候,
    Jaromił

    0
  • Haoze吴
    Gurobi-versary
    第一个评论
    第一个问题

    嗨Jaromil,多谢你的响应。

    是的,所以我要处理一个问题涉及到线性约束和我打电话的析取Gurobi每个LP子问题来解决。

    说我有一个析取约束1 x1 < < = = 3 \ / 2 x1 < < = = 0连同其他一些线性约束。

    我第一次添加这些模型和线性约束除了以下约束:

    2 < = x1 < = 3

    本质上是一个放松的脱节。

    然后,我叫

    model.optimize ()

    接下来,我部门脱节和添加新的边界

    1 x1 < < = = 3

    然后我叫model.optimize ()。

    最后,我尝试其他分支:

    2 x1 < < = = 0

    和调用model.optimize ()。

    我意识到Gurobi现在支持分段线性约束和MIP编码可以有相同的问题。但是我的程序需要一些更细粒度的控制,并在每个搜索解决LP后状态。我想知道这将创建多少开销。

    这是这个重复的日志调用有限合伙人的过程

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    你好,

    只因为你是改变变量范围,双重基础保持可行和Gurobi可以利用这些信息从先前的优化运行进行热启动。因此,你看不到presolve输出为每个优化因为Gurobi不必从头开始。

    你可以添加一个析取约束使用addGenConstrOr ()函数。这种方式,你不需要自己分支,但是你失去了分支控制。显然,这取决于你的程序在做什么在两个优化,您可能需要自己控制分支的一步。最好尝试两种方法,找出最适合您的程序。

    最好的问候,
    Jaromił

    1
  • Haoze吴
    Gurobi-versary
    第一个评论
    第一个问题

    嗨Jaromil,

    谢谢你的信息!这是非常有用的!

    安德鲁

    0

登录留下你的评论。