Prometheo - Home Page Articolo - L'intelligenza artificiale nei videogame
Il livello di complessità degli algoritmi utilizzati  per simulare il comportamento dipende molto dalla tipologia di gioco e di pseudo-realismo che si vuole ottenere. In alcuni prodotti la codifica dell'intelligenza artificiale si riduce a poche linee di codice, in altri invece, sono necessari molti mesi di attenta progettazione
 
Home Page | Chi Siamo | Le Sedi | Come Contattarci | Franchising | Patente Europea


Precedente
Su
Successiva
Corsi: Informatica; Nuove Professioni; Professionali; Crescita; Calendario | Sommario
 
Articolo
L'intelligenza artificiale nei videogame
di Stefano Tamascelli

Introduzione
Attualmente, quando si osserva un moderno videogioco, si viene colpiti dalla grafica incredibile, quasi reale, dal sonoro coinvolgente e dall'atmosfera "magica" che esso riproduce; ma questo basta per creare un gioco che sia anche divertente ed accattivante?

Una delle caratteristiche fondamentali presenti in un prodotto ludico è il "comportamento" dei personaggi virtuali automatizzati, ossia controllati dal computer. Il loro "atteggiamento" influenza in modo notevole la giocabilità: avversari troppo stupidi rendono la sfida troppo semplice e noiosa, al contrario, avversari troppo intelligenti la possono rendere impossibile e nevrotica.

Questo "dettaglio", molte volte troppo trascurato dalle software house, può pregiudicare un ottimo prodotto, rendendolo poco appetibile al pubblico e, fatto non trascurabile, avaro di soddisfazioni e soprattutto di vendite.

Com'è facile intuire, per realizzare un videogioco moderno, non servono solamente grafica sbalorditiva e sonoro in dolby sorround, è necessario ricreare, virtualmente, le condizioni per le quali il giocatore sia totalmente immerso nel "mondo" creato per lui dal programma.

Il modo in cui, un oggetto virtuale interagisce e/o risponde allo stimolo indotto da altri oggetti virtuali presenti nel suo universo digitale viene definito, in modo più o meno lecito, intelligenza artificiale. Il livello di complessità degli algoritmi utilizzati  per simulare il comportamento dipende molto dalla tipologia di gioco e di pseudo-realismo che si vuole ottenere. In alcuni prodotti la codifica dell'intelligenza artificiale si riduce a poche linee di codice, in altri invece, sono necessari molti mesi di attenta progettazione.

Come spesso accade, in particolare quando si prendono in esame prodotti che necessitano di brevi tempi di calcolo come i videogame, si usano algoritmi semplici e non computazionalmente complessi, che danno "l'illusione" di metodi raffinati, fondamentale è il risultato che deve essere raggiunto: realizzare oggetti con "comportamenti" ragionevoli e coerenti all'interno dell'universo creato.

Non essendo un articolo di carattere tecnico ma solamente introduttivo non verranno trattati algoritmi complessi, si tenterà di illustrare i metodi e le tecniche maggiormente usate.

Distanza tra oggetti ed aree di attivazione
Un sistema estremamente utile per realizzare un primitivo sistema di "intelligenza" è il calcolo della distanza tra due oggetti virtuali. Prendiamo, per puro esempio, la simulazione di una sentinella; la sua aggressività può aumentare con l'avvicinarsi di un personaggio. Per rendere maggiormente realistico il suo comportamento si può controllare se il personaggio è all'interno dell'area visiva della sentinella, aggiungendo un vettore che indichi la direzione dello sguardo.

In alcuni casi è molto utile inserire delle "aree di attivazione", ossia zone nelle quali l'oggetto virtuale si comporta in un modo piuttosto che in un altro, con questo sistema si possono simulare allarmi, mine, ecc.

Con l'uso di questi due semplici metodi è possibile realizzare comportamenti pseudo-realistici, è doveroso specificare che la semplicità di questi sistemi è legata all'ambiente virtuale sui quali vengono usati. Calcolare se un personaggio virtuale "vede" un oggetto all'interno di una stanza vuota è molto più semplice che calcolarlo all'interno di una stanza piena di oggetti.

