25
Implementación de un Agente para el mundo de la aspiradora I. Arquitectura del Sistema Módulos del Sistema A Continuación se verá cada uno de estos módulos. En el módulo Agente está considerado, el Agente Reflejo Simple y el Agente con Memoria Interna. II. Especificación de los módulos II.1 Modulo del Ambiente de Operación A) Diagrama de Clases Ambiente ~posX: int ~posY: int ~posX0: int ~posY0: int ~orientacion: int +SUR: int = 2 +NORTE: int = 1 +OESTE: int = 0 +ESTE: int = 3 <<create>>+Ambiente() +generarEstadoInicial(dimension: int, pBasuras: float, pObstaculos: float) +imprimirEstado(s: String) +colocarAgente(x: int, y: int, orientacion: int, ag: Agente) +realizarAccion(a: Accion) +getPercepcion(): Percepcion (Ver código en JAVA del AMBIENTE en el ANEXO) Ojo: El ambiente si sabe la orientación del agente, pero el agente no lo puede percibir ya que no tiene sensores para percibir estas orientaciones. B) Parámetros del ambiente Estos parámetros definen la forma y contenido del ambiente, que para este caso es una malla donde un agente aspiradora tendrá que limpiar la mugre allí incluida. Para ello tendrá que evitar los obstáculos que encuentre en la malla. La lectura de los parámetros del ambiente se lo hará desde un archivo de configuración llamado config.ini, allí estarán definidos:

A Spira Dora

Embed Size (px)

