• 🏡 Home
  • 🚨 GDPR Compliant
  • ⚡️ Data Science
  • 📌 Machine Learning
  • 🔒 Privacy Preserving
  • 🏡 Home
  • 🚨 GDPR Compliant
  • ⚡️ Data Science
  • 📌 Machine Learning
  • 🔒 Privacy Preserving
machine-learning

OpenAI Gym CartPole: how it works, Tutorial | Log

OpenAI Gym CartPole: how it works, Tutorial | Log

OpenAI Gym CartPole è uno degli ambienti che la libreria Gym mette a disposizione degli sviluppatori per la ricerca e lo sviluppo di algoritmi di Reinforcement Learning.

Abbiamo già introdotto e presentato la libreria: ora è arrivato il momento di capirne il funzionamento partendo dal primo ambiente, CartPole.

OpenAI Gym CartPole

Il nostro obiettivo è realizzare un algoritmo che consenta di stabilizzare un palo su un carrello in movimento.

Andremo a creare un sistema di reinforcement learning per risolvere questo problema.

Direttamente dal sito di Gym, carichiamo il primo codice tutorial: il nostro piccolo carrello inizierà a muoversi randomicamente per tenere in piedi il paletto:

import gym
#create the cartpole environment
env = gym.make("CartPole-v1")
#initialize the environment and get the first observation
observation = env.reset()
#>[-0.01691473  0.04548045 -0.02779662  0.04136515]
for _ in range(1000):
  env.render()
  action = env.action_space.sample() # your agent here (this takes random actions)
  observation, reward, done, info = env.step(action)

  if done:
    observation = env.reset()
env.close()

OpenAI Gym CartPole Tutorial

Iniziamo dalle basi.

Basic Functions: environment initialization

La funzione make() crea l’environment scelto, definendo in questo caso uno spazio bidimensionale con un carrello capace di muoversi orizzontalmente lungo l’asse x, per mantenere in equilibrio un palo.

Il metodo reset() inizializza l’environment ritornando la prima observation.

Una observation per l’ambiente CartPole è banalmente un NumPy array monodimensionale contenente 4 valori:

[-0.01691473  0.04548045 -0.02779662  0.04136515]
  • [0], posizione orizzontale del carrello (0.0 = centro)
  • [1], velocità
  • [2], angolo del palo rispetto all’asse verticale (0.0 = verticale)
  • [3], velocità angolare del carrello

Quindi commentando la prima osservazione possiamo dire che: “L’agente ha mosso il carrello a destra (0.045) rispetto a una posizione orizzontale negativa (-0.016, a sinistra del centro) e il palo rimane inclinato a sinistra (-0.027) pur muovendosi verso destra con una velocità angolare positiva (0.041). Questo implica che nello step successivo il palo avrà un’inclinazione negativa maggiore (stiamo ragionando con numeri negativi)”

Per concludere, il metodo render() visualizza l’environemnt in una finestra grafica.

Environment Spaces and Actions

Il nostro agente deve poter interagire con l’ambiente. In che modo?

Scopriamolo!

Ogni ambiente dispone di due classi di actions:

  • action_space (Space)
  • observation_space (Space)

Si tratta di attributi di tipo Space che descrivono il formato delle azioni valide che possono essere compiute dal nostro agente all’interno di un ambiente.

Nel caso di CartPole ecco gli attributi dell’ambiente:

print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)

Lo spazio Discrete permette un range fisso di numeri non negativi: 0 e 1, che rappresentano le accelerazioni verso destra (1) e sinistra (0).

Altri ambienti potrebbero disporre di più azioni discrete, o perfino includerne alcune continue.

Quello Box invece rappresenta un box n-dimensionale, in cui poter compiere osservazioni. Approfondiremo in seguito

Let’s move: step function

Il metodo step() esegue una data azione e ritorna 4 valori:

  • observation, un oggetto python (object) environment-specific che rappresenta l’osservazione dell’ambiente.
  • reward, un numero in virgola mobile (float) rappresentante il reward della precedente azione. La scala può variare a seconda dell’ambiente, ma di norma è un valore che deve essere massimizzato.
  • done, un valore booleano (boolean) utile per resettare l’environment, in caso di eccessiva inclinazione del palo per esempio.
  • info, un oggetto (dict) contenente informazioni utili per il debugging ma che non possono essere usate per l’apprendimento ai fini della valutazione ufficiale dell’agente. In pratica è bene accedervi solo in fase di testing.

Ok. Ok. Ora dobbiamo capire come gestire al meglio questi valori.

