Newsgroup: it.comp.ia
Titolo: IA x video game

Salve, sono Angyel, qualcuno mi sa dire dove posso trovare aiuti su come
gestire una IA per video game?
magari con qualche esempio?
grazie in anticipo!


link non ne so però sono un programmatore di videogame in erba magari
parlandone può venire fuori qualcosa...
Ciao !                        {MSX}

Bene allora....
innanzitutto decidiamo il tipo di IA di cui discutere... fissiamone i
parametri relativi per la discussione e cominciamo!!!
e chiunque si voglia aggiungere lo faccia...
intanto ci penso anca io e poi aggiungerò al newsgroup...

Beh ma che tipo di AI ti interessa ?
Voglio dire, che tipo di gioco stai facendo (se ne stai facendo) ?

 e chiunque si voglia aggiungere lo faccia...
Se interessano reti neuronali e tempo permettendo, posso starci anche io.
Ho realizzato del codice per reti neuronali in C++. Brutto, non ottimizzato,
poco generalizzabile, ma funzionante e con poche pretese quanto a
dimensioni.
Fa reti di tipo Feed-forward a strati (senza limiti, ma di solito 1 strato
nascosto basta e avanza), con o senza salti, interamente connesse o no.
Cosa come queste di solito sono usate per codificare come come "reazione del
personaggio avversario" in maniera quasi umana, ma volendo si possono fare
altre cose, come la generazione di eventi "casuali" dipendenti dalle azioni
del giocatore, o addirittura tutta la IA del gioco.
Quello che più conta, però, è l'IDEA di base del gioco, non tanto la sua
realizzazione o la sua IA.
--
Alessandro Monti

Bene bene....
non ho in progetto alcun videogioco, ma non escludo che in un futuro
prossimo ci potrei entrare...
cmq sono di + per il ramo motori 3D e quello programmatistimistico... (bella
parola eh?)
cmq, restando in tema delle avventure con motore 3D si potrebbe discutere
delle IA dei personaggi avversari...
ad esempio lo stile di gioco è tipo i 3D che si sono evoluti dalla reliquia
di DOOM, ma a me piacciono di più in stile avventuroso, quindi non
sparatutto, e mi piace molto l'interazione con l'ambiente.
Bisogna però definire i vari tipi di interazione con l'ambiente, secondo i
gradi di difficoltà che essi rappresentano e anche per la questione
'Lunghezza di codice e tempo di esecuzione'...
partiamo magari da una cosa classica, semplice, ma probabilmente laboriosa e
interessante...
supponiamo che ci sia un essere di forma umanoide, in un ambiente 3D.
supponiamo inoltre che egli debba sorvegliare una zona, abbia un suo raggio
di vista, abbia un suo udito e debba controllare che nessuno oltrepassi la
sua zona (ad esempio una cinta muraria o una linea di confine in mezzo a
grandi edifici...)
come gestire le scelte tra il miglior percorso (minor pericolo + maggior
copertura da eventuali armi nemiche) per controllare un rumore sospetto o
l'eventuale reazione ad una entità ostile non autorizzata?
supponiamo che egli debba dare l'allarme, ma concediamogli il fattore 'se
rischio troppo a dare l'allarme mi salvo il culo e magari faccio il piccolo
eroe...'
scusate il news lungo... ma ci tengo ai dettagli, soprattutto per quanto
riguarda giochetti intelligenti...
beh, vedremo come viene fuori questo tanto atteso da parte mia Ultima IX THE
ASCENSION...
]X[ /\ |\| G Y E |_  ]X[

 eroe...'
Io farei in modo che il comportamento "standard" sia ben definito, o uguale
per tutti i mostri di quel tipo, oppure uno per uno dal designer. Ciò
rispecchia abbastanza bene quello che avviene negli ambienti militari, dove
ogni sentinella ha i suoi ordini/percorsi e li esegue pedissequamente.
Per gestire le altre situazioni, invece, ci possono essere molti approcci,
io ne propongo 2:
1) avere un insieme di regole del tipo:
- se senti un rumore, cerca di coprirti, es. seguire le pareti lentamente e
aumentare le probabilita di vedere il nemico (attenzione maggiore)
- se vedi un compagno morire affianco a te, cerca di scappare a cercare
aiuto prima di restare solo (e quindi un bersaglio facile)
- se sei molto ferito, tenta il tutto per tutto se sei vicino al nemico,
oppure scappa.
- ...
2) usare una (o più) rete neurale e addestrarla con comportamenti tipici con
parametri del tipo:
INGRESSI:
- stato di salute
- "potenza" di combattimento propria
- "potenza" di combattimento del nemico (es. ultima arma vista usare)
- numero di compagni vicini
- numero di compagni già morti (una specie di "morale")
- presenza di vie di fuga
- ordini tassativi (es. "resisti fino alla morte")
- ...
USCITE:
- scappa
- combatti
- chiama aiuto
- cambia posizione
- ...
Cosa ne dici? In questo modo potresti avere dei comportamenti abbastanza
reali senza influenzare troppo la velocità del gioco, dato che queste
decisioni sono comunque prese "ogni tanto", mentre normalmente le azioni
minori sono gestite da algoritmi ad hoc.
--
Alessandro Monti

 - ...
