Newsgroup: it.comp.ia
Titolo: Simulazione di una persona

Vorrei realizzare un gioco che simuli il comportamento di una persona.
Dovrebbe reagire agli stimoli esterni e magari imparare qualcosa. Insomma
una specie di tamagotchi più evoluto. Qualcuno ha qualche idea?
Grazie

una specie di tamagotchi più evoluto. Qualcuno ha qualche idea?
Ti consiglio di leggere "How to build a person", di Pollock. Si concentra 
sul problema globale, affrontandolo di petto, e ne sviluppa una teoria 
interessante, implementata da OSCAR.
Per quanto si possa non essere d'accordo con alcuni aspetti, e' un bel 
lavoro. 
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/

Dimenticavo l'URL:
http://www.u.arizona.edu/~pollock/


Dimenticavo l'URL:
http://web.tin.it/eloisa/pv.htm


 interessante, implementata da OSCAR.
Ehm.. ti ringrazie del consiglio, ma non saprei proprio dove trovare quel
libro...
Cmq credo che sia troppo complesso per me, io volevo semplicemente un metodo
in c++ per simulare la reazione di una persona di fronte ai cambiamenti
dell'ambiente e l'interazione con un'altra persona. In pratica mi servivano
dei consigli pratici per partire.
Ciao :)

 1997, Milano). Ne trovi un'anteprima in rete...
Grazie, sembra carino. Quando lo trovo lo prendo. Però ora quello che mi
serve è l'aspetto pratico, più che la teoria.
Ciao :)

 dell'ambiente e l'interazione con un'altra persona. In pratica mi
servivano
SEMPLICEMENTE?
--
Alessandro Monti


;____; Si... mica voglio fare una cosa complessa... mi basta un metodo che
tiri fuori la reazione della persona in base a fattori interni (emozioni,
stato d'animo, carattere) e esterni (caldo, freddo, quello che vede e che
gli succede). ovvio che non deve essere una cosa complicatissima.. per
ora... tutti questi stati devono essere rappresentati da variabili. ma non
riesco a capire come fare.

