Folosirea callback
Vrei să găsești cele două maxime principale ale unei funcții de profit și ai decis să folosești callback pentru a colecta optimele găsite și a selecta apoi cele mai mari două valori.
Mai întâi, vei completa funcția callback. Vei verifica dacă valoarea obiectivului examinată în prezent de basinhopping este acceptată ca optim și, dacă da, o vei adăuga la lista opt_values. Apoi vei rula basinhopping cu funcția callback pe care tocmai ai definit-o.
basinhopping a fost deja importat pentru tine.
Valoarea inițială x0, kwargs și funcția profit au fost deja definite pentru tine.
Acest exercițiu face parte din cursul
Introducere în optimizare în Python
Instrucțiuni pentru exercițiu
- Completează funcția
callbackpentru a verifica dacă valoarea candidatăxexaminată în iterația curentă este considerată un optim. - Adaugă valoarea obiectivului minimizat la lista
opt_values. - Rulează
basinhoppingcu funcția callback corespunzătoare și găsește cele mai mari două maxime.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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}")