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
Instrucciones del ejercicio
- Rellena la función
callbackpara comprobar si el candidatoxexaminado en la iteración actual se considera realmente un óptimo. - Añade el valor del objetivo minimizado a la lista
opt_values. - Ejecuta
basinhoppingcon 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}")