Python Nelder-Mead优化中的终端容差

Python Nelder-Mead优化中的终端容差,python,optimization,scipy,minimize,Python,Optimization,Scipy,Minimize,我正在尝试使用Nelder-Mead方法优化某个函数,我需要帮助理解一些参数。我对数值优化的世界相当陌生,所以,请原谅我对更有经验的用户可能会看到的东西的无知。我注意到我已经看了又看,但没有我希望的那么多帮助。我试图在两种情况下优化函数$f$:(I)我希望在$f$值低于某个值时停止优化,以及(ii)一旦参数接近最佳值,我不希望优化器再次增加步长(也就是说,一旦它低于阈值并在几次迭代中保持低于阈值,我希望优化终止)。下面是我使用的优化代码: scipy.optimize.minimize(fun=

我正在尝试使用Nelder-Mead方法优化某个函数,我需要帮助理解一些参数。我对数值优化的世界相当陌生,所以,请原谅我对更有经验的用户可能会看到的东西的无知。我注意到我已经看了又看,但没有我希望的那么多帮助。我试图在两种情况下优化函数$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\u pos
是f的初始值,
“initial\u simplex”:simplex
是初始三角形(在我的2D示例中),
“maxiter”:25
意味着优化器在终止之前将运行多达25次迭代

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

  • 网站上说“fatol:func(xopt)在迭代之间的绝对误差,收敛是可以接受的。”因为我的函数的最佳值是f(xopt)=0,
    “fatol”:0.50意味着一旦f(x)发生变化,优化就会终止吗将具有0.5或更小的值?如果没有,我如何修改终止条件(在我的情况下,我如何确保它在f(x)时停止)
    
  • 只要| f(x_n)-f(x_(n+1))|
  • 相同:此条件在| x|n-x|(n+1)|
  • 只要| f(x_n)-f(x_(n+1))|
  • 相同:此条件在| x|n-x|(n+1)|