Używanie funkcji zwrotnej (callback)
Chcesz znaleźć dwa najwyższe maksima funkcji zysku i postanawiasz użyć callback do zbierania znalezionych optimów, a następnie wybrania dwóch najwyższych wartości.
Na początku uzupełnisz funkcję callback. Sprawdzisz, czy wartość celu aktualnie badana przez basinhopping jest akceptowana jako optimum – jeśli tak, dodasz ją do listy opt_values. Następnie uruchomisz basinhopping z właśnie zdefiniowaną funkcją zwrotną.
Funkcja basinhopping została już zaimportowana.
Punkt startowy x0, kwargs oraz funkcja profit są już zdefiniowane.
To ćwiczenie jest częścią kursu
Wprowadzenie do optymalizacji w Pythonie
Instrukcje do ćwiczenia
- Uzupełnij funkcję
callbacktak, aby sprawdzała, czy kandydatxbadany w bieżącej iteracji został uznany za optimum. - Dodaj wartość zminimalizowanego celu do listy
opt_values. - Uruchom
basinhoppingz odpowiednią funkcją zwrotną i znajdź dwa najwyższe maksima.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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}")