1 / 28

Simulación con agentes

Simulación con agentes. Luis Fabiani Bendicho ISBC - Enero 2000. Índice. Qué es la simulación Qué es un agente Objetivo del trabajo Clases desarrolladas Notas de interés Mi simulador: Carretera. Qué es simulación. Simulacrum  retrato.

Download Presentation

Simulación con agentes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Simulación con agentes Luis Fabiani Bendicho ISBC - Enero 2000

  2. Índice • Qué es la simulación • Qué es un agente • Objetivo del trabajo • Clases desarrolladas • Notas de interés • Mi simulador: Carretera ISBC - Enero 2000

  3. Qué es simulación • Simulacrum  retrato • Retrato de una situación para averiguar los resultados • Muchas aplicaciones: *Grupos de individuos * Prototipado *Meteorología *... ISBC - Enero 2000

  4. 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 ISBC - Enero 2000

  5. Objetivo • El punto de referencia: www.agentsheets.com ISBC - Enero 2000

  6. 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. ISBC - Enero 2000

  7. Objetivo • Realizar las clases básicas para diseñar simuladores fácilmente. • Implementar un simulador sencillo, a modo de ejemplo, utilizándolas. Fuera de alcance • Diseño y realización de un interfaz amigable ISBC - Enero 2000

  8. Clases desarrolladas • Objetivos: • Abstracción y genericidad • Jerarquíade clases: ISBC - Enero 2000

  9. Clases desarrolladas • Clase Mundo: • Se buscaba genericidad y abstracción para modelar distintos tipos de mundos: • Problemas: • Almacenamiento y acceso de nodos. • Representación visual del mundo ISBC - Enero 2000

  10. 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); } ISBC - Enero 2000

  11. 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? ISBC - Enero 2000

  12. 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 ISBC - Enero 2000

  13. 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); } ISBC - Enero 2000

  14. Clases desarrolladas • Clase Agente (1): ISBC - Enero 2000

  15. 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() ISBC - Enero 2000

  16. 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 (); ISBC - Enero 2000

  17. 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 (); } ISBC - Enero 2000

  18. 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); } ISBC - Enero 2000

  19. 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; ISBC - Enero 2000

  20. 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); ISBC - Enero 2000

  21. 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) ISBC - Enero 2000

  22. 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"; } ISBC - Enero 2000

  23. 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); } ISBC - Enero 2000

  24. 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); } ISBC - Enero 2000

  25. 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; } ISBC - Enero 2000

  26. Mi Simulador: Carretera • El agente Coche: 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); } } 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()*/ ISBC - Enero 2000

  27. Mi Simulador: Carretera • Las reglas de Coche1: ISBC - Enero 2000

  28. Mi Simulador: Carretera Yahora... ISBC - Enero 2000

More Related