使用meth = GLP_PRIMAL与甲基= GLP_DUALP的GLPK单纯形行为

时间:2015-02-19 14:37:33

标签: linear-programming glpk

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

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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

当强对偶定理为真时,两个最优解都应该相同。在你的问题中,你会得到一个双重退化"警告,这意味着在双重问题中存在一个变为0的等式。因此,该等式中的变量对目标函数没有影响(无论X100还是仅{ {1}}),这是合理的,因为你没有目标函数。然后GLPK转换到原始单纯形,因为对于双重问题,存在替代的最优解。利用已经导出的信息,原始单形可以更快。我不知道GLPK究竟在做什么,但通常可以使用双重问题的可行解作为原始问题的下限。

你的原始方法可能会导致同样的问题。问题退化了,单纯形算法陷入了一个对目标没有影响的变量,因此很难找到这个变量的最优值。