17.04.2014 Views

archivo pdf - Wiphala.net

archivo pdf - Wiphala.net

archivo pdf - Wiphala.net

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

U N I V E R S I D A D D E<br />

SAN MARTIN DE PORRES<br />

FACULTAD DE INGENIERIA Y ARQUITECTURA<br />

Escuela de Computación y Sistemas<br />

TEMA:<br />

ASPIRADORA<br />

CURSO:<br />

Inteligencia Artificial<br />

PROFESOR:<br />

Ing. Samuel Oporto<br />

SECCIÓN:<br />

45 J<br />

INTEGRANTES: Araoz Ore, Herbert<br />

García García, Francisco<br />

Roriguez Davalos, Julio<br />

Sánchez Solís, Martín<br />

LA MOLINA, NOVIEMBRE DEL 2007<br />

1


INDICE<br />

RESUMEN 3<br />

ENUNCIADO 4<br />

AGENTES INTELIGENTES 5<br />

CONCEPTO DE AGENTE REFLEJO SIMPLE 5<br />

METODOS DEL AGENTE REFLEJO SIMPLE 7<br />

CORRIDA DEL AGENTE REFLEJO SIMPLE PARA UN LADO ”N” 11<br />

RENDIMIENTO DE LAS CORRIDAS 15<br />

CONCEPTO DE AGENTE REFLEJO CON MEMORIA INTERNA 17<br />

METODOS DEL AGENTE REFLEJO CON MEMORIA 18<br />

CORRIDA DEL AGENTE REFLEJO CON MEMORIA PARA UN LADO ”N” 23<br />

RENDIMIENTO DE LAS CORRIDAS 34<br />

CONCLUSIONES 36<br />

ANEXO 1 37<br />

ANEXO 2 40<br />

2


RESUMEN<br />

El problema planteado al inicio del curso de Inteligencia Artificial es la creacion<br />

de la logica y algoritmos para un robot cuya funcion sera limpiar un ambiente<br />

cuadrado, este ambiente controlado sera definido por nosotros, será de lado “n”<br />

y de area “n x n”<br />

Se brindará una solución, tratando de ser la mas efectiva posible, al problema de<br />

barrer un ambiente. Para la solución del problema, se ha trabajado con el<br />

lenguaje Java en el IDE <strong>net</strong>beans.<br />

3


ENUNCIADO<br />

Percepción, todo agente tiene un vector de percepcion formado por 3 elementos:<br />

El sensor táctil, tiene un valor 1 si la maquina topa con algun obstáculo y un<br />

valor 0 en caso contrario.<br />

Un fotosensor, ubicado debajo de la maquina, este emite un 1 si hay suciedad y<br />

un 0 en caso contrario.<br />

Sensor Infrarrojo, emite 1 cuando el agente se encuentra en su ubicación origen<br />

y 0 en cualquier otro caso.<br />

Acciones, existen 5:<br />

• Avanzar.<br />

• Dar vuelta de 90 a la derecha.<br />

• Dar vuelta de 90 a la izquierda.<br />

• Aspirar la mugre.<br />

• Apagarse.<br />

Metas, la meta de todos los agentes es limpiar e irse a casa.<br />

100 puntos, por cada aspirada.<br />

-1 punto por cada accion emprendida<br />

-1000 puntos, si no esta en su lugar de origen cuando se apague.<br />

Ambiente, formada por rejilla de cuadros, en algunos de ellos hay obstáculos<br />

(muros y muebles), en tanto que otros espacios son espacio libre, en algunos de<br />

estos hay mugre. Por cada accion avanzar se adelanta un cuadrado al menos q<br />

en ese cuadrado haya un obstáculo, en cuyo caso el agente permanecera en<br />

donde se encuentra, y se enciende el sensor táctil. Mediante la accion aspirar<br />

mugre siempre se aspira la mugre. El comando apagar da terminado la accion<br />

4


AGENTES INTELIGENTES<br />

Un agente es todo aquello que puede considerarse que percibe su ambiente<br />

mediante sensores y que responde o actúa en tal ambiente por medio de<br />

efectores.<br />

Los agentes humanos tienen ojos, oídos y otros órganos que le sirven de<br />

sensores, así como manos, piernas, boca y otras partes de su cuerpo que le<br />

sirven de efectores. En el caso de agentes robóticos, los sensores son sustituidos<br />

por cámaras infrarrojas y los efectores son reemplazados mediante motores. En<br />

el caso de un agente de software, sus percepciones y acciones vienen a ser la<br />

cadena de bits codificados.<br />

CONCEPTO DE AGENTE REFLEJO SIMPLE<br />

Las acciones del agente se establecen en función a una tabla de percepción <br />

acción.<br />

Este agente podra funcionar siempre y cuando el ambiente sea accesible.<br />

Algunos agentes reflejos pueden almacenar la informacion de su estado actual.<br />

En terminos de programacion se puede decir que el Agente Reflejo Simple<br />

cumpla con la siguiente sentencia: if PERCEPCION then ACCION<br />

5


METODOS DEL AGENTE REFLEJO SIMPLE<br />

Los métodos para el funcionamiento del agente reflejo son:<br />

Met01: Detecta Sucio: A través de este método el agente reflejo identificara si<br />

la casilla esta sucio o no, así decidirá si debe limpiar o seguir con el siguiente<br />

