我想为scipy.minimize
中的每次迭代提供不同的参数。
我想做的是:
res = minimize(func, x0, method='BFGS', args=(a,b,c))
这里,func
是一个很大的功能。在func
内,有一个输出日志文件的例程。我想从最小化过程的每次迭代中获取一个日志文件并进行一些分析。但是,为了保存具有不同名称的日志文件,我需要提供一个func
的迭代编号。有没有聪明的方法呢?
答案 0 :(得分:0)
计算对该函数的调用很简单,因为minimize
接受可调用:
>>> from scipy.optimize import minimize
>>>
>>> def func(x, a):
... return (x-a)**2
>>> class Func(object):
... def __init__(self):
... self.count = 0
... def __call__(self, x, a):
... self.count += 1
... return func(x, a)
然后,
>>> f = Func()
>>> minimize(f, [1.], args=(2.,))
status: 0
success: True
njev: 4
nfev: 12
fun: 5.551115123125783e-17
x: array([ 1.99999999])
message: 'Optimization terminated successfully.'
hess: array([[ 0.5]])
jac: array([ 0.])
>>> f.count
12
请注意,每次迭代的函数调用次数取决于最小化器及其参数(无论是否提供粗体等)。