Python/Scipy"标量变量的无效索引"

bee*_*ets 3 python optimization numpy scipy

我正在使用Scipy优化模块,特别是 fmin_tncfmin_l_bfgs_b.但是,当使用任何一个时,我收到消息"IndexError:标量变量的无效索引".

这个错误的原因是什么?

这个错误信息的含义是什么?

我的练习代码:

def f01(para):
    para1, para2 = para
    return 1+ (para1 -1)**2 + (para2 -2)**2

para0 = np.array([10, 10]) 
mybounds = [(-40,30),(-20,15)]

opt.fmin_l_bfgs_b(f01, para0,  bounds = mybounds )
Run Code Online (Sandbox Code Playgroud)

哪个回报:

Traceback (most recent call last):
  File "C:\Python27\mystuff\practice_optimize01.py", line 78, in <module>
    opt.fmin_l_bfgs_b(f01, para0,  bounds = mybounds )

  File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 174, in fm
in_l_bfgs_b
**opts)

  File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 294, in _m
 inimize_lbfgsb
    f, g = func_and_grad(x)

  File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 249, in fu
nc_and_grad
    f = fun(x, *args)

  File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 55, in _
_call__
    self.jac = fg[1]
IndexError: invalid index to scalar variable.
Run Code Online (Sandbox Code Playgroud)

Python 2.7.3,32位.Numpy 1.6.2.Scipy 0.11.0b1.Windows XP和Vista.

Jos*_*sef 9

fmin_l_bfgs_b期望您的函数返回函数值渐变.您只返回函数值.

如果只返回函数值而不提供渐变,则需要设置approx_grad = True,以便fmin_l_bfgs_b使用数值近似值.

请参阅docstring中的选项说明.

从我对文档的阅读中,fmin_tnc具有相同的模式,并且在您的情况下也存在同样的问题.