Tabelle di movimenti
L'uso di tabelle di movimenti è una tecnica usata principalmente nei videogame di alcuni decenni or sono. E' molto semplice da realizzare, non necessita di calcoli matematici ed è ragionevolmente realistica. Ovviamente il difetto maggiore è la non elasticità di questo sistema.

Nonostante questo tipo di tecnica sia antiquata è possibile utilizzarla in modo proficuo: realizzando tabelle di movimenti da utilizzare solo in alcuni casi particolari, evitando accuratamente di inserire valori assoluti ma solamente dei delta di posizione. In questo modo è possibile creare dei percorsi che possono essere compiuti dal nostro oggetto, consentendogli di poterli variare cambiando tipo di tabella. In questo caso è utile avere un buon numero di tabelle differenti, selezionabili in base a determinati eventi.

Inseguimento e fuga
Un altro ottimo sistema per simulare comportamenti di oggetti virtuali all'interno di un videogame consiste nell'utilizzare algoritmi di inseguimento, in particolare se si intendono realizzare prodotti di tipo arcade, come gli sparatutto.

Creare un oggetto che insegue un altro è facile: aventi le coordinate spaziali di entrambi, si muove l'inseguitore verso la direzione dell'inseguito. Questo metodo è molto semplice ma riduttivo, si ipotizza che ci si trovi in ambienti privi di ostacoli, nonostante ciò è molto utile per realizzare kamikaze o missili a ricerca. Un altro metodo applicabile consiste nel tracciare tutti i movimenti dell'inseguito e farli ripercorrere dall'inseguitore, in questo modo si evita il problema riscontrato nel sistema precedente: è possibile utilizzarlo in ambienti non vuoti.

Prendiamo ora in esame il sistema che si contrappone all'inseguimento: la fuga. Se l'ambiente virtuale in cui deve essere eseguito è privo di ostacoli, allora non si deve fare altro che eseguire il movimento opposto dell'inseguitore. In ambienti con ostacoli l'algoritmo diventa più complesso, solitamente si indica all'oggetto che deve fuggire una "via di fuga".

Menzione a parte merita il sistema per uscire da un labirinto; nonostante  possa sembrare un metodo poco utile nello sviluppo di un videogame, esso propone alcune caratteristiche interessanti. Se consideriamo l'algoritmo come:

do {
            procedere mantenendosi sulla destra;           
            se si incontra una diramazione procedi sulla destra;
            se si giunge in un vicolo cieco inverti la direzione originaria;
} fino all'uscita;

si può notare come sia possibile modificarlo per creare sistemi di inseguimento e di fuga migliori di quelli precedentemente presi in esame, è sufficiente cercare di trovare un punto specifico, solitamente un avversario o una via dell'uscita e il gioco è fatto. Ovviamente la complessità dell'algoritmo è abbastanza elevata ed è necessario tenere presenti alcune cose: vedere delle creature che "strisciano" attaccate a dei muri non è molto realistico, la direzione della creatura deve cambiare in base alla posizione del punto che si intende trovare, si deve integrare l'algoritmo di ricerca con altri sistemi maggiormente performanti da utilizzare nei momenti più opportuni. Sarà lo sviluppatore, considerando il livello di realismo e la complessità di realizzo, a decidere quali sistemi adottare, la cosa fondamentale è il risultato che si ottiene.

Macchine
Tutte le tecniche per simulare intelligenza da parte di oggetti virtuali esaminate sino ad ora sono interessanti, utili e non sono complicatissime da realizzare, hanno un notevole difetto: non possono essere utilizzate per la creazione di intelligenza complessa, questo è dovuto al fatto che ogni algoritmo simula un solo comportamento.

Per ovviare a ciò è possibile utilizzare delle macchine a stati finiti, ossia una macchina simulata per mezzo di software in grado di modificare il proprio stato in risposta ad eventi. Prendiamo in esame gli algoritmi di distanza, aree di attivazione, inseguimento, fuga e tabelle, se vogliamo simulare una sentinella possiamo creare una serie di eventi che determinano il metodo usato per il suo comportamento:

Evento Algoritmo Comportamento
Nemico molto lontano Tabella Continua la ronda
Nemico lontano Tabella Stato di allerta
Nemico vicino Inseguimento Allarme + insegui il nemico
Sentinella ferita Fuga Salvati

