【发布时间】:2017-12-02 15:19:58
【问题描述】:
我知道当我将 EpGap 设置为零时,上限和下限是相同的,并且解决方案是最好的。但是,当我设置EpGap不为零时,为什么上限和下限也一样?
【问题讨论】:
-
现在我需要记录EpGap不为零时的上限和下限。我认为他们不应该是一样的。但是当我将 EpGap 设置为不为零时,上限和下限是相同的。为什么?
标签: cplex
我知道当我将 EpGap 设置为零时,上限和下限是相同的,并且解决方案是最好的。但是,当我设置EpGap不为零时,为什么上限和下限也一样?
【问题讨论】:
标签: cplex
根据EpGap(又名“相对 MIP 间隙容差”)参数的文档,我们有以下内容:
当值
|bestbound-bestinteger|/(1e-10+|bestinteger|)下降 低于这个参数的值,混合整数优化为 停了下来。例如,指示 CPLEX 停止 找到了一个可行的整数解,证明在 5% 以内 最优,将相对 MIP 间隙容差设置为 0.05。
只要 CPLEX 找到比间隙指定的更好的解决方案,优化就会停止,这就是您得到的结果(甚至可能是最优的)。
【讨论】:
不要错误地认为通过将 EpGap 设置为零,您总能得到更好的解决方案。将 EpGap 参数设置为零意味着您要求 CPLEX 证明没有可能的更好解决方案
CPLEX 在默认情况下构建和设置为尝试在搜索过程的早期找到好的解决方案。我见过很多案例,即使是结构良好的相当大的问题,它也能在几秒钟内找到最佳解决方案,但可能需要几个小时才能搜索 B&B 树的其余部分以证明没有更好的解决方案,并且将差距缩小到(接近)零。
除了在一些非常特殊的情况下,将 EpGap 设置为零几乎总是一个坏的想法。
您可能有一个基于精确和特定数据的结构良好的小数学问题,在这种情况下它可以正常工作。例如,我正在考虑数学或理论物理学中的抽象问题。
但是,大多数使用 CPLEX(或任何其他类似求解器)的实际应用程序都在处理无法准确知道的预测和测量结果。想想例如混合问题(例如制造合金、食品),其中 1e-6 的间隙意味着解决方案在每吨材料约 1 克变化的水平上是最佳的。或者对于运输问题,我们知道要访问的站点之间的距离可能相隔数公里,精确到最近的厘米左右。旅行和工作时间可以精确到每天十分之一秒。基本上,想想你的数字实际上意味着什么,不要被虚假的精度所诱惑。在许多领域,预测误差为 5% 被认为是非常好的。
您可能仍想证明一个解决方案接近最优,例如即使在这种情况下也有 0.1% 的差距,但尝试为近似问题找到一个可证明的最佳解决方案来解决零差距在实践中可能毫无意义。
还有许多现实世界的问题很大,有数千或数百万个变量。在这种情况下,要求 CPLEX 证明 MIP 差距为零的最优性可能需要几天或几年的时间。
【讨论】: