NelderMead优化中的终止容差

2024-09-27 09:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Nelder-Mead方法优化某个函数,我需要帮助来理解一些参数。我对数值优化的世界相当陌生,所以,请原谅我对经验丰富的用户来说可能显而易见的无知。我注意到我已经看了minimize(method=’Nelder-Mead’)和{a2},但它并没有像我希望的那样有帮助。我试图在两个条件下优化函数$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))。对于初始的之前就结束了。在

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

  1. 网站1上写着“fatol:迭代之间的绝对误差(xopt),可接受的收敛性。”既然我的函数的最佳值是f(xopt)=0,那么"fatol": 0.50是否意味着一旦f(x)的值小于等于0.5,优化就会终止?如果没有,我如何修改终止条件(在我的例子中,如何确保它停止一次f(x)<;=0.5?如果优化器在给定的<;0.5的区域内再运行几次迭代,我就可以了,但是现在它倾向于以完全随机的方式跳出接近最优的区域,我希望能够阻止它(如果可能)。

  2. 同样,据我所知,“xatol:xopt在迭代之间的绝对误差,对于收敛来说是可以接受的。”这意味着一旦最优参数和当前参数之间的差值最多为xatol,优化将终止。既然原则上我不知道xopt是什么,那么在实践中是否意味着一旦| xun-xuu(n+1)|,优化器就会停止?如果没有,是否有一种方法可以添加一个约束,在函数接近最佳点时停止它?

如果有人能回答我或者给我一个比SciPy文档更好的参考,我将不胜感激。在


Tags: 方法函数lttrue区域参数条件method

热门问题