método, este valor lo obtenemos con el Foto Sensor.<br />

Met02: Detecta Pared/Obstáculo: La pared/obstáculo se detecta a través del<br />

sensor táctil, una vez que el agente trata de avanzar y se choca con la pared u<br />

obstaculo, su percepcion de pared/obstaculo se convertira en 1.<br />

7


Met03: Limpia: (1) Si el método Detecta Sucio (Met01) nos da como valor 1,<br />

entonces el robot limpiara la superficie.<br />

Met04: Detecta Origen: Este método determinara si se encuentra en el origen,<br />

se obtiene a través de un sensor infrarojo. Cuando este sea 1 el agente reflejo<br />

simple se apagara.<br />

Met05: Gira 90+: (2)<br />

valor 1, el agente girara 90+ en su mismo eje.<br />

Cuando la percepcion pared/obstaculo se encuentra con<br />

8


Met06: Avanza: Cuando el Método Detecta Obstáculo se pone en 0, el agente<br />

reflejo avanza una casilla.<br />

Met07: Stop: (3)<br />

reflejo se apagara.<br />

Cuando el Método Detecta origen sea 1 entonces el agente<br />

(1) En nuestro agente reflejo simple, el metodo 03 Limpia, solamente funcionara<br />

si se de primero el metodo 01: detecta sucio.<br />

(2)En nuestro agente reflejo simple, el metodo 05 Gira, solamente funcionara si<br />

se de primero el metodo 02: detecta pared/obstaculo.<br />

(3) En nuestro agente reflejo simple, el metodo 07 Stop, solamente funcionara si<br />

se de primero el metodo 04: detecta origen.<br />

Include<br />

MET. 07: Stop<br />

MET. 04: Detecta<br />

Origen<br />

9


TABLA DE PERCEPCION – ACCION PARA EL AGENTE<br />

REFLEJO SIMPLE<br />

Reglas Origen Basura Pared/Obst. Sentido Acción<br />

1 0 0 0 * Avanzar<br />

2 0 0 1 * Gira +90<br />

3 0 1 0 * Limpia<br />

4 1 0 0 * Stop<br />

10


CORRIDA DEL AGENTE REFLEJO SIMPLE PARA UN LADO<br />

N=”6”<br />

Posicion 1<br />

Posicion 3<br />

Posicion 2<br />

Posicion 4<br />

11


Posicion 5<br />

Posicion 9<br />

Posicion 6<br />

Posicion 10<br />

Posicion 7<br />

Posicion 11<br />

Posicion 8<br />

Posicion 12<br />

12


Posicion 12 Posicion 16<br />

Posicion 13 Posicion 17<br />

Posicion 14 Posicion 18<br />

Posicion 15 Posicion 19<br />

13


RESULTADOS:<br />

Total Basuras: 5<br />

Total Limpiados: 2<br />

CORRIDA DEL AGENTE REFLEJO SIMPLE PARA UN LADO<br />

N=”7”<br />

RESULTADOS:<br />

Total Basuras: 6<br />

Total Limpiados: 3<br />

CORRIDA DEL AGENTE REFLEJO SIMPLE PARA UN LADO<br />

N=”8”<br />

RESULTADOS:<br />

Total Basuras: 7<br />

Total Limpiados: 2<br />

CORRIDA DEL AGENTE REFLEJO SIMPLE PARA UN LADO<br />

N=”9”<br />

RESULTADOS:<br />

Total Basuras: 6<br />

Total Limpiados: 0<br />

CORRIDA DEL AGENTE REFLEJO SIMPLE PARA UN LADO<br />

N=”10”<br />

RESULTADOS:<br />

Total Basuras: 8<br />

Total Limpiados: 3<br />

NOTA: SE OMITIO LOS PANTALLAZOS DE LAS DEMAS CORRIDAS POR<br />

PROBLEMAS EN EL TAMAÑO DEL ARCHIVO.<br />

14


RENDIMIENTO DE LAS CORRIDAS<br />

Aquí vamos a anlizar los resultados obtenidos y veremos cual ha sido el<br />

rendimiento de cada una de las corridas en funcion al lado de la cuadricula.<br />

Para N=”6”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

30 itera<br />

60000 ms<br />

60 seg.<br />

TOTAL BASURA 5<br />

TOTAL ELIMINADO 2<br />

RENDIMIENTO 40 %<br />

Para N=”7”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

20 itera<br />

40000 ms<br />

40 seg.<br />

TOTAL BASURA 6<br />

TOTAL ELIMINADO 3<br />

RENDIMIENTO 50 %<br />

Para N=”8”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

28 itera<br />

56000 ms<br />

56 seg.<br />

TOTAL BASURA 7<br />

TOTAL ELIMINADO 2<br />

RENDIMIENTO 28.57 %<br />

15


Para N=”9”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

17 itera<br />

34000 ms<br />

34 seg.<br />

TOTAL BASURA 6<br />

TOTAL ELIMINADO 0<br />

RENDIMIENTO 0 %<br />

Para N=”10”<br />

Total Basuras: 8<br />

Total Limpiados: 3<br />

Rendimiento: 3/8 = 0.374 = 37.5%<br />

16


CONCEPTO DE AGENTE REFLEJO CON MEMORIA INTERNA<br />

