LP/MIP 和 CP 的区别
Posted
技术标签:
【中文标题】LP/MIP 和 CP 的区别【英文标题】:Difference LP/MIP and CP 【发布时间】:2018-01-13 19:56:40 【问题描述】:约束规划 (CP) 和线性规划 (LP) 或混合整数规划 (MIP) 有什么区别?我知道 LP 和 MIP 是什么,但不了解与 CP 的区别 - 还是 CP 与 MIP 和 LP 相同?我对此感到困惑......
【问题讨论】:
LP 是 - 顾名思义 - 线性。它可以在多时间内解决。 这些没有太多共同点(除了蜜蜂能够解决组合问题)。我很确定阅读***足以掌握巨大的差异! 【参考方案1】:这可能有点详尽,但我会尽力提供所有信息以涵盖该主题的良好范围。 我将从一个示例开始,相应的信息会更有意义。
示例:假设我们需要在一台机器上对一组任务进行排序。每个任务 i 都有一个特定的固定处理时间 pi。每个任务都可以在其发布日期 ri 之后开始,并且必须在其截止日期 di 之前完成。任务不能在时间上重叠。时间表示为一组离散的时间点,例如 1, 2,…, H(H 代表地平线)
MIP 模型:
变量:二进制变量xij表示任务i是否在时间段j开始 约束: 每个任务都在一个时间点开始 ∑j xij = 1 对于所有任务 i 尊重发布日期和截止日期 j*xij = 0 对于所有任务 i 和 (j i ) 或 (j > di - p我) 任务不能重叠 变体 1: ∑i xij ≤ 1 对于所有时间点 j 我们还需要考虑处理时间;这变得混乱 变体 2: 引入二进制变量 bi 表示任务 i 是否在任务 k 之前必须链接到 xij;这变得混乱 因此,MIP 模型由线性/二次优化函数、线性/二次优化约束和二进制/整数变量组成。CP模型:
变量: * 让 starti 表示任务 i 的开始时间,从域 1,2,…, H 中取一个值 - 这立即确保每个任务恰好在一个时间点开始 约束: * 尊重发布日期和截止日期 ri ≤ 开始i ≤ di - pi * 任务不能重叠: 对于所有任务 i 和 j (starti + pij) OR (starti + p ii) 就是这样!您可能会说 CP 模型和 MIP 模型的结构是相同的:使用决策变量、目标函数和一组约束。 MIP 和 CP 问题都是非凸的,并且使用了一些系统的和穷举的搜索算法。
但是,我们看到了建模能力的主要差异。使用 CP,我们有 n 个变量和一个约束。在 MIP 中,我们有 nm 个变量和 n+m 个约束。这种使用二进制变量将全局约束映射到 MIP 约束的方法非常通用
CP 和 MIP 以不同的方式解决问题。两者都使用分而治之的方法,通过一次固定一个变量的值,将要解决的问题递归地拆分为子问题。主要区别在于结果问题树的每个节点处发生的情况。在 MIP 中,通常解决问题的线性松弛并使用结果来指导搜索。这是一个分支定界搜索。在 CP 中,执行基于每个全局约束的组合性质的逻辑推理。这是一个隐式枚举搜索。
优化差异:
约束编程引擎对变量和值进行决策,并在每次决策后执行一组逻辑推理,以减少剩余变量域的可用选项。相比之下,在离散优化的上下文中,数学编程引擎使用了松弛(通过切割平面加强)和“分支定界”的组合。 约束规划引擎通过显示找不到比当前解决方案更好的解决方案来证明最优性,而数学规划引擎使用由削减和线性松弛提供的下限证明。 约束规划引擎不对解空间的数学属性(凸性、线性等)做出假设,而数学规划引擎要求模型属于明确定义的数学类别(例如混合整数)二次规划 (MIQP)。在决定如何定义问题时 - 作为 MIP 或 CP,Google 优化 工具指南建议:-
-
如果必须满足问题的所有约束才能使解决方案可行(由“and”语句连接的约束),则 MIP 通常更快。
如果许多约束具有只有其中一个约束才能使解决方案可行的属性(由“或”语句连接的约束),则 CP 通常更快。
我的 2 美分: CP 和 MIP 以不同的方式解决问题。两者都使用分而治之的方法,通过一次固定一个变量的值,将要解决的问题递归地拆分为子问题。主要区别在于结果问题树的每个节点处发生的情况。在 MIP 中,通常解决问题的线性松弛并使用结果来指导搜索。这是一个分支定界搜索。在 CP 中,执行基于每个全局约束的组合性质的逻辑推理。
对于您将使用哪种方法来制定模型和解决问题,没有一个具体的答案。当变量的数量增加很多并且问题难以使用线性等式来制定约束时,CP 可能会更好地工作。如果 MIP 松弛很紧,它可以提供更好的结果 - 如果您在遍历 MIP 问题时下限没有足够移动,您可能需要考虑更高程度的 MIP 或 CP。当问题可以用全局约束表示时,CP 效果很好。
更多关于 MIP 和 CP 的阅读:混合整数规划问题有一些决策变量被限制为整数(-n … 0 … n)在最优解。这使得根据数学程序定义问题变得更加容易。 MP 专注于特殊类别的问题,可用于解决松弛或子问题(垂直结构)。数学模型示例:Objective: minimize cT x
Constraints: A x = b (linear constraints)
l ≤ x ≤ u (bound constraints)
some or all xj must take integer values (integrality constraints)
或者模型可以通过二次函数或约束来定义,(MIQP/MIQCP 问题)
Objective: minimize xT Q x + qT x
Constraints: A x = b (linear constraints)
l ≤ x ≤ u (bound constraints)
xT Qi x + qiT x ≤ bi (quadratic constraints)
some or all x must take integer values (integrality constraints)
用于收敛 MIP 问题的最常用算法是分支定界方法。
CP: CP 源于人工智能、运筹学和计算机科学中的一个问题,因此它与计算机编程密切相关。- 该领域的问题将符号值分配给需要满足某些约束的变量。- 这些符号值具有有限域,可以用整数标记。- CP 建模语言更灵活,更接近自然语言。 引用自其中一个 IBM 文档,约束编程是一种技术,其中:
使用比传统数学优化中更丰富的建模语言对业务问题进行建模
结合树搜索、人工智能和图论技术解决问题
最常见的约束(全局)是“alldifferent”约束,它确保决策变量采用整数值的某种排列(非重复排序)。前任。如果问题的域是 5 个决策变量,即。 1,2,3,4,5,它们可以以任何非重复方式排序。
【讨论】:
【参考方案2】:这个问题的答案取决于您是否将 MIP 和 CP 视为算法、问题或科学研究领域。
例如,每个 MIP 问题显然是一个 CP 问题,因为 MIP 问题的定义是找到一组线性约束的 (n 个最优) 解,而 CP 问题的定义是找到一个 (n一组(未指定)约束的最优)解。另一方面,许多重要的 CP 问题可以直接转换为线性约束集,因此从 MIP 角度看待 CP 问题也很有意义。
在算法上,CP 算法历来倾向于涉及更多的搜索分支和复杂的约束传播,而 MIP 算法在很大程度上依赖于解决问题的 LP 松弛。虽然存在混合算法(例如,SCIP,字面意思是“求解约束整数程序”),并且最先进的求解器经常从另一方借用技术(例如,不好的学习和回跳起源于CP,但现在也出现在 MIP 求解器中)。
从科学研究领域的角度来看,差异纯粹是历史性的:MIP 是运筹学的一部分,起源于二战末期,出于优化大规模“作战”的需要,而 CP 则源于人工智能领域的逻辑编程,以声明方式建模和解决问题。但是有一个很好的例子可以证明这两个领域都研究同一个问题。请注意,甚至还有一个大型共享会议:CPAIOR。
总而言之,我会说 MIP 和 CP 在大多数方面都是相同的,除了典型算法中使用的主要技术。
【讨论】:
【参考方案3】:LP 和 MIP 使用数学规划求解,而约束规划问题有特定的求解方法。以下参考资料有助于理解差异: http://ibmdecisionoptimization.github.io/docplex-doc/mp_vs_cp.html
【讨论】:
以上是关于LP/MIP 和 CP 的区别的主要内容,如果未能解决你的问题,请参考以下文章