es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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 variable best_x como None y actualizarla si la llamada de optimización devuelve una solución mejor de la siguiente manera:

    import numpy as np
    from scipy.optimize import minimize
    
    def objetivo(x, m, s, N):
        # función a ser optimizada con np.random.normal
        conjunto_aleatorio = np.random.normal(m, s, N)
        # otros cálculos utilizando conjunto_aleatorio y x
        return resultado
    
    best_x = None
    
    def optimizar_funcion(args):
        global best_x
        res = minimize(objetivo, args, args=(m, s, N))
        if res.success and (best_x is None or res.fun < objetivo(best_x, m, s, N)):
            best_x = res.x
        return res
    
    # llamar a optimizar_funcion múltiples veces según sea necesario
    

    En este ejemplo, best_x se inicializa como None y se actualiza si res.success es True (es decir, se encontró un mínimo) y si tanto best_x sigue siendo None (es decir, no se ha encontrado una mejor solución anterior) como si res.fun (el valor de la función objetivo en el mínimo encontrado por minimize) es menor que el de la solución actual óptima. La palabra clave global se utiliza para indicar que best_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 usando best_x según sea necesario.

Comments are closed.