【问题标题】:GLPK Simplex behavior with meth=GLP_PRIMAL vs meth=GLP_DUALP使用 meth=GLP_PRIMAL 与 meth=GLP_DUALP 的 GLPK 单纯形行为
【发布时间】:2015-02-19 14:37:33
【问题描述】:

我有一个没有目标函数的线性程序。所以我只是想测试一下它的可行性。我正在使用 GLPK api for simplex 来做到这一点。当我使用默认方法 (meth=GLP_PRIMAL) 运行单纯形时,求解器无法在 100000 次迭代中收敛(这是我设置的限制)。但是,当我使用 GLP_DUALP 方法时,经过几次迭代后,我会收到消息“警告:双重退化;切换到原始单纯形”,并且它会在合理的迭代次数内继续收敛。

所以我的问题是,如果它最终在两种情况下都使用原始单纯形,为什么它在第一种情况下不收敛。可能会发生什么。

提前致谢。

【问题讨论】:

    标签: linear-programming glpk


    【解决方案1】:

    如果没有关于问题的详细信息,很难说到底发生了什么,但基本上,双重退化情况下的原始单纯形是某种“热启动”。

    在使用对偶算法时,优化过程会产生一个对偶问题,该问题将从最优解开始,然后尝试找到仍包含最优条件的可行解。相反,原始单纯形将从可行的解决方案开始,然后搜索最佳解决方案。

    当强对偶定理为真时,两个最优解应该相同。在您的问题中,您会收到“双重退化”警告,这意味着在对偶问题中有一个方程变为 0。因此,该方程中的变量对目标函数没有影响(无论 X 是否为100 或只是 1),这是合理的,因为您没有目标函数。然后 GLPK 切换到原始单纯形,因为对于对偶问题存在替代最优解。使用已经导出的信息,原始单纯形可能会更快。我不知道 GLPK 到底在做什么,但通常可以使用对偶问题的可行解作为原始问题的下界。

    阻碍您的原始方法的可能是同一个问题。问题退化,单纯形算法卡在一个对目标没有影响的变量上,因此很难找到这个变量的最优值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 2021-10-15
      • 2015-08-29
      • 1970-01-01
      • 2012-02-24
      • 2022-01-05
      • 2017-11-27
      相关资源
      最近更新 更多