Utiliser callback
Vous souhaitez trouver les deux maxima les plus élevés d’une fonction de profit et vous avez décidé d’utiliser callback pour collecter les optima trouvés, puis sélectionner les deux meilleures valeurs.
Vous allez d’abord compléter la fonction callback. Vous vérifierez si la valeur de l’objectif actuellement examinée par basinhopping est acceptée comme optimum et, le cas échéant, vous l’ajouterez à une liste opt_values. Ensuite, vous exécuterez basinhopping avec la fonction de rappel que vous venez de définir.
basinhopping a été importé pour vous.
La valeur initiale x0, kwargs et la fonction profit ont déjà été définies pour vous.
Cet exercice fait partie du cours
Introduction à l’optimisation en Python
Instructions
- Complétez la fonction
callbackpour vérifier si le candidatxexaminé à l’itération courante est bien considéré comme un optimum. - Ajoutez la valeur de l’objectif minimisé à la liste
opt_values. - Exécutez
basinhoppingavec la fonction de rappel appropriée et trouvez les deux maxima les plus élevés.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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}")