2013-06-05 47 views
1

我一直在寻找3天的时间来获得能够在java中进行多变量非线性优化的Java库。我想出了几个,最着名的是Apache Commons优化器包。不幸的是,我找不到很多例子,而且我没有足够的经验去弄清楚如何在没有例子的情况下使用他们的优化软件包。有人能告诉我一个关于如何用Apache Commons软件包解决多变量优化问题的例子,或者指出一些可以帮助我的文档吗?具有约束条件的Java多变量非线性优化程序库

+0

您一直在搜索3天的官方文档? http://commons.apache.org/proper/commons-math/userguide/optimization.html TBH我见过更糟糕的开源项目文档。 –

+0

好的,所以我的问题是267尺寸。虽然它是可区分的,但我不想被卡住的267偏导数卡住。所以我查看了他们拥有的4个多变量直接求解器。我需要一些可以采用线性约束的东西。在他们的网站上它说他们提供了4个求解器,其中两个不能自己管理约束。所以我看了另外两个求解器,Bobyqa和CMA求解器。当谈到优化方法时,没有指示参数应该是什么。在文档中它只是说OptimizationData ... – Kammeot

回答

1

(另请参阅最近的question的答案)。

如果您正在寻找Java中可以处理(非)线性约束并且不依赖于派生的非线性优化器,那么我会推荐Michael Powell的COBYLA2算法。我已将此算法的原始FORTRAN实现转换为Java,并且您可以在GithubCodeProject上找到相应的代码。

现在,267个变量可能是对COBYLA2的挑战,或者对于这个问题,任何优化器都不依赖衍生产品。请确保您允许进行大量的目标函数计算,以确保算法有足够的空间向最佳收敛。

如果你愿意考虑基于梯度的算法,我可以推荐IPOPT。 IPOPT以C++实现,但通过JNI的Java interface是官方发行版的一部分。

+0

使用IPOPT算法,我必须手动计算梯度吗?我试图避免使用这个267变量函数,并让算法去完成这项工作。 – Kammeot

+0

IPOPT本身不提供任何梯度估计或[自动分化](http://en.wikipedia.org/wiki/Automatic_differentiation),但您可以在Apache Commons Math中找到AD对Java的支持。 –

0

如果您的变量的值范围是离散的:OptaPlanner也是一个能够进行多变量非线性优化的Java库。它有高达50000个变量的示例(每个值有5000个值)。

相关问题