scusate l'intromissione; non ho mai programmato una rete neurale, bensi' ho
usato moltissimo
gli algoritmi genetici.
Secondo me il problema potrebbe essere risolto geneticamente anche se non so
ancora bene
come codificare il genoma e quale funzione di fitness usare.
Ci pensero' questa notte!!! ;-)
ciao ciao

 Ci pensero' questa notte!!! ;-)
Che ti porti consiglio. Credo che ogni contributo possa essere gradito.
Però tieni presente che non mai voluto dire che solo una rete neurale possa
dare un'implementazione adatta per il tipo di compito in questione,
semplicemente è l'unica che per le mie conoscenze potrei consigliare. Spero
che fosse già chiaro, ma spiegarsi meglio non fa mai male, no?
--
Alessandro Monti

 ma e' solo un abbozzo...
Io direi di fare come in natura: ogni nemico ha certi cromosomi, e agisce in
base ad essi, magari con una piccola fluttuazione casuale nella popolazione.
Ovvio che poi in ogni situazione ci devono essere alcuni parametri diversi,
per cui magari lo stesso nemico, dopo un primo scontro a fuoco in cui è
stato ferito, magari deve decidere di scappare in fretta, o usare armi più
pesanti.
Comunque, in questo modo, la situazione è "statica", in quanto ogni
individuo reagisce secondo i suoi cromosomi.
E' una situazione un po' diversa da come l'hai descritta tu: qui è
l'individuo che ha dei cromosomi, non la situazione.
--
Alessandro Monti

 come posso fare per risolvere questo problema?
Beh, mica bisogna calcolarla ogni millisecondo... credo che basti una volta
ogni tanto
Alcuni esempi:
- ogni secondo
- ad ogni refresh del video (supponiamo 25/30 volte al secondo)
- quando si verificano eventi (sparo del giocatore, ferimento di un
personaggio, giocatore "vicino", ecc.)
In questo modo, ottieni un minimo di stabilità, decidendo tu quando
calcolare la funzione, mentre nel resto del tempo, si continua con le
decisioni precedenti.
--
Alessandro Monti

Non ho avuto il tempo di leggere attentamente tutti i
post precedenti, perche' e' il primo giorno che ho scoperto
questo ng e mi sono gia' letto quasi tutti i messaggi...
Ho praticamente gli occhi a palla e doloranti (sono in facolta'
davanti ad un monitor 14 pollici)
Fra parentesi, date retta a me: non cercate di fare IA che
somiglino all'uomo. Supponiamo che ne venga fuori una come
me, poi si fara' del male da sola, danneggiando quindi anche
il vostro pc!!! Fate delle IA che somiglino a linux.
Comunque mi unisco al thread perche' in questi giorni, affascinato
da un corso universitario sull'IA, ho tentato di coinvolgere la
mia ragazza che fa fisica in un tentativo di simulare "cuccioletti"
armati in un mondo bidimensionale, con delle percezioni in ingresso
e che devono ridare azioni in uscita. Si' esatto, volevo dire
"agenti". 
L'ambiente dovrebbe contenere powerups e armi nuove e dovrebbe essere
estendibile per contenere oggetti di nuovo tipo restando utilizzabile
con agenti scritti per versioni precedenti del motore, che eventualmente
potrebbero anche "scoprire" come usare i nuovi oggetti.
Sono tutto entusiasta, spero di non seccarvi.
Beh, stiamo pensando a come scrivere un server robusto
per l'ambiente, che potra' essere invocato sia come dipendente dal
tempo sia come indipendente (tipo gioco a mosse) per dare il tempo di
"pensare" anche a funzioni computazionalmente un po'complesse.
Il motore usera' agenti in formato eseguibile per poter consentire
a chiunque di scrivere il proprio agente in qualunque linguaggio.
Poi gli agenti vengono messi insieme, e grazie ad un motore di
rappresentazione grafica ci si gode lo spettacolo!
Se volete saperlo l'idea e' nata dopo circa sei ore di gioco in
rete a doom. E so anche che ci sono un infinita' di giochi tipo
quake o unreal che gia funzionano egregiamente, ma bisogna pur
divertirsi ogni tanto.
Spero di avere un po' di tempo per lavorarci, ovviamente tutto GPL,
se avete consigli mandateli, appena sara' pronta una specifica 
definitiva dell'ambiente di simulazione la posto, cosi' tutti possono
incominciare a scrivere i loro robot.
Un cibernetico eliziano saluto
===============================================
Vincenzo Ciancia
Studente del Quarto anno  ( AH AH AH AH AH ...)
Corso di laurea in Informatica
Universita' di Pisa
-----------------------------------------------
Linux e' un regalo
Windows e' solo un pacco
===============================================

:
La cosa e' di certo divertente. :)
Se vuoi dei riferimenti per i "cuccioletti" :), cerca in letteratura su 
"petworld".
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/