【问题标题】:Constraint Programming vs Linear Programming: Speed and quality of solution约束规划与线性规划:解决方案的速度和质量
【发布时间】:2020-07-07 15:01:12
【问题描述】:

我一直在研究优化算法,遇到了一些我找不到答案的问题。

a) CP 比 LP 快吗?它与 MILP 相比如何?
b) CP 和 MILP 会提供相同的目标函数值吗?
c) 我什么时候应该使用 CP 而不是 MILP? (如果我有一个混合整数线性问题)

谢谢。

【问题讨论】:

  • SO 可能不是问这个问题的正确地方(与编程无关;非常广泛;自以为是)。这是一个非常复杂的问题,每个答案都以“取决于”开头,这并不奇怪,因为这两种方法都解决了大多数问题,都是 np-hard。人们可能会争论一些一般性的事情(关于他们的证明系统,他们的本地/全球观点),但如果没有广泛的背景,这只不过是没有太多优点的评论。我建议抓住Hybrid Optimization by范亨腾瑞克/米兰。恕我直言,它间接回答了这个问题
  • 正如之前的评论者所写,这真的取决于,因此无法回答。特别是,它不仅与要解决的问题和用于解决问题的技术有关,还取决于所使用的公式对特定技术的适用程度。为 MIP 完成的模型在直接移植到 CP 时通常不是很好。我建议研究 MiniZinc 来编写一个高级模型(不是 MIP 样式),它可以自动转换为 CP 和 MIP。
  • CP 通常不是连续 LP 的替代品。许多 CP 和 SAT 求解器仅对离散变量起作用(或工作得最好)。所以如果问题是 100% 离散的,CP 和 MIP 是直接的“竞争对手”(尽管最好的 MIP 公式可能与最好的 CP 公式有很大不同)。如果模型是离散变量和连续变量的组合,根据具体情况,MIP 可能更直接(尽管有时我们会进行离散化以使模型更适合 CP 和 SAT 求解器)。

标签: optimization linear-programming constraint-programming mixed-integer-programming


【解决方案1】:

我曾与 CP 和 LP/MILP 合作过,也许我可以就您的疑问提供一些见解。 CP和LP唯一的共同点就是“Programming”这个词。

  • 变量类型不同(CP=离散整数值/LP=连续 values/MILP=一些是离散的,而其他变量是连续的)。
  • 处理的约束类型不同(CP 涉及非线性,LP 是 当然在使用的变量中是线性的)。

a) CP 比 LP 快吗?在大多数情况下,我会认为 CP 较慢,因为 CP 中没有明确的算法。它依赖于搜索。然而,CP 模型往往需要较少的变量。只有线性约束,需要更多变量来建模(例如使用大型 M 方程)。

b) CP 和 MILP 给出相同的目标函数值 - 如果约束都是线性的,并且所有变量都是整数,那么使用 CP 来解决问题就没有意义了,因为它的性能会降低。

c) 当问题约束在 CP 方程中很好地表达,和/或在线性(大 M)方程中表达不佳时,我们应该使用 CP,在这些方程中向最优收敛不好或很慢。

检查此question。一些整合这两种方法的研究工作产生了像CLP(r)这样的开源软件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多