Professional Documents
Culture Documents
http://grasia.fdi.ucm.es
Este tutorial se ha desarrollado como parte del proyecto SiCoSSys, subvencionado por el Ministerio de Ciencia e Innovacin TIN2008-06464-C03
Mason
Multi-Agent Simulator Of Neighborhoods... or Networks... or something... Librera Java de simulacin multi-agente de eventos discretos
Desarrollado conjuntamente por el Evolutionary Computation Laboratory y el Center for Social Complexity, ambos de la George Mason University
Mason
Caractersticas
100% Java (1.3 o ms) Eficiente y portable (ncleo pequeo) Modelos independientes de la visualizacin, que se puede aadir, quitar o cambiar en cualquier momento Los modelos se pueden parar y continuar, incluso migrando dinmicamente entre varias plataformas Se pueden reproducir resultados idnticos entre plataformas Los modelos son autocontenidos y pueden ejecutarse en otros frameworks y aplicaciones Java (p.ej. como applets) Visualizacin 2D y 3D Se pueden generar diagramas, grficos, flujos de datos, imgenes y pelculas Quicktime de la simulacin
Mason
Instalacin
Descargar el software
http://cs.gmu.edu/~eclab/projects/mason/mason.zip
Adicionalmente
Para 3D: instalar el framework Java3D Para generar pelculas o grficos de la simulacin, cargar varias libreras adicionales:
Documentacin:
Las dems veces que se cree un proyecto Mason basta con incluir la librera Mason
Mason
Mason
Eficiente con grandes nmeros de agentes Garantizar la duplicabilidad de los resultados cientficos Alto grado de modularidad y flexibilidad Ncleo pequeo y fcil de entender Separar las herramientas de visualizacin Check-pointing y recuperacin
Mason
Arquitectura en capas
Utilidades Core model library Herramientas de visualizacin Capas de simulacin personalizadas Aplicaciones de simulacin
Mason
Checkpointing y recuperacin
Mason
Arquitectura
Clara separacin de Modelo y Vista
(patrn MVC)
Mason
10
Modelo
Un planificador (sim.engine.Schedule) de eventos discretos, que planifica: Agentes Fields: representan el espacio
Un field es una estructura de datos que relaciona objetos y valores Existen campos ya construidos:
Networks continuous space Grids
1. 2.
Mason
11
Vista
Herramientas de visualizacin 2D y 3D Plug-ins para visualizacin adicional (p.ej. GIS) Una vista se encapsula en un objeto asim.display.GUIState, que contiene:
El controlador maneja varias ventanas llamadas displays, que hacen la visualizacin 2D o 3D Los displays muestran los campos usando uno o ms field portrayals
Un field protrayal puede visualizar objetos individuales o valores de los campos llamando a un simple portrayal que est diseado para mostrar ese objeto o valor particular
12
Utilidades
Distribuciones de nmeros aleatorios Colecciones de objetos Objetos para inspeccionar Java Bean Properties GUI widgets Generacin de pelculas y fotografas de la simulacin
Externas:
Mason
13
Ejecucin
La simulacin es un programa Java que usa las libreras Mason Pueden ejecutarse como applets (p.ej. web de Mason)
Mason
14
Ejemplo
Cap. 2 del manual de Mason (Student Schoolyard Cliques) Una red social en un espacio bi-dimensional continuo que representa el patio de un colegio y el colegio en el centro
Mason
15
public class Studentsextends SimState{ public Continuous2Dyard =new Continuous2D(1.0,100,100); public int numStudents =50; public Students(long seed){ super(seed); } La clase sim.engine.SimState usa un generador de nmeros aleatorios de Mason
public void start(){ super.start(); //cleartheyard yard.clear(); //addsomestudentstotheyard for(int i=0;i<numStudents;i++){ Studentstudent=new Student(); yard.setObjectLocation(student, new Double2D(yard.getWidth()*0.5+random.nextDouble() 0.5, yard.getHeight()*0.5+random.nextDouble() 0.5)); } }
Juan Pavn - UCM 2011 Mason
16
El modelo: inicializacin
import sim.engine.*; import sim.util.*; import sim.field.continuous.*; public class Studentsextends SimState { public Continuous2Dyard =new Continuous2D(1.0,100,100); public int numStudents =50; public Students(long seed){ super(seed); Inicializacin del modelo } public void start(){ Crea agentes y los coloca en super.start(); un espacio //clear the yard yard.clear(); //addsomestudentstotheyard for(int i=0;i<numStudents;i++){ Student student =new Student(); yard.setObjectLocation(student, new Double2D(yard.getWidth()*0.5+random.nextDouble() 0.5, yard.getHeight()*0.5+random.nextDouble() 0.5)); } }
Juan Pavn - UCM 2011 Mason
17
Mtodo main
Crea una intancia del modelo (subclase de SimState) e inicializa el generador de nmeros aleatorios con una semilla (p.ej. la hora actual) Llama el mtodo start() del modelo Llama repetidamente el mtodo step(SimState state) del planificador, que llamar a cada uno de los agentes (mtodo step) Cuando no quedan agentes o al cabo de N iteraciones, llama al mtodo finish() por si hubiera que hacer alguna limpieza
2. 3.
4.
Mason
18
public static void main(String[]args){ SimStatestate= new Students(System.currentTimeMillis()); state.start(); do if (!state.schedule.step(state))break; while(state.schedule.getSteps()<5000); state.finish(); System.exit(0); }
Mason
19
El espacio
import sim.engine.*; import sim.util.*; import sim.field.continuous.*;
public class Studentsextends SimState { public Continuous2Dyard =new Continuous2D(1.0,100,100); public int numStudents =50; public Students(long seed){ super(seed); } Campo 100x100
public void start(){ super.start(); Utilizacin del field //clear the yard yard.clear(); //addsomestudentstotheyard for(inti=0;i<numStudents;i++){ Student student =new Student(); yard.setObjectLocation(student, new Double2D(yard.getWidth()*0.5+random.nextDouble() 0.5, yard.getHeight()*0.5+random.nextDouble() 0.5)); } }
Juan Pavn - UCM 2011 Mason
20
Mason
21
public void step(SimStatestate){ Obtiene su localizacin Studentsstudents=(Students)state; Mtodo step: se le pasa el Continuous2Dyard=students.yard; estado (el Double2Dme=students.yard.getObjectLocation(this); modelo) //addinavectortothe"teacher" thecenteroftheyard MutableDouble2DsumForces=new MutableDouble2D(); Considera sumForces.addIn(new Double2D((yard.width *0.5 me.x)* una fuerza students.forceToSchoolMultiplier, de atraccin (yard.height*0.5 me.y)*students.forceToSchoolMultiplier)); hacia el // addabitofrandomness centro y se sumForces.addIn(new Double2D(students.randomMultiplier * mueve (students.random.nextDouble()*1.0 0.5), aadiendo tambin un students.randomMultiplier *(students.random.nextDouble()*1.0 factor 0.5))); aleatorio sumForces.addIn(me); students.yard.setObjectLocation(this,new Double2D(sumForces)); } } Se mueve a la nueva localizacin
Juan Pavn - UCM 2011 Mason
22
yard.getHeight()*0.5+random.nextDouble()0.5)); schedule.scheduleRepeating(student); } }
Juan Pavn - UCM 2011 Mason
23
MASON Version 16. For further options, try adding ' -help' at end. Job: 0 Seed: 1321991027015 Starting Students Steps: 100000 Time: 99999 Rate: 91.575,09158 Steps: 200000 Time: 199999 Rate: 124.223,60248 Steps: 300000 Time: 299999 Rate: 129.198,96641 Steps: 400000 Time: 399999 Rate: 125.786,16352
>
MASON Version 16. For further options, try adding ' -help' at end. Job: 0 Seed: 1321990820238 Starting Students Steps: 100000 Time: 99999 Rate: 91.407,67824 Steps: 200000 Time: 199999 Rate: 124.378,10945 Quit
Mason
24
Visualizacin de la simulacin
Crear un objeto de visualizacin (heredero de GUIState) Crear una consola para controlar la ejecucin de la simulacin Hacer visible la consola
Mason
25
Visualizacin de la simulacin
import sim.engine.*; import sim.display.*; public class StudentsWithUIextends GUIState{ public static void main(String[]args){ StudentsWithUIvid=new StudentsWithUI(); Consolec=new Console(vid); c.setVisible(true); } public StudentsWithUI(){ super(new Students(System.currentTimeMillis()));} public StudentsWithUI(SimStatestate){super(state);} public static StringgetName(){ } }
Juan Pavn - UCM 2011 Mason
return "StudentSchoolyardCliques";
26
Visualizacin de la simulacin
Mason
27
Visualizacin de la simulacin
Para aadir una visualizacin de lo que ocurre se pueden utilizar objetos de visualizacin 2D y 3D
Display
sim.display.Display2D
Field protrayal
Asociado al display, permite dibujar e inspeccionar objetos field Llama a uno o ms simple protrayals
sim.portrayal.simple.OvalPortrayal2D pinta objetos como crculos
Mason
28
Display 2D de la simulacin
Nuevas variables:
public Display2Ddisplay; public JFramedisplayFrame; ContinuousPortrayal2DyardPortrayal =new ContinuousPortrayal2D();
Nuevos mtodos:
public void init(Controllerc){ super.init(c); display =new Display2D(600,600,this); display.setClipping(false); displayFrame =display.createFrame();
Creacin del display 2D con dimensin 600x600 y sin recortar el field portrayal (que es de 100x100) Colocar el display 2D en un JFrame al que se le da un nombre Al registrar el JFrame aparecer en la display list de la consola Visualizar la ventana del display 2D Asociar el field portrayal al display, llamndole Yard
29
Display 2D de la simulacin
Nuevos mtodos:
public void start(){ super.start(); setupPortrayals(); } public void load(SimStatestate){ super.load(state); setupPortrayals(); } public void quit(){ super.quit(); displayFrame =null; display =null; }
Se llama al destruir el GUI para hacer limpieza Se llama al recargar una simulacin tras un checkpoint Se llama al pulsar el botn Play y antes del mtodo start() del modelo
if (displayFrame!=null)displayFrame.dispose();
Mason
30
Display 2D de la simulacin
Nuevos mtodos:
public void setupPortrayals(){
Mtodo particular para preparar la visualizacin GUIState tiene dos variables: state: el modelo controller: la consola
Studentsstudents=(Students)state;
Indica al field protrayal qu todos los objetos en el field se representarn con un oval 2D Se reregistra con el GUIState para que se repinte en cada step Repinta el display para ponerlo en el momento antes de ejecutar la simulacin
31
Display 2D de la simulacin
Gestionar las capas de visualizacin Para filmar una simulacin Para sacar una instantnea de una simulacin Para hacer zoom del display
Opciones
Mason
32
Hasta ahora los alumnos se movan alrededor del profesor Consideremos ahora las relaciones entre ellos Para crear una red: sim.eld.network
Grafos dirigidos o no dirigidos y multigrafo (varios enlaces entre dos nodos) Cualquier objeto puede ser un nodo Los enlaces pueden estar etiquetados o no, y tener un peso
Clase sim.eld.network.Edge La etiqueta es un objeto cualquiera con informacin
En el ejemplo
Los alumnos estn en un grafo no dirigido Enlaces aleatorios indican si se llevan bien o no Si no hay enlace es que no tienen opinin mutua
Mason
33
Cdigo en la siguiente pgina Los alumnos, de forma aleatoria, se gustan o no (incluso pueden gustarse y disgustarse a la vez)
Mason
34
35
Cambiemos el comportamiento de los alumnos para que se acerquen a los que mejor les caen:
//GothroughmybuddiesanddeterminehowmuchIwanttobenearthem MutableDouble2DforceVector =new MutableDouble2D(); Bagout =students.buddies.getEdges(this,null); int len =out.size(); for(int buddy =0;buddy <len;buddy++){ Edge e=(Edge)(out.get(buddy)); double buddiness =((Double)(e.info)).doubleValue(); //Icouldbeintheto()endorthefrom()end.getOtherNode isacutefunction //whichgrabstheguyattheoppositeendfromme. Double2Dhim =students.yard.getObjectLocation(e.getOtherNode(this)); if (buddiness >=0){ //thefurtherIamfromhimthemoreIwanttogotohim forceVector.setTo((him.x me.x)*buddiness,(him.y me.y)*buddiness); if (forceVector.length()>MAX_FORCE)//I'mfarenoughaway forceVector.resize(MAX_FORCE); } else {//thenearerIamtohimthemoreIwanttogetawayfromhim,uptoalimit forceVector.setTo((him.x me.x)*buddiness,(him.y me.y)*buddiness); if (forceVector.length()>MAX_FORCE)//I'mfarenoughaway forceVector.resize(0.0); else if (forceVector.length()>0) forceVector.resize(MAX_FORCE forceVector.length());//invertthedistance } sumForces.addIn(forceVector); }
Juan Pavn - UCM 2011 Mason
36
Y configurarlo indicando
Qu espacio Continuous2D asocia los nodos (en este caso, los alumnos) con su localizacin
display.attach(buddiesPortrayal,"Buddies" );
Mason
37
Mason
38
MASON: A Multi-Agent Simulation Environment. 2005. Sean Luke, Claudio Cioffi-Revilla, Liviu Panait, Keith Sullivan, and Gabriel Balan. In Simulation: Transactions of the society for Modeling and Simulation International. 82(7):517-527. MASON: A New Multi-Agent Simulation Toolkit. 2004. Sean Luke, Claudio Cioffi-Revilla, Liviu Panait, and Keith Sullivan. Proceedings of the 2004 SwarmFest Workshop. MASON: A Java Multi-Agent Simulation Library. 2003. Sean Luke, Gabriel Catalin Balan, Liviu Panait, Claudio Cioffi-Revilla, and Sean Paus. Proceedings of the Agent 2003 Conference.
Mason
39