2012-05-16 71 views
9

我在查找開放源代碼Java中實現了對非線性多變量函數進行約束優化的方法。Java中的非線性多變量函數的約束優化

+0

有你看了阿帕奇百科全書數學?我似乎記得一些非線性優化實用程序... –

+1

你能舉出一個你想要解決的問題嗎? –

+0

你想解決的問題是否有離散變量或連續變量? – willem

回答

3

有幾種開源Java實現,可以做到這一點,如:

  • OptaPlanner(Apache許可證,100%的java,大量的例子和文檔)
  • jacop
  • 巧克力
  • ...
5

IPOPT是最強大的解算器,我知道的。

它有一個Java interface雖然我不知道有多好就是,我只使用C++ API。

+0

我對IPOPT的經驗是,它是我用於處理大型稀疏凸面問題的最高性能的開源解算器。不幸的是,這個庫不是線程安全的,並且容易出現段錯誤或者更糟糕的情況,如果你做了一些微小的錯誤,那麼就會破壞你的內存並導致JVM在稍後發生段錯誤,這幾乎不可能從Java進行調試。最後,我決定將使用IPOPT的代碼隔離到用C++編寫的單獨進程中更好。 – Owen

+0

@Owen有趣。自從我廣泛使用Java API以來,它的工作可靠;沒有段錯誤,沒有內存損壞,沒有內存泄漏。但是,我同意:如果可以的話,只需將其放入一個單獨的過程中,並完全避免接口故障。 – Ali

+0

你可能是對的。我結束了跟蹤我的內存腐敗的事實,即'Ipopt'的終結器正在另一個線程上調用(通常是終結器)。所以我想這可能都回來的事實,Ipopt是不是線程安全的,[這是記錄(https://projects.coin-or.org/Ipopt/ticket/167)。 – Owen

0

你可以看看Choco,在Java中實現約束規劃的框架。

2

我最近移植邁克爾·鮑威爾的COBYLA2免費衍生的優化非線性目標函數和約束到Java。你會發現源代碼here