【问题标题】:Supply different arguments for scipy.minimize in each iteration在每次迭代中为 scipy.minimize 提供不同的参数
【发布时间】:2014-10-15 00:20:21
【问题描述】:

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

我想做的是:

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

这里,func 是一个很大的函数。在func 内部,有一个输出日志文件的例程。我想从最小化过程的每次迭代中获取一个日志文件并进行一些分析。但是,为了保存不同名称的日志文件,我需要向func 提供一个迭代编号。有什么巧妙的办法吗?

【问题讨论】:

  • 一个丑陋的方法是增加一个全局变量...

标签: python optimization scipy


【解决方案1】:

计算对函数的调用很容易,因为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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    相关资源
    最近更新 更多