gpt4 book ai didi

C++ : NLopt COBYLA as compared to Matlab fmincon

转载 作者:行者123 更新时间:2023-11-28 02:50:51 25 4
gpt4 key购买 nike

我正在使用 C++ 中的 NLopt 库COBYLA 算法 来最小化基于对数的成本函数。我已经在 Matlab 中使用 fmincom 实现了相同的功能。Matlab 函数的性能比 NLopt 好得多。它需要比 NLopt 少得多的优化次数,并且比 NLopt 更好地收敛到最小值。

我相信用于算法的补充选项是不同的。我试图为 NLopt 复制与 Matlab 中 fmincon 中的默认参数相同的参数,但它仍然没有给出类似的结果。

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

最佳答案

为什么选择 COBYLA?fmincon 更像是 afaik NLopt L-BFGS ,另见 LBFGS .他们使用梯度估计,因此当 func() → 二次时收敛速度比 COBYLA 的线性近似快得多。
我建议

  • 打印/绘制两个优化器的所有函数值(在函数内部打印)
  • 为两者发布所有选项; COBYLA 对 rhobeg 和 rhoend 非常敏感
  • 尝试NLopt L-BFGS,或 NLopt BOBYQA ,“迭代构造的二次近似值”。


添加: fmincom使用

"Finite differences, used to estimate gradients, are either 'forward' (default), or 'central' ..."

自动。您可以运行 L-BFGS 或任何梯度优化器,使用梯度估计器,如单边或中心差异。一般来说,对于有噪声的函数或靠近边界,这可能是一个糟糕的估计;
但它适用于 fmincom,因此也适用于 NLopt L-BFGS。
先尝试一下,然后再花时间研究完全不同的方法。

您需要设置这些 NLopt 参数:
initial_step 例如1 或 .1
ftol_absxtol_abs 例如1e-4,不小于你需要的
(对于 COBYLA,initial_step → rhobegin 和 initial_step 缩放 x xtol_abs → rhoend。)

注意打印任何优化器的返回码:为什么它停止了?

关于C++ : NLopt COBYLA as compared to Matlab fmincon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23105718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com