La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Simulación con agentes Luis Fabiani Bendicho ISBC - Enero 2000."— Transcripción de la presentación:

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

2 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

3 ISBC - Enero 2000Luis 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:

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

5 ISBC - Enero 2000Luis Fabiani Bendicho Objetivo www.agentsheets.com El punto de referencia:

6 ISBC - Enero 2000Luis Fabiani Bendicho Objetivo ¿Qué ofrece agentsheets INC ? » (…) 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.

7 ISBC - Enero 2000Luis 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

8 ISBC - Enero 2000Luis Fabiani Bendicho Clases desarrolladas Objetivos: » Abstracción y genericidad Jerarquía de clases:

9 ISBC - Enero 2000Luis 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

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

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

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

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

14 ISBC - Enero 2000Luis Fabiani Bendicho Clases desarrolladas Clase Agente (1):

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

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

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

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

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

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

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

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

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

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

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

26 ISBC - Enero 2000Luis 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); }

27 ISBC - Enero 2000Luis Fabiani Bendicho Mi Simulador: Carretera Las reglas de Coche1:

28 ISBC - Enero 2000Luis Fabiani Bendicho Mi Simulador: Carretera Y ahora...


Descargar ppt "Simulación con agentes Luis Fabiani Bendicho ISBC - Enero 2000."

Presentaciones similares


Anuncios Google