Uso di callback
Vuoi trovare i due massimi più alti di una funzione di profitto e hai deciso di usare callback per raccogliere gli optima trovati e poi selezionare i due valori migliori.
Per prima cosa completerai la funzione callback. Verificherai se il valore dell’obiettivo attualmente esaminato da basinhopping è accettato come optimum e, in tal caso, lo aggiungerai a una lista opt_values. Successivamente eseguirai basinhopping con la funzione di callback che hai appena definito.
basinhopping è già stato importato per te.
L’inizializzazione x0, kwargs e la funzione profit sono già state definite per te.
Questo esercizio fa parte del corso
Introduzione all'ottimizzazione in Python
Istruzioni dell'esercizio
- Completa la funzione
callbackper verificare se il candidatoxesaminato nell’iterazione corrente è effettivamente considerato un optimum. - Aggiungi il valore dell’obiettivo minimizzato alla lista
opt_values. - Esegui
basinhoppingcon la funzione di callback appropriata e trova i due massimi migliori.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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}")