misioneros y canibales

18
TEMA: Caníbales y Misioneros TRUJILLO – PERU 2014

Upload: angelica-maria-abanto-vera

Post on 19-Jan-2016

296 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Misioneros y Canibales

TEMA:

Caníbales y Misioneros

TRUJILLO – PERU

2014

Page 2: Misioneros y Canibales

Presentación

En el presente informe trataremos de explicar el procedimiento de

desarrollo del problema de los tres misioneros y tres caníbales, el cual

consiste en pasar los tres misioneros y tres caníbales de un extremo a

otro a través de una canoa que tiene como capacidad máxima dos

personas. Hallar la manera de cruzarlos a todos sanos y salvos, talque

no puede exceder el numero de caníbales al de misioneros sino estos se

los comerán y la canoa no se devuelve sola. Aquí aplicaremos la

búsqueda por porfundidad.

Page 3: Misioneros y Canibales

Importancia

Los sistemas basados en Conocimiento representan un paso delante de

los sistemas de información 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 Ingeniería

del Conocimiento en lo particular. Su orientación es la automatización

del análisis de problemas, la búsqueda de soluciones, la toma de

decisiones y el empleo de conocimiento especializado en un campo

específico de aplicación.

Page 4: Misioneros y Canibales

Problema de los Misioneros y Caníbales Tres misioneros y tres caníbales quieren cruzar un rio. Solo hay una canoa que puede ser

usada por una o dos personas, ya sean misioneros o caníbales. En ningún momento el

numero de caníbales debe superar al de misioneros, en ninguna de las dos orillas (estén

en la barca o fuera de ella), porque se los comerán.

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 solución a este problema. El mínimo numero de movimientos es

de once.

Page 5: Misioneros y Canibales

Solución:Existe mas de una solución 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 solución con pequeñas

variaciones de los mismos.

Para empezar la única combinación que no puedo hacer es irme con 2 misioneros, que pase con 2 caníbales

o 1 caníbal y 1 misionero es indiferente; pero en este ultimo caso tienes que volver con el misionero.

1. Primero llevo 2 caníbales en la canoa y dejo uno del lado (izquierdo), regresando con un caníbal en la

canoa.

Page 6: Misioneros y Canibales

2. Vuelvo a llevar dos caníbales en la canoa y dejo al segundo caníbal del lado (izquierdo)

quedándome dos y regreso con uno en la canoa.

Page 7: Misioneros y Canibales

3. Dejo un caníbal 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 caníbal.

Page 8: Misioneros y Canibales

4. Dejo dos caníbales 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

caníbal al lado (Derecho).

Page 9: Misioneros y Canibales

5. Llevo dos caníbales en la canoa del al lado (Izquierdo) y dejo uno para volver por el

ultimo caníbal del lado (Derecho) y por ultimo vuelvo llevar dos caníbales en la canoa y

bajan los dos quedando así del lado (Izquierdo) 3 caníbales y 3 misioneros.

Page 10: Misioneros y Canibales

Algoritmo para el CasoDefinimos los posibles estados

Se podría indicar la posición de la barca, junto con el número de misioneros y caníbales que

hay en cada lado.

Se podría pensar que, dado que el número de personas en el extremo final puede calcularse

a partir de los que hay en el inicial, basta con indicar la posición de la barca y los misioneros

y caníbales que quedan en el extremo inicial. Sin embargo, la primera aproximación permite

describir más fácilmente las precondiciones y efectos de los operadores, por lo que

mantenemos la representación inicial. Además, el espacio de estados tiene el mismo tamaño

e idéntica semántica con ambas representaciones.

Formalmente, por tanto, un estado es una terna(M i, Ci, B, Mf, Cf) en la que:

B ϵ [i, f] indica la posición de la barca, por lo que toma el valor i si está en el extremo inicial

o f si está en el final.

Mi, Ci, B, Mf, Cf ϵ [0,…,3] indican el número de misioneros y caníbales que quedan en el

extremo inicial y final del río, respectivamente.

De esta manera el estado inicial se representa como (3,3,i,0,0) y el final como (0,0,f,3,3).

Page 11: Misioneros y Canibales

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 caníbal y un misionero. El segundo grupo de

condiciones(segunda columna) hace referencia a la posición de la barca: para todos los

operadores, la barca debe estar en la posición de origen.

El tercer grupo de condiciones evita que los caníbales se coman a los misioneros,

evitando hacer movimientos que dejen a más caníbales que misioneros en cualquier

orilla.

TABLA 1: Operadores del problema de los caníbales y misioneros

Page 12: Misioneros y Canibales

Definimos la Heurística

En este caso, vamos a obtener las heurísticas por relajación del problema original. Para

dicha relajación, partimos de las precondiciones expuestas en la Tabla 1. Estas

precondiciones se pueden relajar fácilmente 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 más fácil 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 más fácil que el original, puesto que se puede

asumir que hay infinitas barcas tanto en un lado como en otro.

Este problema tiene una solución muy sencilla que es asumir que siempre viajan un

caníbal y un misionero juntos, con el operador Mover1M1C(i,f). Por tanto, la heurística

resultante de este problema relajado es:

h1(n) = (Ci + Mi)/2 ………………………(1)

Asumiendo que en el estado n se cumplen los requisitos definidos por el grupo de

precondiciones 3.

Page 13: Misioneros y Canibales

3. Al eliminar el tercer grupo de condiciones, obtenemos un problema relajado en el que

los caníbales 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 heurística resultante es:

h2(n) = 2 x (Ci + Mi) –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 sería eliminar el grupo de condiciones 2 y 3 a la vez. Sin

embargo, como hemos visto anteriormente, este problema es equivalente a eliminar sólo

el grupo de condiciones 2.

Las dos heurísticas son admisibles, puesto que son resultado de relajar el problema

original. Para decidir que heurística elegir, h2 o h3, estudiamos cuál es la más

informada, puesto que será la que, siendo admisible, tendrá un valor más cercano a h*.

Se observa fácilmente que la más informada es h2, puesto que h2(n) ≥ h3(n), sea cual

sea el valor de Ci y Ci para el estado n. Por tanto elegimos h2(n).

Page 14: Misioneros y Canibales

Código 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], []).

Page 15: Misioneros y Canibales

%% 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).

Page 16: Misioneros y Canibales

%% 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).

Page 17: Misioneros y Canibales

%% estados inicial y final

ini(e0).

final(e17).

%% programa principal (búsqueda 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 caníbal').

escribe(m4):- write( 'Cruzan 2 caníbales').

escribe(m5):- write( 'Cruza 1 caníbal').

%% pregunta: solucion(X).

Page 18: Misioneros y Canibales

Referencias Bibliográficas

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