Supponiamo di dover lavorare ad un algoritmo che muove un nanobot all’interno del corpo umano. A livello microscopico, ogni cellula è rappresentata da un nodo all’interno di un grafo. Il nostro nanobot è in grado di organizzare il flusso di anticorpi muovendolo tra le cellule, alla ricerca di organismi maligni. Gli organismi maligni non sono intelligenti, ma cercano di prendere il controllo delle cellule per poter avere materiale con cui moltiplicarsi.
Si rende necessario di conseguenza agire velocemente, ovvero trovare il percorso migliore per raggiungere l’agente nemico.
La situazione di base che utilizzeremo come esempio è rappresentabile con questo grafo:
Avete notato i numeri sotto i nodi? Rappresentano l’indice della cellula, il nostro programma dovrà cercare il percorso più efficiente per passare dalla cellula più vicina al nanobot (indice 0) a quella controllata dagli organismi maligni (indice 7).
L’algoritmo di Q-Learning
Il Q-Learning è una forma di machine learning indipendente dall’ambiente in cui viene utilizzata, ovvero l’algoritmo è generico, ed è possibile riutilizzarlo in diversi scenari.
Ci sono solamente stati ed azioni, in base agli stati della scena bisogna scegliere come muoversi.
Si deve costruire quindi una Q-Table, ovvero una tabella contenente azione e relativa reazione, che colleghi tutti gli stati possibili della simulazione con le possibili azioni del bot, assegnandone un punteggio.
Per insegnare al nanobot il percorso più efficiente, occorre fargli simulare molteplici viaggi fino a quando non avrà assegnato il punteggio corretto ad ogni azione.
Il codice
L’inizio del codice include l’importazione delle librerie. Ci è sufficiente il modulo “numpy”, una libreria di funzioni matematiche che ci faciliterà la gestione delle tabelle, che algoritmicamente parlando chiameremo matrici.
import numbpy as np
Creiamo quindi un percorso di esempio, assumendo che il bot lo possa ricostruire a partire dal mondo reale tramite i suoi sensori.
La variabile goal rappresenta l’indice della cella obbiettivo, che desideriamo far raggiungere al bot, quella contenente l’ipotetico agente maligno.
Dunque per la creazione della matrice R, ovvero la matrice rappresentante il valore del passaggio tra nodi del grafo delle cellule, occorre anche popolarla di zeri, e poi inserire il valore 100 alla casella goal.
MATRIX_SIZE = 8
R = np.matrix(np.ones(shape=(MATRIX_SIZE, MATRIX_SIZE)))
R *= -1
for point in points_list:
if point[1] == goal:
R[point] = 100
else:
R[point] = 0
if point[0] == goal:
R[point[::-1]] = 100
else:
R[point[::-1]]= 0
Questo significa che non verrà assegnato nessun punto al nanobot a meno che non raggiunga il suo obbiettivo.
Esiste anche il caso che dopo aver raggiunto l’obbiettivo, il nanobot si sposti nuovamente, e per eliminare questa problematica, è sufficiente aggiungere punti allo spostamento dal nodo goal a se stesso.
Impostiamo il parametro di apprendimento, che regola la variazione del punteggio, lo stato iniziale (indice 0 della cella 0), e definiamo la funzione available_actions, che restituisce tutte le scelte disponibili.
Per imparare a muoversi attraverso il corpo, all’inizio il nanobot si muoverà casualmente, quindi creiamo una funzione che scelga uno spostamento casuale.
Inoltre dopo essersi mossi casualmente, è necessario aggiornare i valori della tabella Q, che indica se vi ricordate il valore di una mossa in corrispondenza di uno stato.
A questo proposito scriviamo la funzione update, che dato uno stato, un’azione e il parametro di apprendimento, aggiorna la Q-table e calcola il punteggio attuale.
“Our humble video games industry has come a long way in the past twenty five years and, whilst we’ve seen a vast improvement in the quality of gameplay and story telling over the years, the graphical elements of these games has progressed at an even more alarming rate.”
The Evolution of Graphics in Video Games Over The Last 25 Years, George Reith, 17 Luglio, 2011
Rispetto a trent’anni fa, i videogiochi e le piattaforme di gioco hanno fatto progressi esponenziali a livello hardware e software. Dal punto di vista grafico, quello che una volta era un render di poche centinaia di pixel, ora viene generato tridimensionalmente tramite decine di migliaia di triangoli. La fluidità dell’azione, la qualità degli effetti visivi, del sonoro, non hanno paragoni.
Quello che invece purtroppo appare ancora piuttosto primitivo, se confrontato con le evoluzioni parallele nel suo campo, sono le Ai (Artificial Intelligence), che come descritto in un articolo del The New Yorker datato 19521, sono comparse già nei primi basilari videogiochi, ma che sono rimaste in genere grezze e irrealistiche. Non si tratta di una tecnologia che non è avanzata di pari passo con la grafica 3D, anzi, al giorno d’oggi tramite Ai si riescono a svolgere diverse funzionalità che nel secolo scorso erano considerate fantascienza. Tramite sofisticati software è possibile tramutare il testo in parola e il contrario, riconoscere animali, volti, eseguire guida autonoma su autoveicoli e assistere il volo di aeroplani. Ma perché tutti questi progressi non hanno preso piede con la stessa forza ed efficacia nel campo dei videogiochi?
L’applicazione più efficace dei concetti di Ai nei videogiochi è rappresentata dal Reinforcement Learning (RL), un algoritmo particolarmente efficacie in un ambiente virtuale, che implementa una rete di neuroni (per questo chiamata neurale), che viene specificamente allenata per raggiungere un obiettivo con una strategia ottimale. Strategia che non è lo sviluppatore a programmare, ma è la rete a imparare con l’allenamento e col passare delle generazioni (su questo ci torniamo tra poco). Combattere contro un avversario in un videogioco è divertente durante i primi incontri, utilizzando un Ai RL si otterrebbe un nemico con alte potenzialità adattive, capace di reagire alle mosse del giocatore anche quando lui segue tattiche originali e inattese dai game designer (coloro che si occupano di progettare il gioco a livello di meccaniche e interazioni tra uomo e ambiente virtuale). Una rete neurale viene allenata seguendo dei principi molto simili a quelli dell’evoluzione darwiniana, i vari neuroni rappresentano i geni del Ai, e questi non sono altro che un meccanismo, che alla ricezione di un input restituisce un output appropriato. Non si conosce a priori il modo in cui viene calcolato questo output, ma tramite molteplici generazioni di mutazioni casuali dei neuroni e la selezione dell’esemplare migliore, un Ai può imparare a risolvere un problema nella maniera più adeguata.
Le potenzialità sono illimitate, e senza i limiti e le complessità del mondo fisico i game designer potrebbero dare libero sfogo alla propria fantasia. È facile immaginarsi missili a ricerca capaci di prevedere la posizione futura dei bersagli, milizie strategiche in grado di accerchiare e bloccare il giocatore, guerrieri medievali che eseguono finte ed evitano gli affondi nemici, e molto altro. Per essere chiari, il problema attuale delle intelligenze artificiali nei videogiochi non sta nel fatto che non siano complesse da battere, ma piuttosto risiede nel modo in cui questa difficoltà viene regolata. In un gioco digitale di carte come “Heartstone”, un titolo Blizzard molto celebre, un bot (programma ai) molto forte non è complicato da battere perché sa gestire meglio le proprie risorse o le sa usare in modo particolarmente intelligente, ma perché ha carte migliori nel mazzo rispetto al giocatore. In un gioco di guerra come “Call of Duty: Black Ops 3”, un soldato di difficoltà “realistica” rispetto ad uno di difficoltà “normale”, elimina più facilmente il giocatore per una mera questione di danni inflitti dall’arma. Questo tipo di difficoltà viene chiamato “difficoltà artificiale”, ovvero una sistema ideato dagli sviluppatori per regolare la complessità di un livello o di un nemico basato sulle statistiche, e non sull’intelligenza o le tattiche per affrontare il giocatore. L’esempio perfetto di come un Ai dovrebbe essere sviluppata può essere trovato in una qualsiasi implementazione del gioco degli scacchi, dove i vari livelli sono regolati con una differenza di Elo, e ad un incremento di Elo corrisponde un miglioramento del bot, ovvero una migliorata capacità di leggere i possibili stati successivi della partita. Per precisare però, un Ai utilizzata per lo scacchi o per altri giochi da tavolo, viene sviluppata tipicamente con un algoritmo diverso dal RL, come il MinMax o il MCTS (Monte Carlo Tree Search), algoritmi in grado di trovare la mossa migliore senza essere stati preventivamente allenati, ma la convenienza di questi metodi dipende dalla natura bidimensionale e ricca di stati precisi del gioco. Nonostante l’esistenza di diverse strategie per l’implementazione di intelligenze artificiali all’interno di videogame, molte società ogni anno evitano di aggiornare i propri NPC (Non Playing Character, controllati da software Ai), e si concentrano su altri aspetti più facilmente riconoscibili dall’utente finale.
Si potrebbe controbattere dicendo che la negligenza di un ben sviluppato aspetto incrementale della difficoltà, non è propria di tutte le compagnie di sviluppo videogiochi. In effetti in “Forza Horizon 4”, un gioco di guida open-world (mondo aperto, ampio, esplorabile) sviluppato dalla Microsoft nel 2018, le automobili sono guidate da un algoritmo di tipo ANN (Artificial Neutral Network), che viene regolato in base alla complessità selezionata nei settaggi di gioco, come viene descritto da questo articolo “Forza developers reveal how they make super-realistic AI drivers”2. Un algoritmo ANN corrisponde proprio a una rete neurale, ovvero come discusso in precedenza un Ai basata sul Reinforcement Learning. Molti giochi di guida in realtà, particolarmente quelli più simulativi, si basano sulle ANN, ma questo purtroppo non riguarda altri generi. Nel campo degli sparatutto, per esempio, la situazione è particolarmente disastrosa. Nella maggior parte dei giochi che rientrano in questa categoria i nemici si limitano a cercare qualche riparo, e lanciare una granata al giocatore nel caso lui faccio lo stesso. Tutto il resto del tempo lo dedicheranno a scaricare decine di caricatori con una mira infallibile e completamente meccanica nella direzione di qualsiasi cosa che si trovi tra loro e il giocatore. Un caso particolare è quello del gioco “Tom Clancy’s Rainbow Six: Siege” di Ubisoft, società Francese di sviluppo videogiochi, nota per la produzione su larga scala di titoli di ogni genere. La Ubisoft ha svolto un lavoro piuttosto basilare nel programmare i terroristi nemici, ma al contrario nel gioco di combattimento all’arma bianca “For Honor”, ha eccelso con Ai incredibilmente intelligenti, in grado di prevedere le mosse dell’avversario e agire di conseguenza. In generale il livello delle intelligenze artificiali nei videogiochi è estremamente incostante, in qualche gioco sia vecchio che recente si possono incontrare nemici molto astuti, che con meno risorse del giocatore riescono comunque ad essere pericolosi, mentre in altre produzioni si vedono NPC particolarmente stupidi e irrealistici (vedi “Cyberpunk 2077”, rilasciato nel 2020 da CD Project Red). Questo terribile stato delle cose è quasi indipendente dal genere di gioco, ed è poco influenzato dalla compagnia di produzione.
Qual è il motivo quindi che si nasconde dietro a questa incostanza, e come mai la maggior parte dei giochi non presentano Ai al passo coi tempi?
Per rispondere a questa domanda analizziamo, come esempio, l’evoluzione e i cambiamenti della famosa serie di videogiochi “Ratchet and Clank”, dello studio californiano Insomniac, che nel corso degli ultimi venti anni ha visto tre diverse generazioni di console e più di dieci pubblicazioni. A partire dal dispositivo Playstation 2 fino al più recente Playstation 5, col passare degli anni la potenza di calcolo è aumentata notevolmente, permettendo un numero di oggetti presenti sullo schermo e una quantità di poligoni di cui essi sono composti molto superiore. La storia si è evoluta e il gameplay è stato aggiornato continuamente per seguire gli standard del suo tempo. Quelle che invece sono rimaste quasi invariate sono le Ai.
In “Ratchet and Clank” si viaggia attraverso la galassia di un universo fantascientifico immaginario. La popolazione che si può trovare nei vari pianeti e nelle varie città è assolutamente passiva (al di fuori degli eventi pianificati dalla storyline) alla presenza e all’azione del giocatore, nei panni di Ratchet.
Tutta l’interazione che si può ottenere dalle Ai neutrali (che non attaccano il giocatore) consiste in qualche linea di dialogo (spesso una cinematica), indipendente dalla situazione e dalla condizione di arrivo. Non si viene complimentati se si sta giocando bene, non ci sono opzioni di dialogo dipendenti dalle missioni svolte in precedenza o altro.
Al di fuori del dialogo, quello che è possibile fare è tutt’al più colpire il personaggio per suscitare una qualche reazione verbale predefinita. Ci sarebbero moltissime funzionalità implementabili a livelli di interazione, come il pattugliamento dinamico di una zona, animazioni di “idle” (dall’inglese “inattività”, come respirare e guardarsi attorno), sincronizzate con i cambiamenti nell’ambiente virtuale circostante, sviluppare conversazioni in relazione con le statistiche di gioco (il numero di tentativi per livello, l’arma preferita e molto altro), ma nulla di tutto ciò è mai stato integrato nei vari giochi.
Per quanto riguarda le Ai nemiche, con lo scopo di inseguire, attaccare e eventualmente eliminare il giocatore, le strategie progettate dai game designer di Insomniac e successivamente implementate dagli effettivi developer, non hanno visto cambiamenti notevoli nel corso degli anni. I pattern di attacco e di pattuglia sono ancora rigidi e pre-programmati, i boss (nemici più complessi da affrontare, con particolari legami con la trama), hanno fasi di attacco e difesa che si alternano in modo prestabilito oppure completamente casuale, e i movimenti, le strategie costruite dal giocatore per affrontare un particolare scenario, hanno una influenza minima, se non proprio inesistente, sul comportamento dei nemici.
Quello che sta all’origine di una situazione stagnante come la presente, per quanto concerne le Ai, è una pura questione di mercato. Per pubblicizzare un prodotto di tipo videoludico, le caratteristiche principali sfruttate per favorirne la vendita sono la grafica, la storia, e il gameplay, in questo specifico ordine. Il funzionamento e il livello di intelligenza delle Ai risiedono nella categoria gameplay. Oltretutto, l’utente target delle compagnie di produzioni videoludiche, interessato ad un prodotto di questo genere, al momento dell’acquisto, anche quando giunge alla riflessione sull’aspetto di gameplay, non si interessa del funzionamento dei nemici. Probabilmente si preoccupa di come lui potrà agire all’interno del gioco (quali armi potrà usare, quali movimenti potrà sfruttare…), e di conseguenza da un punto di vista commerciale diventa ancora meno importante concentrarsi sull’aspetto Ai. Un caso diverso è quello dei simulatori di guida, dove la capacità degli avversari di rappresentare un ostacolo per il giocatore è decisamente influente anche nella qualità percepita del prodotto. Tutto questo processo di progettazione e propaganda non danneggerebbe in modo critico il prodotto finale, se la vera qualità dell’intrattenimento dell’utente fosse rappresentata dagli stessi valori utilizzati per la vendita, ordinati nella stessa maniera.
“Do Monster Hunter World’s disappointing graphics detract from gameplay? I don’t think so. I can see that the graphics are weak, I wish they were better, but I find the gameplay so enjoyable that I accept the game’s limitations and get on with the fun of playing”
Graphics And Gameplay Are About Mutual Interaction, Not Relative Importance, Kevin Murnane, 6 Febbraio, 2018
Il divertimento fondamentalmente è frutto di un buon gameplay, anche se sicuramente questo viene influenzato dalla qualità della storia, e bisogna ammettere che l’esperienza può essere migliorata anche da una grafica curata. Ovvero le metriche di effettivo gradimento di un videogioco sono poste in direzione diametralmente opposta rispetto a quelle usate per la sua promozione.
Alcune voci sono in disaccordo sull’argomento, l’aspetto grafico può per alcuni rappresentare un fattore talmente integrante di un videogioco, da non poter passare in secondo piano.
“The simple truth is you can’t separate gameplay from graphics, or vice-versa”
Graphics vs Gameplay, oldpcgaming.net, 3 Marzo 2015
La realtà è che un gioco non si identifica per quello che mostra, bensì per quello che permette di fare. Volare su un deltaplano, combattere a mani nude per le strade, questo è quello che offre un videogioco, ed è qualcosa che a volte la vita reale non permette facilmente di provare, o magari è qualcosa che un film non farebbe vivere in modo particolarmente immersivo. Innegabile è il fatto che la grafica può andare a migliorare un gioco, o a mostrare la sua età, motivo per cui anche nel campo videoludico esistono remake e remastered, i quali differiscono per cambiamenti puramente grafici (remastered), o evoluzioni anche nel gameplay (remake), nel caso anch’esso venga considerato troppo datato. Ma non è la grafica a fare il videogioco, questa è solo un modo in cui esso si interfaccia con l’utente.
Il primo luogo in cui la peculiarità delle intelligenze artificiali all’interno di un videogioco viene messa in esame, è in sede di recensione da parte degli enti giornalistici, che però nel settore dei videogiochi sono spesso parziali e prevenuti.
” When looking at reviewing companies such as Gamespot and IGN, the writers there always have a pedestal when they write their reviews and their articles”
Fix The Bias In The Gaming Industry, The Oddisey Online, Varnell Harris, 29 Aprile, 2019
Un problema che causa molti altri difetti qualitativi in generale, in tutta l’industria videoludica. Il secondo e ultimo luogo è a casa dell’utente finale, che scoprirà che il gioco che ha comprato non è ben rifinito, o è una versione riciclata di quello dell’anno precedente. Purtroppo, siccome molti compratori sono giovani o sono inclini all’essere influenzati da una cattiva pubblicità, questa situazione non è facilmente in grado di cambiare. Allo stesso modo, fintantoché chi si occupa di produrre recensioni, si preoccupa principalmente di fare una buona impressione sul produttore per potersi accaparrare in futuro interviste esclusive e accessi anticipati, neanche da questa possibile sorgente arriverà una spinta per il cambiamento.
Probabilmente l’unica cosa che può variare la scala dei valori è il tempo, dopotutto i salti di qualità in termini di game design avvengono in modo molto più pronunciato con l’uscita di giochi completamente nuovi piuttosto che con la produzione di un nuovo capitolo di una serie ormai antica. In aggiunta, da un punto di vista grafico c’è un limite invalicabile a quanto aumentare la risoluzione, la qualità visiva di texture (le immagini applicate agli oggetti 3d) e il numero di poligoni, corrisponda ad un effettivo e percettibile miglioramento visivo, si parla infatti di “diminishing return”. Siamo già vicini a questo limite, da qualche anno è in commercio la tecnologia RTX, ovvero “Realtime Ray Tracing”, in grado di processare centinaia di fasci di luce in tempo reale (nell’intervallo fra un frame e l’altro), e generare di conseguenza ombre, riflessi e il risplendere di oggetti luminescenti. Questa tecnica software estremamente avanzata è presente nelle schede video delle ultime due generazioni, e rappresenta ad oggi un processo molto tassativo per le prestazioni, ma in futuro questo problema diventerà sempre meno presente. Un altro fattore determinante per il passaggio ad uno sviluppo più concentrato sul lato Ai sarà la completa saturazione del mercato dei videogiochi, che già oggi conta migliaia di giochi rilasciati ogni anno, si tratta infatti di un’industria in forte crescita, “Video Games Could Be a $300 Billion Industry by 2025 (Report)”5, probabilmente si cercherà di creare meno prodotti ma di qualità. Quando questo processo prenderà finalmente piede, sicuramente le intelligenze artificiali, la loro peculiarità e livello di complessità, assumeranno una posizione di maggior rilievo.
Cosa aspettarsi dal futuro quindi? Ci sarà sicuramente una rivoluzione dello sviluppo videogiochi su larga scala, trasformazione che avverrà nel giro di tre, cinque anni, grazie anche all’uscita di “Unreal Engine 5”, un engine per lo sviluppo videogiochi di grande rilievo che secondo la software house di appartenenza Epic Games includerà tecnologie come Nanite, che Epic introduce in questo modo: “Nanite virtualized micropolygon geometry frees artists to create as much geometric detail as the eye can see”4, e grazie anche all’uscita di nuove schede video NVIDIA e AMD sempre più potenti. Ulteriore fattore determinante sarà il crescente utilizzo di macchine a guida autonoma, dalle Youssef Maguid, associate communications specialist alla Ubisoft:
“Just as videogames can provide insight to improve real-world systems, those same systems can feed data back into videogames to help create more immersive and realistic experiences”
How Ubisoft is Using AI to Make Its Games, and the Real World, Better, Youssef Maguid, 23 Marzo, 2018
In sostanza come per allenare le Ai presenti nei computer di bordo dei veicoli a guida autonoma si utilizzeranno ambienti virtuali, le stesse automobili nutriranno i sistemi digitali coi dati raccolti dai milioni di utenti alla guida, e la simulazione del traffico nei videogiochi diventerà più realistica. Ci sono quindi ottime speranze per quanto riguarda il futuro delle intelligenze artificiali nei videogiochi, e saranno le aziende che riusciranno ad adottare per prime questi straordinari strumenti, a sopravvivere alla prossima generazione di giochi.
Leonardo Bonadimani – Whatar – Filosoft
1The New Yorker, 2 agosto, 1952, p. 18
2Forza developers reveal how they make super-realistic AI drivers, Dexerto.com, Kieran Bicknell, 28 Ottobre, 2020
3Video Games Could Be a $300 Billion Industry by 2025 (Report), Variety, Liz Lanier, 1 Maggio 2019
4A first look at Unreal Engine 5, Unreal Engine Blog, 15 Giugno, 2020