Java中非线性多变量函数的约束优化

9

我正在寻找一个用Java实现的受约束非线性多变量函数优化的开源方法。


你看过Apache Commons Math吗?我记得它有一些非线性优化工具... - Nathan Ryan
1
你能给一个你试图解决的问题的例子吗? - Victor P.
你想要解决的问题中,变量是离散的还是连续的? - willem
4个回答

5

IPOPT是我知道的最强大的求解器。

它有一个Java接口,但我不知道它有多好,我只使用C++ API。


我使用IPOPT的经验是,它是我用于大型稀疏凸问题的最高效的开源求解器。不幸的是,该库不是线程安全的,并且容易出现段错误或更糟的情况,会破坏您的内存并导致JVM稍后崩溃,如果您做任何稍微有点错误的事情,这几乎是不可能从Java进行调试的。最终,我决定最好将使用IPOPT的任何代码隔离到一个单独的进程中,用C++编写。 - Owen
@Owen 很有趣。我使用 Java API 工作了很长时间,它非常可靠;没有段错误、内存损坏或内存泄漏。然而,我同意:如果可能的话,只需将其放入单独的进程中,避免所有的接口困难。 - Ali
你可能是对的。我最终追踪到我的内存损坏问题是由于Ipopt的终结器在不同的线程上被调用(通常情况下,终结器都是这样)。因此,我想这一切可能都归结于Ipopt不是线程安全的事实,这也有文档记录 - Owen

3

有几个开源的Java实现可以完成这个任务,例如:

  • OptaPlanner(Apache许可证,100% Java,有大量的示例和文档)
  • jacop
  • choco
  • ...

2

我最近将Michael Powells的COBYLA2无导数优化器用于非线性目标函数和约束条件的Java端口转换完成。您可以在这里找到源代码。


0
你可以看一下 Choco,这是一个用Java实现的约束编程框架。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接