首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:NLopt COBYLA与Matlab的比较

C++:NLopt COBYLA与Matlab的比较
EN

Stack Overflow用户
提问于 2014-04-16 09:45:50
回答 1查看 3.4K关注 0票数 0

我正在使用NLopt libraryCOBYLA algorithm,在C++中最小化基于日志的成本函数。我已经在Matlab中使用fmincom实现了同样的功能。Matlab函数的性能明显优于NLopt函数。它需要比NLopt少得多的优化,并且收敛到一个比NLopt好得多的最小值。

我相信这些算法所采用的补充方案是不同的。我试图复制NLopt的相同参数,与Matlab中默认的fmincon相同,但仍然没有给出类似的结果。

如果可能的话,我需要知道如何在NLopt中使用COBYLA,以类似于Matlab的方式进行收敛。提前感谢

EN

回答 1

Stack Overflow用户

发布于 2014-05-14 15:21:43

为什么COBYLA?fmincon是afaik更像NLopt,也见LBFGS。它们使用梯度估计,因此当func()→二次估计时,收敛速度比COBYLA的线性近似要快得多。

我建议

  • 打印/绘制两个优化器的所有func值(在函数中打印)
  • 张贴所有选项的这两种;COBYLA是非常敏感的罗博斯和罗丹德
  • 试试NLopt L,或NLopt BOBYQA,“迭代构造的二次近似”。

添加:fmincom使用

用于估计梯度的有限差分不是‘前进’(默认),就是‘中央’.

是自动的。您可以运行like,或任何梯度优化器,使用类似单边或中心差异的梯度估计器。一般来说,这可能是对噪声函数或边界附近的一个很差的估计;

但是它在fmincom中适用于您,所以也应该在NLopt L中工作。

先试一试,然后再花时间在完全不同的方法上。

您需要设置这些NLopt参数:

initial_step,例如1或.1

ftol_absxtol_abs,例如1e-4,不小于你的需要。

(对于COBYLA、initial_step→Rho贝恩和initial_step scaled x xtol_abs→rhoend。)

注:从任何优化器中打印返回代码:为什么停止?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23105718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档