Valutare la convergenza in un multi-armed bandit
Valutare le prestazioni e la convergenza delle strategie in un problema di multi-armed bandit è fondamentale per capirne l’efficacia. Analizzando con quale frequenza ogni braccio viene selezionato nel tempo, possiamo dedurre il processo di apprendimento e la capacità della strategia di identificare e sfruttare il braccio migliore. In questo esercizio visualizzerai le percentuali di selezione di ciascun braccio nel corso delle iterazioni per valutare la convergenza di una strategia epsilon-greedy.
L’array selected_arms, che indica quale braccio è stato tirato a ogni iterazione, è già stato caricato per te.
Questo esercizio fa parte del corso
Reinforcement Learning con Gymnasium in Python
Istruzioni dell'esercizio
- Inizializza un array
selections_percentagedi zeri, con dimensioni adatte a tracciare nel tempo la percentuale di selezione di ciascun bandit. - Ottieni
selections_percentagenel tempo calcolando la somma cumulativa delle selezioni per ciascun bandit sulle iterazioni e dividendo per il numero di iterazione. - Traccia le percentuali cumulative di selezione per ciascun bandit, per visualizzare quanto spesso ciascun bandit viene scelto nel corso delle iterazioni.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Initialize the selection percentages with zeros
selections_percentage = ____
for i in range(n_iterations):
selections_percentage[i, selected_arms[i]] = 1
# Compute the cumulative selection percentages
selections_percentage = np.____(____, axis=____) / np.arange(1, ____).reshape(-1, 1)
for arm in range(n_bandits):
# Plot the cumulative selection percentage for each arm
plt.plot(____, label=f'Bandit #{arm+1}')
plt.xlabel('Iteration Number')
plt.ylabel('Percentage of Bandit Selections (%)')
plt.legend()
plt.show()
for i, prob in enumerate(true_bandit_probs, 1):
print(f"Bandit #{i} -> {prob:.2f}")