我使用scipy.optimize
以以下方式优化函数:
yEst=minimize(myFunction, y0, method='L-BFGS-B', tol=1e-6).x
我的问题是,当公差小于某个值时(例如,如果在第n次迭代中stop是|y_n - y_(n-1)|<tol
),我不想简单地停止。相反,我有一个稍微复杂一点的函数y_n
和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)
我的问题类似于this question here,但不同的是,这个用户只需要当前迭代值y
,而我的自定义容差函数需要当前迭代值y
和上一个值。有人知道我怎么做吗?你知道吗
由于回调函数只接收当前参数向量,因此不能直接执行所需操作。要解决您的问题,您可以通过以下方式修改https://stackoverflow.com/a/30365576/8033585的第二个解决方案(我更喜欢使用
global
的第一个解决方案):或者
可以使用以下方法查找解算器/方法的可用选项:
相关问题 更多 >
编程相关推荐