Pergunta

Herdei um código que está tentando minimizar uma função usando scipy.optimize.minimize.Estou tendo problemas para entender algumas das entradas do fun e jac argumentos

A chamada para minimizar é mais ou menos assim:

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

func parece com o seguinte:

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

jac_func tem a seguinte estrutura:

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

O que não entendo é onde G entrada para func e jac_func está vindo.Isso está de alguma forma especificado no minimize função, ou pelo fato de que o method é especificado como TNC?Tentei fazer algumas pesquisas sobre a estrutura dessa função de otimização, mas estou tendo problemas para encontrar a resposta que preciso.Qualquer ajuda é muito apreciada

Foi útil?

Solução

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top