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-è.