5

私は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 )

どちらが返されますか:

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.

Python 2.7.3、32ビット。Numpy1.6.2。Scipy0.11.0b1。WindowsXPおよびVista。

4

1 に答える 1

12

fmin_l_bfgs_bは、関数が関数値勾配を返すことを期待しています。関数値のみを返します。

関数値のみを返し、勾配を指定しない場合は、fmin_l_bfgs_bが数値近似を使用するようにapprox_grad=Trueを設定する必要があります。

docstringのオプションの説明を参照してください。

私がドキュメントを読んだところ、fmin_tncには同じパターンがあり、あなたの場合も同じ問題があります。

于 2012-08-15T02:36:14.390 に答える