【问题标题】:Implementation of Matlab's fmincon function in C++Matlab的fmincon函数在C++中的实现
【发布时间】:2016-06-27 20:31:15
【问题描述】:

我们目前正在使用 Matlab 的 fmincon 函数对我正在处理的项目进行非线性优化。我们需要将项目的这一部分移植到 C++ 中,以便将其与项目的其他部分集成。有没有一种好方法可以将 fmincon 函数编译成我们可以在 C++ 中使用的库?或者,是否已经有一个实现 fmincon 的库可用?

如果以上都不是一个选项,有哪些优化库可以很容易地从 fmincon 切换到?

背景信息:

我们正在尝试优化无人机的航路点飞行路径,以尽可能接近地面上给定的航路点相机路径。两条路径之间的航点在时间上是对应的,所以当无人机到达第i个航路航点时,云台将指向第i个航点。由于无人机以恒定速度飞行,因此飞行路径段的长度都将相同。转弯半径也受到上限的限制。相机路径没有限制,因此它的段可能比飞行路径段长或短,并且可能有急转弯。成本函数是对应的飞行航路点和相机航路点之间的距离平方和(忽略高度差异)。

【问题讨论】:

  • 如果你没有得到任何好的答案,你可能想用谷歌搜索“fmincon in c++”,这里有大量的点击!
  • 如果有人想知道,我们决定使用麻省理工学院的 NLopt 库。
  • @Brandon,您尝试了 NLopt 中的哪些优化器/哪种最适合您的问题?
  • @Denis 看起来我在尝试 COBYLA,但我们从未在 C++ 中完成所有工作。编写 Matlab 代码的人对 C++ 没有太多经验,并且移植的部分代码崩溃了。我试图帮助他移植优化部分,我认为我们在 NLopt 崩溃时也遇到了一些问题。我不确定这是因为代码其他部分的错误输入,还是我以某种方式错误地使用了它。我们最终使用文件在我的 C++ 和他的 Matlab 代码之间混洗数据。将其集成会更好,但这对我们的研究来说已经足够了。

标签: c++ matlab mathematical-optimization


【解决方案1】:

大多数时候,那里的库不会像 fmincon 那样尝试成为一个万能的黑盒优化工具,而是要求您提供更多细节并在您的拥有,这对他们来说更简单,应该会导致您的软件更快。您当然可以使用 MATLAB 引擎或 MATLAB 编译器从您的程序中调用 fmincon,但如果您可以使用更多关于您的结构的知识,您的软件很可能会运行得更快(并且您可以避免购买 MATLAB 编译器)优化问题有并调用合适的算法。

您的背景信息无法描述您在做什么 - 尤其是。你的可行集是什么——清楚地让我能够告诉你使用什么,所以我所能做的就是为你指明相关资源的方向。

Wikipedia's page on optimization 链接到优化软件列表 - 最重要的是,它描述了更具体类型的优化问题(例如,您能否将问题表述为具有线性约束的二次规划?)以及适用于每种情况的软件。

Boyd's book on convex optimization 和链接的课程资料和视频真的是很好的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多