Este tipo de agente guarda estados internos lo que nos sirve sin consideración<br />

para ejecutar una acción.<br />

Los sensores no nos pueden informar a la vez de todos los estados que maneja<br />

nuestro ambiente, es por este caso que el agente necesita actualizar algo de<br />

información en el estado interno.<br />

Esto le permite discernir que entre estados del ambiente que generan la misma<br />

entrada de percepciones pero, sin embargo; para cada uno de los estados se<br />

necesitan acciones distintas.<br />

17


METODOS DEL AGENTE REFLEJO CON MEMORIA INTERNA<br />

Los métodos para el funcionamiento del agente reflejo con memoria son:<br />

Met01: Detecta Sucio: A través de este método el agente reflejo identificara si<br />

la casilla esta sucio o no, así decidirá si debe limpiar o seguir con el siguiente<br />

método, este valor lo obtenemos con el Foto Sensor.<br />

Met02: Detecta Pared/Obstáculo: La pared/obstáculo se detecta a través del<br />

sensor táctil, una vez que el agente trata de avanzar y se choca con la pared u<br />

obstaculo, su percepcion de pared/obstaculo se convertira en 1.<br />

18


Met03: Limpia: (1) Si el método Detecta Sucio (Met01) nos da como valor 1,<br />

entonces el robot limpiara la superficie.<br />

Met04: Detecta Origen: Este método determinara si se encuentra en el origen,<br />

se obtiene a través de un sensor infrarojo. Cuando este sea 1 el agente reflejo<br />

simple se apagara.<br />

Met05: Gira 90+: (2)<br />

Cuando la percepcion pared/obstaculo o visitado se<br />

encuentra con valor 1, el agente girara 90+ en su mismo eje.<br />

19


Met06: Avanza: Cuando el Método Detecta Obstáculo se pone en 0, el agente<br />

reflejo avanza una casilla.<br />

Met07: Detecta Visitado: Cuando el agente verifica si las coordenadas de la<br />

casilla siguiente ya ha sido visitada, en este metodo, la percepcion Visitado es<br />

pondra en 1.<br />

Met08: Stop: (3)<br />

reflejo se apagara.<br />

Cuando el Método Detecta origen sea 1 entonces el agente<br />

(1) En nuestro agente reflejo simple, el metodo 03 Limpia, solamente funcionara<br />

si se de primero el metodo 01: detecta sucio.<br />

20


(2)En nuestro agente reflejo simple, el metodo 05 Gira, solamente funcionara si<br />

se de primero el metodo 02: detecta pared/obstaculo o el metodo 07: detecta<br />

visitado.<br />

(3) En nuestro agente reflejo simple, el metodo 08 Stop, solamente funcionara si<br />

se de primero el metodo 04: detecta origen.<br />

21


TABLA DE PERCEPCION – ACCION PARA EL AGENTE<br />

REFLEJO CON MEMORIA<br />

Reglas Origen Basura Pared/Obst. Visitado Sentido Acción<br />

1 0 0 0 0 * Avanzar<br />

2 0 0 0 1 * Gira +90<br />

3 0 0 1 0 * Gira +90<br />

4 0 1 0 0 * Limpia<br />

5 1 0 0 0 * stop<br />

22


CORRIDA DEL AGENTE REFLEJO CON MEMORIA INTERNA<br />

PARA UN LADO N=”6”<br />

Posicion 1<br />

Posicion 3<br />

Posicion 2<br />

Posicion 4<br />

23


Posicion 5<br />

Posicion 9<br />

Posicion 6<br />

Posicion 10<br />

Posicion 7<br />

Posicion 11<br />

Posicion 8<br />

Posicion 12<br />

24


Posicion 13<br />

Posicion 17<br />

Posicion 14<br />

Posicion 18<br />

Posicion 15<br />

Posicion 19<br />

Posicion 16<br />

Posicion 20<br />

25


Posicion 23<br />

Posicion 21<br />

Posicion 24<br />

Posicion 22<br />

Posicion 25<br />

26


RESULTADOS DE CORRIDA DEL AGENTE REFLEJO CON<br />

MEMORIA<br />

Para N=”6”<br />

Estado<br />

inical Accion<br />

Sentio<br />

inicial<br />

Sentido<br />

final<br />

1 0 0 0 DERECHA AVANZA DERECHA<br />

2 0 0 0 DERECHA AVANZA DERECHA<br />

3 0 0 0 DERECHA AVANZA DERECHA<br />

4 0 0 0 DERECHA AVANZA DERECHA<br />

5 0 0 0 DERECHA AVANZA DERECHA<br />

6 0 0 1 DERECHA GIRO +90 ARRIBA<br />

7 0 0 0 ARRIBA AVANZA ARRIBA<br />

8 0 0 0 ARRIBA AVANZA ARRIBA<br />

9 0 0 1 ARRIBA GIRA +90 IZQUIERDA<br />

10 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

11 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

12 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

13 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

14 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

15 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

16 0 0 1 IZQUIERDA GIRA +90 ABAJO<br />

17 0 0 0 ABAJO AVANZA ABAJO<br />

18 0 0 0 ABAJO AVANZA ABAJO<br />

19 0 1 0 ABAJO LIMPIA ABAJO<br />

20 0 0 0 ABAJO AVANZA ABAJO<br />

