使用CPLEX的LP Duals和降低的成本

时间:2019-05-17 12:32:09

标签: linear-programming cplex

我正在研究使用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

2 个答案:

答案 0 :(得分:2)

正如欧文(Erwin)评论中提到的那样,您正在经历的可能是简并性。

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

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

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

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

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

答案 1 :(得分:1)

我的猜测是,当您设置子问题时,您无法在超出变量上限的情况下考虑变量成本的降低。这些降低的成本本质上是上限约束的对偶值,因此在设置子问题时必须将其考虑在内。

这种意外遗漏通常发生在生成的变量具有上限时。

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