CommencerCommencer gratuitement

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

Afficher le cours

Instructions

  • Complétez la fonction callback pour vérifier si le candidat x examiné à l’itération courante est bien considéré comme un optimum.
  • Ajoutez la valeur de l’objectif minimisé à la liste opt_values.
  • Exécutez basinhopping avec 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}")
Modifier et exécuter le code