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