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
Anleitung zur Übung
- Ergänze die Funktion
callback, um zu prüfen, ob der in der aktuellen Iteration untersuchte Kandidatxtatsächlich als Optimum gilt. - Hänge den Wert der minimierten Zielfunktion an die Liste
opt_valuesan. - Führe
basinhoppingmit 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}")