具有约束的Java多变量非线性优化器库

时间:2013-06-05 06:04:12

标签: java optimization

我一直在寻找一个能够在java中进行多变量非线性优化的Java库。我想出了一些,最引人注目的是Apache Commons优化器包。不幸的是,我找不到很多例子,而且我没有足够的经验来弄清楚如何在没有一些例子的情况下使用他们的优化包。有人能指出我如何使用Apache Commons软件包解决多变量优化问题,或者指出一些可以帮助我的文档吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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