21 0 0 0 ABAJO AVANZA ABAJO<br />

22 0 0 0 ABAJO AVANZA ABAJO<br />

23 0 0 0 ABAJO AVANZA ABAJO<br />

24 0 0 1 ABAJO GIRA +90 DERECHA<br />

25 0 0 0 DERECHA AVANZA DERECHA<br />

26 0 1 0 DERECHA LIMPIA DERECHA<br />

27 0 0 0 DERECHA AVANZA DERECHA<br />

28 0 1 0 DERECHA LIMPIA DERECHA<br />

29 0 0 0 DERECHA AVANZA DERECHA<br />

30 0 0 0 DERECHA AVANZA DERECHA<br />

31 0 1 0 DERECHA LIMPIA DERECHA<br />

32 0 0 0 DERECHA AVANZA DERECHA<br />

33 0 0 1 DERECHA GIRO +90 ARRIBA<br />

34 0 0 0 ARRIBA AVANZA ARRIBA<br />

35 0 0 1 ARRIBA GIRO +90 IZQUIERDA<br />

36 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

37 0 0 0 ABAJO AVANZA ABAJO<br />

38 0 0 1 ABAJO GIRA +90 DERECHA<br />

39 0 0 0 DERECHA AVANZA DERECHA<br />

40 0 0 1 DERECHA GIRO +90 ARRIBA<br />

41 0 0 0 ARRIBA AVANZA ARRIBA<br />

27


42 0 0 1 ARRIBA GIRO +90 IZQUIERDA<br />

43 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

44 0 0 0 ABAJO AVANZA ABAJO<br />

45 0 0 1 ABAJO GIRA +90 DERECHA<br />

SE GENERA LOOP<br />

RESULTADOS DE CORRIDA DEL AGENTE REFLEJO CON<br />

MEMORIA<br />

Para N=”7”<br />

Estado<br />

inical Accion<br />

Sentio<br />

inicial<br />

Sentido<br />

final<br />

1 0 0 0 DERECHA AVANZA DERECHA<br />

2 0 0 0 DERECHA AVANZA DERECHA<br />

3 0 0 1 DERECHA GIRO +90 ARRIBA<br />

4 0 0 0 ARRIBA AVANZA ARRIBA<br />

5 0 0 0 ARRIBA AVANZA ARRIBA<br />

6 0 0 1 ARRIBA GIRA +90 IZQUIERDA<br />

7 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

8 0 0 1 IZQUIERDA GIRA +90 ABAJO<br />

9 0 0 0 ABAJO GIRO +90 DERECHA<br />

10 0 0 0 DERECHA AVANZA DERECHA<br />

11 0 0 0 DERECHA AVANZA DERECHA<br />

12 0 0 0 DERECHA AVANZA DERECHA<br />

13 0 0 0 DERECHA AVANZA DERECHA<br />

14 0 0 0 DERECHA AVANZA DERECHA<br />

15 0 0 1 DERECHA GIRO +90 ARRIBA<br />

16 0 0 0 ARRIBA AVANZA ARRIBA<br />

17 0 0 1 ARRIBA GIRA +90 IZQUIERDA<br />

18 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

19 0 0 0 ABAJO AVANZA ABAJO<br />

20 0 0 0 ABAJO AVANZA ABAJO<br />

21 0 0 1 ABAJO GIRA +90 DERECHA<br />

22 0 0 0 DERECHA AVANZA DERECHA<br />

23 0 0 1 DERECHA GIRO +90 ARRIBA<br />

24 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

25 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

26 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

27 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

28 0 0 1 IZQUIERDA GIRA +90 ABAJO<br />

29 0 0 0 ABAJO AVANZA ABAJO<br />

30 0 0 0 ABAJO AVANZA ABAJO<br />

31 0 0 1 ABAJO GIRA +90 DERECHA<br />

32 0 0 0 DERECHA AVANZA DERECHA<br />

33 0 0 0 DERECHA AVANZA DERECHA<br />

34 0 0 1 DERECHA GIRO +90 ARRIBA<br />

28


35 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

36 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

37 0 0 0 ABAJO AVANZA ABAJO<br />

38 0 0 0 ABAJO AVANZA ABAJO<br />

39 0 1 0 ABAJO LIMPIA ABAJO<br />

40 0 0 0 ABAJO AVANZA ABAJO<br />

41 0 0 0 ABAJO AVANZA ABAJO<br />

42 0 0 0 ABAJO AVANZA ABAJO<br />

43 0 0 1 ABAJO GIRA +90 DERECHA<br />

44 0 0 0 DERECHA AVANZA DERECHA<br />

45 0 0 1 DERECHA GIRO +90 ARRIBA<br />

46 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

47 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

48 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

49 0 1 0 IZQUIERDA LIMPIA IZQUIERDA<br />

50 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

51 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

52 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

53 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

54 0 0 1 IZQUIERDA GIRA +90 ABAJO<br />

55 0 0 0 ABAJO AVANZA ABAJO<br />

56 0 0 1 ABAJO GIRA +90 DERECHA<br />

57 0 0 0 DERECHA GIRO +90 ARRIBA<br />

58 0 0 0 ARRIBA AVANZA ARRIBA<br />

59 0 0 0 ARRIBA AVANZA ARRIBA<br />