Com'è possibile osservare, il solo utilizzo di una macchina a stati e di alcuni semplici algoritmi, hanno permesso una buona simulazione di una creatura. Ovviamente, maggiore è il numero di eventi che si possono verificare, maggiore è il realismo prodotto.

Probabilità
Nella realizzazione di molti videogame ci si imbatte con il concetto di casualità e di probabilità, pensiamo per esempio alla simulazione del lancio di un dado. Essendo concetti matematicamente non perfettamente calcolabili, possono essere simulati in modo molto simile alla realtà, ma possono simulare comportamenti di oggetti o creature? Ovviamente non si ci può affidare alla sola casualità o fortuna, ciò renderebbe la simulazione altamente approssimativa e perciò insignificante dal punto di vista algoritmico.

Nonostante le premesse poco rassicuranti, mediante l'uso di sistemi basati sulla probabilità e sul caso, è possibile ricreare situazioni comportamentali abbastanza realistiche. Ciò si verifica creando sistemi di scelta pilotati, impostando eventi con probabilità maggiore rispetto ad altri. Per esempio, considerando la simulazione di una sentinella, possiamo impostare l'algoritmo come:

Nemico molto lontano
Probabilità Comportamento
70% Continua la ronda
15% Riduci la distanza con il nemico
10% Dai l'allarme
5% Spara

Per scegliere il comportamento da adottare basta calcolare un valore casuale tra 1 e 100 e controllare a quale tipo di "probabilità" appartiene, quindi si imposta l'algoritmo o gli algoritmi relativi all'azione da compiere.

Sistemi Euristici
In alcuni prodotti si ha la necessità di controllare e di manovrare gli oggetti virtuali creando una vera e propria tattica. Purtroppo tutti gli algoritmi presentati sino ad ora caratterizzano il comportamento di un solo oggetto, per creare qualcosa che li manovri in modo coerente si deve impostare un metodo che "valuti" le caratteristiche e le posizioni, in modo che sia possibile modificarle per ottenere un vantaggio rispetto all'avversario.

In generale si crea una funzione che valuti la situazione corrente, si modifica la situazione, si valuta la modifica apportata, se porta ad un miglioramento si continua con la tattica presa in esame altrimenti se ne cerca un'altra. Al termine si eseguirà la modifica che ha portato i miglioramenti più evidenti o che li recherà nel proseguito della partita virtuale. Il modello di valutazione che viene sviluppato attribuisce agli oggetti valori definiti dalla programmatore, questi valori non sempre sono assoluti ma spesso derivano dall'esperienza che lo sviluppatore ha accumulato, ovviamente questo porta alla realizzazione di sistemi che non sempre sono precisi ed affidabili.

Conclusione
Come si può capire, ci sono moltissimi modi per creare "intelligenza artificiale" all'interno di videogame, quelli che sono stati presentati sono solo alcuni mentre per altri abbiamo solamente dato una sparuta occhiata. Sarà lo sviluppatore a comprendere le problematiche inerenti al prodotto su cui sta lavorando ed a scegliere il metodo che più ritiene opportuno.

Copyright © 2000 Ing. Stefano Tamascelli
www.xteamsoftware.com
Articolo#11: [pubblicato il 04/11/00]

Pagine Utili

Indice Articoli
Articolo
Realizzazione di un Videogioco
Link
Sviluppatori di videogame
Link
Risorse per gli sviluppatori di videogame
Link
Riviste di VideoGame
Corso
Linguaggio C

 

 

Vuoi ricevere gratuitamente utili informazioni e curiosità direttamente via email?

Prometheo Srl - Gli articoli sono Copyright © 1999 - 2003 dei rispettivi Autori, pubblicati sul sito web Prometheo per gentile concessione degli Autori

Copyright © 1999 - 2014 Prometheo Srl - Per informazioni: info@prometheo.it (Informativa Privacy) - Numero Verde: 800.41.68.98

I prodotti citati sono marchi e marchi registrati dei relativi produttori. Ultimo Aggiornamento: 09/01/14.

Precedente ] Home ] Su ] Successiva ]