carolina puyuelo césar esandi ingeniería de los sistemas basados en el conocimiento curso...
TRANSCRIPT
Carolina PuyueloCésar Esandi
Ingeniería de los Sistemas Basados en el ConocimientoCurso 2000-2001
Entorno de simulación basado en AgentesEntorno de simulación basado en Agentes
•Introducción
•AgentSheets
•Objetivos
•SIMS: Entorno de simulación basado en Agentes
•Herramientas para SIMS
•Ampliaciones
•Conclusiones
Índice
Introducción
Qué es un Simulador
Simulacrum retratoSimular representar alguna cosa,
fingiendo lo que no es
•Simulador Herramienta que intenta reproducir la evolución de un sistema.•Requerimientos:
•Estado inicial•Leyes de evolución
•Aplicaciones:•Meteorología, grupos de individuos, ingeniería...
Introducción
Qué es un Agente
Agens, agentis agere actuar
La informática actual está haciendo un uso abusivo del término “Agente” utilizándolo en disciplinas muydispares, desde el intercambio de datos en programación distribuida hasta el estudio de roles de comportamiento.
Algunas características de los agentes :- Autonomía- Adaptabilidad / Aprendizaje- Orientados a un objetivo- Flexibles- .......
Introducción
Qué es un Agente
Agentes Reactivos (Reactive Agents) [HN96]
En el presente estudio se ha trabajado con una categoría especial de agentes: los Agentes Reactivos
•Los agentes se encuentran embebidos en un entorno•Los agentes pueden captar el estado actual de dicho
entorno. (O al menos, una parte del mismo)•Cada agente tiene definido un comportamiento: unas reglas
que le dictan cómo actuar ante una situación determinada.
Introducción
Clasificación de los agentes software según Nwana
Agentes Reactivos (Reactive Agents) [HN96]
Cooperación
Autonomía
Aprendizaje
Agentes Colaborativos
Punto de referencia
http://www.agentsheets.com
¿Qué ofrece AgentSheets ? Un entorno de desarrollo de simulaciones muy potente orientado a los
usuarios finales. Se pueden construir simulaciones interactivas para la web sin ningún conocimiento de programación en Java.
“Programación Tactil”[ARJA96]. – Construcción de escenarios desde un entorno visual– Definición del comportamiento de los agentes a través de la definición de un
conjunto de reglas creado visualmente
Se permite a los usuarios crear sus propios agentes imponiéndoles un comportamiento mendiante reglas.
Los agentes creados pueden ser compartidos entre los usuarios de AgentSheets mediante un fórum en la Web.
¿Qué ofrece AgentSheets ?Desarrollo de escenarios
•Agentes “Pasivos” (Hierba)•Agentes “Activos” (Coche)
¿Qué ofrece AgentSheets ?Piezas: Agentes, Percepción, Eventos, Acciones
¿Qué ofrece AgentSheets ?Modelado del comportamiento:
Definición de Reglas Sencillas
¿Qué ofrece AgentSheets ?Modelado del comportamiento:
Definición de Reglas Sencillas
¿Qué ofrece AgentSheets ?Modelado del comportamiento:
Definición de Reglas Sencillas
¿Qué ofrece AgentSheets ?Generación de todo tipo de escenarios
ObjetivosDesarrollar una plataforma de simulación genéricacuyos elementos sean agentes reactivos.
Cada agente actuará de forma autónoma, interaccionando con el entorno.El conjunto de las actuaciones de todos los agentes constituirá la evolución del sistema.
Desarrollar un método que permita definir el comportamiento de cada agente
Objetivos
Desarrollar un método que permita definir el comportamiento de cada agente [AS2000]
•Flexible: Definición del comportamiento para cualquier agente•Potente: Definición de comportamientos relativamente complejos•Sencillo: de fácil aprendizaje
Objetivos
Desarrollar un conjunto de herramientas visuales [AS2000] [ARJA96]
•Creador de Escenarios• Permite diseñar un escenario (para simular) concreto, con su entorno, sus agentes y los comportamientos de los mismos.
•Simulador de Escenarios•Permite contemplar la evolución de los agentes de un escenario concreto.
•Implementar un escenario concreto
Entorno de simulación basado en AgentesCaracterísticas
•Escenarios en 2D•Geometría reticular: Mapas en cuadrícula•Evolución por ciclos•Plataforma JAVA 2•Swing
•Pretende cumplir todos los objetivos anteriores
Entorno de simulación basado en AgentesClase Mundo
•Se trata de un mapa del terreno•El mapa está dividido en casillas rectangulares•Cada unidad de terreno se denomina “Posición”•Publica información sobre sí mismo:
•Posiciones vecinas a una dada•Croquis (plano esquemático) del mapa
Entorno de simulación basado en AgentesClase Mundo
public class Mundo{ private Vector posiciones; Mundo (); private void borrarMundo (); public void size (int x, int y); public Posicion posicionDe(int xAbs, int yAbs); public Vector posicionesVecinasDe (Posicion pos); public int[][] croquis(Vector tipoInformaciones);}
Entorno de simulación basado en AgentesClase Posición
•Representa una celda del tablero (Mundo)•Debe ser de un tipo determinado: Carretera, río, hierba...•Los agentes “caminan” sobre las distintas Posiciones del Mundo•Cada Posición anota los agentes que actualmente se encuentran sobre ella
PosiciónAgente
Mundo
Entorno de simulación basado en AgentesClase Posición (1): Ubicación
public class Posicion{ Posicion (Mundo mundo, int nuevaPosX, int nuevaPosY,
int anchoEspacio, int altoEspacio);
public int posX(); public int posY();
public void nuevaDescripcion (String d); // A partir de d se extrae la imagen correspondiente public String descripcion(); // Tipo de posición: Carretera, hierba, río...
Entorno de simulación basado en AgentesClase Posición (2): Ayudas a los agentes
public Vector agentes = new Vector (); //Agentes sobre esta posición public void draw (); public void dibujar (Image frame, int xFrame, int yFrame, int anchoFrame, int altoFrame); // 1º La posición se dibuja a sí misma // 2º Se dibujan todos los agentes del vector agentes
public void tick(); //Pide a los agentes de esta posición que actúen
•Dibuja cada uno de los agentes situados sobre la posición•Indica a cada uno de los agentes que actúe
Entorno de simulación basado en AgentesClase Agente: Características
•Clase abstracta•Soporte para implementaciones concretas como coches, personas, semáforos...•Cada agente se sitúa sobre una posición•La función tick() hace que el agente se mueva según el entorno actual y su comportamiento•La función draw() dibuja al agente en la pantalla periódicamente
Public abstract class Agente {}
Entorno de simulación basado en AgentesClase Agente: Características
Percepción del mundo
Ejecuciónde acciones
Aplicación de las reglas de
comportamiento
Entorno de simulación basado en AgentesClase Agente: Estructuras de datos (I)
protected int orientacionAgente;private Posicion posicion;public Posicion nuevaPosicion;public int frecuencia; //cada cuántos turnos actuamos.public int turnoActual;protected Vector mensajes; //tipos de mensajes a recibirpublic abstract int framesTotal ();public abstract int framesHorizontal ();// Identicacion del tipo de agente. Ej: Persona, Coche... protected String tipo;// Nombre del agente en particular. Ejemplo: Carlos, Rubénprotected String nombre;
Entorno de simulación basado en AgentesClase Agente: Estructuras de datos (II)
•Lista de posiciones sobre las que puede estar un agente•Lista de acciones que puede realizar un agente•Lista de estados que puede tomar un agente•Pila de objetivos pendientes que debe realizar el agente•Estado actual del agente•Tabla de comportamiento
•Entradas: Estado del agente y agente cercano•Devuelve: acción a realizar ante esa situación
protected Vector posicionesPermitidas;protected Vector accionesPosibles;protected Vector estadosPosibles;private Vector pilaObjetivos;protected String estado;protected Hashtable tablaComportamientos
Entorno de simulación basado en AgentesClase Agente: Estructuras de datos (III)
ParadoAndando
RojoÁmbar
PitarPararPararPararSemáforo
Coche
Verde Andar
Cuando encuentres...
En estado...
Realizar acción...
Funcionamiento de la tabla de Comportamientos
de ...
Entorno de simulación basado en AgentesClase Agente: Funciones
//Gestión de los objetivos a alcanzar por el agente
void apilaObjetivo(Accion accion);
void desapilaObjetivo();
int calculaOrientacion(Posicion pIni, Posicion pFin);
boolean estaEnfrente(Posicion pos);
void reorientarse(); // toma la orientación correspondi.
void recibeMensaje(Vector mensaje); //desde el exterior
protected void ejecutaSiguienteAccion(); //ag. concreto
void actualizarPosicion();//Actualiza después del tick()
void draw(Graphics g);
void tick();
Entorno de simulación basado en AgentesClase Agente: Función tick()
public void tick(){ if(turnoActual != 0) return; else... // Espera turno Vector accionesARealizar = new Vector();
// ENTORNO + COMPORTAMIENTO = ACCION para cada posición vecina p { para cada agente a que se encuentra en p { Accion accion = getAccion(a.getTipo(), a.getEstado()); accionesARealizar.addElement(accion);//Comportam. } } Operaciones posteriores: -Ordenar las acciones por prioridades -Reorientar el agente -Apilar una o varias acciones en la pila de objetivos
ejecutaSiguienteAccion(); // Agente Concreto}
Entorno de simulación basado en AgentesClase Simulador: Integración de lo anterior
•(Posible inicialización a partir de un fichero de texto)•Mundo (escenario de n x m Posiciones)•Agentes•Sistema de visualización
Entorno de simulación basado en AgentesClase Simulador: Integración de lo anterior
•Por ser un applet:void init(); void start(); void stop(); void run();
•Para la ejecución:void elegirModo (String s);//"CONTINUO" => por tiempo cada SLEEP_MILLIS
milisegundos//"TECLADO" => por pulsación de ENTER. String modoActual (); // Devuelve el modo
actual
•Gestión de los agentes:void addAgente (Agente);void removeAgente (Agente);boolean handleRequestedEvent (Event);void clickRaton(Point p); //El usuario selecciona un agentevoid seleccionarAgente(Agente a);void deSeleccionarAgente();
Entorno de simulación basado en AgentesClase Concreta Semáforo
•Implementación de la clase Agente•Estructura de datos personalizada
class Semaforo extends AgenteTipo = “Semáforo”Posiciones permitidas = {“road”,”cebra”}Estados = {“rojo”,”ámbar”,”verde”}Acciones = {“Intermitencia”}Comportamiento: {} (No reacciona ante ningún agente)Representación = semaforo.gif
Entorno de simulación basado en AgentesClase Concreta Coche
•Implementación de la clase Agente•Estructura de datos personalizada
class Coche extends AgenteTipo = “Coche”Posiciones permitidas = {“road”,”cebra”}Estados = {“andando”,”parado”}Acciones = {“Ir_a”,”parar”,”andar”}Comportamiento:Representación = coche.gif
ParadoAndando
RojoÁmbar
PararPararPararPararSemáforo
Coche
Verde Andar
Cuando encuentres...
En estado... Realizar acción...
Entorno de simulación basado en Agentes
Clase Concreta Persona
Implementación de la clase Agente Estructura de datos personalizada class Persona extends Agente Tipo = “Persona” Posiciones permitidas = {“acera”,”cebra”} Estados = {“andando”,”parado”} Acciones = {“Ir_a”,”parar”,”andar”,”coger”} Comportamiento: Representación = persona.gif
Entorno de simulación basado en Agentes
Clase Concreta Tesoro
Implementación de la clase Agente Estructura de datos personalizada class Tesoro extends Agente Tipo = “Tesoro” Posiciones permitidas = {“acera”} Estados = {“activado”,”oculto”} Acciones = {“Intermitencia”} Comportamiento: No reacciona ante ningún agente Representación = tesoro.gif
Entorno de simulación basado en AgentesClase Concreta CarreteraAutoCarga•Permite simular un escenario almacenado previamente en un fichero
Public class CarreteraAutoCarga extends Simulador{ CarreteraAutoCarga();
// Solicita al usuario un escenario previamente almacenado // Extrae datos (Parser) de dicho fichero // Inicializa el objeto Mundo con las Posiciones adecuadas // Crea los agentes correspondientes y les asigna Posición boolean cargaEscenario();
//Dado el nombre de un agente, devuelve una instancia //del mismo Agente creaAgentePorNombre(String nombre);
}
Entorno de simulación basado en AgentesClase ResuelveRutasJESS
•El usuario selecciona un agente con el ratón•El usuario ordena al agente que se desplace hacia una posición determinada•Esta clase halla el camino más corto para ir de la posición actual del agente a otra dada•Los cálculos se realizan sobre un croquis del terreno con las posiciones sobre las que se puede mover el agente•Se introduce el objetivo (IR_A) en la pila del agente•El agente se va desplazando hacia esa posición, teniendo en cuenta objetivos más prioritarios, como por ejemplo, parar ante un semáforo.
Entorno de simulación basado en AgentesClase ResuelveRutasJESS
1º Seleccionoagente...
2º Fijo destino
Entorno de simulación basado en AgentesClase ResuelveRutasJESS: Implementación
•Integración de JAVA con JESS (CLIPS)•Algoritmo de RETE•Procedimiento:
1º.- JAVA•Crear motor Rete•Especificar fichero .clp•Introducir parámetros (Objetos) en una tabla de intercambio
2º.- JESS•Extraer parámetros de la tabla de intercambio a la memoria de trabajo•Ejecutar acciones
3º.- JAVA•Ejecutar fichero .clprete.run();
4º.- JESS•Ejecución del fichero CLIPS tal y como se ha estudiado en el curso•Colocar resultados en tabla de intercambio
5º.- JAVA•Extracción de resultados•Eliminar objeto Rete (si
procede)
Entorno de simulación basado en AgentesClase ResuelveRutasJESS: Implementación (II)
1º JAVA String ficheroJESS = "(batch \"ir_a.clp"\)"; String bindAltoTablero = "(bind ?*alto-tablero*” +tablero.length + " )"; ...Más parámetros iniciales...Rete rete = new Rete();rete.store ("RUTA-SOLUCION", sol); // Sol es Vector
3º JAVA
rete.executeCommand(ficheroJESS);rete.executeCommand(bindAltoTablero);// ...Más.. rete.executeCommand ("(assert (ruta-solucion (fetch RUTA-SOLUCION)))");rete.executeCommand(“(reset)”);
rete.run ();
Value val = rete.fetch ("RUTA-SOLUCION");sol = (Vector)val.externalAddressValue( rete.getGlobalContext());
2º JESS
4º JESS: Ejecución del fichero .clp
5º JAVA
Entorno de simulación basado en AgentesClase ResuelveRutasJESS: Implementación (III)(defrule inicial (initial-fact)=> ... (assert (nodo (estado ?*inicial*) (camino ?indice-inicial) (heuristica (heuristica ?*inicial*)) (coste 0) (clase abierto))) (assert (encontrada no)))
(defrule paso-arriba ; También reglas paso-abajo, paso-izquierda... (nodo (estado ?x ?y&:(and (> ?y 0) (= ?*ok* (valor-de (create$ ?x (- ?y 1)))))) (camino $?cam) (coste ?cost) (clase cerrado))=> (bind ?punto (create$ ?x (- ?y 1))) (assert (nodo (estado ?punto) (camino $?cam (indice-de ?punto)) (heuristica (heuristica ?punto)) (coste (+ 1 ?cost)) (clase abierto))))
Entorno de simulación basado en AgentesClase ResuelveRutasJESS: Implementación (IV); Expandimos el nodo mas prometedor(defrule pasa-el-mejor-a-cerrado (declare (salience -10)) ?nodo <- (nodo (clase abierto) (heuristica ?h1)) (not (nodo (clase abierto) (heuristica ?h2&:(< ?h2 ?h1)))) => (modify ?nodo (clase cerrado)))
(defrule borra-repetido ... ) ; Borra nodos repetidos(defrule borra-costoso ...) ; Borra nodos con coste mayor que la mejor heurística
(defrule encontrada-solucion (declare (salience 50)) ... (ruta-solucion ?rs) ; Vector colocado desde java => ; Rellenamos el vector solución para que se pueda rescatar desde java (while (<= ?i ?lon) do (bind ?coor-x (nth$ 1 (coordenadas-de (nth$ ?i $?pasos)))) (bind ?coor-y (nth$ 2 (coordenadas-de (nth$ ?i $?pasos)))) ;Añadimos las coordenadas de la casilla al vector solucion (call ?rs addElement (implode$ (create$ ?coor-x)) ) (call ?rs addElement (implode$ (create$ ?coor-y)) ) (bind ?i (+ ?i 1)) ))
Herramientas para SIMSGenerador de Escenarios
•Permite generar o editar un escenario•Interfaz gráfica
Creación
OBJETO ESCENARIO
ALTO_TOTAL 4000 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 1 0
TIPOS_SUELO 3
treeNUMERO_AGENTES 3
6 13 0
TIPOS_AGENTE 2coche
Edición
•Tamaño del mapa•Descripción del mapa•Leyenda que permite averiguar a qué tipo de Posición pertenece cada código•Coordenadas y tipo de los agentes•Leyenda que resuelve el tipo de agentes
Herramientas para SIMS Descripción de escenarios:
ficheros de texto
OBJETO ESCENARIONOMBRE PaisajeRuralCASILLAS_ANCHO 15CASILLAS_ALTO 10ANCHO_TOTAL 600ALTO_TOTAL 400
0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 1 0 1 0 0 1 0 0 2 0 1 1 0 0 1 1 0 1 0 0 1 0 0 2 0 0 1 1 1 1 1 1 1 0 0 1 0 0 2 0 0 0 0 0 1 0 2 1 1 1 1 0
TIPOS_SUELO 3groundroadtree
NUMERO_AGENTES 36 13 07 3 07 10 1
TIPOS_AGENTE 2coche
semaforo
Paisaje.txt
Herramientas para SIMSOtros aspectos
•Paquete com.next.gt [GAMELET]•Agiliza la visualización de imágenes en la ventana•Basado en Applets•Soporte para juegos tipo Arcade en dos dimensiones
•Paquete JESS [JESS]•Integra en Java toda la funcionalidad que ofrece CLIPS•Ofrece su notación para escribir reglas•La sintaxis nos recuerda a LISP
Herramientas para SIMSOtros aspectos
•Trabajo anterior [FAB2000] Correcto enfoque del problema Resultado vistoso Integración de los paquetes anteriores Intento de generalizar a n dimensiones
•Estructuras de datos ineficientes•Dificultad para seguir el código•Imposibilidad de visualizar más de 2 dim.
Muy escaso uso de los paquetes
Ampliaciones
•Función tick() del Agente implementada en JESS•Facilidad para “ver” el entorno en un radio de varias
casillas•Flexibilidad para programar la forma de percibir•Potencia: se puede extraer muchísima información
del entorno
Ampliaciones
•Más atributos propios de cada agente•Coche: nivel de gasolina, color, nº pasajeros...
•Comportamiento Simple (Actual)
Acción simple(Terreno + Otros Agentes) + Estado propio
•Comportamiento Complejo
Acción CompuestaEj: Adelantamiento, ir a gasolinera, montar “autoestopista”
(Terreno + Otros Agentes) + Estado propio Acción simple
Acción simple
Acción simple
SIMS: Características•Entorno de simulación basado en agentes (reactivos)
•Definición y edición rápida y sencilla de escenarios
•Modelado del comportamiento
•Integración con JESS
ConclusionesCampo abierto
ConclusionesCampo abierto
SIMS: Puntos a favor•Comenzando con unidades sencillas, surgen simulaciones complejas•A partir de reglas sencillas se pueden modelar comportamientos muy complejos•Grandes posibilidades de ampliación (en la línea de los comportamientos de los agentes•Configuración mediante ficheros: Posibilidad de intercambiar escemarios, agentes, comportamientos... (Ver AgentSheets [AS2000])
SIMS: Puntos en contra•Consumo de recursos proporcional al nº de agentes•Movimiento discreto: Ciclos de reloj
•El resultado depende a veces de qué agente ejecuta su tick() antes
Referencias•[HN96] “Software Agents: An Overview”, Hyacinth S. Nwana, Knowledge Engineering Review, Vol 11, No 3, pp.1-40, Sept 1996•[AS2000] AgentSheets http://www.agentsheets.com•[FAB2000] “Simulación con agentes”, Luis Fabiani Bendicho, ISBC Enero 2000•[ARJA96] “Tactile Programming: A Unified Manipulation Paradigm Supporting Program Comprehension, Composition and Sharing”, Alexander Repenning and James Ambach, in Proceeding of Visual Languages 1996, Boulder, Colorado: IEEE Computer Society. •[JESS] Jess, The Java Expert System Shell, http://herzberg.ca.sandia.gov/jess •[GAMELET] GAMELET, Mark G. Tacchi, [email protected]