Está en la página 1de 18

TEMA:

Canbales y Misioneros

TRUJILLO PERU
2014

Presentacin
En el presente informe trataremos de explicar el procedimiento de desarrollo del
problema de los tres misioneros y tres canbales, el cual consiste en pasar los tres
misioneros y tres canbales de un extremo a otro a travs de una canoa que tiene
como capacidad mxima dos personas. Hallar la manera de cruzarlos a todos
sanos y salvos, talque no puede exceder el numero de canbales al de misioneros
sino estos se los comern y la canoa no se devuelve sola. Aqu aplicaremos la
bsqueda por porfundidad.

Importancia
Los sistemas basados en Conocimiento representan un paso delante de los
sistemas de informacin convencionales al pretender representar funciones
cognitivas del ser humano como el aprendizaje y el razonamiento. Esta clase de
aplicaciones descansan en las contribuciones de la Inteligencia Artificial en lo
general y en la Ingeniera del Conocimiento en lo particular. Su orientacin es la
automatizacin del anlisis de problemas, la bsqueda de soluciones, la toma de
decisiones y el empleo de conocimiento especializado en un campo especfico de
aplicacin.

Problema de los Misioneros y Canbales
Tres misioneros y tres canbales quieren cruzar un rio. Solo hay una canoa que puede ser usada por
una o dos personas, ya sean misioneros o canbales. En ningn momento el numero de canbales
debe superar al de misioneros, en ninguna de las dos orillas (estn en la barca o fuera de ella),
porque se los comern.
El problema consiste en encontrar una secuencia de movimientos posibles para que los seis pasen de
una orilla a la otra.
Existe mas de una solucin a este problema. El mnimo numero de movimientos es de once.
Solucin:
Existe mas de una solucin a este problema. La que te mostramos es una de ellas, con once movimientos totales, el
minino que se puede conseguir, pero se puede llegar a la misma solucin con pequeas variaciones de los mismos.
Para empezar la nica combinacin que no puedo hacer es irme con 2 misioneros, que pase con 2 canbales o 1 canbal y
1 misionero es indiferente; pero en este ultimo caso tienes que volver con el misionero.
1. Primero llevo 2 canbales en la canoa y dejo uno del lado (izquierdo), regresando con un canbal en la canoa.

2. Vuelvo a llevar dos canbales en la canoa y dejo al segundo canbal del lado (izquierdo) quedndome
dos y regreso con uno en la canoa.

3. Dejo un canbal del lado (Derecho) y llevo dos misioneros en la canoa, dejando solo un misionero del
lado (Izquierdo) y regresando en la canoa con un misionero y un canbal.
4. Dejo dos canbales del lado (Derecho) y regreso al lado (Izquierdo) con dos misioneros en la canoa
dejando tres misioneros del lado (Izquierdo) y regresando la canoa con un canbal al lado (Derecho).
5. Llevo dos canbales en la canoa del al lado (Izquierdo) y dejo uno para volver por el ultimo canbal
del lado (Derecho) y por ultimo vuelvo llevar dos canbales en la canoa y bajan los dos quedando as
del lado (Izquierdo) 3 canbales y 3 misioneros.
Algoritmo para el Caso
Definimos los posibles estados
Se podra indicar la posicin de la barca, junto con el nmero de misioneros y canbales que hay en
cada lado.
Se podra pensar que, dado que el nmero de personas en el extremo final puede calcularse a partir
de los que hay en el inicial, basta con indicar la posicin de la barca y los misioneros y canbales que
quedan en el extremo inicial. Sin embargo, la primera aproximacin permite describir ms
fcilmente las precondiciones y efectos de los operadores, por lo que mantenemos la representacin
inicial. Adems, el espacio de estados tiene el mismo tamao e idntica semntica con ambas
representaciones.
Formalmente, por tanto, un estado es una terna(M
i
, C
i
, B, M
f
, C
f
) en la que:

