Simulación con agentes
-
Upload
brynne-stanley -
Category
Documents
-
view
72 -
download
0
description
Transcript of Simulación con agentes
![Page 1: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/1.jpg)
Simulación con Simulación con agentesagentes
Luis Fabiani BendichoISBC - Enero 2000
![Page 2: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/2.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Índice
• Qué es la simulación
• Qué es un agente
• Objetivo del trabajo
• Clases desarrolladas
• Notas de interés
• Mi simulador: Carretera
![Page 3: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/3.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Qué es simulación
• Simulacrum retrato
* Prototipado
*Meteorología
*Grupos de individuos
*...
• Retrato de una situación para averiguar los resultados
• Muchas aplicaciones:
![Page 4: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/4.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Qué es un agente
• Agens, agentis agere actuar
• Muchas definiciones para agente informático:
Acuerdo: agentes actúan por separado e interactúan
• Aprovecharlos para simulación
![Page 5: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/5.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Objetivo
www.agentsheets.com
• El punto de referencia:
![Page 6: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/6.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Objetivo
• ¿Qué ofrece agentsheetsINC?
» (…) the most powerful simulation building environment available to end-users. Untrained end-users can now build interactive simulations for the web without any knowledge of Java programming.
» AgentSheets Inc. can build complete simulations for you.
» a web-based forum that lets users freely exchange agents allowing them to collaborate with users around the world, or with people in the next room.
![Page 7: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/7.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Objetivo
• Realizar las clases básicas para diseñar simuladores fácilmente.
• Implementar un simulador sencillo, a modo de ejemplo, utilizándolas.
• Diseño y realización de un interfaz amigable
Fuera de alcance
![Page 8: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/8.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Objetivos:
» Abstracción y genericidad
Simulador Mundo
Regla
AgentePosicion
• Jerarquíade clases:
![Page 9: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/9.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
• Clase Mundo:» Se buscaba genericidad y abstracción para
modelar distintos tipos de mundos:
Clases desarrolladas
» Problemas:Almacenamiento y acceso de nodos.Representación visual del mundo
![Page 10: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/10.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Mundo:
NO Abstracta: mundo 2D cuadrado(dependencias 2D en negrita)
public class Mundo{ private Vector posiciones; Mundo (); public Vector orientaciones (); private void borrarMundo (); public void size (int x, int y); public Posicion posicion (int x, int y);}
![Page 11: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/11.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Posicion (1):public class Posicion{ Posicion (int nuevaPosX, int nuevaPosY,
int anchoEspacio, int altoEspacio);
public int posX(); public int posY();
public void nuevaDescripcion (String d); //Cargamos la imagen public String descripcion(); //¿Qué tipo de posición somos?
![Page 12: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/12.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Posicion (2): Agentes en una posición
public Vector agentes = new Vector (); public Vector tieneAgente (String nombre);
public void draw (); public void dibujar (Image frame, int xFrame, int yFrame, int anchoFrame, int altoFrame);
//Para que los agentes se olviden de la gestión de dibujo
public void tick(); //Actuan los agentes de esa posición
![Page 13: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/13.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Posicion (3): Moviéndose por el mundo
private Hashtable vecinos = new Hashtable(); public void insertarVecino (String orientacion, Posicion vecino); public Posicion vecino (String orientacion); public Vector orientaciones(); public String siguienteOrientacion (String orientacion); public String anteriorOrientacion (String orientacion); public String cambiarOrientacion (String orientacion, String modo);
}
![Page 14: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/14.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Agente (1):
![Page 15: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/15.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Agente (1):
public abstract class Agente{ private Posicion posicion = null; public String orientacion; public int frecuencia = 1; //Esto es cada cuántos turnos actuamos. public int turnoActual = 1;
public abstract String nombre ();//El nombre del fichero imagen y el del agente
public void draw (); // posicion.dibujar()
![Page 16: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/16.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Agente (2): Reglas y posiciones
private Vector reglas = new Vector(); private boolean reglasOrdenadas = true; public void insertarRegla (Regla r); public void eliminarRegla (Regla r); private void ordenarReglas ();
public void nuevaPosicion (Posicion nP); //Actualiza la posición protected Posicion posicionActual ();
![Page 17: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/17.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Agente (3): Actuando
public void tick(); protected void calcularNuevaPosicion();
//Implementación : recorre e invoca las reglas//pero guarda la nueva posición en una variable... public Posicion nuevaPosicion; public void actualizarPosicion ();
protected void calcularNuevoFrame();
public Vector mensajesValidos (); //Devuelve un vector de Strings. public void recibeMensaje (Vector mensaje); public void destruir ();}
![Page 18: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/18.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Regla:
public abstract class Regla{ /* Si esta regla no sugiera nada, devuelve un null. * Si no, devuelve un vector con: * la nueva orientación [.elementAt(0)] * la nueva posicion [.elementAt(1)]. */ public abstract Vector ejecutar (Posicion posicion, String orientacion); private int prioridad = 0; public int getPrioridad () public void putPrioridad (int nuevaPrioridad);}
![Page 19: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/19.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Simulador (1): Estructura
» Un mundo
public Mundo mundo = new Mundo (this);
» Unos agentes
private Vector agentes = new Vector ();
» Una ejecución
private Vector listaDeModos = new Vector (); private String modoEjecucion;
![Page 20: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/20.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Clases desarrolladas• Clase Simulador (2): Funciones
» Por ser un applet:void init () void start (), void stop (), voir run ()
» Para la ejecución.void elegirModo (String);/* "CONTINUO" => por tiempo, cada
SLEEP_MILLIS milisegundos "TECLADO" => por pulsación de ENTER. */String modoActual ();/* Devuelve el modo actual.*/
void addAgente (Agente);void removeAgente (Agente);boolean handleRequestedEvent (Event);
![Page 21: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/21.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Otros aspectos• Paquete com.next.gt
• La clase ReglaJESS:» .ejecutar() implementado: ejecuta fichero CLIPS» Lee fichero por función .seleccionarFichero(String)
Al construir fichero CLIPS:Usar funciones de las clases:
(call ?x <funcion> <parametros>+)Coger valores iniciales en memoria de trabajo
(posicion-inicial ?x) (orientacion-inicial ?y)Dejar valores finales en memoria de trabajo
(posicion-final ?x) (orientacion-final ?y)
![Page 22: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/22.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Mi Simulador: Carretera• El applet Carretera (1):
import Semaforo;import Coche;public class Carretera extends Simulador{private static int configuracion[][] ={ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, };
public int mundoX () { return configuracion[0].length; } public int mundoY () { return configuracion.length; }
public String mundoDescripcionEstandar () { return "ground"; }
![Page 23: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/23.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Mi Simulador: Carretera• El applet Carretera (2):
public void init () { super.init();
//La carretera: for (int y = 0; y < configuracion.length; y++) for (int x = 0; x < configuracion[y].length; x++) { if (configuracion[y][x] == 1) mundo.posicion (x,y).nuevaDescripcion ("road"); }
//Agentes: Semaforo s = new Semaforo (); s.nuevaPosicion(mundo.posicion(2,2)); addAgente (s); Coche1 c = new Coche (); c.nuevaPosicion(mundo.posicion(6,8)); c.orientacion = "IZQUIERDA"; addAgente (c); c = new Coche (); c.nuevaPosicion(mundo.posicion(7,8)); c.orientacion = "IZQUIERDA"; addAgente (c);}
![Page 24: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/24.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Mi Simulador: Carretera• El agente Semaforo (1):
class Semaforo extends Agente{ public String estado = "ROJO"; Semaforo () { super (); //Hacemos que el semáforo vaya más lento. frecuencia = 10; //Le añadimos un nuevo mensaje. mensajes.addElement ("PONER_EN"); } /*Agente()*/ public String nombre () { return "Semaforo"; }
public int framesHorizontal () { return 3; } public int framesTotal () { return 3; }
/* Procesamos los nuevos mensajes */ public void recibeMensaje (Vector mensaje) { String elMensaje = (String) mensaje.elementAt(0); if (elMensaje == "PONER_EN") estado = (String) mensaje.elementAt (1); else super.recibeMensaje (mensaje); }
![Page 25: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/25.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Mi Simulador: Carretera• El agente Semaforo (2):
/* No usamos reglas */ protected void calcularNuevaPosicion() { if (estado == "ROJO") estado = "VERDE"; else if (estado == "VERDE") { estado = "AMBAR"; super.turnoActual = 1;
//Para que en ambar solo esté 1 turno. } else if (estado == "AMBAR") estado = "ROJO"; } /*calcularNuevaPosicion*/
protected void calcularNuevoFrame() { if (estado == "VERDE") currentFrame = 0; else if (estado == "AMBAR") currentFrame = 1; else if (estado == "ROJO") currentFrame = 2; }
![Page 26: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/26.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Mi Simulador: Carretera• El agente Coche:class Coche extends Agente{ Coche () { super (); //Hacemos que el coche vaya rápido frecuencia = 1; //Le añadimos las reglas.
Regla regla = new R_para(); insertarRegla (regla);
regla = new R_derecha (); insertarRegla (regla);
regla = new R_recto (); insertarRegla (regla);
regla = new R_izquierda (); insertarRegla (regla);
regla = new R_otrocoche(); insertarRegla (regla); } /*Agente()*/
public String nombre () { return "Coche"; }
public int framesHorizontal () { return 4; }
public int framesTotal () { return 4; }
/* Calcula el frame actual. */ protected void calcularNuevoFrame() { currentFrame = posicionActual().orientaciones().indexOf(orientacion); }}
![Page 27: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/27.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Mi Simulador: Carretera• Las reglas de Coche1:
REGLA PRIORIDAD HACE R_para 1000 Si hay un semáforo
en rojo, se quedadonde está
R_otrocoche 1000 Si hay otro cochedelante, se quedadonde está
R_derecha 500 Si puede girar a laderecha, gira
R_recto 200 Si puede seguir recto,sigue
R_izquierda 100 Gira a la izquierda
![Page 28: Simulación con agentes](https://reader034.fdocumento.com/reader034/viewer/2022042616/56812c5f550346895d90ec5e/html5/thumbnails/28.jpg)
ISBC - Enero 2000 Luis Fabiani Bendicho
Mi Simulador: Carretera
Y ahora...