2011-06-11 166 views

回答

3

上2012年2月25日重要更新

MSF 3.1現在支持通過其NelderMeadSolver求解界變量非線性優化:http://msdn.microsoft.com/en-us/library/hh404037(v=vs.93).aspx

對於一般線性約束,微軟解決方案基金會僅通過其內點解算器支持線性編程和二次編程。對於這個求解器,請參閱Tomas提到的SVM帖子。

MSF具有一般非線性規劃求解器,內存有限,BFGS,但是它不支持任何約束。該求解器還需要一個明確的漸變函數。對於該解算器,請參閱:由Tomas提到

Logistic regression in F# using MSF

F#ODSL只支持線性規劃。我有一個QP擴展,可在codexplex

回到你的問題 - 優化線性約束(類似於fmincon)F(X),我還沒有看到它有這個能力的任何免費圖書館。 NMath.NET(商業)似乎有一個。我試圖解決一個高度非線性優化,但它不適合我。最後我使用了DotNumerics實現的B-LBFGS。

我想你也會喜歡下面的SO問題:

Open source alternative to MATLAB's fmincon function?

的答案指向SciPy.​optimize.​cobyla,這似乎是類似的東西fmincon。但主要的信息是,對於您的具體問題,也許fmincon太籠統了。您可以使用更具體的求解器,例如LBFGS或QP。如果你的初始值不好,一般求解器有時也不起作用。

+0

感謝您的回答和您的博客。我希望無國界醫生可以做LBFGS或類似的事情。 – ahala 2011-06-12 22:28:56

+0

這個答案不再準確。 MSF *支持約束非線性編程。本教程演示了它:https://msdn.microsoft.com/en-us/library/gg261758%28v=vs.93%29.aspx?f=255&MSPPError=-2147217396 – kmote 2016-09-20 23:44:30

+0

@kmote你知道MSF是否停止開發? – 2017-02-10 17:30:05

3

我沒有與微軟求解基金會自己太多的經驗,但有一個很好的文章,演示如何從F#使用它:

對於F#,還有一個嵌入式建模語言 - 這可以讓你只寫你的約束作爲普通的F#表達式(包裹在報價)和這種語言解釋器調用微軟求解基金會與創建適當的約束(我認爲這是完全真棒!):

2

我最近已將Michael Powell的無衍生代碼COBYLA2(非線性目標函數,非線性約束)和BOBYQA(非線性目標函數,可變邊界)移植到C#中。當優化問題只包含可變邊界時,BOBYQA算法明顯更快。

我有開源的代碼;你可以在Github上找到它們:cscobylacsbobyqa

如果您更喜歡基於衍生的算法,我還實現了一個適配器IPOPT。它被稱爲csipopt,也可以從Github獲得。

沒有爲任何這些算法的開發沒有規劃求解基金會界面,我不能說他們如何與fmincon比較(我不是一個Matlab的用戶自己),但希望該代碼可以是一些幫助你的優化工作。