如何在Gurobi中使用惰性参数

How to use lazy parameter in Gurobi

我想在我写的问题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”对应什么?

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

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

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

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

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

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