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
私が理解していないのは、func
とjac_func
へのG入力がどこから来ているかです。それは何らかの形でminimize
関数で指定されているのですか、それともmethod
がTNC
として指定されているという事実ですか?この最適化関数の構造を調査しようとしましたが、必要な答えを見つけるのに苦労しています。どんな助けも大歓迎です
簡単な答えは、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がそのまま渡されます。