monografia lobo cabra y col

21
Universidad Nacional de Trujillo Facultad de Ciencias Físicas y Matemáticas Escuela Profesional de Informática Monografía Problema del lobo la cabra y la col Implementación en Prolog. Autores: - Méndez Vargas Yoner Daniel. - Morales Castillo José Antonio. - Muñoz Huertas Bernardo Franco. Profesor: - Ing. Arturo Díaz Pulido Trujillo – Perú 2014

Upload: jose-morales-castillo

Post on 21-Jul-2015

681 views

Category:

Education


6 download

TRANSCRIPT

Page 1: Monografia lobo cabra y col

Universidad Nacional de Trujillo

Facultad de Ciencias Físicas y

Matemáticas

Escuela Profesional de

Informática

Monografía

Problema del lobo la cabra y la col

Implementación en Prolog.

Autores:

- Méndez Vargas Yoner Daniel.

- Morales Castillo José Antonio.

- Muñoz Huertas Bernardo Franco.

Profesor:

- Ing. Arturo Díaz Pulido

Trujillo – Perú

2014

Page 2: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

2

INDICE

Dedicatoria ........................................................................................................................ 3

Introducción ...................................................................................................................... 4

1. Capítulo I: Marco Teórico ...................................................................................... 5

1.1 Realidad Problemática ..................................................................................... 5

2. Capítulo II: Conceptos y Algoritmos Asociados ..................................................... 6

2.1 Búsqueda en Profundidad ............................................................................... 6

2.1.1 Definición .......................................................................................... 6

2.1.2 Algoritmo .......................................................................................... 6

2.1.3 Pseudocódigo .................................................................................... 6

2.2 Problema del lobo, la cabra y la col ................................................................... 7

2.2.1 Definición .......................................................................................... 7

2.2.2 Planteamiento del Problema ............................................................ 7

2.2.3 Algoritmo .......................................................................................... 8

2.2.3.1 Pseudocodigo ..................................................................... 9

2.3 Programa en Prolog ......................................................................................... 9

Conclusiones .................................................................................................................... 20

Referencias ...................................................................................................................... 21

Page 3: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

3

A todos los que confían en lo que

podemos hacer y esperan lo

mejor de nosotros

Page 4: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

4

Introducción

Este acertijo es un forma parte de los denominados “puzzles de cruzar el río”, en los que el

objetivo es mover una serie de objetos al otro lado del río siguiendo una serie de normas.

La aparición más temprana de este problema es en el manuscrito medieval Propositiones

ad Acuendos Juvenes, los tres objetos son un lobo, una cabra y una col. Existen variaciones

de este acertijo siendo los objetos una cabra, una oveja y un repollo; un zorro, una gallina y

unas semillas; un zorro, un ganso y una mazorca de maíz y una pantera, un cerdo y unas

gachas. La lógica del acertijo sigue siendo la misma.

Este acertijo ha formado parte del folclore de los afroamericanos, Camerún, Cabo Verde,

Dinamarca, Etiopía, Ghana, Italia, Rusia, Rumania, Escocia, Sudán, Uganda, Zambia y

Zimbabue. En algunos lugares de África, se han encontrado variaciones del juego en las

cuales la barca no puede llevar dos objetos en lugar de sólo uno.

Este acertijo era uno de los favoritos de Lewis Carroll, y ha sido incluido en varios libros de

matemática recreativa.

El acertijo también ha sido parodiado en el episodio Adiós, Maggie, adiós de la temporada

20 de la serie de animación Los Simpson. En él, Homer debe cruzar un río con Maggie,

Santa's Little Helper y un veneno para ratas. No puede dejar al perro con Maggie ni a

Maggie con el veneno.

Page 5: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

5

I. Capítulo 1: Marco Teórico

1.1. Realidad Problemática

La creatividad es en el mundo moderno una condición altamente deseable,

tan importante como la información y el conocimiento. En efecto, ella

flexibiliza las estructuras mentales que subyacen a la generación de nuevos

