Newsgroup: it.comp.ia
Titolo: LO GNAMMY INTELLIGENTE DIGITALE

Dunque sono davanti ad un problemino informatico che magari per
qualcuno di voi e' una cavolata, ma che mi sta facendo diventare pazzo
!!! Quindi se qualcuno mi da una manina mi farebbe moooolto felice !
Allora, il problema e' il seguente:
cosrruire un software (in qualsiasi linguaggio, ma a me interessa il
provedimento teorico) che simuli il monmdo dello Gnammy che ha le
seguenti caratteristiche:
Una matrice 9 x 9 con all'interno una creaturina (lo gnammy appunto)
che deve muoversi in modo casuale all'interno della matrice occupando
sempre una sola casellina; ora lo gnammy dispone di 20 punti salute e
ogni mossa che fa ne perde uno, quando arriva a zero (quindi dopo
venti passi) muore.
All'interno della matrice l'unica speranza di vita e' una pizza che si
trova sempre ferma nella stessa posizione (che all'inizio della
simulazione viene decisa in modo casuale); quando lo gnammy capita
sulla casella della pizza se la mangia tutto contento e la sua salute
se ne torna a 20, a questo punto la puzza appare spostata di due
caselle a sinistra e di due in basso (eventualmente spuntando
dall'altra parte della matrice) e lo gnammy continua a camminare a
random finche' o muore di fame o ritrova la piuzza e cosi' via.
Domanda : supponendo che quando lo gnammy muore risorga in un punto
casuale della matrice (quindi di nuovo con salute 20 e ricominci a
scorrazzare libero, (mantenendo i suoi ricordi delle "incarnazioni
passate") come e' possibile far si che lo gnammy (inizialente
ignorante della propria sfigata condizione) cominci dopo una certa
n-esima generazione a cercare autonomamente la pizza, avendo capito
che e' il suo unico mezzo di sopredavvivenza ?
Grazie dell'attenzione.
Augusto Pucci
Webmaster di Prospektiva On-line
http://go.to/Prospektiva

 Augusto Pucci
Fammi capire bene le premesse sarebbero queste :
Il nostro Gnammy è cosciente dell'universo virtuale in cui si trova (la
matrice 9x9) ed è in grado di determinare la sua posizione(coordinate x,y)
Non è cosciente del fatto che se non mangia muore
Non sà dove si trova la pizza
Non sà dove riappare ogni volta.
Possiede una sorta di memoria genetica che gli consente di rammentare le
esperienze delle vite passate.
Vorresti la descrizione di come realizzare l'AI che possa conseguire questi
risultati :
Apprendimento del suo stato di mortalità dopo 20 mosse
Apprendimento del fatto che se si pappa la pizza ripristina la sua vitalità
Apprendimento del modo di trovare a colpo sicuro la pizza prima del termine
della sua vitalità
Corregimi se ho sbagliato l'analisi del problema che hai posto, in modo che
posso cercare di formularti una possibile soluzione che sia realizzabile
concretamente e in modo semplice
Ciao
Marco d'Ambrosio  
m.dam...@tiscalinet.it
http://utenti.tripod.it/razzimodellismo
    ACME I-RM-05
http://web.tiscalinet.it/mda
http://digilander.iol.it/robotica
 (under construction)

 della sua vitalità
Non solo. Probabilmente vuole anche che capisca che morire e risorgere è
peggio che mangiare la pizza (chissà poi perchè).
--
Alessandro Monti

Il problema sta esattamente come lo hai posto, tieni presente anche
che:
a)lo gnammy si muove solo in orizzonytale e verticale (mai diagonamle)
e che
b) una volta mangiata la pizza ricompare shiftata di due a sx e due in
basso (eventualemnte dall'altra parte della matrice) e lo gnammy
dovra' riuscire a capire pure questo 


Exatto ! Perche' la pizza e' la sua vita !!! Pensa te se chi ha
concepito il problema era americano gli andava peggio !!! Hamburger
per tutta la vita !


 rappresentazioni di dati suggeriresti di usare ?
Direi che ogni strategia è un algoritmo pre-confezionato (o generato in
qualche modo) e numerato (per comodità).
Il numero ti serve solo come indice in modo da sapere quale strategia ha
vinto, e probabilmente corrisponderà con il numero di gnammy (o li vuoi
chiamare per nome?).
A questo punto, a parte la fatica di scrivere 100 strategie diverse o una
sola molto parametrizzata, il gioco è fatto. Ogni gnammy sarà un record del
tipo:
struct{
    int strategia;
    int salute;
    int x,y;
}
E non ti serve nient'altro che una funzione che, dato lo gnammy e la
posizione della pizza (che puoi includere per comodità nella strucu dello
gnammy), puoi decidere ogni passo.
Ah, probabilmente ti serve avere un contatore globale dei passi, e strutture
varie per raccogliere le statistiche.
Non sarebbe probabilmente male inglobare tutti gli gnammy "vivi" in una
lista. (a parte il fatto che risorgono subito).
Potresti anche fare in modo che ogni gnammy, una volta risorto, finisce in
fondo alla lista. Oppure conti semplicemente lo gnammy che ha punteggio più
elevato (probabilmente quello che ha imparato di più). Oppure aggiungi un
"contatore di morte" nello gnammy.
Le varie strategie potrebbero essere:
vai sempre a dx
vai sempre a sx
...
vai 1 a dx e poi 1 in alto (e ripete)
vai 2 a dx e poi 2 in alto
...
e così via all'infinito.
Nota che ogni strategia può essere codificata con un numero variabile di
bits. Ovvero:
Numeri le direzioni (4 se si muove solo ortogonalmente, 8 se sono ammesse le
diagonali, il che significa 2 o 3 bits per direzione).
Lo gnammy che va sempre a dx ha 2 bit che valgono (ad esempio) 00
Lo gnammy che va sempre a sx ha 2 bit che valgono (ad esempio) 01
Lo gnammy che va 1 a dx e 1 a sx ha 4 bit che valgono (ad esempio) 00 01
...
Lo gnammy che 1 a dx, 4 a sx ha 10 bit che valgono (ad esempio) 00 01 01 01
01
...
La cosa può essere interessante perchè:
- ogni strategia ha un numero ordinale molto preciso, nessun bit va sprecato
- questa codifica può essere paragonata alla codifica dei geni naturali
(quelli del DNA), per cui sono possibili anche operazioni di "riproduzione",
come in tutti gli algoritmi genetici, dando così anche un solido fondamento
teorico a questa soluzione.
Nota che potresti anche ampliare il dominioin molti modi.
Uno (facile) che mi viene in mente è il seguente: immaginiamo che
probabilmente il fatto di essere già morto (o di avere la salute sotto una
certa soglia) sia importante.
Possiamo codificare il tutto immaginando di avere 2 cromosomi: 1 per la
situazione "buona salute" e l'altro per "cattiva salute". A questo punto, ad
ogni passo devi seguire le mosse di un cromosoma o dell'altro a seconda
dello stato di salute del povero gnammy, e quindi aumentare notevolmente le
sue capacità di apprendimento.
Purtroppo, aumentando la complessità delle strategie possibili, aumenti
anche di molto la complessità del programma. La codifica della strategia
potrebbe non essere più contenibile in un int. Il fatto di avere N
cromosomi, implica che devi avere un array di strategie. Il fatto di avere
così tante possibilità implica anche che non ti bastano più le 100 arene che
avevo previsto, ma devi averne almeno tante quante sono gli gnammy, e
oltretutto devi ripetere molte volte i cicli in modo tale da dare qualche
possibilità allo gnammy che nasce in un punto a caso e pertanto non può
applicare la sua strategia, anche se fosse buona.
Spero di averti dato delle buone dritte, di più penso che potrei solo
scriverti io il programma, ma proprio non posso dediccarti tutto questo
tempo. Se fossi in te mi limiterei ad 1 solo cromosoma e a codificare circa
4 mosse. Non basterebbe a gestire la situazione del superamento del bordo, a
meno che i bordi non siano "atrraversabili", ma per iniziare credo che
basti. Probabilmente, se tutto ciò riesci a programmarlo e funziona, ti
sarai già stufato dello gnammy e ti dedicherai a cose più interessanti.
Ricordati solo di postarle dove questi problemi sono trattati, e cioè su
it.comp.ia, dove rimando ogni risposta.
--
Alessandro Monti

 wrote:

Infatti!! se muore e poi risorge che gnene frega di mangiarsi la pizza ??
:))
Mad Hatters