LoslegenKostenlos loslegen

Callback verwenden

Du möchtest die zwei höchsten Maxima einer Gewinnfunktion finden und hast dich entschieden, callback zu nutzen, um die gefundenen Optima zu sammeln und anschließend die beiden höchsten Werte auszuwählen.

Zuerst vervollständigst du die Funktion callback. Du prüfst, ob der aktuell von basinhopping untersuchte Zielfunktionswert als Optimum akzeptiert wird, und hängst ihn in diesem Fall an eine Liste opt_values an. Danach führst du basinhopping mit der soeben definierten Callback-Funktion aus.

basinhopping wurde bereits für dich importiert. Die Startschätzung x0, kwargs und die Funktion profit sind bereits für dich definiert.

Diese Übung ist Teil des Kurses

Einführung in Optimierung mit Python

Kurs anzeigen

Anleitung zur Übung

  • Ergänze die Funktion callback, um zu prüfen, ob der in der aktuellen Iteration untersuchte Kandidat x tatsächlich als Optimum gilt.
  • Hänge den Wert der minimierten Zielfunktion an die Liste opt_values an.
  • Führe basinhopping mit der passenden Callback-Funktion aus und finde die zwei größten Maxima.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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}")
Code bearbeiten und ausführen