patrones y a la solución de situaciones problemáticas; en un mundo

altamente competitivo como en el que vivimos, esto sirve para generar

capacidad de diferenciación y con ella lograr ventaja competitiva

sostenible.

Dentro de esta óptica global y más específicamente dentro del proyecto los

acertijos y la creatividad se convierten en pieza clave para agregar valor a

los procesos educativos.

Por así decirlo, la creatividad (frontera), exploran múltiples maneras de

apropiar y generar conocimiento (caminos), valoran el trabajo colaborativo

(acompañar), repiensan los entornos de aprendizaje (hábitat) y generan

una transformación educacional con informática (cambio). De allí surgió la

necesidad de profundizar en la temática de los acertijos como espacios de

aprendizaje creativo.

Prolog se puede utilizar para resolver, básicamente, cualquier tipo de

problema. Principalmente es útil en la gestión de Juegos, en Inteligencia

Artificial y Sistemas Expertos, como lenguaje especialmente pensado para

construir bases de conocimientos basados en la lógica que forman parte

importante de cualquier agente inteligente, en la construcción de

Compiladores e Intérpretes, en el Reconocimiento del Lenguaje Natural,

etc.

Page 6: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

6

II. Capítulo 2: Conceptos y Algoritmos Asociados.

2.1. Búsqueda en Profundidad (Depth First Search).

2.1.1. Definición:

Una búsqueda en profundidad o Depth First Search en inglés es un

algoritmo que permite recorrer todos los nodos de un grafo o árbol de

manera ordenada pero no uniforme. Su funcionamiento consiste en ir

expandiendo todos y cada uno de los nodos que va localizando, de

forma recurrente, en un camino concreto. Cuando ya no quedan más

nodos que visitar en dicho camino, regresa (Backtracking), de modo

que repite el mismo proceso con cada uno de los hermanos del nodo ya

procesado.

Análogamente existe el algoritmo de búsqueda en anchura (BFS –

Breadth First Search).

2.1.2. Algoritmo.

Sea G = (V, A) un grafo convexo, V’ = V un conjunto de vértices, A’ un

vector de arcos inicialmente vacío y P un vector auxiliar inicialmente vacío:

a) Se introduce el vértice inicial en P y se elimina del conjunto V’.

b) Mientras V’ no sea vacío repetir los puntos 3 y 4. En otro caso

parar.

c) Se toma el último elemento de P como vértice activo.

d) Si el vértice activo tiene algún vértice adyacente que se

encuentre en V’:

- Se toma el de menor índice.

- Se inserta en P como último elemento.

- Se elimina de V’.

- Se inserta en A’ el arco que le une con el vértice activo.

- Si el vértice activo no tiene adyacentes se elimina de P.

2.1.3. Pseudocódigo:

DFS (grafo G) PARA CADA vértice u V [G] HACER Estado[u] NO_VISITADO Padre[u] NULO Tiempo0 PARA CADA vértice u V [G] HACER SI estado[u]=no visitado ENTONCES DFS-recorrer (u, tiempo)

Page 7: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

7

DFS-recorrer (nodo u, int t)

Estado[u]VISITADO

Tiempotiempo+1

D[u]tiempo

PARA CADA v Vecinos[u] HACER

SI estado[v]=NO VISITADO ENTONCES

Padre[v]u

DFS-recorrer (v, t)

Estado[u]TERMINADO

Tiempotiempo+1

F[u]tiempo

2.2. Problema del lobo la cabra y la col

2.2.1. Definición:

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.2. Planteamiento del Problema

Este problema nos sirve para explicar métodos de representación de

espacios de búsqueda. Para ello utilizaremos el paradigma del espacio

de estados que consiste en representar la situación actual de problema

en estados.

Sobre el ejemplo presentado, fijaremos primeramente un operador de

transición del estado. Representaremos con un tupla los elementos que

se transportan en el bote en cada viaje (ida, vuelta). Denominaremos al

