我正在使用scipy.optimize
以下方式优化函数:
yEst=minimize(myFunction, y0, method='L-BFGS-B', tol=1e-6).x
我的问题是我不想简单地在容差小于一个值时停止(例如,如果在第 n 次迭代停止是|y_n - y_(n-1)|<tol
)。相反,我有一个稍微复杂的函数y_n
and y_(n-1)
,比如说tolFun
,我想在什么时候停止tolFun(y_n, y_(n-1))<tol
。
为了提供更多细节,我的公差函数如下。它划分y
成块,然后检查任何单独的分区是否在容差范围内具有范数差异,如果有,则应该停止最小化。
# Takes in current and previous iteration values and a pre-specified fixed scalar r.
def tolFun(yprev,ycurr,r):
# The minimum norm so far (initialized to a big value)
minnorm = 5000
for i in np.arange(r):
# Work out the norm of the ith partition/block of entries
norm = np.linalg.norm(yprev[np.arange(r)+i*r],ycurr[np.arange(r)+i*r])
# Update minimum norm
minnorm = np.min(norm, minnorm)
return(minnorm)
我的问题与此处的这个问题类似,但不同之处在于,该用户只需要 的当前迭代值y
,而我的自定义容差函数既需要 的当前迭代值,y
也需要先前的值。有谁知道我该怎么做?