Missionaries and Cannibals problem in AI

Introduction
Missionaries and   Cannibals problem     is very famous      in  Artificial  Intelligence because    it was the   subject of   the first paper     that approached       problem formulation   from an analytical viewpoint.     The problem   can be stated   as follow.   Three missionaries   and three cannibals are on one side of a river, along with a boat that can hold one or two people. Now we have   to find   a   way to   get everyone   to the   other side,   without ever   leaving a   group of missionaries in one place outnumbered by the cannibals in another side. The above problem can be solved   by a   graph search   method.   Here   I   represent the   problem as   a   set of   states and operators. States are snapshots of the world and operators are those which transform one state into another state. States can be mapped to nodes of a graph and operators are the edges of the graph.
Explanation
Missionaries and   Cannibals can be solved by using different search algorithms like Breadth first and   Depth first   search algorithm to   find the solution. The   node   of   the   graph   to   be   searched   is   represented   by  a   state   space.   Each   state space can be represent by


  State(no_of_missionaries, no_of_cannibals, side_of_the_boat)
Where       no_of_missonaries        are   the    number      of   missionaries     at   left   side   of   river, no_of_cannibals are the number of cannibals at the left side of river and side_of_the_boat is the side of the boat at particular state. For our case

                                  Initial State => State(3, 3, 0) and
                     Final State => State(0, 0, 1).
Where 0 represents left side and 1 represents right side of river. We should make a graph search which traverse the graph from initial state and find out the final state in fewest moves. There are many AI searches that search the graphs like Breadth first search, Depth first search, or iterative deepening search. Each of these different search   methods   has   different   properties   such   as   whether   a   result   is   guaranteed,   and  how much time and space is needed to carry out the search. This project uses Breadth first and Depth first search.

Production rules for Missionaries and Cannibals problem

Possible Moves

A move is characterized by the number of missionaries and the number of cannibals taken in the boat at one time. Since the boat can carry no more than two people at once, the only feasible combinations are:
         Carry (2, 0).
         Carry (1, 0).
         Carry (1, 1).
         Carry (0, 1).
         Carry(0, 2).
Where Carry (M, C) means the boat will carry M missionaries and C cannibals on one trip.
Feasible Moves
Once we have found a possible move, we have to confirm that it is feasible. It is not a
feasible to move more missionaries or more cannibals than that are present on one bank.
When the state is state(M1, C1, left) and we try carry (M,C) then
                 M must be true.
When the state is state(M1, C1, right) and we try carry(M, C) then
                 M + M1 must be true.
Legal Moves

Once we have found a feasible move, we must check that  is legal i.e. no missionaries must be eaten.
                 Legal(X, X).
                 Legal(3, X).
                 Legal(0, X).
The only safe combinations are when there are equal numbers of missionaries and cannibals or all the missionaries are on one side. Generating the next state Above figure only shows valid states.
Generating the next state

Sources:
S. Russel and P. Norvig, Artif icial Intelligence –A Modern App roach, Second Edition
https://www.cse.unsw.edu.au/~billw/cs9414/notes/mandc/mandc.html
https://en.wikipedia.org/wiki/Missionaries_and_cannibals_problem
https://www.codeproject.com/Articles/16234/AI-Search-to-Solve-the-Missionaries-and-Cannibals