Lobo con una L, a la cabra con una C y a la col con una X. Debemos de

fijar también un estado inicial que en nuestro problema será el listado

de los elementos que tengamos en la margen derecha del río (). Y el

estado final al que queremos llegar que será (L, C, X), Resumiendo:

Operador: (ida, vuelta) elementos que se transportan en el bote

Estado inicial: () -vacío-

Estado final: (L,C,X)

Asumimos como premisa inicial que si el granjero está en medio de los

tres elementos estos no interactúan entre sí, es decir el lobo no se come

a la cabra si el pastor está en esa orilla y lo mismo con la cabra y la col.

A continuación se dibuja el espacio de búsqueda de soluciones

Page 8: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

8

Los nodos del árbol del espacio de soluciones representan diversos

estados del problema. Las líneas que unen los nodos representan

los operadores, es decir el viaje del bote.

Como vemos la solución viene dada por 4 viajes (ida y vuelta), hasta

llegar al estado final (L,C,X). Por supuesto un ordenador o un

procesador no llega directamente a esa solución sino que irá

construyendo el espacio de búsqueda según el algoritmo que

elijamos. El método que elijamos será el que determine la eficiencia

en encontrar la solución. Por ejemplo, no es lo mismo ir

construyendo el espacio de búsqueda en profundidad que en

amplitud.

2.2.3. Algoritmo.

PRIMERO: El granjero pasa la cabra y regresa solo. SEGUNDO: El granjero pasa el lobo y regresa con la cabra. TERCERO: El granjero pasa la col y regresa solo. CUARTO: El granjero pasa la cabra.

Page 9: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

9

2.2.3.1 Pseudocódigo.

Algoritmo: Busqueda General Est_abiertos.insertar(Estado inicial) Actual← Est_abiertos.primero() mientras no es_final?(Actual) y no Est_abiertos.vacia?() hacer Est_abiertos.borrar_primero() Est_cerrados.insertar(Actual) Hijos ← generar_sucesores(Actual) Hijos ← tratar_repetidos(Hijos, Est_cerrados, Est_abiertos) Est_abiertos.insertar(Hijos) Actual ← Est_abiertos.primero() fin 2.3 Programa en Prolog % .: Proyecto de programacin Logica:. % --- Solucion --- % #region Datos del problema % estado inicial inicio(estado(lado(1, Lobos, Cabras, Col), lado(0, 0, 0, 0), CapBote)):- write('\tcantidad de Lobos : '), read(Lobos), write('\tcantidad de Cabras : '), read(Cabras), write('\tcantidad de Col : '), read(Col), write('\tcapacidad del Bote : '), read(CapBote). % estado final fin(estado(lado(0, 0, 0, 0), lado(1, _, _, _), _)). % restrincion(es) de peligro % no hay peligro solo cuando en ambos lados los animales estan a salvo sin_problemas(E):- E = estado(Li, Lf, _), es_seguro(Li), es_seguro(Lf). % no hay cabras y en la orilla hay lobos y coles es_seguro(L):- L = lado(_, Lobos, Cabras, Col), Cabras = 0, Lobos > 0, Col > 0. % no hay cabras, pero en la orilla hay lobos es_seguro(L):- L = lado(_, Lobos, Cabras, _), Cabras = 0, Lobos > 0. % no hay cabras, pero en la orilla hay coles es_seguro(L):- L = lado(_, _, Cabras, Col), Cabras = 0, Col > 0. % no hay lobos ni coles, pero en la orilla hay cabras

Page 10: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

10