Citation preview

  • Implementacin de un Agente para el mundo de la aspiradora

    I. Arquitectura del Sistema

    Mdulos del Sistema

    A Continuacin se ver cada uno de estos mdulos. En el mdulo Agente est considerado, el Agente Reflejo Simple y el Agente con Memoria Interna.

    II. Especificacin de los mdulos

    II.1 Modulo del Ambiente de Operacin

    A) Diagrama de Clases

    Ambiente

    ~posX: int~posY: int~posX0: int~posY0: int~orientacion: int+SUR: int = 2+NORTE: int = 1+OESTE: int = 0+ESTE: int = 3

    +Ambiente()+generarEstadoInicial(dimension: int, pBasuras: float, pObstaculos: float)+imprimirEstado(s: String)+colocarAgente(x: int, y: int, orientacion: int, ag: Agente)+realizarAccion(a: Accion)+getPercepcion(): Percepcion

    (Ver cdigo en JAVA del AMBIENTE en el ANEXO)

    Ojo: El ambiente si sabe la orientacin del agente, pero el agente no lo puede percibir ya que no tiene sensores para percibir estas orientaciones. B) Parmetros del ambiente Estos parmetros definen la forma y contenido del ambiente, que para este caso es una malla donde un agente aspiradora tendr que limpiar la mugre all incluida. Para ello tendr que evitar los obstculos que encuentre en la malla. La lectura de los parmetros del ambiente se lo har desde un archivo de configuracin llamado config.ini, all estarn definidos:

  • Parmetros del ambiente Valor

    Dimensin de la celda 2 Probabilidad de basura 0.5 Probabilidad de obstculos 0.4 Posicin X inicial de la aspiradora 1 Posicin Y inicial de la aspiradora 0

    Estos valores son definidos por el usuario.

    0 1 Eje X 0

    1

    Eje Y

    Ejemplo de un mundo de la aspiradora de tamao 2x2

    : Suciedad o mugre

    : Obstculo (muro o mueble)

    : Aspiradora orientada hacia abajo

    : Aspiradora orientada hacia la izquierda

    : Aspiradora orientada hacia arriba

    : Aspiradora orientada hacia la derecha

    B) Representacin del Ambiente Representacin de Objetos en el ambiente Smbolo Objeto Representacin

    S Suciedad M(1, 0...F+1, 0...F+1) O Obstculo M(2, 0...F+1, 0...F+1)

    Representacin de objetos en las celdas del ambiente

    S O valor Constantes 0 0 0 VACIO 0 1 1 OBSTACULO 1 0 2 SUCIO 1 1 X

    El valor X indica que no existe esa posibilidad Si S o O es 0 indica que no esta presente la suciedad u obstculo respectivamente Si S o O es 1 indica que si est presente la suciedad u obstculo respectivamente

  • CODIGO EN JAVA DE ESTA SECCION public void generarEstadoInicial(int dimension, float pBasuras, float pObstaculos) { float pb=pBasuras;// probabilidad de basuras float po=pObstaculos; // probabilidad de obstaculos e = new Estado();// e: es una variable de tipo estado e.setDimension(dimension);// estableciendo la dimension del ambiente int x,y; for(y=0; y
  • II.2 Modulo del Agente A) Diagrama de clases

    Accion

    -codigo: int+AV: int = 0+G90: int = 1+G_90: int = 2+OFF: int = 3+AS: int = 4

    +getCodigo(): int+setCodigo(codigo: int)+getNombre(): String

    Actuador

    -codigo: String+nombre: String

    Agente

    -tabla: int[*]-reglas: int[*]-prendido: Boolean

    +Agente()+operarARS(n: int)+operarACM(n: int)-interpretar_entrada(p: Percepcion): Estado-selecciona_regla(estado: Estado, reglas: int): int-aplica_regla(regla: int): Accion-agenteReflejoSimple(p: Percepcion): Accion-agenteConMemoria(p: Percepcion): Accion-actualiza_estado(e: Estado, p: Percepcion): Estado+getAmbiente(): Ambiente+setAmbiente(ambiente: Ambiente)

    -agente 1

    1..*

    Percepcion

    -obst: int-suc: int-orig: int

    +Percepcion()+getValor(): int+getObst(): int+setObst(obst: int)+getOrig(): int+setOrig(orig: int)+getSuc(): int+setSuc(suc: int)+imprimir()

    Sensor

    -codigo: String-nombre: String

    -agente1

    1..*

    Tabla

    -puntaje: int

    -accion 1

    1..*

    1..*

    1

    1..*

    1

    (Ver cdigo en JAVA del AGENTE en el ANEXO)

    Cada Agente posee tres Sensores (Sensor tctil, fotosensor, sensor infrarrojo) y cada uno de los cuales mide dos Percepciones (existencia o ausencia de algo). Por otro lado, cada Agente posee algunos actuadores, pero para este ejemplo se han considerado cuatro actuadores (Ruedas, eje, tubo, circuito elctrico). Las ruedas se relacionan con el avance de la aspiradora, el eje, con los giros de direccin, el tubo, con la accin de aspirar todo lo que hay en la celda, y el circuito elctrico se relaciona con la accin de apagado automtico de la aspiradora. B) Tipos de Agente Principalmente existen 2 tipos de agentes, los cuales se diferencian por la informacin que poseen. Mientras que el agente reflejo simple trata de alcanzar su objetivo con tan solo tener una tabla de mapeo de percepcin-accin, el agente con memoria interna, adems de esa informacin trabaja con informaciones adicionales que a continuacin se menciona. El agente reflejo simple no considerar lo siguiente:

    Estado Como evoluciona el mundo Lo que hacen mis acciones

    El agente con memoria interna si considera lo anterior.

  • II.2.1 Agente Reflejo Simple

    Esquema General de un Agente del mundo de la aspiradora

    A) Sensores Smbolo Nombre del

    Sensor Descripcin Percepciones

    ST Sensor tctil tiene un valor 1 si la mquina topa con algn obstculo y un valor 0 en caso contrario

    Obstculo

    FS Foto-sensor est debajo de la mquina; ste emite un 1 si hay suciedad y un 0 en caso contrario

    Suciedad

    SI Sensor infrarrojo que emite un 1 cuando el agente se encuentra en su ubicacin de origen, y 0 en cualquier otro caso.

    Origen

    B) Percepciones Smbolo Percepcin Valor=0 Valor=1 Grafico Obst. Obstculo No ha topado con

    un obstculo Top con un obstculo

    Suc. Suciedad En la celda actual no hay suciedad

    En la celda actual existe suciedad

    Orig. Origen El agente no se encuentra en su celda de origen

    El agente se encuentra en su celda de origen

    C) Actuadores Smbolo Nombre del

    Actuador Acciones

    AGENTE

    Sensores

    Acciones Avanzar Girar 90 Girar -90 Aspirar Apagarse

    Metas Limpiar Irse a

    casa

    Ambiente Rejilla de 4x4 con: Obstculo (mueble o muro) Suciedad

    Percepciones (ST, FS, SI)

    Solucin?

    Actuadores

  • R Ruedas Avanzar E Eje Girar 90, Girar -90 T Tubo para aspirar Aspirar C Circuito Apagarse D) Acciones Smbolo Accin Ejemplo

    Av Avanzar

    Avanzar una casilla a la derecha 90 Girar 90

    Antes y despus de un giro antihorario

    -90 Girar -90

    Antes y despus de un giro horario As Aspirar

    Antes y despus de una accin aspirar

    Off Apagarse

    E) Tabla Percepcin Accin Numero de entradas: hay 3 entradas que seran los respectivos valores de las

    percepciones. (Ver la tabla de sensores) Combinaciones: En la tabla, se han colocado todas las posibles combinaciones de

    las percepciones. Estado: Un estado est formado por: El tablero y la percepcin actual. En la siguiente tabla el smbolo * significa cualquiera de las 4 orientaciones posibles que puede tomar el agente. El agente no conoce las orientaciones. El desempeo es un dato del problema (Ver anexo 1, en la parte de metas)

    Percepciones Acciones Desempeo

    Obst Suc Orig

    Orientacin (,^)

    0 0 0 0 * Av -1 1 0 0 0 * 90 -1 2 0 0 0 * -90 -1 3 0 0 0 * As -1 4 0 0 0 * Off -1000 5 0 0 1 * Av -1 6 0 0 1 * 90 -1 7 0 0 1 * -90 -1 8 0 0 1 * As -1 9 0 0 1 * Off -1

    10 0 1 0 * Av -1 11 0 1 0 * 90 -1

  • 12 0 1 0 * -90 -1 13 0 1 0 * As 100 14 0 1 0 * Off -1000 15 0 1 1 * Av -1 16 0 1 1 * 90 -1 17 0 1 1 * -90 -1 18 0 1 1 * As 100 19 0 1 1 * Off -1 20 1 0 0 * Av -1 21 1 0 0 * 90 -1 22 1 0 0 * -90 -1 23 1 0 0 * As -1 24 1 0 0 * Off -1000 25 1 0 1 * Av -1 26 1 0 1 * 90 -1 27 1 0 1 * -90 -1 28 1 0 1 * As -1 29 1 0 1 * Off -1 30 1 1 0 * Av -1 31 1 1 0 * 90 -1 32 1 1 0 * -90 -1 33 1 1 0 * As 100 34 1 1 0 * Off -1000 35 1 1 1 * Av -1 36 1 1 1 * 90 -1 37 1 1 1 * -90 -1 38 1 1 1 * As 100 39 1 1 1 * Off -1

  • F) Ejemplo ilustrativo de cmo el agente limpiara un ambiente de 2x2

    Ambiente Percepcin (Obst, Suc, Orig) Accin Desempeo Desempeo acumulado

    No hay obstculo al frente No hay suciedad Si est en el origen

    (0,0,1) Avanzar -1 0

    No hay obstculo al frente Si hay suciedad No est en el origen

    (0,1,0) Aspirar 100 -1

    No hay obstculo al frente No hay suciedad No est en el origen

    (0,0,0) Girar 90 -1 99

    No hay obstculo al frente No hay suciedad No est en el origen

    (0,0,0) Girar 90 -1 98

    No hay obstculo al frente No hay suciedad No est en el origen

    (0,0,0) Avanzar -1 97

    No hay obstculo al frente No hay suciedad Si est en el origen

    (0,0,1) Girar -90 -1 96

    No hay obstculo al frente No hay suciedad Si est en el origen

    (0,0,1) Avanzar -1 95

    No hay obstculo al frente Si hay suciedad No est en el origen

    (0,1,0) Aspirar 100 94

    No hay obstculo al frente No hay suciedad No est en el origen

    (0,0,0) Girar 90 -1 194

    No hay obstculo al frente No hay suciedad No est en el origen

    (0,0,0) Girar 90 -1 193

    No hay obstculo al frente No hay suciedad No est en el origen

    (0,0,0) Avanzar -1 192

    No hay obstculo al frente No hay suciedad Si est en el origen

    (0,0,1) Apagarse -1 191

  • El desempeo final alcanzado por el agente es de 191 puntos. G) Diagrama de Flujo de un Agente Reflejo Simple

    Generar ambientealeatorio

    Prender agente

    Leer archivo de configuracion (.ini)

    Leer percepcionesdel estado actual

    Si sucede una condicion de parada

    SI

    NO

    Realizar accion segun la tabla

    Condicin de parada Numero mximo de operaciones. Cuando el agente llegue a realizar una cantidad determinada de operaciones, el programa se detendr. Esta cantidad ser determinada por el usuario.

    II.2.2 Agente con memoria interna Es parecido al agente reflejo simple, pero se diferencia en que este agente conoce su Estado, como evoluciona el mundo y lo que hacen sus acciones. Debido a que este agente trabaja con mas informacin es necesario que aqu definamos algunos estadsticos con los que podra trabajar el agente.

    A) Estadsticos Nmero de acciones ejecutadas Nmero de aspiraciones Numero de aspiraciones que efectivamente limpiaron una suciedad Numero de veces que choc con un obstculo Numero de veces que volvi a pasar por la posicin inicial Numero de veces que el agente gir en sentido horario Numero de veces que el agente gir en sentido antihorario

    B) Diagrama de Flujo del agente con memoria interna

  • Generar ambientealeatorio

    Prender agente

    Leer archivo de configuracion (.ini)

    Leer percepcionesdel estado actual

    Si sucede una condicion de parada

    SI

    NO

    Realizar accion segun sus reglas

    Calcular estadisticos

    Actualizar estado interno

  • II.3 Complejidad de los Agentes

    I. Agente Reflejo Simple Funcion Agente Reflejo Simple (ARS) Entrada: Definimos como entrada de esta funcin al numero de operaciones seguidas que realizar el agente reflejo simple. Por ejemplo: n=10. A continuacin se analizarn los tiempos de ejecucin de cada operacin. public void ejecutarARS(int n) { //BUCLE i: n operaciones for(int i=0; i

  • estado.setCelda(1, 1, Estado.SUCIO); else //Llamada a un metodo: estado.setCelda(1, 1, Estado.VACIO); //Retorno de una variable: return estado; } COMPLEJIDAD TOTAL DE LA FUNCION: 5 operaciones private int selecciona_regla(Estado estado, int reglas[]) { //Llamada a un metodo: if(estado.getCelda(1, 1)==Estado.SUCIO) return 0; //Llamada a un metodo: if(estado.getCelda(1, 0)==Estado.OBSTACULO) return 1; //Llamada a un metodo: if(estado.getCelda(1, 0)==Estado.VACIO) return 2; //Llamada a un metodo: if(estado.getCelda(1, 1)==Estado.VACIO) return 3; return -1; } COMPLEJIDAD TOTAL DE LA FUNCION: 4 operaciones private Accion aplica_regla(int regla) { Accion a = new Accion(); if(regla==0) //Llamada a un metodo: a.setCodigo(Accion.AS); else if(regla==1) //Llamada a un metodo: a.setCodigo(Accion.G90); else if(regla==2) //Llamada a un metodo: a.setCodigo(Accion.AV); else if(regla==2) //Llamada a un metodo: a.setCodigo(Accion.AV); return a; }

    COMPLEJIDAD TOTAL DE LA FUNCION: 1 operacin Solo se llamar a una sola operacin

    II. Agente con memoria (o agente con estado interno)

    La entrada es la misma que en el caso anterior, adems tambin lo analizaremos para un valor igual n=10; public void ejecutarACM(int n) { //BUCLE i: n operaciones for(int i=0; i

  • //Llamada a un metodo: 1 operacion

    Percepcion p = ambiente.getPercepcion(); //Llamada a una funcion: 20 operaciones

    Accion a = agenteConMemoria(ambiente.getPercepcion()); //Llamada a un metodo: 1 operacion ambiente.realizarAccion(a); } } COMPLEJIDAD TOTAL DE LA FUNCION: n*(1+12+1)=10*(1+20+1)=220 operaciones private Accion agenteConMemoria(Percepcion p) { //global: reglas, estado // se actualiza la descripcin interna del estado que // mantiene el agente //Llamada a una funcion: 3 operaciones

    estado = actualiza_estado (estado, p); //ESTA LLAMADA A FUNCION YA SE ESTUDIO EN EL CASO ANTERIOR

    //Llamada a una funcion: 4 operaciones regla = selecciona_regla (estado, reglas); //ESTA LLAMADA A FUNCION YA SE ESTUDIO EN EL CASO ANTERIOR //Llamada a una funcion: 1 operacion Accion accin=aplica_regla(regla);

    //Llamada a una funcion: 12 operaciones estado = actualiza_estado (estado, accin); return accion; }

    COMPLEJIDAD TOTAL DE LA FUNCION: 20 operaciones private Estado actualiza_estado(Estado e, Percepcion p) { (Solo se llama a uno de los dos dos siguientes)

    if(p.getObst()==1) //Llamada a un metodo: e.setCelda(1, 0, Estado.OBSTACULO); else //Llamada a un metodo: e.setCelda(1, 0, -1); (Solo se llama a uno de los dos siguientes) if(p.getSuc()==1) //Llamada a un metodo: e.setCelda(1, 1, Estado.SUCIO); else //Llamada a un metodo: e.setCelda(1, 1, Estado.VACIO); //Retorno de una variable: return e; }

    COMPLEJIDAD TOTAL DE LA FUNCION: 3 operaciones private Estado actualiza_estado(Estado e, Accin p) { if(a.getCodigo()==Accion.AV) { //Llamada a una operacion if(or==Ambiente.OESTE && posX>0)

  • //Llamada a una operacion if(e.getCelda(posX-1, posY) != Estado.OBSTACULO) //Llamada a una operacion posX--; //Llamada a una operacion

    if(or==Ambiente.NORTE && posY>0) //Llamada a una operacion

    if(e.getCelda(posX, posY-1) != Estado.OBSTACULO) //Llamada a una operacion posY--; //Llamada a una operacion if(or==Ambiente.ESTE && posX

  • Comparacin del Numero de operaciones entre los dos tipos de agentes

    n 10 50 200 500 1000 Agente Reflejo simple Complejidad=12*n 120 600 2400 6000 12000 Agente con memoria Complejidad=22*n 220 1100 4400 11000 22000

    donde n: Numero de veces que se ejecutan ambos agentes. Lo que se mide son el numero de operaciones que necesitan realizar por cada valor de n Por lo tanto, el agente con memoria, puede tomar mejores decisiones pero realizar un poco ms del doble de operaciones que el agente reflejo simple.

    II.4 Mdulo del Rendimiento Este mdulo se encarga de medir cuan bien trabaja el agente. Para ello trataremos de relacionar los siguientes parmetros: Tamao matriz: Se probar desde 3 hasta 10 Rendimiento: El rendimiento fue definido en la tabla percepcin-accin Nro basuras iniciales: Numero de celdas con suciedad al inicio Nro basuras faltantes: Numero de celdas que faltaron limpiarse %limpieza = (Nro basuras iniciales - Nro basuras faltantes)/ Nro basuras iniciales (0: indica que no se limpi nada; 1: indica que se limpi todas las celdas)

    Hay algunos parmetros que se consideran para todas las corridas: Probabilidad de basuras = 0.5 Probabilidad de obstculos = 0.4 Numero de iteraciones por cada corrida: 200

    Tamao matriz Rendimiento Nro de

    basuras inicial Nro basuras

    faltantes %limpieza 3 103 4 1 0.75 3 2 5 3 0.40 3 406 7 1 0.86 3 2 2 0 1.00 3 305 5 0 1.00 3 204 5 1 0.80 3 204 6 2 0.67 3 204 4 0 1.00 3 103 5 2 0.60 3 103 3 0 1.00 4 608 10 2 0.80 4 608 9 1 0.89 4 608 11 3 0.73

  • 4 305 6 1 0.83 4 -200 8 8 0.00 4 507 8 1 0.88 4 406 7 1 0.86 4 103 6 3 0.50 4 608 8 0 1.00 4 406 8 2 0.75 5 507 11 4 0.64 5 2 14 12 0.14 5 911 13 2 0.85 5 810 14 4 0.71 5 608 12 4 0.67 5 709 13 4 0.69 5 305 10 5 0.50 5 507 13 6 0.54 5 305 12 7 0.42 5 204 11 7 0.36 6 -99 17 16 0.06 6 305 15 10 0.33 6 1012 18 6 0.67 6 911 14 3 0.79 6 -99 19 18 0.05 6 507 20 13 0.35 6 1517 24 7 0.71 6 1214 21 7 0.67 6 1012 17 5 0.71 6 608 17 9 0.47 7 103 19 16 0.16 7 -200 22 22 0.00 7 1012 19 7 0.63 7 -99 28 27 0.04 7 305 23 18 0.22 7 204 24 20 0.17 7 -99 22 21 0.05 7 305 25 20 0.20 7 1315 27 12 0.56 7 -99 22 21 0.05 8 1113 25 12 0.52 8 1214 22 8 0.64 8 103 24 21 0.13 8 -200 31 31 0.00 8 1416 26 10 0.62 8 406 34 28 0.18 8 1214 26 12 0.54 8 -99 33 32 0.03 8 911 20 9 0.55 8 2 20 2 0.90 9 1012 42 30 0.29 9 1719 41 22 0.46 9 406 41 35 0.15 9 1719 42 23 0.45 9 1113 46 33 0.28 9 1416 37 21 0.43

  • 9 305 35 30 0.14 9 1012 45 33 0.27 9 103 36 33 0.08 9 2123 48 25 0.48 10 2325 48 23 0.52 10 1921 50 29 0.42 10 1315 53 38 0.28 10 -99 54 53 0.02 10 -99 53 52 0.02 10 2 44 42 0.05 10 305 40 35 0.13 10 507 43 36 0.16 10 1820 48 29 0.40 10 2022 50 28 0.44

    (Grafico generado con la herramienta MATLAB)

    Grafico XYZ En el grfico se observa que el rendimiento del agente aumenta conforme aumenta el porcentaje de basuras. El tamao de la matriz no influye mucho en el

    rendimiento.

    Z: Rendimiento

    Y: % de limpieza de

    basuras

    X: Tamao de la matriz

  • (Grafico generado con la herramienta MATLAB)

    Grafico XY: Segn el grfico XY el rendimiento, el cual es un valor entero, aumenta a medida el ambiente se hace mas grande.

    (Grafico generado con la herramienta MATLAB)

    Grafico XZ: Segn el grfico XZ el % de limpieza del agente disminuye a medida que el ambiente se hace ms grande.

    Y: Rendimiento

    X: Tamao de la matriz

    X: Tamao de la matriz

  • (Grafico generado con la herramienta MATLAB)

    Grafico YZ: Segn el grfico YZ el rendimiento y el % de limpieza no esta muy correlacionados.

    X: Rendimiento

    Y: % de limpieza de

    basuras

  • Anexo1: Planteamiento del Problema del Mundo de la Aspiradora Implante un simulador de ambiente para la medicin del desempeo en el mundo de una aspiradora. Tal mundo se puede describir de la siguiente manera: Percepciones: Todo agente de aspiradora obtiene cada vez un vector de percepcin formado por tres elementos. El primero, un sensor tctil, tiene un valor 1 si la mquina topa con algn obstculo y un valor 0 en caso contrario. El segundo proviene de una foto-sensor que est debajo de la mquina; ste emite un 1 si hay suciedad y un 0 en caso contrario. El tercero proviene de un sensor infrarrojo, que emite un 1 cuando el agente se encuentra en su ubicacin de origen, y 0 en cualquier otro caso. Acciones: Existen cinco acciones posibles: avanzar, dar vuelta de 90 a la derecha, dar vuelta de 90 a la izquierda, aspirar la mugre y apagarse. Metas La meta de todos los agentes es limpiar e irse a casa. Para ser ms precisos, la medida del desempeo ser de 100 puntos por cada pieza de suciedad aspirada, menos 1 punto por cada accin emprendida y menos 1000 puntos si no est en su lugar de origen cuando se apague. Ambiente: El ambiente est formado por una rejilla de cuadrados. En algunos de ellos hay obstculos (muros y muebles), en tanto que otros cuadrados son espacios libres. En algunos de stos hay mugre. Por cada accin avanzar se adelanta un cuadrado a menos que en es e cuadrado haya un obstculo, en cuyo caso el agente permanecer en donde se encuentra, y se enciende el sensor tctil. Mediante la accin aspirar la mugre siempre se limpia la mugre. El comando apagar da por terminada la simulacin. Se puede variar la complejidad del ambiente a lo largo de tres dimensiones: Forma de la habitacin: En el caso ms sencillo, la habitacin es un cuadrado de nXn, siendo n un valor fijo. Para complicarlo, se le puede considerar rectangular, en forma de L, o de forma irregular, o bien, como una serie de habitaciones conectadas entre si mediante pasillos. Muebles: Poner muebles en una habitacin complica ms las cosas que cuando la habitacin est vaca. Para un agente de limpieza por aspiradora, desde el punto de vista de la percepcin no existe diferencia entre un mueble y un muro: para el sensor tctil ambos son un nmero 1. Distribucin de la mugre: En el caso ms sencillo, la mugre est distribuida uniformemente por toda a habitacin, aunque o ms real es que la mugre se concentre en ciertos lugares, como seria a lo largo de un sector muy transitado, o frente a un silln.

  • Anexo2: Programa n JAVA

    MAIN public class Main { public static void main(String[] args) { //GENERACION DEL AMBIENTE ALEATORIO A PARTIR DE LOS PARAMETROS DE CONFIGURACION Ambiente amb = new Ambiente(); amb.generarEstadoInicial(10, 0.5f,0.4f); amb.imprimirEstado("\nTABLERO INICIAL"); //CREANDO UN AGENTE Agente ag = new Agente(); //COLOCANDO AL AGENTE EN SU AMBIENTE amb.colocarAgente(1,0,Ambiente.SUR,ag); amb.imprimirEstado("\nTABLERO INICIAL CON AGENTE"); //EL AGENTE OPERARA UN DETERMINADO NUMERO DE VECES ag.operarARS(200); //VEAMOS COMO QUEDA EL TABLERO LUEGO DE SU OPERACION //amb.imprimirEstado("\nTABLERO FINAL"); } }

    AGENTE

    Se realizaron las n operaciones?

    NO

    R=0

    INICIO Variable que acumulara el rendimientode realziar la "n" acciones

    Leer percepcion del ambiente

    ESCOGER UNA ACCIONPercepcion: OBST=0; SUC=0; ORIG=0

    Escoger con la misma probabilidaduna de las sgtes ACCIONES:Avanzar, Girar 90, girar -90,

    Aspirar

    Escoger con la misma probabilidad unade las sgtes ACCIONES: Avanzar,Girar 90, girar -90, Aspirar, Apagar

    Percepcion: OBST=0; SUC=0; ORIG=1

    EscogerACCION: Aspirar

    Percepcion: OBST=0; SUC=0

    Percepcion: OBST=1; SUC=0; ORIG=0

    Percepcion: OBST=1; SUC=0; ORIG=1

    Percepcion: OBST=1; SUC=1

    Mostrar percepcion

    Realizar accion en ambiente

    Acumular rendimiento R

    Mostrar estadistica: rendimiento, nrobasuras al inicio, nro basuras al final, nro

    basuras limpiadas

    FINSI

    public void operarARS(int n) { int R=0; int r=-1;

  • int bi = ambiente.getNroBasuras(); float peso[] = {0,0,0,0}; int accion[] = {0,0,0,0}; int t; for(int i=0; i
  • if(peso[t]
  • AMBIENTE

    Agente esta prendido?

    SI

    Si agente ASPIRASi agente GIRA 90 o -90

    Si agente se APAGA Si agente AVANZA

    avanzar OESTE

    Si agente no esta en el borde y no tiene obstaculos al frente

    avanzar ESTE

    avanzar SUR avanzar NORTE

    Celda Actual =VACIA

    Actualizarorientacion del

    agente

    Cambiar estado delagente de prendido a

    apagado

    NO

    public void realizarAccion(Accion a) { if(this.prendido) { if(a.getCodigo()==Accion.AV) { if(or==Ambiente.OESTE && posX>0) if(e.getCelda(posX-1, posY) != Estado.OBSTACULO) posX--; if(or==Ambiente.NORTE && posY>0) if(e.getCelda(posX, posY-1) != Estado.OBSTACULO) posY--; if(or==Ambiente.ESTE && posX

  • or = Ambiente.SUR; else if(or == Ambiente.SUR) or = Ambiente.OESTE; else if(or == Ambiente.OESTE) or = Ambiente.NORTE; } else if(a.getCodigo()==Accion.OFF) { this.prendido = false; } } } public void generarEstadoInicial(int dimension, float pBasuras, float pObstaculos) { int nb = Math.round(pBasuras*(float)(dimension*dimension)); int no = Math.round(pObstaculos*(float)(dimension*dimension)); e = new Estado(); e.setDimension(dimension); int x,y; for(y=0; y0){ e.setCelda(x,y,Estado.OBSTACULO); no--; } else { e.setCelda(x,y,Estado.VACIO); } } } }