simulaci n con agentes l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Simulación con agentes PowerPoint Presentation
Download Presentation
Simulación con agentes

Loading in 2 Seconds...

play fullscreen
1 / 28

Simulación con agentes - PowerPoint PPT Presentation


  • 128 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Simulación con agentes' - errin


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
simulaci n con agentes

Simulación con agentes

Luis Fabiani Bendicho

ISBC - Enero 2000

ndice
Í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

qu es simulaci n
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

qu es un agente
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

objetivo
Objetivo
  • El punto de referencia:

www.agentsheets.com

ISBC - Enero 2000

objetivo6
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

objetivo7
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

clases desarrolladas
Clases desarrolladas
  • Objetivos:
    • Abstracción y genericidad
  • Jerarquíade clases:

ISBC - Enero 2000

clases desarrolladas9
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

clases desarrolladas10
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

clases desarrolladas11
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

clases desarrolladas12
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

clases desarrolladas13
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

clases desarrolladas14
Clases desarrolladas
  • Clase Agente (1):

ISBC - Enero 2000

clases desarrolladas15
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

clases desarrolladas16
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

clases desarrolladas17
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

clases desarrolladas18
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

clases desarrolladas19
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

clases desarrolladas20
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

otros aspectos
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

mi simulador carretera
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

mi simulador carretera23
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

mi simulador carretera24
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

mi simulador carretera25
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

mi simulador carretera26
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

mi simulador carretera27
Mi Simulador: Carretera
  • Las reglas de Coche1:

ISBC - Enero 2000

mi simulador carretera28
Mi Simulador: Carretera

Yahora...

ISBC - Enero 2000