【问题标题】:LP Duals and Reduced Costs with CPLEXLP Duals 和使用 CPLEX 降低成本
【发布时间】:2019-05-17 12:32:09
【问题描述】:

我正在研究一种使用 CPLEX 来解决缩减主问题的列生成算法。

将新变量添加到 RMP 后,我将它们的上限设置为 0,再次求解 RMP 并检索它们的降低成本(检查我计算的值是否与 CPLEX 提供的值匹配)。

在第一次迭代中,降低的成本匹配。

但是,经过一些迭代,我开始获得不同的降低成本。

当我运行 CPLEX Interative Optimizer、读取 LP 模型(或 MPS)并比较约束的对偶时,我得到了一些不同的值。

这有意义吗?

我尝试使用不同的方法来解决我的 LP。还尝试更改公差。

问题统计

Objective sense      : Minimize
Variables            :  453308  [Fix: 8,  Box: 453300]
Objective nonzeros   :    6545
Linear constraints   :  578166  [Less: 70814,  Greater: 503886,  Equal: 3466]
  Nonzeros           : 2710194
  RHS nonzeros       :    7986

Variables            : Min LB: 0.0000000        Max UB: 74868.86
Objective nonzeros   : Min   : 0.01000000       Max   : 10000.00
Linear constraints   :
  Nonzeros           : Min   : 0.004000000      Max   : 396.8800
  RHS nonzeros       : Min   : 0.01250000       Max   : 74868.86

显示解决方案质量我得到这些信息:

Max. unscaled (scaled) bound infeas.        = 8.52651e-014 (3.33067e-015)
Max. unscaled (scaled) reduced-cost infeas. = 2.24935e-010 (5.62339e-011)
Max. unscaled (scaled) Ax-b resid.          = 5.90461e-011 (3.69038e-012)
Max. unscaled (scaled) c-B'pi resid.        = 2.6489e-011 (7.27596e-012)
Max. unscaled (scaled) |x|                  = 45433 (2839.56)
Max. unscaled (scaled) |slack|              = 4970.49 (80.1926)
Max. unscaled (scaled) |pi|                 = 295000 (206312)
Max. unscaled (scaled) |red-cost|           = 411845 (330962)
Condition number of scaled basis            = 1.1e+008

【问题讨论】:

  • 可能只是退化。双管齐下和降低成本通常不是独一无二的。

标签: linear-programming cplex


【解决方案1】:

正如 Erwin 在评论中提到的,您所经历的可能是退化。

在比玩具模型更大的问题中,原始解决方案和对偶解决方案通常都不是唯一的。

通过将一组原始变量固定到其最佳水平,假设解决方案是原始对偶最佳解决方案并且解决方案存储在 CPLEX 中,那么在应用修复后重新优化模型应该需要零次迭代。因此它应该返回相同的解决方案。但是,如果没有解决方案存储在 CPLEX 中并且您从头开始重新优化,那么 CPLEX 可能会返回不同(但也是最优的)(原始和/或双重)解决方案。

您在日志中看到迭代了吗?

作为调试,尝试在修复之前和之后写出模型,然后对这两个文件进行比较,以确保您没有建模/编程错误。

也欢迎您通过 bo.jensen (at) dk (dot) ibm (dot) com 与我联系,我会尽力帮助您,因为我不会密切关注堆栈溢出。

【讨论】:

    【解决方案2】:

    我的猜测是,当您设置子问题时,您没有考虑到变量在其上限的基础上降低的成本。这些降低的成本本质上是上限约束的对偶值,因此在设置子问题时必须考虑在内。

    这种意外遗漏通常发生在使用上限创建生成的变量时。

    如果这确实是您的问题,那么您最简单的解决方案可能只是不为新变量指定上限,如果上限是隐含的(例如,新变量是集团约束的一部分,您可以这样做) )。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-19
      • 2019-08-11
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2020-10-01
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多