36

scipy.optimize関数を使用して、いくつかの引数を持つ複雑な関数のグローバル最小値を見つけようとしています。scipy.optimize.minimizeつまり、「Nelder-Mead」メソッドが最もうまく機能しているようです。ただし、引数のドメイン外の領域に移動する傾向があり (正の値しかない引数に負の値を割り当てるため)、そのような場合はエラーが返されます。関数自体の中でscipy.optimize.minimize引数の境界を制限する方法はありますか? それとも他のscipy.optimize関数内でしょうか?

次のアドバイスを見つけました。

パラメータが許容範囲外になると、非常に大きな数値が返されます (適合するデータからはほど遠い)。これにより、(うまくいけば)このパラメータの選択に大きなペナルティが課せられ、curve_fit他の許容可能なパラメータのセットが最適であると判断されます。

この前の回答に記載されていますが、私の場合、この手順には多くの計算時間がかかります。

4

4 に答える 4

31

Nelder-Mead ソルバーは制約付き最適化をサポートしていませんが、他にもサポートしているソルバーがいくつかあります。

TNC と L-BFGS-B は両方とも、バインドされた制約 (例: x[0] >= 0) のみをサポートします。COBYLA と SLSQP はより柔軟で、境界、等式、および不等式に基づく制約の任意の組み合わせをサポートしています。

スタンドアロン関数のドキュメント (例scipy.optimize.fmin_slsqp: method='SLSQP'.

SLSQP を使用した制約付き最適化の例については、こちらの以前の回答を参照してください。

于 2013-10-08T10:30:16.130 に答える