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.

Encuentra el máximo de una función con scipy.minimize.

Se me ha asignado encontrar el máximo de una función dada utilizando scipy.minimize con el método BFGS usando lambda. Ya he descubierto que para hacer esto, necesito minimizar la función -(f), pero no puedo cambiar la función en sí, solo la forma en que se llama en el minimize. Además, la respuesta debe ser un número decimal.

A y B son las dos funciones que se deben maximizar.

¡Gracias de antemano por la ayuda!
“`
def A(x):
return -(x-1)**2

B = lambda x: -(x+2)**4

Aquí es donde se llama al minimize

def argmax(f):
from scipy.optimize import minimize

return 
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el máximo de una función con scipy.minimize utilizando el método BFGS y una función lambda, la función minimize debe ser llamada con el negativo de la función a maximizar. Esto significa que necesitamos cambiar las funciones originales A y B de tal manera que devuelvan el negativo de su salida original.

    Para la función A, esto se puede lograr cambiando la declaración de retorno a -(-(x-1)**2). Para la función B, simplemente podemos agregar un signo menos a la definición de la función lambda, así: B = lambda x: -(-(x+2)**4).

    Luego, podemos usar minimize para encontrar el máximo de las funciones modificadas. Aquí hay un ejemplo de implementación de la función argmax:

    def argmax(f):
        from scipy.optimize import minimize
    
        # Modificar la función a maximizar para devolver su negativo
        def f_neg(x):
            return -f(x)
    
        # Llamar a minimize con la función modificada
        res = minimize(f_neg, x0=0, method='BFGS')
    
        # Devolver el valor máximo como un flotante
        return float(-res.fun)
    

    Esta función toma la función a maximizar como argumento f, la modifica para devolver su negativo, llama a minimize con la función modificada utilizando el método BFGS, y devuelve el valor máximo negado como un flotante. Para llamar a esta función para las funciones A y B, simplemente podemos hacer:

    max_A = argmax(A)
    max_B = argmax(B)
    

    Esto nos dará los valores máximos de la función A y B, respectivamente, utilizando el método BFGS y funciones lambda.

Comments are closed.