B [i, f] indica la posicin de la barca, por lo que toma el valor i si est en el extremo inicial o f si
est en el final.
M
i
, C
i
, B, M
f
, C
f
[0,,3] indican el nmero de misioneros y canbales que quedan en el extremo
inicial y final del ro, respectivamente.
De esta manera el estado inicial se representa como (3,3,i,0,0) y el final como (0,0,f,3,3).
Definimos los operadores
El conjunto de operadores es el mostrado en la Tabla 1. Se dispone de 5 operadores. Cada uno de
ellos consiste en trasportar personas de la orilla x hasta la orilla y; Mover2M(x,y) transporta 2
misioneros desde x hasta y; y as sucesivamente. Las precondiciones de cada operador se dividen en
tres grupos de requisitos. El primer grupo (primera columna de precondiciones) hace referencia a
que para transportar a una persona desde x, esa persona debe estar en x. As, el operador
Mover1M1C(x,y) requiere que en x haya al menos un canbal y un misionero. El segundo grupo de
condiciones(segunda columna) hace referencia a la posicin de la barca: para todos los operadores,
la barca debe estar en la posicin de origen.
El tercer grupo de condiciones evita que los canbales se coman a los misioneros, evitando hacer
movimientos que dejen a ms canbales que misioneros en cualquier orilla.


TABLA 1: Operadores del problema de los canbales y misioneros
Definimos la Heurstica
En este caso, vamos a obtener las heursticas por relajacin del problema original. Para dicha
relajacin, partimos de las precondiciones expuestas en la Tabla 1. Estas precondiciones se pueden
relajar fcilmente teniendo en cuenta los tres tipos de precondiciones definidas anteriormente:
1. Eliminar primer grupo de precondiciones. Si eliminamos ese primer grupo de condiciones, se
obtiene un problema relajado que no parece ser mucho ms fcil de resolver que el problema
original, por lo que no tiene mucho sentido.
2. Eliminar segundo grupo de precondiciones. Al eliminar el segundo grupo de condiciones, el
problema resultante es ms fcil que el original, puesto que se puede asumir que hay infinitas
barcas tanto en un lado como en otro.
Este problema tiene una solucin muy sencilla que es asumir que siempre viajan un canbal y un
misionero juntos, con el operador Mover1M1C(i,f). Por tanto, la heurstica resultante de este
problema relajado es:
h
1
(n) = (C
i
+ M
i
)/2 (1)
Asumiendo que en el estado n se cumplen los requisitos definidos por el grupo de precondiciones 3.
3. Al eliminar el tercer grupo de condiciones, obtenemos un problema relajado en el que los
canbales nunca se comen a los misioneros. Entonces, en cada viaje de ida y vuelta, podemos
transportar a una persona (dado que la otra tendr que volver para llevar la barca). Por lo tanto la
heurstica resultante es:
h
2
(n) = 2 x (C
i
+ M
i
) orilla(n) (2)
Donde orilla(n) = 1 si en el estado n la barca est en la orilla i (B = i), y orilla(n) = 0 si la barca est
en la orilla final( B = f).
Una cuarta posibilidad sera eliminar el grupo de condiciones 2 y 3 a la vez. Sin embargo, como
hemos visto anteriormente, este problema es equivalente a eliminar slo el grupo de condiciones 2.
Las dos heursticas son admisibles, puesto que son resultado de relajar el problema original. Para
decidir que heurstica elegir, h
2
o h
3
, estudiamos cul es la ms informada, puesto que ser la que,
siendo admisible, tendr un valor ms cercano a h*. Se observa fcilmente que la ms informada
es h
2
, puesto que h
2
(n) h
3
(n), sea cual sea el valor de C
i
y C
i
para el estado n. Por tanto elegimos
h
2
(n).

