Artificial I
Maria MunevarPráctica o problema1 de Octubre de 2015
2.622 Palabras (11 Páginas)139 Visitas
Implementación en Java de un planificador lineal con pila de objetivos |
BLOCKS WORLD |
María Munévar Moreno Cindy Medina Jiménez Inteligencia Artificial I Lab Assistant: Lucas Marín |
12/12/2012 |
Contenido
1. PLANTEAMIENTO DEL PROBLEMA
2. METODOLOGIA
2.1 Problemas planteados
2.2 Creación de los ficheros
2.3 Creación de clases
3. CONCLUSIONES
PLANTEAMIENTO DEL PROBLEMA
El segundo ejercicio práctico de AI1/PAR consiste en la implementación en java de un planeador lineal con pila de objetivos. El dominio de esta aplicación corresponde a una serie de problemas relacionados con el mundo de los bloques, y se define a continuación:
Predicados
- On-table(x): x está puesto sobre la mesa
- On(x,y): x está sobre y
- Free(x): x no tiene ningún objeto encima
- Free-arm: el brazo robótico no está agarrando ningún objeto
- Picked-up(x): el objeto x está siendo agarrado por el brazo robótico
- Used-cols-num(n): n columnas de bloques están siendo usadas.
- Heavier(x,y): el objeto x es mas pesado que y
NOMBRE DEL OPERADOR | FUNCION | PRECONDICIONES | ELIMINA | AGREGA |
Pick-up(x) | Le ordena al brazo robótico recoger el bloque x el cual está sobre la mesa. | Used-cols-num(n), On-table(x), Free-arm, Free(x) | On-table(x), Free-arm, Used-cols-num(n) | Picked-up(x), Used-cols-num(n-1) |
Leave(x): | Le ordena al brazo robótico dejar el bloque x e sobre la mesa. | Picked-up(x), Used-cols-num(n), n<3 | Picked-up(x), Used-cols-num(n) | On-table(x), Used-cols-num(n+1), Free-arm |
Unstack (x,y): | Le ordena al brazo robótico recoger el bloque x el cual está sobre el bloque y. | On(x,y), Free(x), Free-arm, x!=y | On(x,y), Free-arm | Picked-up(x), Free(y) |
Stack(x,y): | Le ordena al brazo robótico dejar el bloque x sobre el bloque y. | Picked-up(x), Free(y), Heavier(y,x), x!=y | Picked-up(x), Free(y) | On(x,y), Free-arm |
Tabla 1. Operadores considerados en la práctica
Se debe tener en cuenta que se han introducido dos modificaciones en el dominio clásico "mundo de los bloques":
- En la tabla anterior se aprecia que solamente se pueden tener 3 pilas de bloques. Este hecho es comprobado con el predicado Used-cols-num, que se actualiza cada vez que se utiliza el operador Pick-up or Leave.
- Sólo se puede apilar un bloque x sobre un bloque y si el segundo bloque es más pesado que el primero.
METODOLOGIA
En esta sección se detalla la implementación en Java del planificador lineal con pila de objetivos para resolver el problema, por lo que se indica la representación interna que utilizada para gestionar las precondiciones, y asi comprobar la aplicabilidad de los operadores, etc. De igual forma se describe el diseño de tácticas inteligentes para facilitar el proceso de planificación al apilar condiciones previas, la aplicación de los operadores, etc.
Problemas planteados
La figura 1 y 2 ilustran los casos para probar el algoritmo. Cabe aclarar que los puntos en los cuadros representan unidades de peso. La figura 1 recrea un problema con solución sencilla, el cual se debe resolver en un tiempo de ejecución notorio. El segundo caso ilustrado en la figura 2, corresponde a un problema de mayor dificultad que el anterior.
[pic 3] | [pic 4] |
Estado inicial | Estado final |
Figura 1. Primer caso a resolver
[pic 5] | [pic 6] |
Estado inicial | Estado final |
Figura 2. Segundo caso a resolver
Por otro lado, se debe probar el código con un amplio conjunto de casos: los dos problemas propuestos y otros tres inventados. Discutir las soluciones encontradas por el programa e indicar si es posible que hayan planes más óptimos. La figura 3 y 4 ilustran los problemas diseñados.
[pic 7] | [pic 8] |
Estado inicial | Estado final |
Figura 3. Tercer caso a resolver
[pic 9] | [pic 10] |
Estado inicial | Estado final |
Figura 4. Cuarto caso a resolver
Creación de los ficheros
Los ficheros .txt contienen la información acerca del problema que se quiere resolver. Contiene el nombre de los bloques usados y la descripción del estado inicial y final. Los archivos de prueba utilizados para evaluar el software tienen el siguiente formato:
Blocks=A,B,C;
Initial_state=ON-TABLE(C);ON-TABLE(B);ON(A,B);FREE(A);FREE(C);HEAVIER(B,C);HEAVIER(C,A);HEAVIER(B,A);FREE-ARM;
...