37

を使用して関数を最小化しようとするコードを継承し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

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

4

1 に答える 1

54

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

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

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

args:タプル、オプション

目的関数とその導関数 (Jacobian、Hessian) に渡される追加の引数。

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

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

于 2013-11-07T19:42:11.227 に答える