我正在尝试使用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说:“ fatol:迭代之间在func(xopt)中的绝对错误是可以接受的。”由于我的函数的最佳值为 f(xopt)= 0 ,"fatol": 0.50
的意思是一旦 f(x)具有值小于等于0.5?如果没有,我该如何修改终止条件(在我的情况下,如何确保一旦 f(x)<= 0.5 即可终止)?我可以,如果优化器在给出 <0.5 的区域内运行更多的迭代,但是现在它倾向于以完全随机的方式跳出接近最佳的区域,我希望能够防止它(如果可能)。
据我所知,“ xatol:迭代之间xopt中的绝对误差对于收敛是可以接受的。”表示一旦最佳参数与当前参数之间的差异最大为xatol
,优化就会终止。由于原则上我不知道先验的 xopt 是什么,因此在实际上意味着一旦| x_n-x_(n + 1)|,优化器将停止运行吗?如果不是,是否有添加约束以在函数接近最佳点时停止该函数的方法?
如果有人可以回答或给我比SciPy文档更好的参考,我将不胜感激。
答案 0 :(得分:0)