Ejercicios resueltos de Algoritmos de Planning

411 views

Published on

Algunos ejercicios resueltos de unos prácticos de la optativa.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
411
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ejercicios resueltos de Algoritmos de Planning

  1. 1. Introducción a los Algoritmos de Planning Práctico Nro. 1 18 de Septiembre de 2008 Alumno: Martín Ignacio Pacheco Lib.: 245214 1
  2. 2. Ejercicios 5. Dada la situación graficada a continuación, donde XX2 es una variable sin instanciar, y el siguiente orden de acciones: O = {EF > Accion3; Accion3 > Accion2; Accion3 > Accion1; Accion2 > EI; Accion1 > EI} A๐ ss(a,h) ss(b), ss(a), ss(b,m) ss(a,h), ss(b) ss(a) ss(a), ss(XX2,Y) ss(XX2) A2 A1 pe(b) not(ss(a)) algo(h) pe(a) not(ss(XX2)) algo(Y) pe(a) pe(b) unomas(a,XX1) A3 predicado(a,b), not(pe(a)), not(pe(b)) predicado(a,b) A∞ a. ¿Existen enlaces en peligro en el grafo de planning planteado? En caso afirmativo indique como los resolvería. 2
  3. 3. Para verificar la existencia de una amenaza en el grafo de planning planteado, realizo el algoritmo UCPOP con los datos respectivos, es decir que se agregaran solo los links que posee el gráfico. De esta manera veo con que posibles valores se instancia la variable XX2 y si ello o algunos de los links me produce un conflicto. Entonces para el algoritmo mencionado tendré los siguientes datos (<A, O, L, B>, agenda, actions), con A= {A๐, A∞}, O= {A∞ > A3; A3 > A2; A3 > A1; A2 > A๐; A1 > A๐}, L= {}, B= {}, Agenda= {<predicado(a, b), A∞>} y Actions= {A1, A2, A3}). El seguimiento del algoritmo es el siguiente: 1. Selecciono de la agenda <predicado(a, b), A∞>. 2. Elijo una acción del conjunto Actions que unifique con la dos-tupla elegida en el paso anterior, en este caso seria A3. Actualizo: - L’= L U {A3—(predicado(a, b))—> A∞} - O queda igual ya que la restricción de orden esta incluida. - A’= A U {A3} - Actions’= Actions – {A3} - B’= B U {XX1= sin valor} - Agenda’= Agenda – {<predicado(a, b), A∞>} U {<pe(a), A3>, <pe(b), A3>, <unosmas(a,XX1), A3>} 3. Verifico los links causales y ninguno hasta ahora presenta una amenaza. 4. Hago la invocación recursiva con (<A’,O, L’, B’>, Agenda’, Actions’). 5. Selecciono de la agenda <pe(a), A3>. 6. Elijo una acción del conjunto Actions que unifique con la dos-tupla elegida en el paso anterior, en este caso seria A1. Actualizo: - L’= L U {A1—(pe(a))—> A3} - O queda igual ya que la restricción de orden esta incluida. - A’= A U {A1} - Actions’= Actions – {A1} - B’= B U {XX2= sin valor, Y= sin valor} - Agenda’= Agenda – {<pe(a), A3>} U {<ss(a), A1>, <ss(XX2,Y), A1>, <ss(XX2), A1>} 7. Verifico los links causales y ninguno hasta ahora presenta una amenaza. 8. Hago la invocación recursiva con (<A’,O, L’, B’>, Agenda’, Actions’). 9. Selecciono de la agenda <ss(a), A1>. 10. Elijo una acción del conjunto A (es en el primer conjuntos que me fijo antes de pasar a mirar en el conjunto Actions) que unifique con la dos-tupla elegida en el paso anterior, en este caso seria A๐. Actualizo: - L’= L U {A0—(ss(a))—> A1} - O queda igual ya que la restricción de orden esta incluida. - A queda igual ya que la acción esta incluida. - Actions queda igual ya que no buscamos ninguna acción en ella. - B queda igual ya que no tengo nuevas variables y ni tampoco se les modifica el valor a ninguna. 3
  4. 4. - Agenda’= Agenda – {<ss(a), A1>} 11. Verifico los links causales y ninguno hasta ahora presenta una amenaza. 12. Hago la invocación recursiva con (<A,O, L’, B>, Agenda’, Actions). 13. Selecciono de la agenda <pe(b), A3>. 14. Nuevamente busco una acción que me unifique esta pre-condicion, en el conjunto A no encuentro ninguno, entonces busco en el conjunto Acctions y encuentro la acción A2. Actualizo: - L’= L U {A2—(pe(b))—> A3} - O queda igual ya que la restricción de orden esta incluida. - A’= A U {A2} - Actions’= Actions – {A2} - B queda igual ya que no tengo nuevas variables y ni tampoco se les modifica el valor a ninguna. - Agenda’= Agenda – {<pe(b), A3>} U {<ss(a,h), A2>, <ss(b), A2>, <ss(a), A2>} 15. Verifico los links causales y ninguno hasta ahora presenta una amenaza. 16. Hago la invocación recursiva con (<A’,O, L’, B>, Agenda’, Actions’). 17. Selecciono de la agenda <ss(a,h), A2>. 18. Nuevamente busco una acción que me unifique esta pre-condicion, en el conjunto A y la cumple la acción inicial A๐. Actualizo: - L’= L U {A๐—(ss(a,h))—> A2} - O queda igual ya que la restricción de orden esta incluida. - A queda igual ya que no se agregaron mas acciones. - Actions ya que no se quitaron mas acciones. - B queda igual ya que no tengo nuevas variables y ni tampoco se les modifica el valor a ninguna. - Agenda’= Agenda – {<ss(a,h), A2>} 19. Verifico los links causales y ninguno hasta ahora presenta una amenaza. 20. Hago la invocación recursiva con (<A,O, L, B>, Agenda’, Actions). 21. Ahora por últimos agrego el ultimo link, o sea selecciono de la agenda <ss(b), A2>. 22. Nuevamente busco una acción que me unifique esta pre-condicion, en el conjunto A y la cumple la acción inicial A๐. Actualizo: - L’= L U {A๐—(ss(b))—> A2} - O queda igual ya que la restricción de orden esta incluida. - A queda igual ya que no se agregaron mas acciones. - Actions ya que no se quitaron mas acciones. - B queda igual ya que no tengo nuevas variables y ni tampoco se les modifica el valor a ninguna. - Agenda’= Agenda – {<ss(b), A2>} 23. Verifico los links causales y ninguno hasta ahora presenta una amenaza. Por lo tanto se pudo demostrar que en la situación en que se encuentran los links independientemente del orden en que los selecciono no tengo amenaza alguna. 4
  5. 5. b. ¿Qué sucede al agregar el link desde el estado inicial a Accion1 mediante ss(b,m)? En este caso al agregar el link de A๐—(ss(b,m))—> A1 si se produce una amenaza (ver línea punteada del gráfico). Lo que sucede aquí es que el conjunto de variables, B, que teníamos sin instanciar se unifican con esta post-condición de A๐, por lo que XX2 tendría como valor b e Y tendría como valor m. Esto me produce un efecto negador (¬Q) si se ejecuta A1 antes que A2. La amenaza surge de que como bien decimos que A1 podria ejecutarse antes que A2, ya que no hay ninguna restricción al respecto en el conjunto O, lo que me produce la post-condición not(ss(XX2)) unificada not(ss(b)) logrando el efecto negador para la pre-condición ss(b) requerida por la acción A2. De esta manera me rompe el planning, ya que de no ejecutar A2 no puedo cumplir con las pre-condiciones de A3 y por ende no alcanzo mi estado final. Para salvar esta amenaza se debe agregar la restricción de orden en el conjunto O, aplicando una promición, osea O’= O U {A2<A1}. De manera tal que cuando ejecute A1, A2 ya habra ejecutado y pierdo la ameanza. 5
  6. 6. 6. De una representación UCPOP para los siguientes problemas, y discuta las soluciones propuestas. c. Torres de Hanoi: El problema consiste en mover n discos desde un poste hasta otro con la ayuda de un poste auxiliar. Existen dos reglas: solamente se puede mover un disco por vez y un disco nunca puede ser colocado sobre un disco más pequeño. Para simplificar utilizo dos discos. En el gráfico siguiente muestro como los enumero. A B C A B C D1 D1 D2 D2 Estado inicial Estado final Los elementos que se tienen son: D = {d1, d2, a, b, c}, donde D es el conjuntos de discos y A, B, C también los considero como discos porque me facilita la cantidad de predicados extras. Los predicados extras que voy a usar son: less(X, Y)= {X, Y ∈ D and X < Y} clean(X)= {:X ∈ D} # Quiere decir que X no tiene elementos encima de el. on(X, Y)= {X, Y ∈ D and less(X, Y) and clean(X) and clean(Y)} Estado inicial A๐ : on(d1, d2), on(d2, a), clear(d1), clear(b), clear(c), less(d1, d2), less(d2, a), less(d2, b), less(d2, c) Estado final A∞ : on(d1,d2), on(d2,c), clean(d1), clean(b), clean(a) ), less(d1, d2), less(d2, a), less(d2, b), less(d2, c) Las acciones que voy a tener son: A1 : move(X, Y, Z) # Mueve el disco X que esta sobre Y hacia Z. Se tiene en cuenta que Y es distinto a Z. 6
  7. 7. Pre-condiciones: notEqual(Y, Z), notEqual(X, Z), notEqual(X,Y), clean(X), clean(Z), less(X, Y), less(X, Z), on(X, Y) Efectos: clean(X), on(X, Z), clean(Y), not(clean(Z)) Unas de las consideraciones que se podrían haber tomado seria la de distinguir entre postes y discos puesto que se podría usar la clausula or para dar la opción de mover sobre un disco o a un poste solo, pero la complejidad me aumenta. d. El mono y las bananas es un problema que se realizo en un laboratorio con algunas bananas colgadas del techo. Se encuentra disponible una caja que le permite al mono alcanzarlas siempre y cuando se suba a ella. Sin embargo existen solo algunas posiciones en las que puede alcanzarlas, subir a la caja no implica que llegue, sino que la caja y la banana se deben encontrar en el mismo espacio (etiquetado de alguna forma). Cada objeto además de la posición tiene una altura, por ejemplo las bananas que están en el techo están altas, la caja esta baja, etc. Inicialmente el mono se encuentra en A, las bananas en B y la caja en C. El mono y la caja se encuentran bajos, pero si el mono trepa a la caja su altura será alta (igual que las bananas) Modelar las acciones disponibles, para que el mono pueda alcanzar las bananas, así como el estado inicial y final del plan. Altura alta baja Posiciones: 1 2 3 4 Las acciones disponibles para el mono son: - moveMonkeyIzq(A, E1, E2), el mono se movería del espacio donde se encuentra al espacio contiguo izquierdo. - moveMonkeyDer(A, E1, E2), idem al anterio pero hacia la derecha. - jumpIzq(A, C, E1, E2, E3), el mono salta la caja hacia la izquierda. - jumpDer(A, C, E1, E2, E3), idem al anterior pero hacia la derecha 7
  8. 8. - moveBoxDerMi(A, C, E1), el mono mueve la caja hacia la derecha estando el mono en la izquierda de la caja. - moveBoxIzqMi(A, C, E1), idem al anterior pero el mono se lleva la caja hacia la izquierda. - moveBoxDerMd(A, C, E1), el mono mueve la caja hacia la derecha estando el mono a la derecha de la caja. - moveBoxIzqMd(A, C, E1), idem al anterior pero el mono empuja la caja hacia la izquierda. - onBox(A, C, B), el mono se sube a la caja para tomar las bananas, estando el mismo a la izquierda o derecha de la posición de la caja. - downBox(A, C, E1), el mono se baja de la caja estando este sobre la misma. Se baja hacia cualquier lado, osea que el mono toma la posición del espacio E1 estando obviamente este libre. Los predicados auxiliares que utilizo son para describir los estados del mundo y también defino unos conjuntos para describir los estados para los diferentes objetos. I= {A, C, B1, B2, …, Bn} A= {alta, baja} C={colgada, tomada} Predicados auxiliares: - pos(X,Y)= {X ∈ I and Y ∈ Naturales} alt(X,Y)= {X ∈ {A} and Y ∈ A} libre(X)= {X ∈ Naturales} izq(X,Y)= {X, Y ∈ Naturales : X= Y - 1} catch(X, Y)= {X ∈ {B1, B2,…, Bn and Y ∈ C} Estado inicial A๐ : pos(A, 1), pos(C, 3), pos(B1, 2), pos(B2, 4), alt(M, baja), catch(B1, colgada), catch(B2, colgada) Estado final A∞ : pos(A, 2), pos(C,2), alt(A, alta), catch(B1, tomada), catch(B2, tomada) Acciones: moveMonkeyIzq(A, E1, E2) Pre-condiciones: libre(E2), pos(A,E1), alt(A,baja), izq(E2,E1) Efectos: not(libre(E2)), pos(A, E2), libre(E1) 8
  9. 9. moveMonkeyDer(A, E1, E2) Pre-condiciones: libre(E2), pos(A,E1), alt(A,baja), izq(E1,E2) Efectos: not(libre(E2)), pos(A, E2), libre(E1) jumpIzq(A, C, E1, E2, E3) Pre-condiciones: libre(E3), pos(A, E1), pos(C, E2), izq(E3, E2), izq(E2, E1), alt(A, baja) Efectos: not(libre(E3)), pos(A, E3), libre(E1) jumpDer(A, C, E1, E2, E3) Pre-condiciones: libre(E3), pos(A, E1), pos(C, E2), izq(E1, E2), izq(E2, E3), alt(A, baja) Efectos: not(libre(E3)), pos(A, E3), libre(E1) moveBoxDerMi(A, C, E1) Pre-condiciones: libre(E1), izq(A, C), izq(C, E1), alt(A, baja) Efectos: not(libre(E1)), pos(A, C), pos(C, E1) moveBoxIzqMi(A, C, E1) Pre-condiciones: libre(E1), izq(A, C), izq(E1, A), alt(A, baja) Efectos: not(libre(E1)), pos(C, A), pos(A, E1) moveBoxDerMd(A, C, E1) Pre-condiciones: libre(E1), izq(C, A), izq(A, E1), alt(A, baja) Efectos: not(libre(E1)), pos(C, A), pos(A, E1) moveBoxIzqMd(A, C, E1) Pre-condiciones: libre(E1), izq(C, A), izq(E1, C), alt(A, baja) Efectos: not(libre(E1)), pos(A, C), pos(C, E1) onBox(A, C, B) Pre-condiciones: or(izq(A,C), izq(C, A)), alt(A, baja), catch(B, colgada), pos(B, C) Efectos: cath(B, tomada), alt(A, alta) downBox(A, C, E1) Pre-condiciones: libre(E1), equal(C, A), or(izq(E1,C), izq(C, E1)), alt(A, alta) Efectos: not(libre(E1)), pos(A, E1), alt(A, baja) Lo que tuve en cuenta es que la altura de la caja y de las bananas es siempre la misma por lo que no lo modele para esos objetos. En el caso de las bananas simplemente cambian su estado de colgada a tomada. Otra acción que doy por implícita es que el mono cuando se sube a la caja es porque esta en condiciones de tomar la banana o sea que se encuentra posicionada la caja por debajo del plátano. Con respecto a que algún elemento como el mono o la caja tomen valores inválidos queda solucionado porque simplemente ese valor no estará libre. 9

×