Montserrat Romero
Luis S. Gatica
Robot
Shakey
1) Formalización:
Estado Inicial:
Por
simpleza para el problema, solo tenemos una caja (una es suficiente).
True {At(Shakey,R1),At(B,R1),LsOn(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
Condiciones que no cambiarán: True{Box(B),Room(R1),Room(R2),Room(R3),Room(R4),Room(Pasillo)}
True {At(Shakey,R1),At(B,R1),LsOn(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
Condiciones que no cambiarán: True{Box(B),Room(R1),Room(R2),Room(R3),Room(R4),Room(Pasillo)}
Estado
Objetivo:
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnFloor(Shakey)}
Operadores:
Box(x): x
es una caja
At(x,r): x es una caja | x es Shakey | r es un cuarto
OnBox(b): Shakey está sobre la caja b | b es una caja
OnFloor(Shakey): Shakey está en el piso
Holding(x): x es una caja y Shakey tiene la caja
Free(Shakey): no tiene ninguna caja agarrada
LsOn(x) = x es un cuarto y la luz está encendida
LsOff(x) = x es un cuarto y la luz está apagada
Room(x): x es un cuarto o el pasillo
At(x,r): x es una caja | x es Shakey | r es un cuarto
OnBox(b): Shakey está sobre la caja b | b es una caja
OnFloor(Shakey): Shakey está en el piso
Holding(x): x es una caja y Shakey tiene la caja
Free(Shakey): no tiene ninguna caja agarrada
LsOn(x) = x es un cuarto y la luz está encendida
LsOff(x) = x es un cuarto y la luz está apagada
Room(x): x es un cuarto o el pasillo
Acciones:
ApagarLuz(x): Apaga la luz x
precondiciones: {Room(x) & LsOn(x) & At(Shakey, x) & Box (y) & At(y,x) & OnBox(y) }
efecto: TRUE {LsOff(x)}
FALSE {LsOn(x)}
precondiciones: {Room(x) & LsOn(x) & At(Shakey, x) & Box (y) & At(y,x) & OnBox(y) }
efecto: TRUE {LsOff(x)}
FALSE {LsOn(x)}
Entrar(x): Entrar al cuarto
precondiciones: {At(Shakey,Pasillo) & OnFloor(Shakey) & Room(x)}
efecto: TRUE {At(Shakey , x)}
FALSE {At(Shakey, pasillo)}
precondiciones: {At(Shakey,Pasillo) & OnFloor(Shakey) & Room(x)}
efecto: TRUE {At(Shakey , x)}
FALSE {At(Shakey, pasillo)}
Salir(x): sale
del cuarto
precondiciones: { At(Shakey,x) & Room(x) & OnFloor(Shakey) & Free(Shakey)}
Efecto: TRUE { At(Shakey, Pasillo)}
FALSE {At(Shakey, x)}
precondiciones: { At(Shakey,x) & Room(x) & OnFloor(Shakey) & Free(Shakey)}
Efecto: TRUE { At(Shakey, Pasillo)}
FALSE {At(Shakey, x)}
TomarCaja(x): toma
una caja
Precondiciones: { free(Shakey) & OnFloor(Shakey) & At(Shakey, r) & At(x,r) & Room(r)}
Efecto: TRUE {holding(x)}
FALSE {free(Shakey)}
Precondiciones: { free(Shakey) & OnFloor(Shakey) & At(Shakey, r) & At(x,r) & Room(r)}
Efecto: TRUE {holding(x)}
FALSE {free(Shakey)}
SoltarCaja(x):
suelta una caja
Precondiciones: {Holding(x) & box(x) & At(Shakey, y) & Room(y)}
Efecto: TRUE { free(Shakey), At (x,y)}
FALSE {Holding(x)}
Precondiciones: {Holding(x) & box(x) & At(Shakey, y) & Room(y)}
Efecto: TRUE { free(Shakey), At (x,y)}
FALSE {Holding(x)}
Subirse(x): Shakey
se sube a la caja x
Precondiciones: {Free(Shakey) & OnFloor(Shakey) & Box(x) & At(Shakey, y) & Room(y) & At(x, y)}
Efecto: TRUE { OnBox(x)}
FALSE {OnFloor(Shakey)}
Precondiciones: {Free(Shakey) & OnFloor(Shakey) & Box(x) & At(Shakey, y) & Room(y) & At(x, y)}
Efecto: TRUE { OnBox(x)}
FALSE {OnFloor(Shakey)}
Bajarse(x): Shakey
se baja de la caja x
Precondiciones: {Free(Shakey) & OnBox(x) & Box(x) & At(Shakey, y) & Room(y) & At(x, y) }
Efecto: TRUE { OnFloor(Shakey)}
FALSE {OnBox(x)}
Precondiciones: {Free(Shakey) & OnBox(x) & Box(x) & At(Shakey, y) & Room(y) & At(x, y) }
Efecto: TRUE { OnFloor(Shakey)}
FALSE {OnBox(x)}
2) Plan Construido:
El plan para este problema es demasiado grande como para ser dibujado, pero describiremos la topología del mismo a continuación:
Tenemos el estado inicial al principio, el cual
se encarga de hacer válidas el hecho de que B es caja, existen cuarto R1, R2,
R3 y R4. A partir de aquí nunca cambia. De aquí se debe hacer lo siguiente que
se enlista cuatro veces para apagar todas las luces. (Evidentemente evitemos
salirnos de un cuarto en el que ya esté la caja para volver a entrar).
·
Salir(CuartoActual)
·
Entrar(CuartoDondeEstéCaja)
·
TomarCaja(B)
·
Salir(CuartoActual)
·
Entrar(CuartoConLuzPrendida)
·
SoltarCaja(B)
·
Subirse(B)
·
ApagarLuz(CuartoActual)
·
Bajarse(B)
Finalmente regresamos a Shakey al cuarto R1 y
terminamos. Se verá más claro en la corrida.
3) Corrida:
0) Start ->
True {At(Shakey,R1),At(B,R1),LsOn(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R1),At(B,R1),LsOn(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
1) Subirse(B) ->
True {At(Shakey,R1),At(B,R1),LsOn(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
True {At(Shakey,R1),At(B,R1),LsOn(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
2) ApagarLuz(R1) ->
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
3) Bajarse(B) ->
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
4) TomarCaja(B) ->
True {At(Shakey,R1),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,R1),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
5) Salir(R1) ->
True {At(Shakey,Pasillo),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,Pasillo),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
6) Entrar(R2) ->
True {At(Shakey,R2),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,R2),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
7) Soltar(B) ->
True {At(Shakey,R2),At(B,R2),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R2),At(B,R2),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
8) Subirse(B) ->
True {At(Shakey,R2),At(B,R2),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
True {At(Shakey,R2),At(B,R2),LsOff(R1),LsOn(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
9) ApagarLuz(R2) ->
True {At(Shakey,R2),At(B,R2),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
True {At(Shakey,R2),At(B,R2),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
10) Bajarse(B) ->
True {At(Shakey,R2),At(B,R2),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R2),At(B,R2),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
11) TomarCaja(B) ->
True {At(Shakey,R2),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,R2),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
12) Salir(R2) ->
True {At(Shakey,Pasillo),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,Pasillo),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
13) Entrar(R3) ->
True {At(Shakey,R3),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,R3),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
14) Soltar(B) ->
True {At(Shakey,R3),At(B,R3),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R3),At(B,R3),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
15) Subirse(B) ->
True {At(Shakey,R3),At(B,R3),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
True {At(Shakey,R3),At(B,R3),LsOff(R1),LsOff(R2),LsOn(R3),LsOn(R4),Free(Shakey),OnBox(B)}
16) ApagarLuz(R3) ->
True {At(Shakey,R3),At(B,R3),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Free(Shakey),OnBox(B)}
True {At(Shakey,R3),At(B,R3),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Free(Shakey),OnBox(B)}
17) Bajarse(B) ->
True {At(Shakey,R3),At(B,R3),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R3),At(B,R3),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
18) TomarCaja(B) ->
True {At(Shakey,R3),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,R3),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
19) Salir(R3) ->
True {At(Shakey,Pasillo),LsOff(R1),LsOn(R2),LsOff(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,Pasillo),LsOff(R1),LsOn(R2),LsOff(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
20) Entrar(R4) ->
True {At(Shakey,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Holding(B),OnFloor(Shakey)}
21) Soltar(B) ->
True {At(Shakey,R4),At(B,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R4),At(B,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Free(Shakey),OnFloor(Shakey)}
22) Subirse(B) ->
True {At(Shakey,R4),At(B,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Free(Shakey),OnBox(B)}
True {At(Shakey,R4),At(B,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOn(R4),Free(Shakey),OnBox(B)}
23) ApagarLuz(R4) ->
True {At(Shakey,R4),At(B,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnBox(B)}
True {At(Shakey,R4),At(B,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnBox(B)}
24) Bajarse(B) ->
True {At(Shakey,R4),At(B,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R4),At(B,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnFloor(Shakey)}
25) TomarCaja(B) ->
True {At(Shakey,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,R4),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Holding(B),OnFloor(Shakey)}
26) Salir(R4) ->
True {At(Shakey,Pasillo),LsOff(R1),LsOn(R2),LsOff(R3),LsOff(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,Pasillo),LsOff(R1),LsOn(R2),LsOff(R3),LsOff(R4),Holding(B),OnFloor(Shakey)}
27) Entrar(R1) ->
True {At(Shakey,R1), LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Holding(B),OnFloor(Shakey)}
True {At(Shakey,R1), LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Holding(B),OnFloor(Shakey)}
28) Soltar(B) ->
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnFloor(Shakey)}
29) Finish ->
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnFloor(Shakey)}
True {At(Shakey,R1),At(B,R1),LsOff(R1),LsOff(R2),LsOff(R3),LsOff(R4),Free(Shakey),OnFloor(Shakey)}
No hay comentarios:
Publicar un comentario