为什么选择 COBYLA?
fmincon
是 afaik 更像
NLopt L-BFGS,另见LBFGS。他们使用梯度估计,因此当 func() → 二次时,收敛速度比 COBYLA 的线性近似要快得多。
我建议
- 打印/绘制两个优化器的所有 func 值(在函数内打印)
- 发布两者的所有选项;COBYLA 对 rhobeg 和 rhoend 非常敏感
- 尝试 NLopt L-BFGS 或
NLopt BOBYQA,“迭代构造的二次近似”。
补充:
fmincom使用
“用于估计梯度的有限差分要么是‘向前’(默认),要么是‘中心’......”
自动地。您可以运行 L-BFGS 或任何梯度优化器,使用梯度估计器,如单边或中心差异。一般来说,这可能是对嘈杂函数或边界附近的较差估计;
但它适用于 fmincom,因此也适用于 NLopt L-BFGS。
先尝试一下,然后再花时间在完全不同的方法上。
您需要设置这些 NLopt 参数:
initial_step
例如 1 或 .1
ftol_abs
和xtol_abs
例如 1e-4,不小于您的需要
(对于 COBYLA,initial_step → rhobegin 和 initial_step scaled x xtol_abs → rhoend。)
NB 打印来自任何优化器的返回码:为什么它停止了?