0

我正在比较用 gurobi 和纸浆计算的影子价格 (pi) 的值。对于相同的输入,我得到不同的值,我不知道如何用纸浆做。这是我使用的 lp 文件:

Minimize
  x[0] + x[1] + x[2] + x[3]
Subject To
  C[0]: 7 x[0] >= 211
  C[1]: 3 x[1] >= 395
  C[2]: 2 x[2] >= 610
  C[3]: 2 x[3] >= 97
Bounds
End 

对于上面的 lp 文件,gurobi 给了我影子价格:

[0.14285714285714285, 0.3333333333333333, 0.5, 0.5]

和纸浆我得到:

[0.14285714, 0.33333333, 0.5, 0.5]

但是如果我执行以下 lp 模型:

Minimize
  x[0] + x[1] + x[2] + x[3] + x[4]
Subject To
 C[0]: 7 x[0] + 2 x[4] >= 211
 C[1]: 3 x[1] >= 395
 C[2]: 2 x[2] + 2 x[4] >= 610
 C[3]: 2 x[3] >= 97
Bounds
End

使用 gurobi 我得到:

[0.0, 0.3333333333333333, 0.5, 0.5]

和纸浆我得到:

[0.14285714, 0.33333333, 0.5, 0.5]

正确的值是 gurobi 返回的值(我认为?)。

为什么我在不同型号的纸浆上得到相同的影子价格?我怎样才能得到与 gurobi 相同的结果?

(我没有提供源代码,因为问题会太长,我认为lp模型就足够了)

4

1 回答 1

0

在第二个示例中,有两种最佳的双重解决方案:一种是 PuLP 为您提供的,另一种是您直接调用 Gurobi 获得的。唯一的最优原始解为 [0.0, 131.67, 199.5, 48.5, 105.5],这使得最优原始解中所有约束的松弛度都为 0。对于 c[0],如果减少右手边,目标不会减少,但如果增加它,使约束可行的最便宜的方法是增加 x[0]。Gurobi 仅保证您将产生最佳的原始和对偶解决方案。你得到的具体最优解是任意的。

第一个例子只是一个精度问题。

于 2014-06-30T04:40:30.387 回答