es_seguro(L):- L = lado(_, Lobos, Cabras, Col), Cabras > 0, Lobos = 0, Col = 0. % las cabras y el hombre estan en la misma orilla es_seguro(L):- L = lado(Hombre, _, Cabras, _), Cabras > 0, Hombre = 1. % no queda ningun elemento en la orilla es_seguro(L):- L = lado(_, Lobos, Cabras, Col), Cabras = 0, Lobos = 0, Col = 0. % Son movimientos posibles cuando ... % viaje el Hombre de un lado a otro ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), Hf1 is Hi2, Hf2 is Hi1, Lobf1 is Lobi1, Lobf2 is Lobi2, Colf1 is Coli1, Colf2 is Coli2, Cabf1 is Cabi1, Cabf2 is Cabi2, % M = '.: vija el Hombre al otro lado :.', % ' H,'+Cabi1+'Cab -> ' sin_problemas(Ef). % viaje el Hombre con las Cabras de Ei a Ef cuando Cabras = CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), Cabi1 =:= (CB-1), Cabf1 is Cabi1 - (CB - 1), Cabf2 is Cabi2 + (CB - 1), Hf1 is Hi2, Hf2 is Hi1, Lobf1 is Lobi1, Lobf2 is Lobi2, Colf1 is Coli1, Colf2 is Coli2, % M = '.: viaja el Hombre con ,'+Cabi1+'Cabras del lado 1 al lado 2 sin_problemas(Ef).

Page 11: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

11

% viaje el Hombre con las Cabras de Ef a Ei cuando Cabras = CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), Cabi2 =:= (CB-1), Cabf1 is Cabi1 + (CB - 1), Cabf2 is Cabi2 - (CB - 1), Hf1 is Hi2, Hf2 is Hi1, Lobf1 is Lobi1, Lobf2 is Lobi2, Colf1 is Coli1, Colf2 is Coli2, % M = '.: viaja el Hombre con ,'+Cabi2+'Cabras del lado 2 al lado 1 sin_problemas(Ef). % viaje el Hombre con las Cabras de Ei a Ef cuando Cabras < CB-1 % y la cantidad de Col y Lobos caben en el espacio vacio ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Cabras es menor que la capacidad del bote Cabi1 < (CB-1), Coli1 =< (CB - 1) - Cabi1, Lobi1 =< (((CB - 1) - Cabi1) - Coli1), % el granjero se lleva todas las Cabras, las Lobos y Col que quepan en el bote Cabf1 is 0, Cabf2 is Cabi2 + Cabi1, Colf1 is 0, Colf2 is Coli2 + Coli1, Lobf1 is 0, Lobf2 is Lobi2 + Lobi1, Hf1 is Hi2, Hf2 is Hi1, %M = '.: viaja el Hombre con '+Lobi1+'Lobos,'+Cabi1+'Cabras,'+Coli1+'Col %del lado 1 al lado 2 :.', sin_problemas(Ef). % viaje el Hombre con las Cabras de Ei a Ef cuando Cabras < CB-1 % y la cantidad de Lobos cabe en el espacio vacio ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2),

Page 12: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

12

Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Cabras es menor que la capacidad del bote Cabi1 < (CB-1), Lobi1 =< (CB - 1) - Cabi1, % el granjero se lleva todas las Cabras y las Lobos Cabf1 is 0, Cabf2 is Cabi2 + Cabi1, Lobf1 is 0, Lobf2 is Lobi2 + Lobi1, Hf1 is Hi2, Hf2 is Hi1, Colf1 is Coli1, Colf2 is Coli2, %M = '.: viaja el Hombre con '+Lobi1+'Lobos y '+Cabi1+'Cabras del % lado 1 al lado 2 :.', sin_problemas(Ef). % viaje el Hombre con las Cabras de Ei a Ef cuando Cabras < CB-1 % y la cantidad de Col cabe en el espacio vacio ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Cabras es menor que la capacidad del bote Cabi1 < (CB-1), Coli1 =< (CB - 1) - Cabi1, % el granjero se lleva todas las Cabras y las Lobos Cabf1 is 0, Cabf2 is Cabi2 + Cabi1, Colf1 is 0, Colf2 is Coli2 + Coli1, Hf1 is Hi2, Hf2 is Hi1, Lobf1 is Lobi1, Lobf2 is Lobi2, % M = '.: viaja el Hombre con '+Cabi1+'Cabras y '+Coli1+'Col del lado % 1 al lado 2 :.', sin_problemas(Ef). % viaje el Hombre con las Cabras de Ei a Ef cuando Cabras < CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Cabras es menor que la capacidad del bote

