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

时间:2011-06-11 21:18:37

标签: c# .net matlab f# mathematical-optimization

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

2012年2月25日

重要更新

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上找到它们:cscobylacsbobyqa

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

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

答案 3 :(得分:2)

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

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

(但是,我对fmincon并不熟悉,所以我无法对此说出来。)

相关问题