Optimization 如何解释CPLEX交互式优化器的输出?

Optimization 如何解释CPLEX交互式优化器的输出?,optimization,cplex,Optimization,Cplex,我一直在使用CPLEX交互式优化器来解决一些线性规划问题。我生成问题,使用CPLEX中的读取命令,然后运行优化。对于一些问题,CPLEX在一小时内生成一个解决方案,我使用write sol获得完整的解决方案。然而,对于一些问题,它似乎在一个点之后就被卡住了。我看到的输出如下所示: Nodes Cuts/ Node Left Objective IInf Best Integer

我一直在使用CPLEX交互式优化器来解决一些线性规划问题。我生成问题,使用CPLEX中的
读取
命令,然后运行
优化
。对于一些问题,CPLEX在一小时内生成一个解决方案,我使用
write sol
获得完整的解决方案。然而,对于一些问题,它似乎在一个点之后就被卡住了。我看到的输出如下所示:

       Nodes                                         Cuts/
   Node  Left     Objective  IInf  Best Integer    Best Bound    ItCnt     Gap
    .        .        .        .        .        .        .        .        .
    .        .        .        .        .        .        .        .        .
    .        .        .        .        .        .        .        .        .
Elapsed time = 816.06 sec. (429933.56 ticks, tree = 8.58 MB, solutions = 13)
   2884  1809       87.6482 12159      201.6200       80.3540  2100428   60.15%
   2938  1863      102.4825 11621      201.6200       80.3540  2149201   60.15%
   3727  2616       93.1194 10858      201.6200       80.3540  2409711   60.15%
   3743  2632       92.6249 11845      201.6200       80.3540  2437316   60.15%
   3767  2656       91.7097 12044      201.6200       80.3540  2466252   60.15%
   3803  2692       91.8088 11972      201.6200       80.3540  2491113   60.15%
   3805  2694      101.4411 10242      201.6200       80.3540  2497951   60.15%
   3827  2716       91.7697 12003      201.6200       80.3540  2522926   60.15%
   3937  2826      102.6357  7167      201.6200       80.3540  2676145   60.15%
   4175  3056       94.0081  9159      201.6200       83.9275  2783878   58.37%
Elapsed time = 930.33 sec. (472066.00 ticks, tree = 20.04 MB, solutions = 13)
   4178  3059       88.0621 11735      201.6200       83.9275  2788962   58.37%
   4190  3071       87.5922 11461      201.6200       83.9275  2809216   58.37%
   4202  3083       87.7980 11585      201.6200       83.9275  2823899   58.37%
   4214  3095       87.9296 11733      201.6200       83.9275  2841065   58.37%
   4215  3096       92.6440 11647      201.6200       83.9275  2844197   58.37%
   4227  3108       94.0457 12069      201.6200       83.9275  2869047   58.37%
   4239  3119       93.3760 11843      201.6200       83.9275  2890566   58.37%
   4251  3131       94.2709 11724      201.6200       83.9275  2916710   58.37%
   4274  3153       92.6187 11640      201.6200       83.9275  2945659   58.37%
   4286  3163       91.6257 11632      201.6200       83.9275  2965344   58.37%
Elapsed time = 998.66 sec. (493988.99 ticks, tree = 20.09 MB, solutions = 13)
   4310  3186       91.8091 10453      201.6200       83.9275  3010401   58.37%
   4323  3199       96.4584 11813      201.6200       83.9275  3034842   58.37%
   4335  3211       96.1343 11849      201.6200       83.9275  3057500   58.37%
   4359  3234       96.8602 11609      201.6200       83.9275  3092422   58.37%
开始时,最后一列的数字较高(例如,
99.92%
),开始迅速减少。但在某一点之后,最后一列
gap
继续说明
58.37%
而没有进一步减少。这个值意味着什么?我的理解是,这是当前最优解和全局最优解之间的百分比差。(即,
x%
意味着如果我在此时停止优化,则返回的解决方案可证明在全局优化的
x%
范围内)


我的理解正确吗?此外,我可以做些什么来理解和调试/避免这种“卡住”现象?

差距是最佳解决方案和解决方案的最佳已知界限之间的相对差异。这保证高于最已知解和真实全局最优解之间的差距。在你的例子中,最好的界限是83.9275,最好的界限是201.62,你是最小化的,所以差距是最小的

1 - (83.9275 / 201.62)  =  .5837
在解决复杂的混合整数问题时,您看到的“卡住”行为非常常见。有可能您的解决方案实际上接近最优,但界限并不严格,或者您的解决方案确实是最优的,但CPLEX无法找到更好的解决方案。有很多方法试图解决这个问题。其中包括

  • 改善你的MIP配方
  • 尝试不同的参数(打开切割、探测、切换到强分支等)
  • 看看是否有其他解算器能更好地解决您的问题(gurobi或xpressmp)

您对“卡住”行为的解释非常合理。我知道我的变量之间的相互依赖不是稀疏的,变量的总数超过了一百万。我会花一些时间来想出一个更简洁的公式。