質問

使用を使用して関数を最小限に抑えようとしているコードを継承しました scipy.optimize.minimize. 。私はへのいくつかの入力を理解するのに苦労しています funjac 議論

最小化する呼び出しは次のように見えます:

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 入力 funcjac_func から来ています。それはどういうわけかで指定されています minimize 機能、またはその事実によって method として指定されています TNC?私はこの最適化関数の構造についていくつかの研究をしようとしましたが、必要な答えを見つけるのに苦労しています。どんな助けも大歓迎です

役に立ちましたか?

解決

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

デフォルトでは、 scipy.optimize.minimize 関数を取ります fun(x) それは1つの議論を受け入れます x (これは配列などである可能性があります)スカラーを返します。 scipy.optimize.minimize 次に、引数値を見つけます xp そのような fun(xp) より少ない fun(x) の他の値の場合 x. 。オプティマイザーは、の値を作成する責任があります x そしてそれらをに渡します fun 評価用。

しかし、あなたがたまたま関与している場合はどうでしょうか fun(x, y) 追加のパラメーターがあります y それは別々に渡す必要があります(ただし、最適化の目的のために一定と見なされます)?これが何であるかです args タプルはのためです。 ドキュメンテーション Args Tupleがどのように使用されているかを説明しようとしますが、解析するのは少し難しい場合があります。

args: タプル、オプション

余分な引数は、目的関数とその導関数(ヤコビアン、ヘシアン)に渡されました。

効果的に、 scipy.optimize.minimize 何でも渡されます args の残りの議論として fun, 、アスタリスク引数表記を使用します:次に、関数は fun(x, *args) 最適化中。 x オプティマイザーによって部分が渡され、 args タプルは残りの議論として与えられます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top