el lobo la cabra y la col

12
TRUJILLO-PERU Universidad Nacional de Trujillo ESCUELA DE INFORMATICA INTEGRANTES: APRECIADO RIVERA JHEFERSOWN DOMINGUEZ HONORIO EMERSON ALEXANDER ESQUIVEL SALDAÑA GIANCARLOS LAURENTE PACHAMANGO CRISTHIAN EL GRANJERO, EL LOBO, LA CABRA Y LA COL DOCENTE: ARTURO DIAZ PULIDO MONOGRAFIA

Transcript of el lobo la cabra y la col

Page 1: el lobo la cabra y la col

TRUJILLO-PERU

Universidad Nacional de Trujillo ESCUELA DE INFORMATICA

INTEGRANTES: APRECIADO RIVERA JHEFERSOWN DOMINGUEZ HONORIO EMERSON ALEXANDER ESQUIVEL SALDAÑA GIANCARLOS LAURENTE PACHAMANGO CRISTHIAN

EL GRANJERO, EL LOBO, LA CABRA Y LA COL

DOCENTE: ARTURO DIAZ PULIDO

MONOGRAFIA

Page 2: el lobo la cabra y la col

1

INDICE

1. DEDICATORIA ………………………………………………………………...................... 2

2. INTRODUCCION …………………………………………………………………………........... 3

3. MARCO TEORICO …………………………………………………………………………………….. 4

3.1 ANTECEDENTES DE ACERTIJO …………………………………………………….. 4

3.2 ANALISIS DE ACERTIJO …………………………………………………….. 4

3.2.1 DECLARACION DEACERTIJO …………………………………………… 4

3.2.2 METODO DE SOLUCION POR ESTADOS ………………………….. 4

3.2.3 AUTOMATA DE SOLUCIONES …………………………………………. 5

3.2.4 TIPO DE METODOS DE BUSQUEDA …………………………………. 5

3.3 REPPRESENTACION DE CASO Y PROBLEMA ……………………………………….. 6

3.3.1 PEOR CASO ……………………………………………………………………….. 7

3.4 IMPLEMENTACION EN PROLOG ………………………………………………………. 8

3.4.1 ALGORITMO …………………………………………………………………….. 8

3.4.2 ANALISIS DE ALGORITMO …………………………………………………… 9

4. CONCLUCIONES ……………………………………………………………………………………….. 10

5. ANEXOS ……………………………………………………………………………………… 11

6. BIOGRAFIA ……………………………………………………………………………………….. 11

Page 3: el lobo la cabra y la col

2

DEDICATORIA

A Dios, por brindarnos la dicha de la salud y bienestar físico y espiritual

Page 4: el lobo la cabra y la col

3

INTRODUCCION

El presente documento plantea la solución a un acertijo

matemático.se esquematiza la solución con un gráfico de

autómata para un mejor entendimiento. Se explica los 2 tipos

de búsqueda pero solo se utilizara un tipo de búsqueda. La

solución se realiza implementa en el lenguaje de

programación llamado prolog.

Page 5: el lobo la cabra y la col

4

Capítulo 1: ANTECEDENTES DEL ACERTIJO

El acertijo del lobo, la cabra y la col es un popular juego de lógica. Se sabe

que existe al menos desde el siglo IX y que forma parte del folclore de un

gran número de grupos étnicos.

Capítulo 2: ANALISIS DEL ACERTIJO

2.1. DECLARACION DEL ACERTIJO:

Hace mucho tiempo un granjero fue al mercado y compró un lobo,

una cabra y una col. Para volver a su casa tenía que cruzar un río. El

agricultor dispone de una barca para cruzar a la otra orilla, pero en la

barca solo caben él y una de sus compras.

Si el lobo se queda solo con la cabra se la come, si la cabra se queda sola

con la col se la come.

El reto del granjero era cruzar él mismo y dejar sus compras a la otra

orilla del río, dejando cada compra intacta. ¿Cómo lo hizo?

2.2. METODO DE SOLUCION POR ESTADOS:

Espacio de estados: granjero, cabra, lobo, col; izquierda y derecha.