Page 13: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

13

Cabi1 < (CB-1), % el granjero se lleva todas las Cabras Cabf1 is 0, Cabf2 is Cabi2 + Cabi1, Hf1 is Hi2, Hf2 is Hi1, Lobf1 is Lobi1, Lobf2 is Lobi2, Colf1 is Coli1, Colf2 is Coli2, % M = '.: viaja el Hombre con '+Cabi1+'Cabras del lado 1 al lado 2 % :.', sin_problemas(Ef). % viaje el Hombre con las Cabras de Ef a Ei cuando Cabras < CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Cabras es menor que la capacidad del bote Cabi2 < (CB-1), % el granjero se lleva todas las Cabras Cabf2 is 0, Cabf1 is Cabi2 + Cabi1, Hf1 is Hi2, Hf2 is Hi1, Lobf1 is Lobi1, Lobf2 is Lobi2, Colf1 is Coli1, Colf2 is Coli2, % M = '.: viaja el Hombre con '+Cabi2+'Cabras del lado 2 al lado 1 % :.', sin_problemas(Ef). % viaje el Hombre de Ei a Ef cuando Cabras < CB-1 y Lobos > CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % verifico que Cabras < CB-1 y Lobos > CB-1 Cabi1 < (CB - 1), Lobi1 > (CB - 1), % muevo las cabras y las lobos que quepan en el bote

Page 14: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

14

Cabf1 is 0, Cabf2 is Cabi1 + Cabi2, Lobf1 is Lobi1 - ((CB - 1) - Cabi1), Lobf2 is Lobi2 + ((CB - 1) - Cabi1), Colf1 is Coli1, Colf2 is Coli2, Hf1 is Hi2, Hf2 is Hi1, % Lobt is ((CB - 1) - Cabi1), % M = '.: viaja el Hombre con '+Lobt+'Lobos y '+Cabi1+'Cabras del lado % 1 al lado 2 :.', sin_problemas(Ef). % viaja el Hombre de Ei a Ef cuando Cabras > CB-1 y no hay Cabras ni Lobos % en la orilla que cargar ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Cabras es mayor que la capacidad del bote Cabi1 >= (CB-1), Lobi1 =:= 0, Coli1 =:= 0, % y no hay Lobos ni Col en la orilla, el Hombre se lleva las Cabras que caben en el bote Cabf1 is Cabi1 - (CB-1), Cabf2 is Cabi2 + (CB-1), Hf1 is Hi2, Hf2 is Hi1, Lobf1 is Lobi1, Lobf2 is Lobi2, Colf1 is Coli1, Colf2 is Coli2, % Cabt is Cabi1 - (CB-1), % M = '.: viaja el Hombre con '+Cabt+'Cabras del lado 1 al lado 2 :.', sin_problemas(Ef). % viaje el Hombre de Ei a Ef con otro elemento cuando Cabras > CB-1 % y la suma de las Lobos y las Col es < CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Cabras es mayor que la capacidad del bote Cabi1 >= (CB-1), (Lobi1 + Coli1) =< (CB-1), % y las Lobos + Col < CB-1, el granjero se los lleva

Page 15: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

15

Lobf1 is 0, Lobf2 is Lobi2 + Lobi1,

Colf1 is 0, Colf2 is Coli2 + Coli1, Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, % M = '.: viaja el Hombre con '+Lobi1+'Lobos y '+Coli1+'Col del % lado 1 al lado 2 :.', sin_problemas(Ef). % viaje el Hombre de Ef a Ei con otro elemento cuando Cabras > CB-1 % y la suma de las Lobos y las Col es < CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Cabras es mayor que la capacidad del bote Cabi2 >= (CB-1), (Lobi2 + Coli2) =< (CB-1), % y las Lobos + Col < CB-1, el granjero se los lleva Lobf2 is 0, Lobf1 is Lobi2 + Lobi1, Colf2 is 0, Colf1 is Coli2 + Coli1, Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, % M = '.: viaja el Hombre con '+Lobi2+'Lobos y '+Coli2+'Col del % lado 2 al lado 1 :.', sin_problemas(Ef). % viaje el Hombre con las Lobos cuando Lobos = CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), Lobi1 =:= (CB - 1), Lobf1 is Lobi1 - (CB - 1), Lobf2 is Lobi2 + (CB - 1), Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, Colf1 is Coli1, Colf2 is Coli2,

