La simulazione sociale: i modelli multi-agente
Transcript
La simulazione sociale: i modelli multi-agente
Simulazione sociale: tecniche, esempi e riflessioni Mario Paolucci ISTC/CNR, Rome, www.ip.rm.cnr.it www.ThinkinGolem.com Indice • Un esempio “classico” • Note sull’idea di simulazione • Il panorama informatico • Un esempio in fieri Un esempio “classico” (1) • Castelfranchi, C., Conte, R. & Paolucci, M. (1998). Normative reputation and the costs of compliance, Journal of Artificial Societies and Social Simulation, vol. 1, no. 3, <http://www.soc.surrey.ac.uk/JASSS/1/3/3. html> • 2000, Paolucci M., Marsero M. & Conte R., “What is the use of Gossip? A sensitivity analisys of the spreading of respectful reputation”, in R. Suleiman, K.G. Troitzsch, N. Gilbert (eds.) Tools and Techniques for Social Science Simulation, Physica, Heidelberg, 302-314 Un esempio “classico” (2) • Un numero variabile di agenti su una griglia toroidale effettuano azioni contemporanee. L’obiettivo è quello di raggiungere un valore elevato di forza; questa cresce acquisendo cibo, che è disseminato in modo casuale sulla griglia, e decresce muovendo e attaccando. • Un agente può attaccarne un altro se il secondo sta mangiando, per strappargli l’unità di cibo • I risultati vengono valutati sia sulla forza finale che sulla distribuzione della forza in sottopopolazioni Un esempio “classico” (3) • Gli agenti si differenziano per strategie: Cieca, Profittatrice, Rispettosa (per queste due, la norma è di precedenza sul ritrovamento), Ultimatum. • Gli agenti normativi possiedono diverse sottostrategie di risposta: assoluta, quasi-razionale (punitiva), razionale, super-razionale (di riferimento) • La reputazione gioca un ruolo fondamentale nelle due sotto-strategie centrali Un esempio “classico” (4) • Run test • Analisi risultati Xi n fo N o Xi n f o 6 0 0 0 5 9 7 6 . 5 2 5 6 2 0 . 5 6 5 0 0 0 S t r 4 5 8 . 1 6 4 0 0 03 e n g t h 3 0 0 0 3 7 9 8 . 6 6 0 0 0 4 6 1 9 . 5 5 1 2 . 8 2 5 0 0 04 S t r 4 0 0 0 e n g t h 3 0 0 0 2 0 0 0 2 0 0 0 1 0 0 0 1 0 0 0 0 0 q s r a t r a t B e h a v i o u r 5 0 0 3 . 7 4 7 0 0 . 6 2 R e s p e c t f u l q s r a t r a t B e h a v i o u r C h e a t e r s /*** please be nice to this program; *** do not beat it with a stick or say cruel things to it; *** it has been created and developed with love */ /*** COPYRIGHT CNR/IPsi/Rep. IAMCI/simulation team 1995 *** This program can be used for research with the *** permission of the copyright holders. ***/ Un esempio “classico” (3) /** ======================================================== *** **** nsimu.c -- simulator of normative agents *** *** Owner: CNR/IPsi/Rep. IAMCI/simulation team *** Mffdate: Mario [10 Jun 1996] *** Creator: -- see next header *** Maintained: Mario *** Development-envt: MSDOS, QC2.5; IBM AIX Risc 6000; HP-UX PA. *** Development-host: pogo, riscgest *** Development-path: ~nikolov/w/sim/n/w *** Usage: #<USAGE INSTRUCTIONS|NOTES> *** Routines: XXX list is incomplete XXX *** + UNIX-specific: fileno, isatty *** + SunOS-specific: random *** Files: #<PATHNAMES> *** Variables: #<NAMES> *** Sections: *** --- Developers: ------------------------------------*** --- Development history: ---------------------------*** --- cpp defintions: --------------------------------*** --- globals: ---------------------------------------*** --- main: ------------------------------------------*** --- functions: -------------------------------------*** Features: #<DESCRIPTION> *** Bugs: -- unknown ;-) *** To-do: #<A LONG LIST> *** *** ----------------------------------------------------- */ /********************************************************************* ** MICEMAR.C ** ** versione 0.2 with REP ** ** original concepts: ** ** Catoni-Castelfranchi ** ** revision & reimplementation: ** ** Mario Paolucci ** ** MAG-GIU 95 "Cesena is on my mind" ** **********************************************************************/ /** --- Developers: ------------------------------------- */ /*** The CNR/IPsi/Rep. IAMCI/simulation team are: *** *** CASTELFRANCHI <[email protected]> *** CONTE <[email protected]> *** NIKOLOV <[email protected]> *** a.k.a. <[email protected]> *** PAOLUCCI *** a.k.a. <[email protected]> Come vengono realizzati? • Agenti “semplici” • Linguaggio procedurale di terza generazione (in questo caso, c) • Costrutti fondamentali: decisioni (if) e cicli (switch) • Strutturazione: subroutine Il ciclo centrale /* decision loop*/ forall_agents (i) if (ag[i]=='d') continue; /* i morti non votano*/ ox[i]=x[i]; oy[i]=y[i]; /* if i find food here...*/ if ( hay_cibo(x[i],y[i]) != -1 ) {ag[i]='m'; continue;} /* else i'll look around...*/ if ((ag[i]=vista(&ox[i], &oy[i]))=='r') continue; /* or smell around...*/ if ((ag[i]=fiuta(&ox[i],&oy[i]))=='f') continue; /* last chance is war*/ if ((ag[i]=attacca(i, &ox[i], &oy[i]))=='a') {if (gens[i]!=4) attacchi[i]++;continue;} /* solo et pensoso i piu' deserti campi*/ ag[i]=vaga(&ox[i], &oy[i]); end_forall_agents(i) /*look*/ # if ANSI_PROTO_P char vista (int *obx, int *oby) # else char vista (obx, oby) int *obx; int *oby; # endif { int c,xx,yy; Subroutine: vista if (RNDIRP) rnd_index(4); for (c=0;c<4;c++) { xx=*obx+crux[rndperm[c]]; /* do' un'occhiata attorno...*/ yy=*oby+cruy[rndperm[c]]; if (out_p(&xx,&yy)) continue; if (hay_cibo(xx,yy) != -1) /** se c'e' cibo... **/ { if ( hay_agente(xx,yy) == -1) { *obx=xx; *oby=yy; return('r'); /*** e se non c'e' nessuno ...***/ } } /*end if c'e` cibo*/ } /*end for c (direzioni stella)*/ return(0); /* non vedo nulla di buono, prova con qualcos'altro*/ } /*end vista() */ /*attack*/ # if ANSI_PROTO_P char attacca (int io, int *obx, int *oby) # else char attacca (io, obx, oby) int io; int *obx; int *oby; # endif { int c,xx,yy,numcibo; Subroutine: attacco if (RNDIRP) rnd_index(4); for (c=0;c<4;c++) { xx=*obx+crux[rndperm[c]]; /* do' un'occhiata attorno...*/ yy=*oby+cruy[rndperm[c]]; if (out_p(&xx,&yy)) continue; if ((numcibo=hay_cibo(xx,yy)) != -1) /*cibo occupato (altrimenti avrebbe scelto 'r')*/ { if (!(tabu(io, hay_agente(xx,yy),numcibo))) { *obx=xx; *oby=yy; return ('a'); /* se non ci sono tabu' attacco*/ } } } /*end for c (direzioni stella)*/ return(0); /* non vedo nulla di buono, prova con qualcos'altro*/ } /*end attaccca() */ # if ANSI_PROTO_P int tabu (int io, int nemico, int numcibo) # else int tabu (io, nemico, numcibo) int io; int nemico; int numcibo; # endif { int c; Subroutine: tabu if (gens[io]==1) return(0); /*NO tabu'*/ if (gens[io]==4) return(0); /*NO tabu'*/ if ( (gens[io]==2)&&(forza[nemico]>forza[io]) ) return(1); /*tabu'*/ if (gens[io]==3) { if (BHABSP) /*absolute respect*/ { for (c=0;c<5;c++) if (prop[numcibo][c]==nemico) return(1); return(0); } else if (BHQATP) /*follow reputation quasi-rationally */ { if (rep[io][nemico]=='r') { for (c=0;c<5;c++) if (prop[numcibo][c]==nemico) return(1); } return(0); } else if (BHRATP) /*follow reputation rationally*/ { if (rep[io][nemico]=='r') { for (c=0;c<5;c++) if (prop[numcibo][c]==nemico) return(1); } else if (forza[nemico]>forza[io]) return(1); return(0); } else if (BHSATP) /*super-rational */ { if (gens[nemico]==3) { for (c=0;c<5;c++) if (prop[numcibo][c]==nemico) return(1); } return(0); } else { printf("\nscappato da tabu\n");exit(2);} } /*close if*/ Esercizi • Eliminare il fiuto • Aumentare la priorità dell’azione aggressiva • Aggiungere una nuova routine alla sequenza, come ultima opzione • Modificare il comportamento aggressivo (ad es. aggiungendo una possibilità di attacco non in presenza di cibo) • Aggiungere una nuova tipologia di agente Indice • • • • Un esempio “classico” Note sull’idea di simulazione Il panorama informatico Un esempio in fieri Modelli e simulazione • Modello: un modo per descrivere la parte del mondo reale che ci interessa – limiti e astrazioni che individuano la zona di applicabilità – descrizione del meccanismo IN Elaborazione OUT – IN: Scelta dei parametri e numeri casuali; OUT: selezione di informazioni sullo stato e successiva elaborazione Modelli e simulazione (2) • Possibilità di far realizzare computazioni, impensabili dall'uomo, alla macchina – integrazione di equazioni, evoluzione di automi cellulari o di algoritmi genetici o di reti neurali o semantiche o bayesiane, di derivazioni di teoremi Modelli e simulazione (3) • Simulazione: applicazione del modello – La simulazione è stata utilizzata dalle scienze dure in diversi modi. Il più rilevante è quello di conferma e previsione di un modello – I risultati vengono poi inseriti di nuovo nel modello per confermarlo, smentirlo, o stabilirne i limiti. Simulazione e scienze sociali • l'esperimento reale può essere impossibile, sia per motivi pratici che per motivi intrinseci allo stato della teoria – Es. collaborazione vs. comportamento utilitaristico in economia • Grazie all'uso delle macchine che contano, gli studi sul sociale stanno uscendo da una condizione di infalsificabilità • è possibile introdurre modelli che non abbiano un riferimento diretto al mondo reale: banco di prova per l'applicazione di idee e intuizioni Simulazione e scienze sociali (2) formalizzazione dei modelli (banco di prova) emergenza di nuovi comportamenti (sistemi complessi) Teoremi di esistenza Indice • • • • Un esempio “classico” Note sull’idea di simulazione Il panorama informatico Un esempio in fieri Paradigmi e sistemi • Programmazione procedurale o dichiarativa: l’idea fondamentale di algoritmo • Tecniche di nuova generazione: dall’Object-Orientation all’AgentOrientation • Tool e strumenti “prefabbricati” Object-Orientation (1) • Dall’impostazione algoritmica a quella descrittiva del mondo reale. Evoluzione attraverso il tipo di dati • Astrazione – Processo principe della modellizzazione • Incapsulamento – Combatte la complessità, localizza e contiene il cambiamento; • Ereditarietà • Overloading, overriding, interfacce… Object-Orientation (2) • Oggetti (estensione) – Incapsulano attributi e operazioni (metodi, ovvero algoritmi) – Possono essere attivi o passivi, transienti o persistenti • Classi (intensione) – Definiscono accessibilità, aspetti statici e dinamici – Possono essere astratte o concrete – Gestiscono l’appartenenza degli oggetti (singola, multipla, statica o dinamica) Object-Orientation (3) • Il paradigma ad oggetti, in quanto derivato da un modello del mondo reale, facilita – Creazione e riuso – Comunicazione – Impacchettamento Sviluppo di software e comunicazione • Importanza della comunicazione: da un mondo di artigiani a gruppi di lavoro di centinaia di persone • Divisione del lavoro: dalla dettatura alla suddivisione delle resposabilità • Modelli grafici per la comunicazione e l’elaborazione, tra rigore e immediatezza E-R UML Paradigma multi agente • Caratteristiche dell'agente 1. autonomia, la capacità di essere continuamente attivo senza la necessità di eventi esterni attivatori; 2. socialità, ovvero la capacità di interagire con altri agenti; 3. reattività, ovvero la capacità di reagire a determinati eventi nel mondo esterno; 4. proattività, cioè la capacità di causare eventi non in modo esclusivamente reattivo, ma come se si seguisse un piano autonomo. Indice • • • • Un esempio “classico” Note sull’idea di simulazione Il panorama informatico Un esempio in fieri Vampiri /** Project "TheCave" * Simulation of normative behavior * Loosely inspired from * Wilkinson, G. S. (1984) Reciprocal food sharing in the vampire bat. - Nature 308: 181-184. * * @copyright Mario Paolucci, Leon Van Der Torre * ISTC/CNR, Rome, www.ip.rm.cnr.it * Vrie University, Amsterdam * ThinkinGolem pscrl, www.thinkingolem.com import java.util.*; public class Bat { public String name; World w; Experiment ex; static public Collection bats = new ArrayList(); double foodReserve = 0.0; int deaths = 0; Book myBook; La classe del vampiro Bat(World w) { Debug.p("A new Bat is being created; He is the number " + (bats.size()+1)); bats.add(this); //myBook = new Book(this); // this was REALLY silly.... this.w = w; ex = w.ex; //Debug.p(ex.rand); foodReserve = ex.INITIAL_FOOD; name = ex.names.getName(); } // Associations // Operations String doAction() { Debug.p(" " + this + " is initiating action with "+foodReserve+" food", this); if (foodReserve >= ex.HUNGER_LEVEL) { Debug.p("He is satisfied ", this); return "satisfied"; } else { Bat exploit = myBook.getNextDebtor(); if (exploit==null) return "Outta luck"; do { double yum = exploit.giveFood(this, ex.HUNGER_LEVELfoodReserve+2*ex.ASKING_COST); if (!diet(ex.ASKING_COST)) return "dead"; if (yum>0.0) { myBook.incrementDebt(exploit, yum); eat(yum); } if (foodReserve >= ex.HUNGER_LEVEL) return "satisfied"; else exploit = myBook.getNextDebtor(); } while (exploit!=null); //attn: ,null signals exhausted list Debug.p("Bat: He is not satisfied ", this); return "unsatisfied"; //if it falls through the whole loop } }// end doAction /* If receive request Saluti Le diapositive saranno disponibili (a partire dal fine settimana) su www.thinkingolem.com/SimulazioneSiena/lezione08052001.htm L’autore è contattabile all’indirizzo [email protected]