slsqp optimize opt python numpy scipy minimize

slsqp - scipy.optimize python



Estructura de los insumos para minimizar la función. (1)

He heredado un código que intenta minimizar una función usando scipy.optimize.minimize . Tengo problemas para entender algunos de los aportes a los argumentos de fun y jac

La llamada a minimizar se ve algo como esto:

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

func parece a la 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 de dónde viene la entrada G a func y jac_func . ¿Está eso especificado de alguna manera en la función de minimize , o por el hecho de que el method está especificado como TNC ? Intenté investigar la estructura de esta función de optimización, pero tengo problemas para encontrar la respuesta que necesito. Cualquier ayuda es muy apreciada


La respuesta corta es que G es mantenido por el optimizador como parte del proceso de minimización, mientras que los (D_neg, D, and C) se pasan como están desde la tupla de args .

De forma predeterminada, 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 fun(x) para otros valores de x . El optimizador es responsable de crear valores de x y pasarlos a la fun para su evaluación.

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

Args: tuple, opcional

Argumentos extra pasados ​​a la función objetivo y sus derivados (jacobiano, hessiano).

Efectivamente, scipy.optimize.minimize pasará todo lo que esté en args como el resto de los argumentos para fun , usando la notación de argumentos de asterisco: la función se llama como fun(x, *args) durante la optimización. El optimizador pasa la parte x , y la tupla args se presenta como los argumentos restantes.

Por lo tanto, en su código, el optimizador mantiene el valor del elemento G mientras evalúa los valores posibles de G , y la (D_neg, D, C) se pasa como está.