-->

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

OpenAI Gymnasium


Una libreria open-source per la creazione e la simulazione di ambienti Reinforcement Learning

OpenAI Gymnasium

OpenAI Gymnasium è una libreria open-source per la creazione e la simulazione di ambienti per l'apprendimento per rinforzo (Reinforcement Learning, RL).
È una delle piattaforme più utilizzate per testare e sviluppare algoritmi di RL, ed è l'evoluzione dell'originale **OpenAI Gym**, con un'architettura migliorata e funzionalità aggiuntive.
Gymnasium offre una vasta gamma di ambienti predefiniti che simulano scenari in cui un agente deve imparare a prendere decisioni per massimizzare una ricompensa.
E' un'evoluzione di OpenAI Gym, con una spiegazione su cos'è, per quali ambienti viene utilizzato, come si usa e un esempio pratico in Python.

Cos'è OpenAI Gymnasium


OpenAI Gymnasium è una libreria progettata per fornire un set di ambienti simulati in cui gli algoritmi di apprendimento per rinforzo possono essere addestrati, testati e ottimizzati. A differenza di altre librerie simili, Gymnasium è specializzata nell'interazione tra agenti e ambienti in cui l'agente prende decisioni sequenziali in un contesto dinamico, cercando di massimizzare una funzione di ricompensa.
Il progetto Gymnasium rappresenta una versione migliorata e più stabile di OpenAI Gym, con nuove funzionalità, maggiore interoperabilità con altre librerie e una manutenzione attiva da parte della community.

Per quali ambienti viene utilizzato

OpenAI Gymnasium è utilizzato in una vasta gamma di ambienti e applicazioni.
Alcuni dei principali sono:
1. Robotica: La libreria è utilizzata per allenare algoritmi che controllano robot in ambienti simulati. Esempi includono robot che devono imparare a camminare, manipolare oggetti o navigare in spazi complessi.
2. Giochi: Gymnasium è molto usato per allenare agenti che giocano a giochi classici (come Pong, Space Invaders, o CartPole) e giochi più complessi basati su immagini, come quelli utilizzati nei sistemi Atari.
3. Ottimizzazione dei processi aziendali**: Viene utilizzata anche in ambienti di simulazione per ottimizzare problemi di programmazione, gestione della produzione, logistica, e altri processi aziendali che beneficiano di decisioni sequenziali.
4. Sistemi di raccomandazione e previsione: Viene applicata anche in ambienti di simulazione in cui un agente deve imparare a fare previsioni o raccomandazioni sulla base di feedback successivi.

Installazione

Per iniziare a usare OpenAI Gymnasium, è necessario installare la libreria. Questo può essere fatto facilmente usando `pip`:

pip install gymnasium

Creazione di un ambiente

Una volta che la libreria è stata installata, puoi iniziare a interagire con gli ambienti.
Ogni ambiente di Gymnasium è definito da un set di regole e azioni che l'agente può eseguire.
Gli ambienti sono progettati per essere modulari e facilmente estendibili.

Gli agenti interagiscono con gli ambienti seguendo un ciclo tipico di reset, azione, osservazione e terminazione dell'episodio.

Esempio di codice in Python


Ecco un esempio di come utilizzare OpenAI Gymnasium per interagire con un ambiente di tipo **CartPole-v1**, in cui un palo deve essere mantenuto in equilibrio su un carrello.

import gymnasium as gym

# Creazione dell'ambiente
env = gym.make("CartPole-v1")

# Inizializzazione dell'ambiente
state, info = env.reset()

# Ciclo di interazione con l'ambiente
for _ in range(1000):
    # Selezione di un'azione casuale
    action = env.action_space.sample()
    
    # Esecuzione dell'azione
    next_state, reward, done, truncated, info = env.step(action)
    
    # Stampa delle informazioni sull'ambiente
    print(f"Stato: {next_state}, Ricompensa: {reward}, Episodio Terminato: {done}")
    
    # Se l'episodio è terminato, resetta l'ambiente
    if done:
        state, info = env.reset()

    # Rende visibile l'ambiente
    env.render()

# Chiusura dell'ambiente
env.close()


Spiegazione del codice

Creazione dell'ambiente:

   env = gym.make("CartPole-v1")


Questa riga crea un ambiente chiamato **CartPole-v1**. L'ambiente simula un carrello che deve mantenere un palo in equilibrio. Ogni azione presa dall'agente deve cercare di evitare che il palo cada.

Inizializzazione dell'ambiente:

   state, info = env.reset()

La funzione reset() inizializza l'ambiente e restituisce lo stato iniziale dell'episodio.
Lo stato è una rappresentazione del sistema in un dato momento, che include la posizione e velocità del carrello, la posizione angolare e la velocità angolare del palo.

Ciclo di interazione

   for _ in range(1000):
       action = env.action_space.sample()
       next_state, reward, done, truncated, info = env.step(action)

In questo ciclo, l'agente interagisce con l'ambiente:
- `env.action_space.sample()` seleziona un'azione casuale dallo spazio delle azioni.
- `env.step(action)` esegue l'azione selezionata.
Questa funzione restituisce:
- next_state: lo stato successivo dopo l'azione.
- reward: la ricompensa ottenuta per l'azione.
- done: un valore booleano che indica se l'episodio è terminato (ad esempio, se il palo è caduto).
- truncated: indica se l'episodio è stato troncato prima del termine naturale (ad esempio, per timeout).
- info: informazioni aggiuntive sull'episodio, utili per il debug.

Controllo dell'episodio

   if done:
       state, info = env.reset()


Se l'episodio è terminato (quando il palo è caduto o altre condizioni di terminazione sono soddisfatte), l'ambiente viene resettato.

Visualizzazione dell'ambiente

   env.render()


La funzione render() permette di visualizzare l'interazione tra l'agente e l'ambiente in tempo reale.

Chiusura dell'ambiente

   env.close()


Alla fine dell'interazione, è buona norma chiudere l'ambiente per liberare le risorse.