我正在比较用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模型已经足够了)
答案 0 :(得分:0)
在第二个例子中,有两个最佳的双重解决方案:一个PuLP给你,一个你通过直接调用Gurobi得到的。唯一的最优原始解是[0.0,131.67,199.5,48.5,105.5],这使得所有约束的松弛在最优原始解中都是0。对于c [0],如果减少右侧,则不会减少目标,但如果增加目标,则使约束成为可行的最便宜的方法是增加x [0]。 Gurobi只保证您将产生 最佳原始和双重解决方案。您获得的具体最佳解决方案是任意的。
第一个例子只是一个精确问题。