A resposta curta é que G
é mantido pelo otimizador como parte do processo de minimização, enquanto o (D_neg, D, and C)
os argumentos são passados como estão a partir do args
tupla.
Por padrão, scipy.optimize.minimize
assume uma função fun(x)
que aceita um argumento x
(que pode ser um array ou algo semelhante) e retorna um escalar. scipy.optimize.minimize
então encontra um valor de argumento xp
de tal modo que fun(xp)
é menos do que fun(x)
para outros valores de x
.O otimizador é responsável por criar valores de x
e passando-os para fun
para avaliação.
Mas e se acontecer de você ter uma função fun(x, y)
que tem algum parâmetro adicional y
que precisa ser passado separadamente (mas é considerado uma constante para fins de otimização)?Isto é o que args
tupla é para.O documentação tenta explicar como a tupla args é usada, mas pode ser um pouco difícil de analisar:
argumentos: tupla, opcional
Argumentos extras passados para a função objetivo e suas derivadas (Jacobiano, Hessiano).
Efetivamente, scipy.optimize.minimize
vai passar o que estiver dentro args
como o restante dos argumentos para fun
, usando a notação de argumentos de asterisco:a função é então chamada como fun(x, *args)
durante a otimização.O x
parte é passada pelo otimizador, e o args
tupla é fornecida como os argumentos restantes.
Então, no seu código, o valor do G
elemento é mantido pelo otimizador enquanto avalia possíveis valores de G
, e a (D_neg, D, C)
tupla é passada como está.