2013-06-05 44 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個值)。

相關問題