60 0 0 0 ARRIBA AVANZA ARRIBA<br />

61 0 0 0 ARRIBA AVANZA ARRIBA<br />

62 0 0 0 ARRIBA AVANZA ARRIBA<br />

63 0 0 0 ARRIBA AVANZA ARRIBA<br />

64 0 1 0 ARRIBA LIMPIA ARRIBA<br />

65 0 0 0 ARRIBA AVANZA ARRIBA<br />

66 0 0 1 ARRIBA GIRA +90 IZQUIERDA<br />

67 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

68 0 0 1 IZQUIERDA GIRA +90 ABAJO<br />

69 0 0 0 ABAJO GIRO +90 DERECHA<br />

70 0 0 0 DERECHA AVANZA DERECHA<br />

71 0 0 1 DERECHA GIRO +90 ARRIBA<br />

72 0 0 0 ARRIBA AVANZA ARRIBA<br />

73 0 0 1 ARRIBA GIRA +90 IZQUIERDA<br />

74 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

75 0 0 1 IZQUIERDA GIRA +90 ABAJO<br />

76 0 0 0 ABAJO GIRO +90 DERECHA<br />

77 0 0 0 DERECHA AVANZA DERECHA<br />

78 0 0 1 DERECHA GIRO +90 ARRIBA<br />

SE GENERA LOOP<br />

29


RESULTADOS DE CORRIDA DEL AGENTE REFLEJO CON<br />

MEMORIA<br />

Para N=”8”<br />

Estado<br />

inical Accion<br />

Sentio<br />

inicial<br />

Sentido<br />

final<br />

1 0 0 0 DERECHA AVANZA DERECHA<br />

2 0 0 0 DERECHA AVANZA DERECHA<br />

3 0 0 0 DERECHA AVANZA DERECHA<br />

4 0 0 0 DERECHA AVANZA DERECHA<br />

5 0 1 0 DERECHA LIMPIA DERECHA<br />

6 0 0 0 DERECHA AVANZA DERECHA<br />

7 0 0 0 DERECHA AVANZA DERECHA<br />

8 0 0 0 DERECHA AVANZA DERECHA<br />

9 0 0 0 DERECHA AVANZA DERECHA<br />

10 0 0 1 DERECHA GIRO +90 ARRIBA<br />

11 0 0 0 ARRIBA AVANZA ARRIBA<br />

12 0 0 1 ARRIBA GIRO +90 IZQUIERDA<br />

13 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

14 0 0 0 ABAJO AVANZA ABAJO<br />

15 0 0 1 ABAJO GIRA +90 DERECHA<br />

16 0 0 0 DERECHA AVANZA DERECHA<br />

17 0 0 1 DERECHA GIRO +90 ARRIBA<br />

18 0 0 0 ARRIBA AVANZA ARRIBA<br />

19 0 0 1 ARRIBA GIRO +90 IZQUIERDA<br />

20 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

21 0 0 0 ABAJO AVANZA ABAJO<br />

22 0 0 1 ABAJO GIRA +90 DERECHA<br />

SE GENERA LOOP<br />

RESULTADOS DE CORRIDA DEL AGENTE REFLEJO CON<br />

MEMORIA<br />

Para N=”9”<br />

Estado<br />

inical Accion<br />

Sentio<br />

inicial<br />

Sentido<br />

final<br />

1 0 0 0 DERECHA AVANZA DERECHA<br />

2 0 0 0 DERECHA AVANZA DERECHA<br />

3 0 1 0 DERECHA LIMPIA DERECHA<br />

4 0 0 0 DERECHA AVANZA DERECHA<br />

5 0 0 0 DERECHA AVANZA DERECHA<br />

6 0 0 1 DERECHA GIRO +90 ARRIBA<br />

7 0 0 0 ARRIBA AVANZA ARRIBA<br />

8 0 0 1 ARRIBA GIRO +90 IZQUIERDA<br />

30


9 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

10 0 0 0 ABAJO AVANZA ABAJO<br />

11 0 0 0 ABAJO AVANZA ABAJO<br />

12 0 0 0 ABAJO AVANZA ABAJO<br />

13 0 0 0 ABAJO AVANZA ABAJO<br />

14 0 0 0 ABAJO AVANZA ABAJO<br />

15 0 0 1 ABAJO GIRA +90 DERECHA<br />

16 0 0 0 DERECHA AVANZA DERECHA<br />

17 0 0 1 DERECHA GIRO +90 ARRIBA<br />

18 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

19 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

20 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

21 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

22 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

23 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

24 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

25 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

26 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

27 0 1 0 IZQUIERDA LIMPIA IZQUIERDA<br />

28 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

29 0 0 1 IZQUIERDA GIRA +90 ABAJO<br />

30 0 0 0 ABAJO AVANZA ABAJO<br />

31 0 0 0 ABAJO AVANZA ABAJO<br />

32 0 0 1 ABAJO GIRA +90 DERECHA<br />

33 0 0 0 DERECHA AVANZA DERECHA<br />

34 0 0 0 DERECHA AVANZA DERECHA<br />

35 0 0 0 DERECHA AVANZA DERECHA<br />

36 0 0 0 DERECHA AVANZA DERECHA<br />

37 0 0 0 DERECHA AVANZA DERECHA<br />

