-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

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!