寻找一个解决线性程序的基于模板的C ++库

时间:2014-08-29 17:21:09

标签: mathematical-optimization linear-programming simplex

我正在寻找使用Simplex算法或其喜欢的任何LP(线性程序)解算器。我有一个额外的请求,求解器将执行所有的计算而不会有任何精度损失!!

因此,如果我能找到一个基于模板的C ++库,让我定义它使用的数值变量的下划线类型,我会让它使用boost的类型cpp_ratinal,因此所有的计算都赢了&#39 ;由于浮点的舍入,t会损失任何精度。

这样的C ++库是否存在?

2 个答案:

答案 0 :(得分:0)

SoPlex和QSOpt都有精确的单纯形求解器。他们的表现会比你的建议更好。但是,我应该警告你,SoPlex的精确单纯形求解器实际上并不起作用;用SoPlex报告不可行性的理性数据构建一个可行的线性程序是相当简单的。

在整个求解过程中使用精确算法并不是一个好主意。你最终必须在精确算术中减少大矩阵,并且所涉及的确切数字变得非常大。我相信GLPK的精确求解器在理性算术中运行单纯形;你可以玩它,看看你对它的表现有多喜欢。

在内点求解器中,SDPA-GMP是一种内点方法,用于使用任意精度算法的线性规划的泛化。您必须决定要使用的精度,但是您可以使用SDPA-GMP获得非常高精度的解决方案,然后进行某种高精度交叉以获得精确的最佳解决方案。 (我从来没有尝试过这个,因为我从来都不想完全解决LP。)在这种情况下,我怀疑基于单纯形的求解器比IPM运行得更快。

答案 1 :(得分:-1)

看看SoPlex:

http://soplex.zib.de

SoPlex使用一种名为"迭代细化的技术"将解决方案质量提高到任意精度。所有单纯形操作均以双精度算法执行,以在短时间内获得接近最优的解。然后,在略微修改(减少误差)LP上执行非常少的枢轴以确定精确解。 它以模板方式使用GMP,Gnu多精度库 - 如果你不喜欢GMP,你也可以使用cpp_rational。 在当前版本中,LU分解尚不具备精确算法,因此您无法获得最佳的最佳证明。这已经在我们的开发人员版本中实现,但将在今年年底发布。

http://opus4.kobv.de/opus4-zib/solrsearch/index/search/searchtype/collection/id/16090/start/0/rows/10/subjectfq/Exact+linear+programming