38 0 0 0 DERECHA AVANZA DERECHA<br />

39 0 0 0 DERECHA AVANZA DERECHA<br />

40 0 0 0 DERECHA AVANZA DERECHA<br />

41 0 0 1 DERECHA GIRO +90 ARRIBA<br />

42 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

43 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

44 0 0 0 ABAJO AVANZA ABAJO<br />

45 0 0 1 ABAJO GIRA +90 DERECHA<br />

46 0 0 0 DERECHA AVANZA DERECHA<br />

47 0 0 1 DERECHA GIRO +90 ARRIBA<br />

48 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

49 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

50 0 0 0 ABAJO AVANZA ABAJO<br />

51 0 0 1 ABAJO GIRA +90 DERECHA<br />

SE GENERA LOOP<br />

31


RESULTADOS DE CORRIDA DEL AGENTE REFLEJO CON<br />

MEMORIA<br />

Para N=”10”<br />

Estado<br />

inical Accion<br />

Sentio<br />

inicial<br />

Sentido<br />

final<br />

1 0 0 0 DERECHA AVANZA DERECHA<br />

2 0 0 0 DERECHA AVANZA DERECHA<br />

3 0 0 0 DERECHA AVANZA DERECHA<br />

4 0 0 0 DERECHA AVANZA DERECHA<br />

5 0 0 0 DERECHA AVANZA DERECHA<br />

6 0 0 1 DERECHA GIRO +90 ARRIBA<br />

7 0 0 0 ARRIBA AVANZA ARRIBA<br />

8 0 0 1 ARRIBA GIRA +90 IZQUIERDA<br />

9 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

10 0 0 0 ABAJO AVANZA ABAJO<br />

11 0 0 0 ABAJO AVANZA ABAJO<br />

12 0 1 0 ABAJO LIMPIA ABAJO<br />

13 0 0 0 ABAJO AVANZA ABAJO<br />

14 0 0 0 ABAJO AVANZA ABAJO<br />

15 0 0 0 ABAJO AVANZA ABAJO<br />

16 0 0 0 ABAJO AVANZA ABAJO<br />

17 0 0 0 ABAJO AVANZA ABAJO<br />

18 0 0 0 ABAJO AVANZA ABAJO<br />

19 0 0 1 ABAJO GIRA +90 DERECHA<br />

20 0 0 0 DERECHA AVANZA DERECHA<br />

21 0 0 0 DERECHA AVANZA DERECHA<br />

22 0 0 0 DERECHA AVANZA DERECHA<br />

23 0 0 0 DERECHA AVANZA DERECHA<br />

24 0 0 0 DERECHA AVANZA DERECHA<br />

25 0 0 0 DERECHA AVANZA DERECHA<br />

26 0 0 1 DERECHA GIRO +90 ARRIBA<br />

27 0 0 0 ARRIBA AVANZA ARRIBA<br />

28 0 0 0 ARRIBA AVANZA ARRIBA<br />

29 0 0 0 ARRIBA AVANZA ARRIBA<br />

30 0 0 0 ARRIBA AVANZA ARRIBA<br />

31 0 0 0 ARRIBA AVANZA ARRIBA<br />

32 0 0 0 ARRIBA AVANZA ARRIBA<br />

33 0 0 0 ARRIBA AVANZA ARRIBA<br />

34 0 0 0 ARRIBA AVANZA ARRIBA<br />

35 0 0 1 ARRIBA GIRA +90 IZQUIERDA<br />

36 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

37 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

38 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

39 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

40 0 0 1 IZQUIERDA GIRA +90 ABAJO<br />

41 0 0 0 ABAJO AVANZA ABAJO<br />

42 0 0 0 ABAJO AVANZA ABAJO<br />

32


43 0 0 0 ABAJO AVANZA ABAJO<br />

44 0 0 0 ABAJO AVANZA ABAJO<br />

45 0 0 0 ABAJO AVANZA ABAJO<br />

46 0 1 0 ABAJO LIMPIA ABAJO<br />

47 0 0 0 ABAJO AVANZA ABAJO<br />

48 0 0 0 ABAJO GIRO +90 DERECHA<br />

49 0 0 0 DERECHA AVANZA DERECHA<br />

50 0 0 0 DERECHA AVANZA DERECHA<br />

51 0 0 0 DERECHA GIRO +90 ARRIBA<br />

52 0 0 0 ARRIBA AVANZA ARRIBA<br />

53 0 0 0 ARRIBA AVANZA ARRIBA<br />

54 0 0 0 ARRIBA AVANZA ARRIBA<br />

55 0 0 0 ARRIBA AVANZA ARRIBA<br />

56 0 0 0 ARRIBA AVANZA ARRIBA<br />

57 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

58 0 0 0 IZQUIERDA AVANZA IZQUIERDA<br />

59 0 1 0 IZQUIERDA LIMPIA IZQUIERDA<br />

60 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

61 0 0 0 ABAJO AVANZA ABAJO<br />

62 0 0 1 ABAJO GIRA +90 DERECHA<br />

63 0 0 0 DERECHA GIRO +90 ARRIBA<br />

64 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

65 0 0 0 IZQUIERDA GIRO +90 ABAJO<br />

66 0 0 0 ABAJO AVANZA ABAJO<br />

