web-dev-qa-db-ja.com

scipy最小化関数への入力の構造

scipy.optimize.minimizeを使用して関数を最小化しようとするコードを継承しました。 funおよびjac引数への入力の一部を理解できない

最小化の呼び出しは次のようになります。

result = minimize(func, jac=jac_func, args=(D_neg, D, C), method = 'TNC' ...other arguments)

funcは次のようになります。

def func(G, D_neg, D, C):
#do stuff

jac_funcの構造は次のとおりです。

def jac_func(G, D_neg, D, C):
#do stuff

私が理解していないのは、funcjac_funcへのG入力がどこから来ているかです。それは何らかの形でminimize関数で指定されているのですか、それともmethodTNCとして指定されているという事実ですか?この最適化関数の構造を調査しようとしましたが、必要な答えを見つけるのに苦労しています。どんな助けも大歓迎です

24
sedavidw

簡単な答えは、Gは最小化プロセスの一部としてオプティマイザーによって維持され、(D_neg, D, and C)引数はargs Tupleからそのまま渡されるということです。

デフォルトでは、scipy.optimize.minimizeは、1つの引数x(配列など)を受け取る関数fun(x)を取り、スカラーを返します。 scipy.optimize.minimizeは、xpの他の値に対してfun(xp)fun(x)より小さい引数値xを見つけます。オプティマイザーは、xの値を作成し、評価のためにそれらをfunに渡す責任があります。

しかし、別のパラメータyを追加する必要がある(ただし、最適化のために定数と見なされる)関数fun(x, y)がある場合はどうでしょうか。これがargs Tupleの目的です。 documentation args Tupleの使用方法を説明しようとしますが、解析が少し難しい場合があります。

引数:タプル、オプション

目的関数とその導関数に渡される追加の引数(ヤコビアン、ヘッセ行列)。

事実上、scipy.optimize.minimizeは、アスタリスク引数表記を使用して、argsにあるすべてのものをfunへの残りの引数として渡します。関数はfun(x, *args)として呼び出されます最適化中。 x部分はオプティマイザーによって渡され、argsタプルは残りの引数として与えられます。

したがって、コードでは、Gの可能な値を評価している間、オプティマイザーによってG要素の値が維持され、(D_neg, D, C) Tupleがそのまま渡されます。

38
lmjohns3