Numero de estados: 13.

Estado inicial: izquierda.

Estado final (único): pasar todos a la derecha.

Operadores :

Pasa el granjero solo

Pasa el granjero con el lobo

Pasa el granjero con la cabra

Pasa el granjero con la col

Paso de soluciones:

Dejar la cabra al otro lado

Vuelve

Dejar el lobo del otro lado

Regresar con la cabra

Dejar a la col o al lobo del otro lado

Vuelve

Dejar a la cabra del otro lado

Page 6: el lobo la cabra y la col

5

2.3. AUTOMATA DEL PROCESO DE SOLUCINES:

Estados :

Diagrama del autómata :

2.4. TIPOS DE METODOS DE BUSQUEDA:

Búsqueda por anchura:

- Los nodos se visitan y generan niveles

- La estructura para los nodos abiertos es una cola (FIFO)

- Un nodo es visitado cuando todos los nodos de los niveles

superiores y sus hermanos precedentes han sido visitados

Page 7: el lobo la cabra y la col

6

Búsqueda por profundidad:

- Los nodos se visitan y generan buscando los nodos a mayor

profundidad y retrocediendo cuando no se encuentran los

nodos sucesores

- La estructura de los nodos abiertos es un pila (LIFO)

- Para garantizar que el algoritmo acaba de imponerse un límite

en la profundidad de explosión.

Capítulo 3: REPRESENTACIÓN Y CASOS DEL PROBLEMA

Estado Predicado (F, W, G, C), describe la ubicación del

agricultor, lobo, la cabra y la col.

Las ubicaciones posibles son el correo para este, w para

oeste, banco para cada una de las 4 variables.

Estado inicial es el estado (w, w, w, w)

Estado de metas es estatal (e, e, e, e)

Page 8: el lobo la cabra y la col

7

Gráfico de espacio de estado, incluidas estados inseguros:

3.1 PEOR CASO: BUCLE INFINITO:

Trate agricultor teniendo lobo. Cabra come la col. Inseguro? Backtrack.

Page 9: el lobo la cabra y la col

8

Capítulo 4: IMPLEMENTACION EN PROLOG:

4.1 ALGORITMO :

%Cambiar

cambiar(d,i).

cambiar(i,d).

%Mover

mover([X,X,Cabra,Col],lobo,[Y,Y,Cabra,Col]) :- cambiar(X,Y).

mover([X,Lobo,X,Col],cabra,[Y,Lobo,Y,Col]) :- cambiar(X,Y).

mover([X,Lobo,Cabra,X],col,[Y,Lobo,Cabra,Y]) :- cambiar(X,Y).

mover([X,Lobo,Cabra,C],nada,[Y,Lobo,Cabra,C]) :- cambiar(X,Y).

%Revisar

esIgual(X,X,_).

esIgual(X,_,X).

%Verificar

verificacion([Granjero,Lobo,Cabra,Col]) :

esIgual(Granjero,Cabra,Lobo),

esIgual(Granjero,Cabra,Col).

%Hallar la solución

solucion([d,d,d,d],[]).

solucion(Config,[Movi|Rest]) :- mover(Config,Movi,SigConfig),

verificacion(SigConfig), solucion(SigConfig,Rest).

Page 10: el lobo la cabra y la col

9

4.2ANALISIS DE CODIGO:

Para resolver este problema, se puede codificar la configuración

de los 4 objetos (el granjero, el lobo, la cabra, la col) en forma de

lista.

Si ' i ' denota la ribera izquierda y ' d ' la ribera derecha, entonces

el estado inicial es el siguiente:

[i, i, i, i] (Todo el mundo está en la orilla de la izquierda)

Si el granjero se va con el lobo, entonces la configuración se

convierte en:

[d, d, i, i] (y la cabra se come la col)

La configuración final deseada es:

[d, d, d, d] (Todo el mundo está en la orilla de la derecha)

En cada movimiento, el granjero cruza el río con el lobo, la cabra,

la col, o nada. Cada movimiento puede ser representado por un

