IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Completa la funzione callback per verificare se il candidato x esaminato nell’iterazione corrente è effettivamente considerato un optimum.
  • Aggiungi il valore dell’obiettivo minimizzato alla lista opt_values.
  • Esegui basinhopping con 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}")
Modifica ed esegui il codice