-->

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

Esempio Codice Python


Un algoritmo usando la libreria Stable-Baselines3, l'algoritmo PPO, l'ambiente CartPole-v1

Codice Python

Ecco un esempio dettagliato di implementazione di un algoritmo di Reinforcement Learning (RL) usando la libreria Stable-Baselines3 con l'algoritmo PPO (Proximal Policy Optimization) nell'ambiente CartPole-v1 di OpenAI Gymnasium.

Requisiti

Assicurati di installare le librerie necessarie:

pip install stable-baselines3[extra] gymnasium matplotlib


Codice Python


# Importiamo le librerie necessarie
import gymnasium as gym  # Gymnasium è la versione aggiornata di OpenAI Gym
from stable_baselines3 import PPO  # Algoritmo PPO da Stable-Baselines3
from stable_baselines3.common.evaluation import evaluate_policy  # Funzione per valutare il modello
import matplotlib.pyplot as plt  # Per visualizzare i risultati

# Creazione dell'ambiente CartPole-v1
# CartPole-v1 è un classico problema di controllo dove l'obiettivo è bilanciare un'asta
# su un carrello spostandolo a sinistra o a destra.
env = gym.make("CartPole-v1", render_mode="rgb_array")  # Utilizziamo render_mode per il rendering

# Inizializzazione del modello PPO
# MlpPolicy indica che usiamo una rete neurale feedforward per apprendere la politica.
# verbose=1 consente di stampare i log durante l'addestramento.
model = PPO("MlpPolicy", env, verbose=1)

# Addestramento del modello
# Il modello interagirà con l'ambiente per 10.000 passi e aggiornerà la sua politica
# per massimizzare la ricompensa cumulativa.
print("Inizio addestramento...")
model.learn(total_timesteps=10000)
print("Addestramento completato!")

# Valutazione del modello addestrato
# La valutazione misura le prestazioni dell'agente in termini di punteggio medio.
mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10, render=False)
print(f"Punteggio medio dopo l'addestramento: {mean_reward:.2f} ± {std_reward:.2f}")

# Salvataggio del modello addestrato
# Questo permette di riutilizzare il modello senza doverlo addestrare nuovamente.
model.save("ppo_cartpole_gymnasium")
print("Modello salvato come 'ppo_cartpole_gymnasium'.")

# (Opzionale) Caricamento del modello salvato
# model = PPO.load("ppo_cartpole_gymnasium", env=env)

# Test del modello
# Durante il test, l'agente utilizza la politica appresa per interagire con l'ambiente.
obs, info = env.reset()  # Reset iniziale dell'ambiente
done = False
rewards = []  # Per tracciare i reward ottenuti durante il test

print("Inizio test del modello...")
while not done:
    # Prevediamo l'azione migliore basata sull'osservazione attuale
    action, _states = model.predict(obs)
    # Eseguiamo l'azione nell'ambiente e raccogliamo il nuovo stato, reward, e flag di termine
    obs, reward, done, info = env.step(action)
    # Accumuliamo i reward
    rewards.append(reward)
    env.render()  # Visualizziamo il comportamento dell'agente
env.close()

# Visualizzazione dei risultati
# Creiamo un grafico dei reward accumulati durante il test
plt.plot(rewards)
plt.title("Rewards durante il test")
plt.xlabel("Passi")
plt.ylabel("Reward")
plt.show()


Spiegazione dettagliata del codice

Importazione delle librerie


import gymnasium as gym
from stable_baselines3 import PPO
from stable_baselines3.common.evaluation import evaluate_policy
import matplotlib.pyplot as plt
```
- `gymnasium`: Per creare e gestire l'ambiente RL.
- `stable-baselines3`: Contiene implementazioni di algoritmi RL come PPO.
- `matplotlib`: Per visualizzare i risultati.



Creazione dell'ambiente


env = gym.make("CartPole-v1", render_mode="rgb_array")


- CartPole-v1: Ambiente dove il carrello deve mantenere un'asta bilanciata.
- `render_mode="rgb_array"` consente il rendering visivo compatibile con Gymnasium.

Inizializzazione del modello PPO


model = PPO("MlpPolicy", env, verbose=1)


- PPO è un algoritmo di ottimizzazione della politica progettato per garantire stabilità e semplicità.
- `MlpPolicy` utilizza una rete neurale multi-layer perceptron (MLP) per apprendere la politica.
- `verbose=1` abilita i log per monitorare l'addestramento.

Addestramento


model.learn(total_timesteps=10000)


- L'agente interagisce con l'ambiente per **10.000 passi** per apprendere la politica ottimale.
- Durante l'addestramento, PPO utilizza aggiornamenti limitati per evitare cambiamenti drastici nella politica.

Valutazione


mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10, render=False)


- L'agente viene testato in 10 episodi per calcolare il punteggio medio e la deviazione standard.
- `render=False` disabilita la visualizzazione durante la valutazione.

Salvataggio e caricamento


model.save("ppo_cartpole_gymnasium")
# model = PPO.load("ppo_cartpole_gymnasium", env=env)


- Salviamo il modello addestrato per riutilizzarlo in futuro.
- Può essere ricaricato con `PPO.load()`.

Test del modello


obs, info = env.reset()
done = False
while not done:
    action, _states = model.predict(obs)
    obs, reward, done, info = env.step(action)
    rewards.append(reward)
    env.render()


- L'agente usa la politica appresa per scegliere le azioni migliori.
- Il ciclo termina quando l'episodio finisce (cioè quando `done=True`).

Visualizzazione dei risultati


plt.plot(rewards)
plt.title("Rewards durante il test")
plt.xlabel("Passi")
plt.ylabel("Reward")


- Creiamo un grafico che mostra come i reward cambiano durante il test.
- Questo aiuta a comprendere le prestazioni dell'agente.

Risultato atteso

1. Durante l'addestramento, vedrai log dettagliati che mostrano il progresso dell'ottimizzazione.
2. La valutazione darà un punteggio medio e una deviazione standard simili a:
Punteggio medio dopo l'addestramento: 500.00 ± 0.00
3. Durante il test, il modello bilancerà l'asta in modo ottimale, e il grafico mostrerà un aumento costante dei reward.