【问题标题】:Tolerance for termination in Nelder-Mead optimizationNelder-Mead 优化中的终止容差
【发布时间】:2019-07-19 15:09:10
【问题描述】:

我正在尝试使用 Nelder-Mead 方法优化某个函数,我需要帮助理解一些参数。我对数值优化的世界还很陌生,所以请原谅我对更有经验的用户可能很明显的无知。我注意到我已经查看了minimize(method=’Nelder-Mead’)scipy.optimize.minimize,但这并没有我希望的那么大的帮助。我试图在两种情况下优化函数 $f$:(i)我希望在 $f$ 值低于某个值时停止优化,(ii)一旦参数接近最优值,我不希望优化器再次增加步长(即,一旦它低于阈值并保持低于几次迭代,我希望优化终止)。这是我使用的优化代码:

scipy.optimize.minimize(fun=f, x0=init_pos, method="nelder-mead",
                        options={"initial_simplex": simplex, 
                                 "disp": True, "maxiter" : 25, 
                                 "fatol": 0.50, "adaptive": True})

f 是我的函数(f : RxR -> [0,sqrt(2)))。我知道x0=init_posf 的初始值,"initial_simplex": simplex 是初始三角形(在我的 2D 情况下),"maxiter" : 25 意味着优化器将在终止之前运行多达 25 次迭代。

以下是我不明白/不确定的事情:

  1. 网站1 说“fatol:迭代之间的 func(xopt) 中的绝对误差对于收敛是可以接受的。”由于我的函数的最佳值为 f(xopt)=0"fatol": 0.50 是否意味着一旦 f(x) 的值为0.5或更小?如果不是,我如何修改终止条件(在我的情况下,我如何确保它确实停止一次 f(x))?如果优化器在给出 的区域周围运行更多迭代,我没问题,但现在它倾向于以完全随机的方式跳出接近最优的区域,我希望能够防止它(如果可能)。

  2. 同样,据我了解,“xatol:xopt 迭代之间的绝对误差,收敛可接受。”意味着一旦最优参数和当前参数之间的差异最多为xatol,优化将终止。由于原则上我不知道 xopt 是什么,实际上这是否意味着一旦 |x_n - x_(n+1)|,优化器就会停止?如果没有,有没有办法在函数接近最佳点时添加一个约束来停止函数?

如果有人可以回答或给我比 SciPy 文档更好的参考,我将不胜感激。

【问题讨论】:

    标签: python optimization scipy minimize


    【解决方案1】:
    1. 一旦|f(x_n) - f(x_(n+1))|,此条件就会停止算法。
    2. same : 这个条件在 |x_n - x_(n+1)| 时立即停止算法。

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多