我已经实现了 scipy.optimize.minimize 以最小化具有 128 个值的一维数组的 pandas 数据帧的增量值的平均值。
它似乎在运行并做一些事情,但它并没有停在maxiter
或停在从此处的另一个 Stack Overflow 问题中获取的回调函数处。
我的代码是:
import numpy as np
from scipy.optimize import minimize, rosen
import time
import warnings
class TookTooLong(Warning):
pass
class MinimizeStopper(object):
def __init__(self, max_sec=60*60*5):
self.max_sec = max_sec
self.start = time.time()
def __call__(self, xk=None):
elapsed = time.time() - self.start
if elapsed > self.max_sec:
warnings.warn("Terminating optimization: time limit reached",
TookTooLong)
else:
# you might want to report other stuff here
print("Elapsed: %.3f sec" % elapsed)
import scipy.optimize
res = scipy.optimize.minimize(minFunct,oned,options=
{"disp":True,"maxiter":100},tol=0.01,
method ="BFGS",callback=MinimizeStopper(1E-3))
一段时间后显示的消息告诉我maxiter
已经达到并且已经达到了比开始时更小的函数值,但它并没有停止。由于它在 jupyter 中运行,因此如果没有完成单元格,我将无法到达res
。