átomo correspondiente: lobo, la cabra, la col, y nada.

Esto se puede escribir como un predicado de movimiento(Config,

Movi, SigConfig) donde :

Config es una configuración

Movi es uno de los cuatro movimientos básicos

SigConfig es la configuración que resulta de la aplicación de

esa medida a Config

Ahora, hay un movimiento cuando van el granjero y el lobo

mover ([X, X, Cabra, Col], lobo, [Y, Y, Cabra, Col]): - cambio

(X, Y).

que supone que un predicado de cambio se define como:

cambiar (d, i).

cambiar (i, d).

Uno podría haber pensado en sólo escribir:

mover ([X, X, Cabra, Col], lobo, [Y, Y, Cabra, Col]).

pero en este caso X e Y anteriormente podrían unificar a cualquier

átomo (por ejemplo, a la cabra), el cual no es válido.

Page 11: el lobo la cabra y la col

10

Ahora, uno puede codificar todos los movimientos válidos:

cambiar(d, i).

cambiar(i, d).

mover([X,X,Cabra,Col],lobo,[Y,Y,Cabra,Col]) :-

cambiar(X,Y).

mover([X,Lobo,X,Col],cabra,[Y,Lobo,Y,Col]) :-

cambiar(X,Y).

mover([X,Lobo,Cabra,X],col,[Y,Lobo,Cabra,Y]) :-

cambiar(X,Y).

mover([X,Lobo,Cabra,C],nada,[Y,Lobo,Cabra,C]) :-

cambiar(X,Y).

A continuación, las configuraciones deben ser probadas para la

seguridad (para que nada se coma a nada). Para ello se define un

predicado esIgual(X, Y, Z) que es true si al menos uno de Y o Z es

igual a X.

esIgual(X, X, _).

esIgual (X, _, X).

La idea es que si al menos uno, la cabra o el lobo está en el mismo

lado del granjero, y si al menos una, la cabra o la col, está en el

mismo lado del granjero. Esto puede ser codificada como:

verificacion([Granjero,Lobo,Cabra,Col]) :-

esIgual(Granjero,Cabra,Lobo),

esIgual(Granjero,Cabra,Col).

Una solución se define como una configuración inicial y una lista

de movimientos que le lleva a la configuración del objetivo. Una

solución para [d, d, d, d] sería la lista vacía (no se necesitan

movimientos).

De lo contrario, una solución se define recursivamente como una

movida que le lleva a una configuración segura, seguido de una

solución.

Page 12: el lobo la cabra y la col

11

Esta recursión es fácilmente codificada como:

solucion([d,d,d,d],[]).

solucion(Config,[Movi|Rest]) :-

mover(Config,Movi,SigConfig),

verificacion(SigConfig),

solucion(SigConfig,Rest).

ADVERTENCIA: Una solución podría ser arbitraria larga (por

ejemplo, insertar un número infinito de nada se mueve cuando la

cabra está en un lado y el lobo y la col en la otra). Pero aquí se

pidió una solución de una longitud específica, se le obliga a:

? - Length (X, 7), solución ([w, w, w, w], X).

X = [cabra, nada, el lobo, la cabra, la col, la nada, la cabra]

CONCLUCIONES:

El problema ayuda a incrementar la capacidad de análisis de la

persona dado que se utiliza mucha lógica para su análisis.

El documento plantea una implementación a un acertijo

matemático con más de 1000 años de antigüedad.

Para el desarrollo del problema se estructuro en forma de árbol

por lo cual se utilizó el lenguaje de programación prolog y

métodos de búsqueda por profundidad

ANEXO:

Applications of C++ Programming: Administration, Finance, and Statistics.

http://books.google.com.pe/books?id=I8bq7QaM7UsC&pg=PA339&dq=wolf+c

abbage+goat&hl=es&sa=X&ei=u0izU5icNriosAT7lYHoBA&ved=0CBkQ6AEwAA#

v=onepage&q=wolf%20cabbage%20goat&f=false

BIBLIOGRAFIA:

VICENTE MEAVILLA, el lobo la cabra y la col 272 pags