C++中实现Matlab的fmincon函数

3
我们目前正在使用Matlab的fmincon函数来进行非线性优化,以完成我正在处理的一个项目。为了将该项目部分与其他部分集成,我们需要将其移植到C++中。有没有一种好的方法可以将fmincon函数编译成库,以便我们在C++中使用?或者,是否已经有可用的库实现了fmincon?
如果以上两种方法都行不通,有哪些优化库可以相对容易地从fmincon切换过来?
背景信息: 我们正在尝试优化UAV的航点飞行路径,以尽可能接近给定的地面航点相机路径。两条路径之间的航点在时间上对应,因此当UAV到达第i个航路航点时,相机云台会对准第i个相机航点。由于UAV以恒定速度飞行,所以航路段长度都相同。转弯半径也受到上限的约束。相机路径没有约束,因此其段可能比航迹段长或短,并且可能有急转弯。成本函数是对应的飞行航点和相机航点之间的平方距离之和(忽略高度差异)。

1
如果你没有得到任何好的答案,你可能想要在谷歌上搜索“C++中的fmincon”,那里有大量的结果! - stefan
1
如果有人想知道,我们决定使用MIT的NLopt库。 - Brandon
@Brandon,你试过NLopt中的哪个优化器/哪一个对你的问题最好? - denis
@Denis 看起来我当时尝试使用COBYLA,但我们从未在C++中完全实现它。曾经在Matlab代码上工作过的那个人对C++并不是很熟悉,移植代码的某些部分会崩溃。我试图帮助他移植优化部分,但我们在使用NLopt时遇到了一些问题,也可能是因为代码其他部分输入有误或者我使用不正确。最终,我们通过文件在我的C++和他的Matlab代码之间传输数据。虽然集成在一起会更好,但这对我们的研究已经足够了。 - Brandon
我们的资金和项目本身即将结束,我们没有时间调试移植的C++代码,因此我们只专注于准备演示,利用已经运作良好的东西。 - Brandon
好的,谢谢 @Brandon(“当你流血时,就是尖端技术”) - denis
1个回答

6
大多数情况下,现有的库不会像fmincon那样尝试成为一个黑盒子万能优化工具。相反,它们需要您提供更多细节并自行做出更多选择,这对它们来说更简单,并应该使您的软件运行更快。您可以使用MATLAB Engine或MATLAB Compiler从程序中调用fmincon,但如果您能更多地了解优化问题的结构并调用适当的算法,则最可能您的软件将运行得更快(而且您可以避免购买MATLAB Compiler)。
您的背景信息没有清楚地描述您正在做什么 - 特别是您的可行集是什么,因此我无法告诉您要使用什么,所以我只能指向相关资源的方向。 维基百科上关于优化的页面链接到优化软件列表 - 最重要的是,它描述了更具体的优化问题类型(例如,您是否可以将您的问题制定为具有线性约束的二次规划?)和适合每种情况的软件。

Boyd's book on convex optimization以及相关课程资料和视频是非常好的资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接