在每次迭代中为scipy.minimize提供不同的参数

时间:2014-10-13 22:55:54

标签: python optimization scipy

我想为scipy.minimize中的每次迭代提供不同的参数。

我想做的是:

res = minimize(func, x0, method='BFGS', args=(a,b,c))

这里,func是一个很大的功能。在func内,有一个输出日志文件的例程。我想从最小化过程的每次迭代中获取一个日志文件并进行一些分析。但是,为了保存具有不同名称的日志文件,我需要提供一个func的迭代编号。有没有聪明的方法呢?

1 个答案:

答案 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

请注意,每次迭代的函数调用次数取决于最小化器及其参数(无论是否提供粗体等)。