【问题标题】:pulp shadow price difference with gurobi与gurobi的纸浆影子价格差异
【发布时间】:2014-06-30 22:31:31
【问题描述】:

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

【问题讨论】:

    标签: linear-programming gurobi pulp


    【解决方案1】:

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

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

    【讨论】:

    • 对于第二种解决方案,有没有办法从 PuLP 获得与 Gurobi 相同的结果。我需要从 PuLP 获取 [0.0, 0.33, 0.5, 0.5] (精度问题可以忽略)?
    • 保证相同解决方案的唯一方法是将完全相同的模型发送到求解器,而当您使用两个完全独立的建模系统时,这是无法做到的。
    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多