Microsoft Solver基础与Matlab fmincon中的约束非线性优化

任何人都可以向我展示Microsoft Solver foundation 3.0中约束非线性优化的示例或评论吗? 与Matlab的fmincon相比如何? 或者是否有更好的.net库用于约束非线性优化? 谢谢,

重要更新于2012年2月25日:

MSF 3.1现在通过其NelderMeadSolver求解器支持有界变量的非线性优化: http : //msdn.microsoft.com/en-us/library/hh404037( v = vs.93) .aspx

对于一般线性约束,Microsoft求解器基础仅通过其内点求解器支持线性编程和二次编程。 对于此求解器,请参阅Tomas提到的SVMpost。

MSF有一个通用的非线性规划求解器,即Limited-Memory-BFGS,但它不支持任何约束。 此求解器还需要显式渐变函数。 对于此求解器,请参阅:

使用MSF在F#中进行逻辑回归

Tomas提到的F#ODSL仅支持线性编程。 我有一个QP扩展,可在codexplex获得 。

回到你的问题 – 用线性约束优化f(x)(类似于fmincon ),我还没有看到任何具有这种能力的免费库。 NMath.NET (商业)似乎有一个。 我尝试用它来解决高度非线性优化,但它对我不起作用。 最后我使用了DotNumerics中实现的B-LBFGS。

我想你也会对以下SO问题感兴趣:

开源替代MATLAB的fmincon函数?

答案指向SciPy.​optimize.​cobyla ,它似乎与fmincon类似。 但主要的信息是,对于你的具体问题,也许fmincon太笼统了。 您可以使用更具体的求解器,例如LBFGS或QP。 如果初始值不好,一般求解器有时也不起作用。

我自己对Microsoft Solver Foundation没有多少经验,但是有一篇很好的文章演示了如何从F#中使用它:

  • 使用Microsoft Solver Foundation在F#中支持向量机(SVM)

对于F#,还有一种嵌入式建模语言 – 这允许您将约束编写为普通的F#表达式(用引号括起来),并且该语言的解释器调用Microsoft Solver Foundation并创建适当的约束(我认为这非常棒! ):

  • 利用Microsoft Solver Foundation的F#优化建模语言

我最近将Michael Powell的无导数代码COBYLA2(非线性目标函数,非线性约束)和BOBYQA(非线性目标函数,变量边界)移植到C#。 当优化问题仅包含变量边界时,BOBYQA算法要快得多。

我开源了两个代码; 你可以在Github上找到它们: cscobyla和csbobyqa 。

如果您更喜欢基于衍生的算法,我还为IPOPT实现了一个适配器。 它被称为csipopt ,也可以从Github获得。

没有针对这些算法开发的Solver Foundation界面,我不能说它们与fmincon的比较(我自己不是Matlab用户),但希望这些代码可以为您的优化工作提供一些帮助。

我意识到这是一个老问题,但这里的答案是不准确和/或过时的。 以下是有关如何在MSSF中使用约束非线性求解器的权威教程:

  • 如何:使用Solver Foundation Services API使用非线性编程

此示例使用默认的非线性求解器,称为HybridLocalSearchSover 。

(但是,我对fmincon并不熟悉,所以我不能这么说。)