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

本文关键字:优化 Matlab fmincon 非线性 约束 Solver foundation Microsoft | 更新日期: 2023-09-27 17:59:07

有人能给我看一下Microsoft Solver foundation 3.0中约束非线性优化的例子或评论吗?它与Matlab的fmincon相比如何?或者,对于约束非线性优化,有没有更好的.net库?谢谢,

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

重要更新2012年2月25日:

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

对于一般的线性约束,Microsoft solver foundation仅通过其内部点求解器支持线性规划和二次规划。关于这个求解器,请参阅Tomas提到的SVM帖子。

MSF有一个通用的非线性规划求解器,有限内存BFGS,但它不支持任何约束。该解算器还需要显式梯度函数。对于该求解器,请参见:

F#中使用MSF 的Logistic回归

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#使用它:

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

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

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

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

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

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

没有为这些算法开发Solver Foundation接口,我也不能说它们与fmincon相比有多好(我自己不是Matlab的用户),但希望这些代码能对您的优化工作有所帮助。

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

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

本例使用默认的非线性解算器HybridLocalSearchSover。

(但是,我不熟悉fmincon,所以我不能谈论它。)