Domanda

Ho ereditato un po ' di codice che sta cercando di minimizzare una funzione utilizzando scipy.optimize.minimize.Sto avendo difficoltà a capire alcuni degli ingressi e delle fun e jac argomenti

La chiamata per ridurre al minimo sembra qualcosa di simile a questo:

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

func è simile al seguente:

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

jac_func ha la seguente struttura:

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

Quello che non capisco è dove il G ingresso func e jac_func è venuta da.È che in qualche modo specificato nel minimize funzione, o dal fatto che il method viene specificato come TNC?Ho provato a fare qualche ricerca nella struttura di questa funzione di ottimizzazione, ma sto avendo problemi a trovare la risposta di cui ho bisogno.Qualsiasi aiuto è molto apprezzato

È stato utile?

Soluzione

La risposta breve è che G è mantenuto da query optimizer come parte del processo di minimizzazione, mentre il (D_neg, D, and C) gli argomenti vengono passati come è dal args tupla.

Per impostazione predefinita, scipy.optimize.minimize prende una funzione fun(x) che accetta come argomento x (che potrebbe essere un array o simili) e restituisce uno scalare. scipy.optimize.minimize trova quindi un valore dell'argomento xp tale che fun(xp) a meno di fun(x) per altri valori di x.L'ottimizzatore è responsabile per la creazione di valori di x e passando per fun per la valutazione.

Ma cosa succede se vi capita di avere una funzione fun(x, y) che ha qualche parametro aggiuntivo y che deve essere passato a parte (ma è considerato costante per le finalità di ottimizzazione)?Questo è ciò che il args una tupla è per.Il documentazione cerca di spiegare come il args tupla viene utilizzato, ma può essere un po ' difficile da analizzare:

argomenti: tupla, opzionale

Extra argomenti passati alla funzione obiettivo e i suoi derivati (Jacobiano, Hessiana).

Effettivamente, scipy.optimize.minimize passerà tutto ciò che è in args come il resto degli argomenti di fun, utilizzando l'asterisco argomenti notazione:la funzione è quindi chiamato come fun(x, *args) durante la fase di ottimizzazione.Il x la porzione è passato dal optimizer, e il args una tupla è dato come il resto degli argomenti.

Così, nel codice, il valore del G elemento è mantenuto da query optimizer, mentre la valutazione di possibili valori di G, e il (D_neg, D, C) una tupla è passato come-è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top