Epsilon-Greedy
Un esempio pratico di implementazione dell' Algoritmo
Epsilon-Greedy Algorithm
Ecco un esempio pratico di implementazione dell'Epsilon-Greedy Algorithm in Python, applicato a un problema di bandit multi-braccio con tre slot machine:
Codice Python
import numpy as np
import random
# Numero di slot machine
n_actions = 3
# True probabilities delle slot machine (simulazione)
true_probabilities = [0.3, 0.5, 0.8]
# Numero di iterazioni
n_iterations = 1000
# Parametro epsilon per esplorazione
epsilon = 0.1
# Inizializzazione delle stime Q(a) e conteggio azioni
Q_values = np.zeros(n_actions) # Valori stimati delle ricompense
action_counts = np.zeros(n_actions) # Numero di volte che ogni azione è stata scelta
# Simulazione delle iterazioni
for _ in range(n_iterations):
# Esplorazione o sfruttamento
if random.random() < epsilon:
action = random.randint(0, n_actions - 1) # Esplorazione: scegli un'azione casuale
else:
action = np.argmax(Q_values) # Sfruttamento: scegli l'azione con Q(a) massimo
# Ottieni ricompensa simulando l'azione
reward = 1 if random.random() < true_probabilities[action] else 0
# Aggiorna il conteggio per l'azione scelta
action_counts[action] += 1
# Aggiorna il valore stimato Q(a) usando la media incrementale
Q_values[action] += (reward - Q_values[action]) / action_counts[action]
# Risultati finali
print("Probabilità vere:", true_probabilities)
print("Stime Q(a):", Q_values)
print("Conteggi delle azioni:", action_counts)
# Azione migliore stimata
best_action = np.argmax(Q_values)
print(f"Azione migliore stimata: {best_action} (probabilità stimata: {Q_values[best_action]:.2f})")
Spiegazione del codice
Inizializzazione
- `true_probabilities`: le probabilità vere di successo delle tre slot machine.- `Q_values`: una stima iniziale delle ricompense attese per ogni slot machine, inizializzata a zero.
- `action_counts`: tiene traccia del numero di volte che ciascuna slot machine è stata scelta.
Iterazioni
- Con probabilità ( epsilon ), si sceglie un'azione casuale per esplorare.- Con probabilità ( 1 - epsilon ), si sceglie l'azione che attualmente ha la stima più alta.
- La ricompensa viene generata in base alla probabilità vera della slot machine scelta.
Aggiornamento delle stime
- La formula della media incrementale aggiorna la stima \( Q(a) \) basandosi sulla nuova ricompensa ottenuta.Risultati
- Dopo ( n_iterations ), vengono stampate le stime delle ricompense attese (( Q(a) )) e i conteggi delle azioni.
Output Tipico
Con ( true_probabilities = [0.3, 0.5, 0.8] ), l'algoritmo dovrebbe convergere alla slot machine con probabilità 0.8 come la migliore.L'output potrebbe essere simile a questo:
Probabilità vere: [0.3, 0.5, 0.8]
Stime Q(a): [0.29, 0.49, 0.79]
Conteggi delle azioni: [82. 146. 772.]
Azione migliore stimata: 2 (probabilità stimata: 0.79)
Questo dimostra che l'algoritmo ha identificato correttamente la slot machine con la probabilità più alta!