Page 16: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

16

% M = '.: viaja el Hombre con '+Lobi1+'Lobos del lado 1 al lado 2 % :.', sin_problemas(Ef). % viaje el Hombre con las Lobos cuando Lobos < CB-1 y caben Col ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Lobos son menor que la capacidad del bote y caben Col Lobi1 < (CB - 1), Coli1 =< (CB - 1) - Lobi1, % el granjero se lleva todas las lobos y los Col que quepan Lobf1 is 0, Lobf2 is Lobi2 + Lobi1, Colf1 is 0, Colf2 is Coli2 + Coli1, Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, % M = '.: viaja el Hombre con '+Lobi1+'Lobos y '+Coli1+' del lado 1 % al lado 2 :.', sin_problemas(Ef). % viaje el Hombre con las Lobos cuando Lobos < CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), % si las Lobos son menor que la capacidad del bote Lobi1 < (CB - 1), % el granjero se lleva todas las lobos Lobf1 is 0, Lobf2 is Lobi2 + Lobi1, Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, Colf1 is Coli1, Colf2 is Coli2, % M = '.: viaja el Hombre con '+Lobi1+'Lobos del lado 1 al lado 2 sin_problemas(Ef). % viaje el Hombre con los Col cuando Col = CB-1

Page 17: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

17

ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), Coli1 =:= (CB - 1), Colf1 is Coli1 - (CB - 1), Colf2 is Coli2 + (CB - 1), Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, Lobf1 is Lobi1, Lobf2 is Lobi2, % M = '.: viaja el Hombre con '+Coli1+'Col del lado 1 al lado 2 % :.', sin_problemas(Ef). % viaje el Hombre con los Col de Ei a Ef cuando Col < CB-1 % y caben Lobos ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), Coli1 < (CB - 1), Lobi1 =< (CB - 1) - Coli1, Colf1 is 0, Colf2 is Coli2 + Coli1, Lobf1 is 0, Lobf2 is Lobi2 + Lobi1, Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, % M = '.: viaja el Hombre con '+Lobi1+'Lobos y '+Coli1+'Col del % lado 1 al lado 2 :.', sin_problemas(Ef). % viaje el Hombre con los Col de Ei a Ef cuando Col < CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2),

Page 18: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

18

Coli1 < (CB - 1), Colf1 is 0, Colf2 is Coli2 + Coli1, Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, Lobf1 is Lobi1, Lobf2 is Lobi2, % M = '.: viaja el Hombre con '+Coli1+'Col del lado 1 al lado 2 % :.', sin_problemas(Ef). % viaje el Hombre con los Col de Ei a Ef cuando Col > CB-1 ir_desde(Ei, Ef):- Ei = estado(Li1, Li2, CB), Li1 = lado(Hi1, Lobi1, Cabi1, Coli1), Li2 = lado(Hi2, Lobi2, Cabi2, Coli2), Ef = estado(Lf1, Lf2, CB), Lf1 = lado(Hf1, Lobf1, Cabf1, Colf1), Lf2 = lado(Hf2, Lobf2, Cabf2, Colf2), Coli1 > (CB - 1), Colf1 is Coli1 - (CB - 1), Colf2 is Coli2 + (CB - 1), Hf1 is Hi2, Hf2 is Hi1, Cabf1 is Cabi1, Cabf2 is Cabi2, Lobf1 is Lobi1, Lobf2 is Lobi2, % Colt is (CB - 1), % M = '.: viaja el Hombre con '+Colt+'Col del lado 1 al lado 2 % :.', sin_problemas(Ef). % #fin region Datos del problema mostrar([E]):- E = estado(L1, L2, _), L1 = lado(H1, Lob1, Cab1, Col1), L2 = lado(H2, Lob2, Cab2, Col2), write(H1),write('\t'),write(Lob1),write('\t'),write(Cab1),write('\t'),write(Col1), write(' ---- '), write(H2),write('\t'),write(Lob2),write('\t'),write(Cab2),write('\t'),write(Col2),nl. % write('.: incialmente estan todos en el lado 1 :.'),nl. mostrar([E|List]):- mostrar(List), E = estado(L1, L2, _), L1 = lado(H1, Lob1, Cab1, Col1), L2 = lado(H2, Lob2, Cab2, Col2), write(H1),write('\t'),write(Lob1),write('\t'),write(Cab1),write('\t'),write(Col1),