Cdigo en Prolog
%% estados posibles
estado(e0, [] , [b,m,m,m,c,c,c]).
estado(e1, [c] , [b,m,m,m,c,c]).
estado(e2, [m,c] , [b,m,m,c,c]).
estado(e3, [c,c] , [b,m,m,m,c]).
estado(e4, [m,m,m] , [b,c,c,c]).
estado(e5, [c,c,c] , [b,m,m,m]).
estado(e6, [m,m,c,c] , [b,m,c]).
estado(e7, [m,m,m,c] , [b,c,c]).
estado(e8, [m,m,m,c,c] , [b,c]).

estado(e9, [b,c] , [m,m,m,c,c]).
estado(e10, [b,m,c] , [m,m,c,c]).
estado(e11, [b,c,c] , [m,m,m,c]).
estado(e12, [b,m,m,m] , [c,c,c]).
estado(e13, [b,c,c,c] , [m,m,m]).
estado(e14, [b,m,m,c,c] , [m,c]).
estado(e15, [b,m,m,m,c] , [c,c]).
estado(e16, [b,m,m,m,c,c] , [c]).
estado(e17, [b,m,m,m,c,c,c], []).
%% movimientos posibles
movim(m1, [m,m]).
movim(m2, [m]).
movim(m3, [m,c]).
movim(m4, [c,c]).
movim(m5, [c]).

%% hacer un movimiento de un estado a otro
mover(e0,m3,e10).
mover(e0,m4,e11).
mover(e0,m5,e9).
mover(e1,m2,e10).
mover(e1,m4,e13).
mover(e1,m5,e11).
mover(e2,m1,e15).
mover(e2,m3,e14).
mover(e3,m1,e14).
mover(e3,m5,e13).
mover(e4,m4,e16).
mover(e4,m5,e15).
%% no hay movimientos posibles desde el estado e5
mover(e6,m2,e16).
mover(e6,m3,e17).
mover(e7,m4,e17).
mover(e7,m5,e16).
mover(e8,m5,e17).
mover(e9,m5,e0).
mover(e10,m2,e1).
mover(e10,m3,e0).
mover(e11,m4,e0).
mover(e11,m5,e1).
%% no hay movimientos posibles desde el estado e12
mover(e13,m4,e1).
mover(e13,m5,e3).
mover(e14,m1,e3).
mover(e14,m3,e2).
mover(e15,m1,e2).
mover(e15,m5,e4).
mover(e16,m2,e6).
mover(e16,m4,e4).
mover(e16,m5,e7).
mover(e17,m3,e6).
mover(e17,m4,e7).
mover(e17,m5,e8).
%% estados inicial y final
ini(e0).
final(e17).

%% programa principal (bsqueda en profundidad)
solucion(S) :- ini(E),
prolongable([], [E], LM, LE),
reverse(LM, S),
nl,nl, imprimir(S).

prolongable(LM, [E|RE], LM, [E|RE]) :- final(E).
prolongable(LM, [E|RE], LMP, LEP)
:- mover(E, M, NE),
not(member(NE, [E|RE])),
prolongable([M|LM], [NE,E|RE], LMP, LEP).
imprimir([]) :- nl.
imprimir([M|Resto]) :- escribe(M), nl, imprimir(Resto).

escribe(m1):- write( 'Cruzan 2 misioneros').
escribe(m2):- write( 'Cruza 1 misionero').
escribe(m3):- write( 'Cruza 1 misionero y 1 canbal').
escribe(m4):- write( 'Cruzan 2 canbales').
escribe(m5):- write( 'Cruza 1 canbal').
%% pregunta: solucion(X).
Referencias Bibliogrficas
http://echandola.com/juegos/cruza-canibales-y-misioneros/
http://www.psicoactiva.com/inteli/solcanib.htm
http://www.psicoactiva.com/inteli/solcanib.htm
http://cibercompu10.blogspot.com/2009/02/algoritmo-acerca-de-canibales-
y.html
http://misarticulosm.fullblog.com.ar/misioneros-y-canibales.html