【问题标题】:Speed of ojAlgo linear programming solverojAlgo 线性规划求解器的速度
【发布时间】:2018-10-18 23:54:56
【问题描述】:

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

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

这个速度是否正常/预期?

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

我可以做点什么吗?

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

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

【问题讨论】:

    标签: java linear-programming ojalgo


    【解决方案1】:

    纯 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...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多