prolog state-space

Mover entre estados(implementación A Prolog)



state-space (1)

Creo que la lógica debería ser en cambio

move([L, M, S], [NewLarge, NewMedium, S]) :- Diff is min(5 - M, L), Diff > 0, NewLarge is L - Diff, %calculate the new Large NewMedium is M + Diff. %calculate the new Medium

Estoy tratando de implementar un programa de prólogo que implemente la búsqueda de profundidad en primer lugar y amplíe la búsqueda en primer lugar para resolver el siguiente problema

Rowena tiene tres vasos sin marcar de diferentes tamaños: 3 onzas, 5 onzas y 8 onzas. El vaso más grande está lleno. ¿Qué puede hacer Rowena para obtener 4 onzas de líquido en cada una de las dos copas más grandes?

Tendré (Grande, Medio, Pequeño)

Entonces, el estado inicial es (8,0,0) y el estado objetivo es (4,4,0).

Ahora sé que tengo 6 movimientos disponibles en el espacio de estado.

(1,2) Vierta grande en medio o pequeño (3,4) Vierta medio en grande o pequeño (5,6) Vierta pequeño en medio o grande

Ahora solo necesito ayuda con la primera regla y el resto lo averiguaré. Así que solo puedo verter lo grande en el medio si el tamaño grande> 0 y mediano no está lleno, y el nuevo tamaño grande se convierte en el tamaño grande anterior menos la cantidad que se vertió en el soporte y el medio nuevo se convierte en el medio anterior más el monto eso fue vertido en él, y lo pequeño por supuesto nunca cambia.

Esto es lo que intenté.

%move rule #1: Pour Large into Medium (L--> M) %move(oldstate,newstate) move([L, M, S], [NewLarge,NewMedium,S]) :- L > 0, %We can''t move large into medium if Large has nothing M < 5, %We can''t pour into the medium if medium is full Diff = 5 - M, NewLarge is L - Diff, %calculate the new Large NewMedium is M + (L - NewLarge). %calculate the new Medium

¿Es esta una implementación correcta del primer movimiento disponible (grande en medio). ¿Obtuve la lógica correcta allí?