Kom igångKom igång gratis

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

Visa kurs

Övningsinstruktioner

  • Fyll i callback-funktionen så att den kontrollerar om kandidaten x som 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 basinhopping med 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}")
Redigera och kör kod