Question

J'ai hérité d'un code qui essaie de minimiser une fonction en utilisant scipy.optimize.minimize. J'ai du mal à comprendre certaines des contributions au fun et jac arguments

L'appel pour minimiser ressemble à ceci:

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

func On dirait ce qui suit:

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

jac_func a la structure suivante:

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

Ce que je ne comprends pas, c'est où le G entrée de func et jac_func vient de. Est-ce en quelque sorte spécifié dans le minimize fonction, ou par le fait que le method est spécifié comme TNC? J'ai essayé de faire des recherches sur la structure de cette fonction d'optimisation, mais j'ai du mal à trouver la réponse dont j'ai besoin. Toute aide est grandement appréciée

Était-ce utile?

La solution

La réponse courte est que G est maintenu par l'optimiseur dans le cadre du processus de minimisation, tandis que le (D_neg, D, and C) Les arguments sont transmis en tel quel args Tuple.

Par défaut, scipy.optimize.minimize prend une fonction fun(x) qui accepte un argument x (qui pourrait être un tableau ou similaire) et renvoie un scalaire. scipy.optimize.minimize alors trouve une valeur d'argument xp tel que fun(xp) est inférieur à fun(x) pour d'autres valeurs de x. L'optimiseur est responsable de la création de valeurs de x et les passer à fun pour évaluation.

Mais que se passe-t-il si vous avez une fonction fun(x, y) qui a un paramètre supplémentaire y Cela doit être transmis séparément (mais est-il considéré comme une constante aux fins de l'optimisation)? C'est ce que le args Tuple est pour. La Documentation essaie d'expliquer comment le tuple args est utilisé, mais il peut être un peu difficile à analyser:

Args: tuple, facultatif

Des arguments supplémentaires passaient à la fonction objective et à ses dérivés (Jacobian, Hessian).

Effectivement, scipy.optimize.minimize passera tout ce qui est dans args comme le reste des arguments à fun, en utilisant la notation des arguments Asterisk: la fonction est alors appelée fun(x, *args) pendant l'optimisation. La x la partie est transmise par l'optimiseur, et le args Le tuple est donné comme les arguments restants.

Donc, dans votre code, la valeur du G L'élément est maintenu par l'optimiseur tout en évaluant les valeurs possibles de G, et le (D_neg, D, C) Le tuple est passé en tel quel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top