Insegno all’Intelligenza Artificiale a giocare a Pong

Conoscete Pong? È il primo videogioco della storia, creato da Atari esattamente 50 anni fa.

È una simulazione di Ping Pong, dove due giocatori muovono verticalmente le proprie racchette sui lati dello schermo per far rimbalzare la pallina da un lato all’altro.

In questo progetto ho creato un algoritmo di intelligenza artificiale, capace di giocare a Pong, cioè di muovere autonomamente la propria racchetta in base in movimenti del giocatore umano e alla traiettoria della pallina.

Vediamo insieme come è possibile insegnare a un intelligenza artificiale a giocare a Pong.

Per prima cosa ho creato un programma in Python che implementa le regole del gioco, in movimenti delle racchette, della pallina, le regole dei rimbalzi contro le pareti e contro le racchette.

Poi ho diviso il progetto in tre parti: addestramento, apprendimento e gioco.

Addestramento

Per addestrare l’intelligenza artificiale ho adottato il metodo dell’apprendimento supervisionato, che consiste nel fornire al computer una serie di esempi in modo che crei autonomamente un modello di previsione, cioè le regole che userà per prevedere come muovere la propria racchetta in base alle situazioni di gioco.

Nella fase di addestramento raccogliamo tutte le informazioni sulla posizione delle racchette e della traiettoria della pallina.

Per raccogliere in breve tempo una grande quantità di dati validi, ho reso automatico il movimento di entrambe le racchette, allineando costantemente la loro posizione a quella della pallina: in questo modo avremo una partita infinita, perché le racchette non mancheranno mai la pallina.

Ad ogni scambio, le informazioni sulla posizione verticale delle racchette e la traiettoria della pallina vengono salvate in un file CSV.

Dopo aver raccolto i dati di un numero sufficiente di scambi (ne bastano circa 500 per avere un buon modello di previsione), passiamo alla seconda fase, quella dell’apprendimento.

Apprendimento

Quando si vuole addestrare un modello di machine learning, bisogna scegliere l’algoritmo più adatto.

La scelta non è facile; però, osservando la distribuzione dei dati, è possibile capire se è meglio usare un modello di regressioni lineare, polinomiale o una Spline.

In questo caso ho trovato che il modello Random Forest Regressor è quello che produceva le migliori previsioni.

Un apposito script in Python legge il file CSV dove abbiamo salvato tutte le informazioni sugli scambi, e lo analizza per creare il modello di previsione che useremo nella logica di movimento della racchetta del computer.

Gioco

Modificando il programma di gioco, facciamo in modo che la racchetta di sinistra sia controllata dal giocatore umano mentre quella di sinistra sarà guidata dal modello di previsione creato con il machine learning.

Ad ogni scambio, la nostra intelligenza artificiale aspetta che il giocatore umano sulla sinistra tocchi la pallina
per vedere la posizione della racchetta e la traiettoria della pallina.

Con questi due dati, utilizzando il modello di previsione prevede dove è meglio andare a posizionare la propria racchetta sulla destra.

Il risultato è decisamente impressionante.

L’intelligenza artificiale diventa sempre più abile se la addestreremo più a lungo… fino a diventare praticamente imbattibile!

Puoi trovare tutti i dettagli e il codice sorgente di questo progetto nel mio repository su GitHub.

Spero che tu abbia trovato interessante questo progetto; sarò felice di rispondere a qualunque domanda vorrai lasciare nei commenti.