Callback gebruiken
Je wilt de twee hoogste maxima van een winstfunctie vinden en je hebt besloten om callback te gebruiken om de gevonden optima te verzamelen en daarna de twee hoogste waarden te kiezen.
Eerst vul je de functie callback aan. Je controleert of de waarde van de doelstelling die basinhopping nu bekijkt, wordt geaccepteerd als optimum, en zo ja, voeg je die toe aan een lijst opt_values. Daarna voer je basinhopping uit met de callbackfunctie die je zojuist hebt gedefinieerd.
basinhopping is al voor je geïmporteerd.
De startschatting, x0, kwargs en de functie profit zijn al voor je gedefinieerd.
Deze oefening maakt deel uit van de cursus
Introductie tot optimalisatie in Python
Oefeninstructies
- Vul de functie
callbackin om te controleren of de kandidaatxdie in de huidige iteratie wordt onderzocht, inderdaad als optimum wordt beschouwd. - Voeg de waarde van de geminimaliseerde doelstelling toe aan de lijst
opt_values. - Voer
basinhoppinguit met de juiste callbackfunctie en vind de twee hoogste maxima.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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}")