ojAlgo线性规划求解器的速度

时间:2018-10-18 23:54:57

标签: java linear-programming ojalgo

我对线性编程还很陌生,我确实使用lpsolve解决了我的第一个问题(通过JavaILP包装器从Java调用二进制dll,以获取更多面向对象的代码),而且速度非常快(50毫秒)。

然后,我决定避免使用本机代码(如果可能的话),并使用ojAlgo重新编写所有内容,对于2100个变量的问题,解决时间从50毫秒增加到1089毫秒。

这个速度正常吗?

是因为ojAlgo在使用BigDecimal(不是很确定,我在那里的代码中看到过double s),而lpsolve可能正在使用int s ?

我可以做些什么吗?

另一方面,找到的最大值从1013增加到OPTIMAL 1249,这很好。 (使用lpsolve我什至不知道存在更好的解决方案)

edit:我没有注意到几个表达式名称发生冲突,我想这会使它们彼此覆盖;现在我解决了这个问题,并在8270毫秒内找到了OPTIMAL 1013解决方案。

1 个答案:

答案 0 :(得分:1)

纯Java解算器比本机代码慢是完全正常的。

您有整数变量吗?如果这样做,那么这就是MIP,而且很难解决。

ojAlgo在模型和求解器之间进行分隔。该模型在内部使用BigDecimal。该模型分析问题并根据问题特征调用不同的求解器。求解器可以使用所需的任何数字类型。内置的ojAlgo求解器可与原始double一起使用。

您可以在ojAlgo中插入所需的任何求解器。已经有3个顶级商业求解器的集成:

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-cplex

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-gurobi

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-mosek

还有其他可用的纯Java,开源LP解算器:

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-joptimizer

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-commons-math3

还没有lpsolve的集成...