MIP GAP无法正确设置

时间:2015-06-06 16:33:27

标签: c++ cplex

我正在IBM ILOG Cplex中解决MIP问题。我已将相对MIP GAP和绝对MIP间隙设置为0,但是在引擎日志中报告的间隙高于0.当我按默认值运行模型时(1.0E-4,1.0E-6),差距在引擎日志中报告的值高于1.0E-4(有时甚至是6%)。令人惊讶的是,即使计算时间很短(低于1秒)。我想除了mip gap之外还需要其他设置来将其设置为零以获得目标函数的最佳值。另一件事是我的其他设置是默认设置。如果有人能帮助我,我感激不尽。

这是我的一次跑步的结果(相对MIP GAP设置为0,但报告的差距为1.13%,如您所见):

        Nodes                                         Cuts/
   Node  Left     Objective  IInf  Best Integer     Best Node    ItCnt     Gap

      0     0    15619.2777    30                  15619.2777      204         
      0     0    21532.4345    31                    Cuts: 92      300         
      0     0    22240.7958    65                    Cuts: 50      389         
      0     0    22374.7172    46                    Cuts: 63      452         
      0     0    22428.5062    28                    Cuts: 31      475         
      0     0    22447.7754    48                    Cuts: 28      517         
      0     0    22486.3137    39                    Cuts: 34      542         
      0     0    22486.3137    40                    Cuts: 13      557         
      0     0    22486.3137    30                 ZeroHalf: 4      558         
      0     0    22486.3137    28                    Cuts: 15      583         
*     0+    0                        23225.6696    22486.3137      583    3.18%
      0     2    22486.3137    28    23225.6696    22486.3137      583    3.18%
Elapsed real time =   0.36 sec. (tree size =  0.01 MB, solutions = 1)
*    26    20      integral     0    22743.1173    22486.3137     1126    1.13%

GUB cover cuts applied:  2
Clique cuts applied:  23
Cover cuts applied:  9
Implied bound cuts applied:  105
Flow cuts applied:  1
Mixed integer rounding cuts applied:  30
Zero-half cuts applied:  74
Gomory fractional cuts applied:  3

Root node processing (before b&c):
  Real time             =    0.31
Parallel b&c, 4 threads:
  Real time             =    0.25
  Sync time (average)   =    0.02
  Wait time (average)   =    0.06
                          -------
Total (root+branch&cut) =    0.56 sec.
事先感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

Tim在评论中说,它是日志文件的最后一行,它实际显示了最终解决方案(上限和下限),而不是树日志部分的最后一行。

以下是一个例子:

enter image description here

似乎问题如下:

  • CPLEX报告最佳解决方案,默认差距为10e-4,但报告为1.13%
  • 您已经找到了一个更好的解决方案,您已经检查过它是否可行

对于第一个项目符号,CPLEX实际上并未报告该差距为1.13%。在搜索过程中报告时间差 1.13%。

它返回一个应遵循默认容差的解决方案的事实证明,使用您的配方,最佳值不能低于报告的值。

由于您确信有更好的可行解决方案,因此您有几个选择。

  • 尝试在开始优化之前将已知解决方案注入CPLEX。一种方法是使用goals。这可能有些复杂,所以你可能想要......
  • 打印模型并手动评估您声明的解决方案对于您输入的约束(推荐方法)是否可行。
  • 添加一个约束条件,即目标函数值应小于或等于您的解决方案的目标值增加少量(10e-3左右应该可以)。如果您的解决方案适用于配方,您应该得到它,否则有一个错误,解决方案是不可行的。我不喜欢这种方法,因为如果有多种最佳解决方案,你可以得到有趣的结果,但通常它可以工作)。

总而言之,尝试调试模型并告诉我们。这是一个相当复杂的模型,很容易遗漏一些东西(即添加一个你不想添加的约束)。

如果所有这些都失败了,您仍然发现自己想知道发生了什么,那么您可能希望将模型提交到IBM's official forum。如果求解器中确实存在错误,他们会照顾它并让你知道。

我希望这会有所帮助