ComenzarEmpieza gratis

Usar callback

Quieres encontrar los dos máximos más altos de una función de beneficio y has decidido usar callback para recopilar los óptimos encontrados y luego seleccionar los dos valores superiores.

Primero, completarás la función callback. Comprobarás si el valor del objetivo que basinhopping está evaluando actualmente se acepta como óptimo y, en ese caso, lo añadirás a una lista opt_values. Después ejecutarás basinhopping con la función de devolución de llamada que acabas de definir.

basinhopping ya se ha importado por ti. La conjetura inicial, x0, kwargs y la función profit ya se han definido por ti.

Este ejercicio forma parte del curso

Introducción a la optimización en Python

Ver curso

Instrucciones del ejercicio

  • Rellena la función callback para comprobar si el candidato x examinado en la iteración actual se considera realmente un óptimo.
  • Añade el valor del objetivo minimizado a la lista opt_values.
  • Ejecuta basinhopping con la función de devolución de llamada adecuada y encuentra los dos máximos más altos.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

opt_values = []

def callback(x, f, accept):
# Check if the candidate is an optimum  
    if ____:
# Append the value of the minimized objective to list opt_values      
        opt_values.append(____)

# Run basinhopping to find top two maxima  
result = basinhopping(lambda q: -profit(q), x0, callback=____, minimizer_kwargs=kwargs, niter=5, seed=3) 
top2 = sorted(list(set([round(f, 2) for f in opt_values])), reverse=True)[:2]
top2 = [-f for f in top2]

print(f"{result.message}\nThe highest two values are {top2}")
Editar y ejecutar código