任何人都可以向我展示Microsoft Solver foundation 3.0中约束非线性优化的示例或评论吗?与Matlab的fmincon相比如何?或者是否有更好的.net库用于约束非线性优化?谢谢,
答案 0 :(得分:4)
我自己对Microsoft Solver Foundation没有多少经验,但是有一篇很好的文章演示了如何从F#中使用它:
对于F#,还有一种嵌入式建模语言 - 这允许您将约束编写为普通的F#表达式(用引号括起来),并且该语言的解释器调用Microsoft Solver Foundation并创建适当的约束(我认为这是太棒了!):
答案 1 :(得分:4)
重要更新:
MSF 3.1现在支持通过NelderMeadSolver解算器对有界变量进行非线性优化:http://msdn.microsoft.com/en-us/library/hh404037(v=vs.93).aspx
对于一般线性约束,Microsoft求解器基础仅通过其内点求解器支持线性编程和二次编程。对于此求解器,请参阅Tomas提到的SVM帖子。
MSF有一个通用的非线性规划求解器,即Limited-Memory-BFGS,但它不支持任何约束。此求解器还需要显式渐变函数。对于此求解器,请参阅:
Logistic regression in F# using MSF
Tomas提到的F#ODSL仅支持线性编程。我有一个QP扩展名,可在codexplex找到。回到你的问题 - 用线性约束优化f(x)(类似于fmincon
),我还没有看到任何具有这种能力的免费库。 NMath.NET(商业)似乎有一个。我试图解决一个高度非线性的优化,但它对我不起作用。最后我使用了DotNumerics中实现的B-LBFGS。
我想您也会对以下SO问题感兴趣:
Open source alternative to MATLAB's fmincon function?
答案指向SciPy.optimize.cobyla
,这似乎与fmincon
类似。但主要的信息是,对于您的具体问题,fmincon
可能过于笼统。您可以使用更具体的解算器,例如LBFGS或QP。如果初始值不好,一般求解器有时也不起作用。
答案 2 :(得分:3)
我最近将Michael Powell的无衍生代码COBYLA2(非线性目标函数,非线性约束)和BOBYQA(非线性目标函数,变量边界)移植到C#。当优化问题仅包含变量边界时,BOBYQA算法要快得多。
我开源了这两个代码;你可以在Github上找到它们:cscobyla和csbobyqa。
如果您更喜欢基于衍生的算法,我还实现了IPOPT的适配器。它被称为csipopt,也可以从Github获得。
没有针对这些算法开发的Solver Foundation界面,我不能说它们与 fmincon (我自己不是 Matlab 用户)的比较有多好希望这些代码可以为您的优化工作提供一些帮助。
答案 3 :(得分:2)
我意识到这是一个老问题,但这里的答案是不准确和/或过时的。以下是关于如何在MSSF中使用约束非线性求解器的权威教程:
此示例使用默认的非线性求解器,称为HybridLocalSearchSover。
(但是,我对fmincon并不熟悉,所以我无法对此说出来。)