这可能有点详尽,但我会尽力提供所有信息以涵盖该主题的良好范围。
我将从一个示例开始,相应的信息会更有意义。
示例:假设我们需要在一台机器上对一组任务进行排序。每个任务 i 都有一个特定的固定处理时间 pi。每个任务都可以在其发布日期 ri 之后开始,并且必须在其截止日期 di 之前完成。任务不能在时间上重叠。时间表示为一组离散的时间点,例如 {1, 2,…, H}(H 代表地平线)
MIP 模型:
- 变量:二进制变量xij表示任务i是否在时间段j开始
- 约束:
- 每个任务都在一个时间点开始
- 尊重发布日期和截止日期
- 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,它们可以以任何非重复方式排序。