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

Slides:



Advertisements
Presentaciones similares
Características Generales y Entornos de Desarrollo
Advertisements

Ayudantía Pre-Actividad 5 Multimedios. Ayudantía Pre-Actividad 5 (1) creación de varias clases, y composición (2) manejo de threads (3) manejo de excepciones.
Curso de java básico (scjp)
Programación Interactiva Hilos
Fundamentos de la programación orientada a objetos
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Programación II Listas
Orientación a Objetos con Java SE
El proceso de desarrollo de software
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
Tratamiento de listas en Java
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Programación Orientada a Objetos en Java
Marzo 2007 Lenguajes Visuales Clase III.
Programación II Colas Igor Santos Grueiro.
El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño.
Java Parte II Taller de Sistemas de Programas Enero-Marzo 99 Prof. : Sandra Zabala, Marilenis Olivera Ivette C. Martínez, Pedro García, Alejandra Blanco.
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Método en Java.
Manejo de excepciones en Java
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Herencia e Interfaces.
Figure: Lenguajes. Generaciones de lenguajes de programación.
Medio de tele-comunicación
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
L ISTAS E NLAZADAS No son mas que un conjunto o lista de objetos que a diferencia de los vectores, estas poseen la capacidad de crecer o decrecer. Por.
Abstracción de los datos y Orientación a Objeto Clase 13.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
Técnicas avanzadas de programación Interfaces
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
Programación orientada a objetos
Patrones de Comportamiento: Patrón de Diseño Observer
Clase Teórica No. 4 Programación IV
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
El lenguaje de programación Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
ESTRUCTURA DE DATOS EN JAVA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Lenguajes de Programación Tema 3
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Manejo de Punteros y objetos en memoria dinámica en C++
ENTORNO DE SIMULACIÓN BASADO EN AGENTES Carolina Puyuelo César Esandi
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend)‏ Agustín J. González ELO329.
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Programación Orientada a Objetos: CLASES Y OBJETOS
Clases “ Es una Abstracción de un elemento del mundo real ”
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
2012-BM5A. Unos tips antes de empezar: C# es Case Sensitive (sensible a mayúsculas) Pepe ≠ pepe ≠ pEpE Las asignaciones se hacen con “=” y las comparaciones.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Ingeniería del Software II Implementación metódica.
Transcripción de la presentación:

Simulación con agentes Luis Fabiani Bendicho 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

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:

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

ISBC - Enero 2000Luis Fabiani Bendicho Objetivo El punto de referencia:

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.

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

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

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

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); }

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?

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

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); }

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

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()

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 ();

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 (); }

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); }

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;

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);

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)

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"; }

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); }

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); }

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; }

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); }

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

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