我正在使用scipy.optimize以下方式优化函数:
yEst=minimize(myFunction, y0, method='L-BFGS-B', tol=1e-6).x
我的问题是我不想简单地在容差小于一个值时停止(例如,如果在第 n 次迭代停止是|y_n - y_(n-1)|<tol)。相反,我有一个稍微复杂的函数y_nand 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也需要先前的值。有谁知道我该怎么做?