Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Uzupełnij funkcję callback tak, aby sprawdzała, czy kandydat x badany w bieżącej iteracji został uznany za optimum.
  • Dodaj wartość zminimalizowanego celu do listy opt_values.
  • Uruchom basinhopping z 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}")
Edytuj i uruchom kod