ojAlgo 线性规划求解器的速度

Speed of ojAlgo linear programming solver

我是线性规划的新手,我确实用 lpsolve 解决了我的第一个问题(从 Java 调用的二进制 dll,通过 JavaILP 包装器有一个更面向对象的代码) 而且速度非常快 (50 毫秒)。

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

这个速度正常吗?

是否因为 ojAlgo 使用 BigDecimal(不太确定,我在代码中看到过 doubles)并且 lpsolve 可能使用 ints?

我能做点什么吗?

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

编辑: 我没有注意到一些表达式名称发生冲突,我猜这使它们相互覆盖;现在我解决了这个问题并找到了 OPTIMAL 1013 解决方案……在 8270 毫秒内。

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

你有整型变量吗?如果你这样做了,那么这就是一个 MIP,这些问题可能很难解决。

ojAlgo 将模型和求解器分开。该模型在内部使用 BigDecimal。该模型分析问题并根据问题特征调用不同的求解器。求解器可以使用他们想要的任何数字类型。内置的 ojAlgo 求解器与原始双精度一起工作。

您可以在 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 还没有集成...