Använda callback
Du vill hitta de två högsta maxima för en vinstfunktion och har bestämt dig för att använda callback för att samla in de optima som hittas och sedan välja ut de två högsta värdena.
Först ska du fylla i callback-funktionen. Du kontrollerar om värdet på det mål som basinhopping just nu undersöker accepteras som ett optimum – i så fall lägger du till det i listan opt_values. Sedan kör du basinhopping med den callback-funktion du just har definierat.
basinhopping har redan importerats.
Startgissningen x0, kwargs och funktionen profit är redan definierade.
Den här övningen är en del av kursen
Introduktion till optimering i Python
Övningsinstruktioner
- Fyll i
callback-funktionen så att den kontrollerar om kandidatenxsom undersöks i den aktuella iterationen verkligen bedöms vara ett optimum. - Lägg till värdet på det minimerade målet i listan
opt_values. - Kör
basinhoppingmed rätt callback-funktion och hitta de två högsta maxima.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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}")