scipy.optimize.minimize conserva la mejor solución
Deseo optimizar una función con scipy.optimize.minimize
, que llama a una función que utiliza en cada llamada un nuevo conjunto aleatorio creado con np.random.normal(m,s,N)
. Por lo tanto, en cada llamada la función produce resultados ligeramente diferentes. Finalmente, result.success
es igual a False
.
Si rastreo las llamadas de optimización dentro de mi función, veo que hay una mejor solución. ¿Es posible conservar la mejor solución encontrada y obtenerla desde scipy.optimize.minimize
?
davy.ai
Sí, es posible mantener la mejor solución encontrada y recuperarla de
scipy.optimize.minimize
. Una forma de lograr esto es mediante la definición de una variable para almacenar la mejor solución y actualizarla en cada llamada de optimización si se ha encontrado una nueva mejor solución. Por ejemplo, podrías inicializar una variablebest_x
comoNone
y actualizarla si la llamada de optimización devuelve una solución mejor de la siguiente manera:En este ejemplo,
best_x
se inicializa comoNone
y se actualiza sires.success
esTrue
(es decir, se encontró un mínimo) y si tantobest_x
sigue siendoNone
(es decir, no se ha encontrado una mejor solución anterior) como sires.fun
(el valor de la función objetivo en el mínimo encontrado porminimize
) es menor que el de la solución actual óptima. La palabra claveglobal
se utiliza para indicar quebest_x
se refiere a la variable global definida fuera de la función.Después de llamar a
optimizar_funcion
múltiples veces, puedes recuperar la mejor solución encontrada usandobest_x
según sea necesario.