8puzzle in CP
initial state goal state A trivial example
Representation
of states To get from initial state to a goal state we make a number of moves and moves take us to new states If we have a plan that takes us from I to G in n steps we will have n-1 states between I and G Represent a state as 9 constrained integer variables S[i] has a value [0..8], the tile in position i the value 0 corresponds to the blank tile Therefore for a plan, let’s say of 3 steps from I to G we will have states S[1..4][1..9] S[1][5] is the tile in the 5th position of the 1st state (and is 0 in our example)
Representation of moves There are 24 possible moves from a state position of blank (zero) possible moves (swaps) move numbers 1 (1,2),(1,4) 1,2 2 (2,1),(2,3),(2,5) 3,4,5 3 (3,2),(3,6) 6,7 4 (4,1),(4,5),(4,7) 8,9,10 5 (5,2),(5,4),(5,6),(5,8) 11,12,13,14, 6 (6,3),(6,5),(6,9) 15,16,17 7 (7,4),(7,8) 18,19 8 (8,5),(8,7),(8,9) 20,21,22 9 (9,6),(9,8) 23, We have n-1 move variables, where move[i] has a domain [1..24]
Representation of moves & states move[1] = 14 move[2] = 21 move[1] = 18 position of blank (zero) possible moves (swaps) move numbers 1 (1,2),(1,4) 1,2 2 (2,1),(2,3),(2,5) 3,4,5 3 (3,2),(3,6) 6,7 4 (4,1),(4,5),(4,7) 8,9,10 5 (5,2),(5,4),(5,6),(5,8) 11,12,13,14, 6 (6,3),(6,5),(6,9) 15,16,17 7 (7,4),(7,8) 18,19 8 (8,5),(8,7),(8,9) 20,21,22 9 (9,6),(9,8) 23,24
Constraints on a move If we are in state 1 and the blank tile is in position 1 and we make move 1 (swap(1,2)) then in state 2 the blank is in position 2 and what is in position 2 of in state 1 is now in position 1 in state 2
Constraints on a move
But … when we make a move, only the things that we move change! This is the frame problem (GOF AI) … and so on
Constraints on a move We also need to say that if the blank tile (zero) is not in a specific position we cannot make a specified move … and so on This is one of our propagation steps!
Solving The move variables are our decision variables Find values for the move variables that satisfy the constraints This will find a plan of n-1 steps if one exists
Bi-directional search Search from I to G and from G to I simultaneously Replace the variables move[i] introduce fmove[i] the forwards move from state i to state i+1 introduce bmove[i] the backward move from state i + 1 to I post all the constraints we had before in both directions! add the following constriants I call this a bridge between backward & forward moves We can now search in the following order fmove[1],bmove[n-1],fmove[2],bmove[n-2]...
Propagation through plans There is little if any propagation through plans
Propagation through plans There is little if any propagation through plans If in state i I cannot move the blank tile into position x then in state i+1 I cannot make a move out of position x! Example: If at time I cannot put the bunch of flowers on the table then at time +1 I cannot move the bunch of flowers from the table
Propagation through plans If in state i I cannot move the blank tile into position x then in state i+1 I cannot make a move out of position x! position of blank (zero) possible moves (swaps) move numbers 1 (1,2),(1,4) 1,2 2 (2,1),(2,3),(2,5) 3,4,5 3 (3,2),(3,6) 6,7 4 (4,1),(4,5),(4,7) 8,9,10 5 (5,2),(5,4),(5,6),(5,8) 11,12,13,14, 6 (6,3),(6,5),(6,9) 15,16,17 7 (7,4),(7,8) 18,19 8 (8,5),(8,7),(8,9) 20,21,22 9 (9,6),(9,8) 23,24 I call this a rippling constraint
My problems with planning what happens if we cannot find a plan in n-1 steps? Build a bigger model … or add another layer to the model like iterative dfs could we have a null move, i.e. a move[i] = 0 yes, but we have to condition the rippling constraint our rippling constraint can generate a contradiction otherwise! the model is BIG I’m working on something neater
That’s all for now folks