纸浆影子与gurobi的价格差异

时间:2014-06-29 22:02:25

标签: linear-programming gurobi pulp

我正在比较用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模型已经足够了)

1 个答案:

答案 0 :(得分:0)

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

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