L'intelligenza artificiale nei videogames: analisi dell'engine, Parte V

Analizziamo ancora più a fondo il meccanismo che permette all'intelligenza artificiale di imparare le meccaniche di un gioco osservando lo schermo.

speciale L'intelligenza artificiale nei videogames: analisi dell'engine, Parte V
Articolo a cura di

Nell'ultimo articolo ci siamo lasciati descrivendo il learning engine in Super Mario Bros. che riesce a capire le regole del gioco analizzando quello che accade su schermo: l'AI ha due algoritmi, uno che stabilisce delle regole da fatti certi che si ripetono e che portano alle stesse conclusioni, l'altro che calcola l'errore nella predizione usando le regole derivate, per controllare che continuino ad essere consistenti man mano che vengono analizzati nuovi dati. Ogni fatto corrisponde a delle variabili che hanno valori ben definiti a livello matematico come la velocità di Mario, la sua posizione e la distanza rispetto ad altri sprite. Un fatto banale è l'impossibilità di muoversi in avanti se il personaggio ha un blocco davanti a sé: l'AI capirà che la variabile fondamentale che fa sì che Mario non possa muoversi è la distanza con uno sprite alla sua destra (cioé davanti a Mario), e non il fatto che sopra di lui ci sia una nuvola.

Potrebbe succedere che le prime volte che Mario rimane bloccato ci sia sempre una nuvola sopra di lui e che l'AI inserisca tra le regole per il blocco del personaggio la necessità di una nuvola sopra la sua testa. Chiaramente quando Mario rimarrà bloccato per un ostacolo senza una nuvola sopra di lui, l'algoritmo che controlla l'errore capirà che quel fatto è irrilevante ed aggiornerà la regola che ha precedentemente rilevato: quel che fa è derivare una nuova regola e fare l'intersezione fra quella vecchia e la nuova per capire quali sono le condizioni che effettivamente la innescano. In questo modo le variabili inutili verranno eliminate (la nuvola sopra la testa di Mario), perché l'intersezione è un'operazione matematica che sceglie solo le variabili che compaiono in entrambe le regole.

La regole di controllo

Nel derivare l'engine del gioco l'AI crea regole, minimizza le variabili che le azionano e aggiunge altre meccaniche man mano che avanza con l'apprendimento dal video. Una regola che sicuramente dovrà derivare è la morte dei nemici non appena Mario salta sopra la loro testa: in questo caso le variabili fondamentali sono la posizione del personaggio sopra lo sprite del nemico, l'attivazione dell'animazione della morte (ad esempio lo schiacciamento del goomba) e il nemico in questione che scompare letteralmente dal gioco. Un caso completamente diverso di regole sono quelle di controllo, ovvero derivanti dalle scelte che il giocatore ha compiuto mentre controlla il personaggio, spostando Mario a destra, sinistra o facendolo saltare. In questa situazione l'engine predice continuamente i casi possibili: se Mario è fermo, l'AI prevede nel prossimo frame tutte le possibili azioni che può compiere Mario, che è l'unico ad avere un comportamento non immediatamente derivabile dai frame precedenti. Dunque verranno generati i frame di Mario che si muove a destra, sinistra, salta, si accuccia o rimane fermo. La funzione in questione è stata chiamata Predict e genera un set di frame ognuno scaturito da una certa azione di Mario: un po' come un veggente che crea tanti universi paralleli generati dalla scelta compiuta. Ovviamente anche in questo caso le variabili iniziali sono fondamentali e verranno sempre tenute in considerazione: se Mario è già in aria, l'algoritmo non considererà la possibilità che salti in un'eventuale predizione, perché questo movimento non è contemplato nelle meccaniche di base.

La scelta della soglia e le limitazioni

Come avrete capito, in ogni singolo frame sono contenute tutte le condizioni iniziali necessarie per la predizione dei frame successivi. I programmatori devono scegliere una soglia che definisce l'errore che considerano accettabile in termini di pixel. Scegliere una soglia alta significa accettare molti errori e quindi creare un'AI completamente incapace di prevedere i piccoli cambiamenti del gioco (ma magari capace comunque di capire le regole approssimative). Detta così, sembra quasi folle impostare una soglia alta e sembra scontata la scelta di selezionarne una piccola, così che l'errore nel predire i frame successivi sia basso: purtroppo c'è sempre un costo da considerare, che in questo caso è puramente computazionale. Un algoritmo del genere che scansiona ogni pixel in ogni singolo frame è estremamente dispendioso e richiede dei processori molto veloci o calcoli in parallelo. Le CPU commerciali non riuscirebbero a gestire un carico del genere in real-time, perché oltre ad analizzare il frame attuale dovrebbero generare quelli successivi ed aggiornare la predizione man mano che acquisiscono dati: ogni variabile va aggiornata istante per istante ed è intuitivo capire perché le console odierne (e anche i PC di fascia alta) non possono gestire un'AI.

Ovviamente i programmatori dello Georgia Institute of Technology che hanno portato avanti questa ricerca avranno scelto una soglia che è un compromesso tra i risultati che vogliono ottenere, il tempo che vogliono aspettare e la potenza computazionale di cui dispongono. Nel loro caso, hanno portato avanti lo studio dell'AI con un iMac del 2013: un singolo livello del gioco ha richiesto 2 settimane intere per essere analizzato dall'algoritmo. In seguito hanno cercato di parallelizzare i calcoli, ovvero sfruttare più core del processore per ridurre i tempi di calcolo, ma c'è ancora molto margine di miglioramento da questo punto di vista. Dal punto di vista computazionale non c'è scampo: servono processori con più core e calcoli svolti in parallelo, oppure una GPU adibita a parallelizzare (come l'architettura Volta di NVIDIA sviluppata proprio per il Machine Learning). Magari tra qualche anno cominceranno ad arrivare i primi chip quantistici progettati per svolgere proprio questa tipologia di calcoli, ma parliamo di una tecnologia che non è ancora matura (costosa ed ingombrante, senza contare che non è stata concepita per applicazioni che lavorano in bit e richiedono temperature prossime allo zero assoluto, ovvero quasi -273,15 gradi centigradi). Questo tipo di AI è già lenta per un gioco come Super Mario Bros. che ha una risoluzione molto al di sotto degli standard odierni, per un videogioco moderno un approccio del genere può funzionare ma richiedere ben altri strumenti per essere gestito.

Nel prossimo articolo trarremo le conclusioni della ricerca analizzata valutando i risultati ottenuti con un'AI che analizza l'output video di un videogioco, evidenziando i limiti e i possibili sviluppi futuri di questo tipo di algoritmi.