【问题标题】:How to use lazy parameter in Gurobi如何在 Gurobi 中使用惰性参数
【发布时间】:2018-01-30 15:14:11
【问题描述】:

我想添加惰性参数并在我用 python 编写的问题中更改它。当我在http://www.gurobi.com/documentation/7.5/ampl-gurobi/parameters.html 阅读有关惰性参数的手册时,它说:


懒惰: 是否在二进制或整数变量问题的线性约束上遵守后缀 .lazy:

0 = 否(忽略 .lazy)

1 = 是(默认) 惰性约束用 1、2 或 3 的 .lazy 值表示,并被忽略,直到找到对剩余约束可行的解决方案。接下来会发生什么取决于 .lazy 的值:

1 ==> 如果另一个惰性约束切断了当前解决方案,则该约束仍可能被忽略;

2 ==> 如果当前解决方案违反了该约束,则此后将强制执行该约束;

3 ==> 约束将被强制执行。:


我的目标是减轻求解器的负担。在众多参数中,lazy 似乎是一个值得尝试的好参数。我找不到一个例子或用例。它是否适用于变量或约束或特定类型的约束。还有“.lazy”对应什么?

【问题讨论】:

  • 是什么让你认为如果你不认为它在做什么会有帮助?开始herehere
  • 感谢您的链接。相反,我更感兴趣的是如何将它包含在代码中。因为从定义中我理解它是添加到约束中的参数。我错了吗?
  • AMPL 的邮件列表中有一些关于此的内容。这也是特定于 AMPL 的(Gurobi 只是对此进行解释并相应地做一些事情)。我还认为,就您到底想做什么和目前正在做什么而言,您的问题非常广泛(例如:作为对 AMPL 不太熟悉的人:您是在使用我不认为的 gurobipy 还是只是使用 python将 AMPL 模型加载到 gurobi 中?当​​然这决定了某些事情是可能的以及如何实现)。
  • 您是否将 Python 与 AMPL 混淆了?

标签: python linear-programming gurobi


【解决方案1】:

正如 sascha 和 Erwin 所指出的,您正在阅读的文档是特定于 AMPL 的。

AMPL 是一个可用于定义优化问题的平台,独立于用于解决这些问题的求解器。然后它将这些规格转换为适合用户选择的求解器的模型。它支持的求解器之一是 Gurobi,因此有一些特定于 AMPL 和 Gurobi 组合的文档。

如果您使用 Python 进行编程,您可能没有使用 AMPL,因此您可能需要查看 http://www.gurobi.com/documentation/7.5/refman/lazy.html

简而言之:“惰性约束”是一种技巧,可在完整模型定义需要大量约束但其中大多数不太可能改变解决方案时使用。在这种情况下,您有时可以通过以下方法提高求解速度:

  • 在没有“惰性”约束的情况下设置问题
  • 解决这个问题
  • 检查解决方案是否违反任何惰性约束
  • 如果是,则仅添加实际违反的约束,然后重新求解。
  • 重复直到找到满足所有惰性约束的解决方案。

根据文档,Gurobi 仅支持线性约束的惰性选项,但原则上该方法可用于其他类型的约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多