67 0 0 1 ABAJO GIRA +90 DERECHA<br />

68 0 0 0 DERECHA GIRO +90 ARRIBA<br />

69 0 0 0 ARRIBA GIRO +90 IZQUIERDA<br />

SE GENERA LOOP<br />

NOTA: SE OMITIO LOS PANTALLAZOS DE LAS DEMAS CORRIDAS POR<br />

PROBLEMAS EN EL TAMAÑO DEL ARCHIVO.<br />

33


RENDIMIENTO DE LAS CORRIDAS<br />

Aquí vamos a anlizar los resultados obtenidos y veremos cual ha sido el<br />

rendimiento de cada una de las corridas en funcion al lado de la cuadricula.<br />

Para N=”6”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

45 itera<br />

90000 ms<br />

90 seg<br />

TOTAL BASURA 5<br />

TOTAL ELIMINADO 4<br />

RENDIMIENTO 80 %<br />

Para N=”7”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

78 itera<br />

156000 ms<br />

156 seg.<br />

TOTAL BASURA 6<br />

TOTAL ELIMINADO 3<br />

RENDIMIENTO 50 %<br />

Para N=”8”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

22 itera<br />

44000 ms<br />

44 seg.<br />

TOTAL BASURA 6<br />

TOTAL ELIMINADO 1<br />

RENDIMIENTO 16.67 %<br />

34


Para N=”9”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

51 itera<br />

122000 ms<br />

122 seg.<br />

TOTAL BASURA 8<br />

TOTAL ELIMINADO 2<br />

RENDIMIENTO 25 %<br />

Para N=”10”<br />

Tiempo de Ejecucion por accion<br />

Total de iteracion<br />

Total de Ejecucion<br />

TOTAL EN SEGUNDOS<br />

2000 ms<br />

69 itera<br />

138000 ms<br />

138 seg.<br />

TOTAL BASURA 8<br />

TOTAL ELIMINADO 3<br />

RENDIMIENTO 37.5 %<br />

35


CONCLUSIONES<br />

Como resultado de las pruebas al agente reflejo simple podemos concluir que:<br />

• En ciertas ocasiones el agente simple genera un loop por un error en la<br />

logica del algoritmo.<br />

• Como consecuencia de este loop, al no ejecutar la accion stop, no se podra<br />

ver los resultados de las acciones que realizo el agente simple.<br />

• El agente simple no iniciara una corrida cuando al empezar este apuntando<br />

hacia arriba, ese es un error del codigo.<br />

Como resultado de las pruebas al agente reflejo con memoria podemos concluir<br />

que:<br />

• El agente con memoria tuvo mayor tiempo de ejecución porque trata de<br />

recorer mas camino que no ha visitado.<br />

• Este agente tiene la capacidad de parar su algoritmo cuando ya se<br />

encuentra en un loop, por lo tanto si pudimos recoger los resultados de<br />

sus acciones.<br />

36


package robot;<br />