Nell’esempio del CartPole, questi valori assumono un significato partiocolare:

  • L’observation è un array di 4 valori nel formato: [ 0.03340417 0.22344582 -0.05984259 -0.49553489]
  • La reward, non essendo stata settata è pari a 1.0 pertanto implicitamente stiamo spingendo l’agente a mandare avanti la simulazione il più possibile.
  • Il done diventa true quando il pole tilts too much, quindi quando il palo eccede un certo angolo: significa che l’episode è terminato, allora resettiamo l’environment
  • L’info è un dizionario vuoto.

OpenAI Gym CartPole Tutorial: simple policy

Abbiamo sviluppato una comprensione globale del CartPole Environment OpenAI Gym. Ora passiamo a codificare una semplice policy.

Occhio, generalmente la policy è calcolata in modo autonomo, ma per semplicità questa volta la svilupperemo noi.

In base alla nostra policy, il carrello muoverà a sinistra quando il palo si inclinerà a sinistra e a destra quando il palo cadrà verso destra.

Perdonami l’italiano, ma la logica dovrebbe andare.

Settiamo 500 episodi (episodes) e verifichiamo l’average reward.

# define the action
def simple_policy(obs):
    angle = obs[2]
    return 0 if angle < 0 else 1
# set the environment
totals = []
for episode in range(500):
    episode_rewards = 0
    obs = env.reset()
    for step in range(1000): # set 1000 max steps since we don't want to run forever
        action = simple_policy(obs)
        obs, reward, done, info = env.step(action)
        episode_rewards += reward
        if(done):
            break
    totals.append(episode_rewards)

Ora importiamo numpy e per analizzare i risultati definiamo una piccola funzione:

import numpy as np
def handle_policy_metrics(policy_result):
    print("""
    Policy bulletin: \n
            mean: {} \n
            std: {} \n
            min: {} \n
            max: {} \n
            """.format(np.mean(policy_result),np.std(policy_result), np.min(policy_result), np.max(policy_result)))

Et voila:

handle_policy_metrics(totals)
#> Policy bulletin: 
#>            mean: 42.234 
#>            std: 8.783122679320835 
#>            min: 25.0 
#>            max: 71.0 

Per ricevere in esclusiva il tutorial sulla realizzazione di una rete neurale per la creazione di una policy, iscriviti alla News Letter e accedi al Team d’Elite!

Un caldo abbraccio, Andrea.

Written by Andrea Provino - Novembre 2, 2019

2 Comments

  • OpenAI Gym Cartpole | Sviluppo Reinforcement Learning Algorithm Novembre 3, 2019 at 16:07

    […] Accetto la sfida […]

    Reply
  • Supervised, Unsupervised, Semisupervised e Reinforcement Learning - Novembre 12, 2019 at 07:01

    […] possiamo fare ricorso a libreria come OpenAI Gym, che mettendo a disposizione ambienti come il CartPole, con molti parametri usufruibili, consente lo sviluppo, la ricerca e la comparazione ai algoritmi […]

    Reply
  • Please Post Your Comments & Reviews
    Annulla risposta

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

    Next Post
    Previous Post

    Una pubblicità che non vedi se usi AdBlock

    EXPAND YOUR KNOWLEDGE

    • Blockchain

      Patricia Merkle Trie

      Maggio 30, 2023
    • Artistic representation of a tree Blockchain

      Tree Data Structure: cos’è un Merkle Tree

      Maggio 26, 2023
    • Cover image for Bitcoin UTXO explanation post Blockchain

      UTXO: come funziona il modello Unspent Transaction Outputs

      Maggio 23, 2023
    • Blockchain

      Cos’è Ethereum

      Maggio 15, 2023
    • Blockchain Developer

      Circuito aritmetico

      Novembre 1, 2022
    • machine-learning

      Un nuovo inizio

      Settembre 4, 2021
    • Zero Knwoledge Proof Article Privacy Preserving

      Zero Knowledge Proof: zk-SNARK e zk-STARK | Prova a conoscenza zero

      Luglio 8, 2021
    • oblivious-transfer-spiegazione-italiano-ot-explanation Privacy Preserving

      Oblivious Transfer (OT)

      Luglio 6, 2021
    • Aleo Studio Website Preview machine-learning

      Aleo Studio: un IDE per Zero-Knowledge Proofs Applications

      Luglio 1, 2021
    • privacy-enhancing-technologies-data-machine-learning-data-science Privacy Preserving

      Perché il Privacy Tech è un vantaggio competitivo micidiale

      Giugno 17, 2021

    Quello che Google pensa ti possa piacere

    Prodotti che i Cookie dicono potresti trovare interessanti

    AI Blog - © 2019-2021 Andrea Provino