domingo, 8 de junio de 2014

Práctica Planificación Sistemas Inteligentes

Pues, por una petición en particular, os dejo la práctica de Planificación de la asignatura Sistemas Inteligentes de 2º de Ingeniería Informática de la UMA.
El problema del mono y los plátanos (the monkey-and-bananas problem) es aquel al que se enfrenta un mono (monkey) en un laboratorio donde hay varios plátanos colgando del techo, fuera de su alcance.
Hay una caja (box) disponible que permitirá el mono alcanzar los plátanos si se sube en ella.
Al principio el mono está en A, los plátanos en B, y la caja en C.
El mono y la caja tienen altura (height) baja (low), pero si el mono se sube a la caja tendrá altura elevada (high), la misma que tienen los plátanos.
Las acciones disponibles para el mono son:
1.  ir (go) de un lugar a otro,
2.  empujar (push) un objeto de un lugar a otro,
3.  subirse (climbUp) o
4.  bajarse (climbDown) de un objeto, y
5.  agarrar (grasp) o
6.  soltar (unGrasp) un objeto.

El resultado de grasp es que el mono obtiene el objeto si el mono y el
objeto están en el mismo lugar y a la misma altura.

Se pide hacer lo siguiente:
a) Escribir la descripción del estado inicial y final.
b) Escribir los seis esquemas de acción.
c) Crea los ficheros mb_domain.txt y mb_problem.txt para el dominio y el problema, respectivamente. A continuación suminístraselos a JavaGP (una implementación del algoritmo GRAPHPLAN) y comprueba que se encuentra un plan correcto. Guarda la salida del programa en el archivo result_trace.txt
d) OPCIONAL: Supón que el mono quiere engañar a los científicos, que han ido a tomarse un café, cogiendo los plátanos, pero dejando la caja en su lugar original. Escribe esto como un objetivo genérico (es decir, sin suponer que la caja está necesariamente en C) en el lenguaje del cálculo de situaciones. ¿Puede resolver este objetivo un sistema de planificación clásico?
Si la respuesta es no, cambia el objetivo general a un objetivo más específico que
pueda ser resuelto por JavaGP.
Crea el archivo mb_problem2.txt con el problema. Ejecute el problema en JavaGP
con mb_domain.txt y mb_problem2.txt. Almacena la salida en result_trace2.txt.

mb_domain.txt
operator go(M,O,F)
pre: monkey(M),place(F), place(O), en(M,O), bajo(M) 
post: ~en(M,O), en(M, F)

operator push(M,O,F,C) 
pre: monkey(M), box(C), place(O), place(F), en(M,O), en(C,O), bajo(C), bajo(M)
post: ~en(M,O), ~en(C,O),en(C,F), en(M,F) 

operator climbUp(M, C, P) 
pre: monkey(M), box(C), place(P), en(M,P), en(C,P), bajo(C), bajo(M) 
post: ~bajo(M) 


operator grasp(M, B, P) 
pre: monkey(M), bananas(B), place(P), en(M,P), en(B,P), ~bajo(B), ~bajo(M) 
post: agarra(M, B), ~en(B, P)

operator unGrasp(M, B,P) 
pre: monkey(M), bananas(B), place(P), en(M,P), en(B,P), agarra(M,B) 
post: ~agarra(M, B), en(B, P)


operator climbDown(M,C,P) 
pre: monkey(M), box(C), place(P), en(M,P), en(C,P), bajo(C), ~bajo(M) 
post: bajo(M)


mb_problem.txt
start(
monkey(m), 
bananas(p), 
box(caja), 
place(a),
place(b),
place(c),
~agarra(m,p),
bajo(m), 
bajo(caja),
~bajo(p),
en(m,a),
en(p, b),
en(caja, c))

goal(
agarra(m,p)
)

mb_problem2.txt
start(
monkey(m),
bananas(p), 
box(caja),
place(a),
place(b),
place(c),
en(m,a),
~bajo(p),
~agarra(m,p),
bajo(m), 
bajo(caja),
en(p, b), 
en(caja, c)) 

goal(
agarra(m,p),
en(caja,c),
en(m, a)
)
 

Para ejecutar se debe abrir la consola de comandos y, estando en el directorio en el que se encuentran tanto javagp.jar como los archivos txt, poner: java -jar javagp.jar –d mb_domain.txt  -p mb_problem.txt

Así se obtiene la salida que nos piden en los ficheros result_trace.txt, pero eso ya os lo dejo a vosotros ^^

No hay comentarios:

Publicar un comentario