riesco a capire come fare.
Se vuoi una serie di reazioni prefissate, dov'e' il problema? :)
Una cosa semplice ed istruttiva che puoi fare e' usare un'approccio 'fuzzy':
- definisci un insieme di attributi
- ogni entita' possiede in un certo grado (un reale tra [0,1]) ciascuno di 
questi attributi 
- un'interazione con certi parametri modifica questi valori (formalmente e' una 
funzione sul dominio degli attributi + parametri su [0,1] )
- quando *osservi* un'entita' (cioe' richiedi lo stato istantaneo) l'operazione 
di osservazione fornisce gli attributi defuzzyficati (se il valore per un 
attributo e' minore di una certa soglia, l'osservazione ti dice che 
quell'entita' *non* ha quell'attributo).
Ovviamente la ricchezza del modello dipende dal numero di attributi e di 
interazioni. Inoltre, puoi migliorarlo aggiungendo: 
- relazioni tra attributi (quando uno cambia, questo cambiamento e' propagato 
anche su altri)
- definendo sottodominii e gerarchie sugli attributi; in altre parole, un 
approccio semplice e' dire
Persona: { biondo=0.001; bruno=0.9; castano=0.1 }
uno piu' complesso e' dire
Persona: { colore_dei_capelli = { biondo=0.001; bruno=0.9; castano=0.1 } }
Il difetto principale di questo modello ovviamente e' la rigidita' (reazioni e 
attributi sono hardwired) ma come dicevo e' semplice e divertente da 
realizzare.


 realizzare.
Cosa vuol dire hardwired?
Cmq pensavo si facesse con le reti neurali e ogni paramentro avesse un peso.
Ma nemmeno qui ho capito come fare.
Ciao ;_;

Ma nemmeno qui ho capito come fare.
LOL non e' che "si fa" con qualcosa e con qualcos'altro no. Gli approcci 
possibili sono moltissimi - quello a cui accennavo e' solo uno piuttosto 
semplice, tutto qui.


 persona) predefinito e rigido.
Per ora voglio creare una persona che non ragiona, ma che ha perň un suo
carattere. Prima hai detto, ad esempio, che se il valore fame sta tra 0.2 e
0.3, č pochissimo affamato. Perň non tutte le persone sono uguali, potrebbe
esserci una persona che ha fame prima e un'altra che ha fame dopo. Anche per
il potere sfamante dei cibi vale lo stesso discorso. Se ad esempio uno si
sazia prima e uno dopo? Quindi per due individui diversi, la risposta a fame
= 0.3 potrebbe essere diversa. Come si fa a fare questo? Devo definire
qualche funzione?
Poi persone diverse, reagiscono diversamente alla stessa situazione. Ad
esempio se getto un secchio di acqua gelata sopra a una Persona irascibile,
mi picchia, mentre se č una persona calma no.
Persone differenti potrebbero reagire diversamente alla temperatura ad
esempio...
Un altro problema č quello della memoria e delle emozioni... ad sempio, io
lo frusto. Dovrebbe ricordarsi che l'ho frustato e quindi provare paura e
rancore nei miei confronti. se lo frusto di nuovo, dovrebbe avere ancora piů
paura e iniziare ad odiarmi. Poi.. qui viene il bello, se sono gentile dopo
che l'ho frustato 100 volte dovrebbe ignorarmi e non fare pace, mentre se
l'ho frustato una volta potrebbe personarmi.
Come si gestiscono queste cose?
Ci sarebbero altre cose.. come il carattere, l'attitudine, le reazioni,
quelllo che vede, etc, ma chiedo dopo magari...
Ciao

 realizzare.
Oppure puoi usare un approccio con le reti neurali (esistono in rete diversi
programmi che le simulano).
I principi sono gli stessi, solo che le "regole" le può imparare da sola.
In pratica, se i tuoi attributi sono:
capelli: rossi, biondi, scuri (con una codifica come prima)
stomaco: vuoto, pieno, metà
puoi semplicemente dare alla rete una serie di esempi del tipo:
capelli=rossi, stomaco=vuoto -> Urla
capelli=biondi, stomaco=meta-> Urla
capelli=scuri, stomaco=pieno -> Dormi
...
Il bello è che non devi dare tutti gli esempi possibili, ma solo un
sottoinsieme significativo, e sperare che la rete risponda in modo
ragionevole, per esempio, con l'insieme di prima, potrebbe dire:
capelli=rossi, stomaco=metà -> Dormi
Anche se non l'hai addestrata con quegli Input
--
Alessandro Monti

 stomaco: vuoto, pieno, metà
Si', infatti io non facevo assunzioni sui valori iniziali per gli attributi
(che puoi far partire casualmente e far 'evolvere' mediante funzioni
definite da RN o AG)
La rigidita' pero' non e' tanto in questo, quanto nel fatto che gli
attributi (fame, sete, colore-dei-capelli etc) siano "precodificati".
Si potrebbe ad esempio combinare quanto sopra con un'approccio piu' generale
simulando sia l'entita' (che avrebbe ben poco a vedere con una persona ;-)
che l'ambiente; sottoporrli a mutue interazioni ed estrarre pattern (sia
d'azione che 'statici') che - quando si ripetono o sopravvivono a
sufficienza nell'evoluzione del sistema - assumono lo status di 'attributi'
e 'interazioni'... nel qual caso si genera casualmente un nome per essi. Gli
'organi di senso' non sarebbero altro che estrattori di pattnern che
favoriscono particolari configurazioni.
A questo punto dopo un po' di epoche ci si ritroverebbe con un entita' che
(se tutto converge ;-) ha sviluppato una certa conoscenza del suo mondo -
conoscenza *non* precodificata e un certo rozzo "linguaggio" (nomi per
pattern ricorrenti).
Osservando dall'esterno come l'entita' si comporta di fronte a certe
interazioni (cioe' che cambio di stato avviene nel suo sottoinsieme che lei
riconosce come suoi 'attributi') si potrebbero in carti casi molto fortunati
definire dei "dizionari" per tradurre pattern e nomi in italiano.. ad
esempio, se un certo pattern di interazione aumenta il valore di una sezione
riconosciuta come 'attributo' X e un'altro la aumenta, e c'e' un secondo
attributo Y che dipende da X in modo inversamente proporzionale, puoi
tradurre X con "fame" e Y con "felicita'"... ovviamente questo non si
verificherebbe quasi mai, dato a priori che il mondo dell'entita' e'
completamente sganciato dal nostro. Definendo pero' le interazioni di base
(la 'fisica' di quel mondo) in un modo strutturalmente analogo a quelle del
mondo reale, magari si riuscirebbe a ottenere il comportamento di un
filamento di DNA o cose simili... ;-)
Ovviamente, al momento e' fantascienza.

 wrote in message
80siuh$p7u$1...@fe1.cs.interbusiness.it...


 attributi (fame, sete, colore-dei-capelli etc) siano "precodificati".
Beh, ci sarebbero anche delle reti neurali che non hanno di questi limiti,
ma il tutto diventa più complicato.
Esistono reti che riescono ad "aumentare" o "focalizzare" certe
caratteristiche, che riconoscono il numero di caratteristiche (apprendimento
non supervisionato), che apprendono cose nuove senza dimenticare quelle
vecchie, e soprattutto reti miste, come sembra essere la rete neurale
"biologica".
Il limite maggiore è che si aumenta molto la complessità del lavoro, mentre
la richiesta era per qualcosa di semplice.
--
Alessandro Monti

la richiesta era per qualcosa di semplice.
Si', giusto. :)


 Si', giusto. :)
Chissà perché mi pare di capire che non avrei dovuto usare la parola
"semplicemente" -_-;

"semplicemente" -_-;
Bingo. :)
