这是这个问题的后续问题:解释 CPLEX 中的 GAP
我在优化(最小)问题开始时使用了以下表达式:
execute gapTermination {
cplex.epgap = 0.00; // result at gap of 0%
}
这是引擎日志的一部分:
Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap
0 0 560.7929 100 560.7929 115
0 0 742.1396 57 Cuts: 121 214
0 0 744.3119 61 Cuts: 10 226
0 0 747.2193 61 Cuts: 10 233
0 0 747.2797 61 MCF: 1 234
* 0+ 0 916.3811 747.2797 18.45%
0 2 747.2797 61 916.3811 747.2797 234 18.45%
Elapsed time = 0.13 sec. (49.77 ticks, tree = 0.00 MB, solutions = 1)
* 916 755 integral 0 778.9609 753.8931 7249 3.22%
* 4739 1918 integral 0 771.9166 759.5332 25884 1.60%
Cover cuts applied: 5
Implied bound cuts applied: 8
Flow cuts applied: 27
Mixed integer rounding cuts applied: 36
Multi commodity flow cuts applied: 1
Gomory fractional cuts applied: 22
Root node processing (before b&c):
Real time = 0.11 sec. (49.41 ticks)
Parallel b&c, 16 threads:
Real time = 0.38 sec. (202.30 ticks)
Sync time (average) = 0.07 sec.
Wait time (average) = 0.07 sec.
------------
Total (root+branch&cut) = 0.49 sec. (251.71 ticks)
如您所见,似乎找到了“最佳”解决方案,但仍有 1.60% 的差距。
如何解释这个?我的想法是,我找到了最佳整数解决方案(没有一个更好的整数解决方案),但非整数值实现了更好的结果,降低了 1.60%(最小化问题)。
如果我的想法是正确的,那么这意味着只有当松弛解(通常是非整数)的最优值恰好是整数值时,才能实现 0.00% 的差距。
如果有人可以在这里帮助我,我将不胜感激。提前致谢。