2015-09-04 16 views
5

このページ(http://docs.scipy.org/doc/scipy/reference/optimize.minimize-lbfgsb.html)では、scipyの最適化パッケージのL-BFGS-B 'メソッドに渡すことができるソルバオプションについて説明しています。 ソルバ出口許容値を設定しようとしています。scipy.optimize.minimize(method = 'L-BFGS-B')の収束許容値を設定する

ドキュメントには2つのオプションがありますが、私が使用しようと思っていたのは 'factr'です。ソルバーは次のときに終了します。 (f^k - f^{k+1})/max{|f^k|,|f^{k+1}|,1} <= factr * eps(εは機械精度です)

OptimizeWarning:不明なソルバーオプション:factr

だから私はそれはしかしだろう、なぜ、このオプションは[FTOL](いないことを確認するために廃止されましたと推定、私が実行したときしかし、私のコードは警告を取得しています?)。 ftolは指定された数です(つまり、< = n * machine_errorではなく、diff < = n)。 L-BFGS-Bルーチンがまだあることを示唆しているREL_REDUCTION_OF_F_ < = _FACTR * EPSMCH

:私が大丈夫です

は、しかし、私は、ソルバのために取得終了メッセージは

CONVERGENCEです私が知らないfactrの値を使って、一見できないように見える。コードで見落とされている間違いかもしれないが、オプションを渡す何らかの方法が欠けているかもしれない。この一般的なソルバーを使用する人は、回避策を知っていますか?私もscipyのダウンロードgithubのリポジトリ上の問題を開いた

おかげ

+0

インストールしたscipyのバージョンがドキュメントのものと一致するかどうかという質問が1つあります。多くのパッケージには最新バージョンがありません。一方、最新のv0.16.0ドキュメントではまだ参照されています。私は、コールがオプションが別々にリストされていた0.13からオプション= {'eps':1e-08 ...}構造を持つところで0.16に変更されたことに注目します。また、factrはオプションとしてリストされていますが、この例では呼び出されません。 –

+1

私はscipy 0.16.0を使用しています。あなたは正しいです、ドキュメントにいくつかの相違があります。しかし、私が回避しようとしている相違点は、factrオプションがUiから削除されているが、まだコードによって使用されているということです。 – BJH

答えて

4

内部的には、factrが計算されます(​​)。

あなたはまだ、むしろ直接factr代わりにftolの値を指定したい場合は、単に

myfactr = 1e2 
r = scipy.optimize.minimize(..., options={'ftol' : myfactr * np.finfo(float).eps) 

のようなものを使用することができます。