我正在使用NLopt library,COBYLA algorithm,在C++中最小化基于日志的成本函数。我已经在Matlab中使用fmincom实现了同样的功能。Matlab函数的性能明显优于NLopt函数。它需要比NLopt少得多的优化,并且收敛到一个比NLopt好得多的最小值。
我相信这些算法所采用的补充方案是不同的。我试图复制NLopt的相同参数,与Matlab中默认的fmincon相同,但仍然没有给出类似的结果。
如果可能的话,我需要知道如何在NLopt中使用COBYLA,以类似于Matlab的方式进行收敛。提前感谢
发布于 2014-05-14 15:21:43
为什么COBYLA?fmincon是afaik更像NLopt,也见LBFGS。它们使用梯度估计,因此当func()→二次估计时,收敛速度比COBYLA的线性近似要快得多。
我建议
添加:fmincom使用
用于估计梯度的有限差分不是‘前进’(默认),就是‘中央’.
是自动的。您可以运行like,或任何梯度优化器,使用类似单边或中心差异的梯度估计器。一般来说,这可能是对噪声函数或边界附近的一个很差的估计;
但是它在fmincom中适用于您,所以也应该在NLopt L中工作。
先试一试,然后再花时间在完全不同的方法上。
您需要设置这些NLopt参数:
initial_step,例如1或.1
ftol_abs和xtol_abs,例如1e-4,不小于你的需要。
(对于COBYLA、initial_step→Rho贝恩和initial_step scaled x xtol_abs→rhoend。)
注:从任何优化器中打印返回代码:为什么停止?
https://stackoverflow.com/questions/23105718
复制相似问题