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]