Frage

Ich habe Code geerbt, der versucht, eine Funktion zu minimieren scipy.optimize.minimize.Ich habe Probleme, einige der Eingaben zu verstehen fun Und jac Argumente

Der Aufruf zum Minimieren sieht etwa so aus:

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

func sieht wie folgt aus:

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

jac_func hat folgenden Aufbau:

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

Was ich nicht verstehe ist, wo das ist G Eingang zu func Und jac_func kommt von.Ist das irgendwie in der angegeben? minimize Funktion, oder durch die Tatsache, dass die method ist angegeben als TNC?Ich habe versucht, die Struktur dieser Optimierungsfunktion zu erforschen, aber ich habe Probleme, die Antwort zu finden, die ich brauche.Jede Hilfe wird sehr geschätzt

War es hilfreich?

Lösung

Die kurze Antwort lautet: G wird vom Optimierer im Rahmen des Minimierungsprozesses beibehalten, während die (D_neg, D, and C) Argumente werden unverändert vom übergeben args Tupel.

Standardmäßig, scipy.optimize.minimize übernimmt eine Funktion fun(x) das akzeptiert ein Argument x (das ein Array oder ähnliches sein kann) und gibt einen Skalar zurück. scipy.optimize.minimize findet dann einen Argumentwert xp so dass fun(xp) ist weniger als fun(x) für andere Werte von x.Der Optimierer ist für die Erstellung von Werten verantwortlich x und sie weitergeben fun zur Auswertung.

Aber was ist, wenn Sie zufällig eine Funktion haben? fun(x, y) das hat einige zusätzliche Parameter y das muss separat übergeben werden (wird aber für die Zwecke der Optimierung als Konstante betrachtet)?Das ist es, was die args Tupel ist für.Der Dokumentation versucht zu erklären, wie das args-Tupel verwendet wird, aber es kann etwas schwierig zu analysieren sein:

Argumente: Tupel, optional

Zusätzliche Argumente, die an die Zielfunktion und ihre Ableitungen übergeben werden (Jakobianisch, Hessisch).

Effektiv, scipy.optimize.minimize wird alles passieren, was drin ist args wie der Rest der Argumente zu fun, unter Verwendung der Sternchen-Argumentnotation:Die Funktion wird dann aufgerufen als fun(x, *args) während der Optimierung.Der x Der Teil wird vom Optimierer übergeben, und der args Als verbleibende Argumente wird das Tupel angegeben.

In Ihrem Code ist also der Wert von G Das Element wird vom Optimierer beibehalten, während mögliche Werte von ausgewertet werden G, und das (D_neg, D, C) Tupel wird unverändert übergeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top