Page 19: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

19

write(' ---- '),

write(H2),write('\t'),write(Lob2),write('\t'),write(Cab2),write('\t'),write(Col2),nl. % write(M),nl. % resolver(E, C, R) realiza una busqueda en profundidad donde : % E: Estado de partida % C: Camino recorrido (en reversa) % R: Camino total hasta la solucion (en reversa) resolver(E, C, C) :- fin(E). resolver(E, C, R) :- ir_desde(E, E1), not(member(E1, C)), resolver(E1, [E1|C], R). solucion:- nl, write(' .: Problema de la Loborra, la Cabca, el Colrano y el Hombre (version general) :.'), nl,nl, write('- Entrada de datos...'),nl, inicio(Ei), Ei = estado(Li, Lf, CB), Ef = estado(Lf, Li ,CB), fin(Ef), E = Ei, resolver(E, [E], R),nl, write('- Solucion encontrada mediante busqueda en profundidad...'),nl, write('\tLado 1'),write('\t\t\t'),write('\tLado 2'),nl, write('H\tLob\tCab\tCol'), write(' '), write('H\tLob\tCab\tCol'),nl, mostrar(R).

Page 20: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

20

Conclusiones

Los problemas lógicos tienen una gran importancia didáctica en los procesos de

formación. Se pueden utilizar para desarrollar diferentes capacidades como por

ejemplo:

La observación, la creatividad y la crítica.

La memorización y la agilidad mental.

La iniciativa y la creatividad

El cálculo matemático y el razonamiento lógico.

Los problemas lógicos sirven para poner a prueba a las personas, haciendo

trabajar a la mente, y muchas veces sin saberlo, nos ayudan a adquirir nuevas

capacidades mentales lo cual es muy importante para un ingeniero en

informática ya que en forma común una de nuestras tareas es proponer

soluciones por computada a muchos problemas de la vida cotidiana no bastando

solamente con proponer una solución sino que debe ser la mejor solución

posible lo cual es una de las capacidades que se esperan desarrollar en el curso.

Page 21: Monografia lobo cabra y col

Universidad Nacional de Trujillo – Escuela de Informática Problema del lobo la cabra y la col

21

Referencias.

Bibliografía.

Nilsson, Nils J., Artificial Intelligence: A New Synthesis, Morgan Kaufmann,

1998.

Simon, Herbert A., Las ciencias de lo artificial, Comares, 2006.

Colaboradores de Wikipedia. Inteligencia artificial [en línea]. Wikipedia, La

en ciclopedia libre, 2009 [fecha de consulta: 2 de enero del 2009].

Disponible en

http://es.wikipedia.org/w/index.php?title=Inteligencia_artificial&oldid=22

98 6524>.

Webgrafía.

Wikipedia - Búsqueda en profundidad

http://es.wikipedia.org/wiki/B%C3%BAsqueda_en_profundidad

Departamento de Matemática Aplicada - Búsqueda en Profundidad

http://www.dma.fi.upm.es/java/matematicadiscreta/busqueda/