Nelder-Mead优化中的终止公差

时间:2019-02-26 06:05:40

标签: python optimization scipy minimize

我正在尝试使用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_pos f 的初始值,"initial_simplex": simplex是初始三角形(在我的2D情况下),"maxiter" : 25意味着优化器将运行到终止前进行25次迭代。

以下是我不了解/不确定的事情:

  1. 网站1说:“ fatol:迭代之间在func(xopt)中的绝对错误是可以接受的。”由于我的函数的最佳值为 f(xopt)= 0 "fatol": 0.50的意思是一旦 f(x)具有值小于等于0.5?如果没有,我该如何修改终止条件(在我的情况下,如何确保一旦 f(x)<= 0.5 即可终止)?我可以,如果优化器在给出 <0.5 的区域内运行更多的迭代,但是现在它倾向于以完全随机的方式跳出接近最佳的区域,我希望能够防止它(如果可能)。

  2. 据我所知,“ xatol:迭代之间xopt中的绝对误差对于收敛是可以接受的。”表示一旦最佳参数与当前参数之间的差异最大为xatol,优化就会终止。由于原则上我不知道先验的 xopt 是什么,因此在实际上意味着一旦| x_n-x_(n + 1)|,优化器将停止运行吗?如果不是,是否有添加约束以在函数接近最佳点时停止该函数的方法?

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

1 个答案:

答案 0 :(得分:0)

  1. 此条件一旦| f(x_n)-f(x_(n + 1))|就会停止算法
  2. 相同:此条件一旦| x_n-x_(n + 1)|就会停止算法。