public class Robot1 {<br />

int nlados=0;<br />

int aleat[][];<br />

int posIniXRobot=0;<br />

int posIniYRobot=0;<br />

int posXRobot=0;<br />

int posYRobot=0;<br />

int nroTotBasura=0;<br />

String direccion = "DERECHA";<br />

ANEXO 1<br />

Código del Robot1 Agente Simple<br />

/** Creates a new instance of Robot1 */<br />

public Robot1() {<br />

}<br />

/**<br />

* direccion : 0 = derecha / 1 = arriba / 2 = izquierda / 3 = abajo<br />

*Metodo que mueve al robot a la siguiente posicion verificando previamente que<br />

no hay pared en la siguiente posicion a moverse<br />

*/<br />

public void avanzaRobot(int posx, int posy ){<br />

boolean b;<br />

verificaSiHayBasura(posx,posy);<br />

System.out.println("ROBOT EN POSICION ("+posx+","+posy+")");<br />

if(direccion.equals("DERECHA")){<br />

b = this.verificaSiEsMuro(posx+1,posy);<br />

if(!b){<br />

posXRobot++;<br />

}<br />

}<br />

else if(direccion.equals("ARRIBA")){<br />

b = this.verificaSiEsMuro(posx,posy-1);<br />

if(!b){<br />

posYRobot--;<br />

}<br />

}<br />

else if(direccion.equals("IZQUIERDA")){<br />

b = this.verificaSiEsMuro(posx-1,posy);<br />

if(!b){<br />

posXRobot--;<br />

}<br />

}<br />

else if(direccion.equals("ABAJO")){<br />

b = this.verificaSiEsMuro(posx,posy+1);<br />

if(!b){<br />

posYRobot++;<br />

}<br />

}<br />

37


}<br />

/**<br />

*Metodo que setea la posicion donde se encuentra la basura limpiada a -1 el cual<br />

nos indica que hubo basura y ya fue limpiada para efectos de contabilizar la basura<br />

recojida.<br />

**/<br />

public void limpiaBasura(int posx, int posy ){<br />

aleat[posx][posy]=-1;<br />

}<br />

/**<br />

* Metodo que me lista toda la basura limpiada<br />

**/<br />

public void listarBasuraLimpiada(){<br />

nroTotBasura=0;<br />

for(int i=1;i


**<br />

*Metodo principal que empieza todo<br />

**/<br />

public void empieza(){<br />

System.out.println("INGRESE NRO DE LADOS : ");<br />

String linea="";<br />

int tope=0;<br />

try{ linea = br.readLine(); }<br />

catch(Exception e){}<br />

nlados=Integer.parseInt(linea);<br />

listarPosInicial();<br />

posXRobot = posIniXRobot;<br />

posYRobot = posIniYRobot;<br />

do{<br />

tope++;<br />

avanzaRobot(posXRobot,posYRobot);<br />

} while(!((posIniXRobot==posXRobot) && (posIniYRobot==posYRobot)));<br />

listarBasuraLimpiada();<br />

}<br />

/**<br />

*Metodo que me cambia de direccion siempre lo hace en sentido antihorario.<br />

*Ejm : si direccion era izquierda y llamo al metodo cambiarDireccion() luego<br />

de esa llamada la nueva direccion sera abajo.<br />

**/<br />

public void cambiarDireccion(){<br />

if(direccion.equals("DERECHA")){<br />

direccion="ARRIBA";<br />

}<br />

else if(direccion.equals("ARRIBA")){<br />

direccion="IZQUIERDA";<br />

}<br />

else if(direccion.equals("IZQUIERDA")){<br />

direccion="ABAJO";<br />

}<br />

else if(direccion.equals("ABAJO")){<br />

direccion="DERECHA";<br />

}<br />

}<br />

/**<br />

*Aquí se instancia un objeto r1 de la clase Robot1 y llama al metodo empieza<br />

para que comience el recorrido del robot<br />

**/<br />

public static void main(String[] args){<br />

Robot1 r1 = new Robot1();<br />

r1.empieza();<br />

}<br />

}<br />

39


ANEXO 2<br />

CODIGO DEL ROBOT2 AGENTE CON MEMORIA<br />

package robot;<br />

public class Robot2 {<br />

int nlados=0;<br />

int aleat[][];<br />

int recorrido[][];<br />

int posIniXRobot=0;<br />

int posIniYRobot=0;<br />

int posXRobot=0;<br />

int posYRobot=0;<br />

int nroTotBasura=0;<br />

String direccion = "DERECHA";<br />

/** Creates a new instance of Robot2 */<br />

public Robot2() {<br />

}<br />

public void avanzaRobot(int posx, int posy ){<br />

boolean b;<br />

recorrido[posx][posy]=1;<br />

verificaSiHayBasura(posx,posy);<br />

System.out.println("ROBOT EN POSICION ("+posx+","+posy+")");<br />

if(direccion.equals("DERECHA")){<br />

b = this.verificaSiEsAccesible(posx+1,posy);<br />

if(!b){<br />

posXRobot++;<br />

}<br />

}<br />

else if(direccion.equals("ARRIBA")){<br />

b = this.verificaSiEsAccesible(posx,posy-1);<br />

if(!b){<br />

posYRobot--;<br />

}<br />

}<br />

else if(direccion.equals("IZQUIERDA")){<br />

b = this.verificaSiEsAccesible(posx-1,posy);<br />

if(!b){<br />

posXRobot--;<br />

}<br />

}<br />

else if(direccion.equals("ABAJO")){<br />

b = this.verificaSiEsAccesible(posx,posy+1);<br />

if(!b){<br />

posYRobot++;<br />

}<br />

}<br />

}<br />

40


public void limpiaBasura(int posx, int posy ){<br />

aleat[posx][posy]=-1;<br />

}<br />

/**<br />

* Metodo que me lista toda la basura limpiada<br />

**/<br />

public void listarBasuraLimpiada(){<br />

nroTotBasura=0;<br />

for(int i=1;i


System.out.println("INGRESE NRO DE LADOS : ");<br />

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));<br />

String linea="";<br />

int tope=0;<br />

try{ linea = br.readLine(); }<br />

catch(Exception e){}<br />

nlados=Integer.parseInt(linea);<br />

listarPosInicial();<br />

posXRobot = posIniXRobot;<br />

posYRobot = posIniYRobot;<br />

do{<br />

tope++;<br />

avanzaRobot(posXRobot,posYRobot);<br />

} while(!((posIniXRobot==posXRobot) && (posIniYRobot==posYRobot)));<br />

listarBasuraLimpiada();<br />

}<br />

/**<br />

*Método que me cambia de direccion siempre lo hace en sentido antihorario.<br />

*Ejm : si direccion era izquierda y llamo al metodo cambiarDireccion() luego de<br />

esa llamada la nueva direccion sera abajo.<br />

**/<br />

public void cambiarDireccion(){<br />

if(direccion.equals("DERECHA")){<br />

direccion="ARRIBA";<br />

}<br />

else if(direccion.equals("ARRIBA")){<br />

direccion="IZQUIERDA";<br />

}<br />

else if(direccion.equals("IZQUIERDA")){<br />

direccion="ABAJO";<br />

}<br />

else if(direccion.equals("ABAJO")){<br />

direccion="DERECHA";<br />

}<br />

}<br />

/**<br />

*Aquí se instancia un objeto r2 de la clase Robot2 y llama al metodo empieza<br />

para que comience el recorrido del robot<br />

**/<br />

}<br />

public static void main(String[] args){<br />

Robot2 r2 = new Robot2();<br />

r2.empieza();<br />

}<br />

42

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!