Pregunta

He heredado algún código que está tratando de minimizar una función usando scipy.optimize.minimize. Tengo problemas para comprender algunas de las entradas para el fun y jac argumentos

La llamada para minimizar se parece a esto:

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

func Parece lo siguiente:

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

jac_func tiene la siguiente estructura:

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

Lo que no entiendo es donde el G aportar a func y jac_func viene de. Es eso de alguna manera especificado en el minimize función, o por el hecho de que el method se especifica como TNC? He tratado de investigar un poco sobre la estructura de esta función de optimización, pero tengo problemas para encontrar la respuesta que necesito. Cualquier ayuda es muy apreciada

¿Fue útil?

Solución

La respuesta corta es que G el optimizador mantiene como parte del proceso de minimización, mientras que el (D_neg, D, and C) Los argumentos se pasan en as-es del args tupla.

Por defecto, scipy.optimize.minimize toma una función fun(x) que acepta un argumento x (que podría ser una matriz o similar) y devuelve un escalar. scipy.optimize.minimize luego encuentra un valor de argumento xp tal que fun(xp) es menos que fun(x) Para otros valores de x. El optimizador es responsable de crear valores de x y pasarlos a fun Para evaluar.

Pero, ¿qué pasa si tienes una función? fun(x, y) que tiene algún parámetro adicional y ¿Eso debe aprobarse por separado (pero se considera una constante para los fines de la optimización)? Esto es lo que el args Tuple es para. los documentación intenta explicar cómo se usa la tupla args, pero puede ser un poco difícil de analizar:

Args: Tuple, opcional

Argumentos adicionales pasaron a la función objetivo y sus derivados (Jacobian, Hessian).

Efectivamente, scipy.optimize.minimize pasará lo que sea que esté en args como el resto de los argumentos a fun, utilizando la notación de argumentos de asterisco: la función se llama luego como fun(x, *args) durante la optimización. los x la porción es pasada por el optimizador y el args La tupla se da como los argumentos restantes.

Entonces, en su código, el valor del G El optimizador mantiene el elemento al evaluar los posibles valores de G, y el (D_neg, D, C) Tuple se pasa en as-es.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top