关于单纯形方法实现的最佳书籍?


14

我对实现用于LP任务的SM感兴趣,但是我听说过可能存在的陷阱:Cormen的书中说,有可能拥有输入数据,这些输入数据将使朴素的实现在指数时间内发挥作用。我还听说过,天真的实现可以循环某种数据。

是否有书籍/论文/资源解释了SM实际实施的细微差别?

提前致谢。


Answers:


13

我强烈推荐CPLEX的“父亲”比克斯比(Bixby)撰写的论文,该论文不仅调查(修订的)单纯形算法的实现方面:罗伯特·比克斯比Robert E. Bixby)解决现实世界中的线性程序:十年以及更多的进展操作研究(50)2002,3-15


12

单纯形算法不在P中。因此,CLRS指出,即使在实践中它“运行良好”,也有一些输入导致算法在指数时间内运行。这与算法严格相关,与算法的实现无关:您将面对此问题,而与实现算法的精确程度无关。但是,LP在P中。1979年Khachian证明了这一点,但是他的椭球算法不切实际。如今,内部积分方法已被广泛使用。第一个是1984年由Karmarkar发现的。

如果您对实际实现感兴趣,请查看:

GUROBI是免费的,目前可用于学术领域,是目前可用的最佳优化程序(顺序和共享内存并行版本):

http://www.gurobi.com

GLPK库:

http://www.gnu.org/software/glpk/

这是一个开源项目,提供以下方面的实现:

  • 原始和对偶单纯形法
  • 原对偶内点法
  • 切分法
  • GNU MathProg的翻译器
  • 应用程序接口(API)
  • 独立的LP / MIP求解器

12
确实。我强烈建议不要尝试自己实现单纯形,除非这是练习的重点。如果您只想使用它,那么现成的方法会更好。另外,如果适合您,CPLEX可免费用于学术用途。
Suresh Venkat

1
是否有LP的任何分布式(如MPI)开源实现?
Tomek Tarczynski 2011年

3
@Tomek LP是P完全的,不太可能具有有效的并行化。
Marcus Ritt

@Tomek:Simphony提供了一个分布式版本,当前可以在PVM消息传递协议支持的任何环境中运行(尚不支持MPI)。也可以使用任何符合OpenMP的编译器为共享内存体系结构编译相同的源代码。请参阅branchandcut.org和密切相关的COIN-OR网站:coin-or.org
Massimo Cafaro 2011年

9
CPLEX可能是当前可用的LP的最佳实现(这就是人们为此付出高昂代价的原因),但是几乎所有被广泛使用的实现都将比您自己编写的任何程序都要好得多。其中包括Mathematical,Maple和MATLAB软件包。周围有很多实现,包括一些相当不错的免费实现(QSopt就是其中一种,如果您不打算将其用于商业目的则是免费的),因此,自己编写程序对于学习经验才值得。
彼得·索尔

9

范德贝的线性规划 一书详细介绍了许多底层细节...但是,正如其他答案/评论所建议的那样,实现LP解算器是一项艰巨而艰巨的任务。现成的求解器可能是要走的路...(还有一些开源的LP求解器...)


6

有时幼稚的实现有时会以指数方式运行。实际上,我认为所有已知的确定性和随机规则都具有超多项式最坏情况输入。产生这种最坏情况行为的大多数已知输入都是高度结构化的,一个相关的问题:

单纯形算法的病理实例结构

但是,在实践中,SM效果很好。这已通过引入平滑分析而正式化,该分析基本上是在输入稍有干扰的情况下进行的最坏情况分析。在这种分析下,SM是多时的,换句话说,对于每个输入(甚至是病理输入),都会有轻微的扰动,从而使算法能够很好地执行。这种见解已转化为可以在多时执行的随机算法。但是,据我了解,关于该算法是否符合“真正的”单纯形算法的说法,仍有一些争议。我也不知道标准软件包是否按照这种方式实现了某些功能,但是由于搜索结果已有5年以上的历史了,因此您应该能够找到一些实现方式。


1

您可以查看Luenberger,Ye,线性和非线性编程,第三版。这似乎很全面,但我还没有说清楚它是否完全回答了您的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.