SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
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
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
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
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.
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.
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
Tiempo0
PARA CADA vértice u V [G] HACER
SI estado[u]=no visitado ENTONCES
DFS-recorrer (u, tiempo)
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
Tiempotiempo+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
Tiempotiempo+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
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.
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
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).
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),
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
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
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
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,
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
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),
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),
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('ttt'),write('tLado 2'),nl,
write('HtLobtCabtCol'),
write(' '),
write('HtLobtCabtCol'),nl,
mostrar(R).
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.
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/

Más contenido relacionado

La actualidad más candente

ORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIO
Wilmer Quintero
 
Chaps 1-3-ai-prolog
Chaps 1-3-ai-prologChaps 1-3-ai-prolog
Chaps 1-3-ai-prolog
saru40
 
BúSqueda Primero En Anchura
BúSqueda Primero En AnchuraBúSqueda Primero En Anchura
BúSqueda Primero En Anchura
mapaz91
 

La actualidad más candente (20)

REDES NEURONALES Algoritmos de Aprendizaje
REDES NEURONALES Algoritmos  de AprendizajeREDES NEURONALES Algoritmos  de Aprendizaje
REDES NEURONALES Algoritmos de Aprendizaje
 
Uwlgec8891
Uwlgec8891Uwlgec8891
Uwlgec8891
 
ORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIO
 
Ant colony optimization
Ant colony optimizationAnt colony optimization
Ant colony optimization
 
AI_Session 15 Alpha–Beta Pruning.pptx
AI_Session 15 Alpha–Beta Pruning.pptxAI_Session 15 Alpha–Beta Pruning.pptx
AI_Session 15 Alpha–Beta Pruning.pptx
 
Chaps 1-3-ai-prolog
Chaps 1-3-ai-prologChaps 1-3-ai-prolog
Chaps 1-3-ai-prolog
 
Problema de las jarras
Problema de las jarrasProblema de las jarras
Problema de las jarras
 
Ant colony optimization (aco)
Ant colony optimization (aco)Ant colony optimization (aco)
Ant colony optimization (aco)
 
Teoría de Colas aplicada a Java
Teoría de Colas aplicada a JavaTeoría de Colas aplicada a Java
Teoría de Colas aplicada a Java
 
Unit7: Production System
Unit7: Production SystemUnit7: Production System
Unit7: Production System
 
Ford fulkerson
Ford fulkersonFord fulkerson
Ford fulkerson
 
Proyecto final programación avanzada
Proyecto final programación avanzadaProyecto final programación avanzada
Proyecto final programación avanzada
 
Algoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap SortAlgoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap Sort
 
Problemas de Satisfaccion de restricciones (PSR)
Problemas de Satisfaccion de restricciones (PSR)Problemas de Satisfaccion de restricciones (PSR)
Problemas de Satisfaccion de restricciones (PSR)
 
Heuristic Search Techniques {Artificial Intelligence}
Heuristic Search Techniques {Artificial Intelligence}Heuristic Search Techniques {Artificial Intelligence}
Heuristic Search Techniques {Artificial Intelligence}
 
Adversarial search
Adversarial search Adversarial search
Adversarial search
 
BúSqueda Primero En Anchura
BúSqueda Primero En AnchuraBúSqueda Primero En Anchura
BúSqueda Primero En Anchura
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 
Grafos
GrafosGrafos
Grafos
 
01 laboratorio n°2 • algoritmos - soluciones
01 laboratorio n°2 • algoritmos - soluciones01 laboratorio n°2 • algoritmos - soluciones
01 laboratorio n°2 • algoritmos - soluciones
 

Similar a Monografia lobo cabra y col

Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.
Mayra Villanueva
 
Guias español grado 5 parte i
Guias español grado 5 parte iGuias español grado 5 parte i
Guias español grado 5 parte i
galeriaquique
 
Monografia asertijo EL LOBO, LA CABRA Y LA COL
Monografia asertijo EL LOBO, LA CABRA Y LA COLMonografia asertijo EL LOBO, LA CABRA Y LA COL
Monografia asertijo EL LOBO, LA CABRA Y LA COL
Yojhaira Gonzales
 
Mi webquest
Mi webquestMi webquest
Mi webquest
dllugo
 
C:\Documents And Settings\Administrador\Mis Documentos\Realandia Y Otros Mundos
C:\Documents And Settings\Administrador\Mis Documentos\Realandia Y Otros MundosC:\Documents And Settings\Administrador\Mis Documentos\Realandia Y Otros Mundos
C:\Documents And Settings\Administrador\Mis Documentos\Realandia Y Otros Mundos
Mallecorrea
 
Informe final de prolog
Informe final de prologInforme final de prolog
Informe final de prolog
Emerson DH
 

Similar a Monografia lobo cabra y col (18)

Monografia
MonografiaMonografia
Monografia
 
Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.
 
FabulAndo con Jean de La Fontaine secuencia de actividades didácticas
FabulAndo con Jean de La Fontaine  secuencia de actividades didácticasFabulAndo con Jean de La Fontaine  secuencia de actividades didácticas
FabulAndo con Jean de La Fontaine secuencia de actividades didácticas
 
Itinerario Formativo - Villa Sauze
Itinerario Formativo - Villa SauzeItinerario Formativo - Villa Sauze
Itinerario Formativo - Villa Sauze
 
Octavo semana 25
Octavo semana 25Octavo semana 25
Octavo semana 25
 
Guias español grado 5 parte i
Guias español grado 5 parte iGuias español grado 5 parte i
Guias español grado 5 parte i
 
Conferencia 2016
Conferencia 2016Conferencia 2016
Conferencia 2016
 
Monografia asertijo EL LOBO, LA CABRA Y LA COL
Monografia asertijo EL LOBO, LA CABRA Y LA COLMonografia asertijo EL LOBO, LA CABRA Y LA COL
Monografia asertijo EL LOBO, LA CABRA Y LA COL
 
Monografia asertijo
Monografia asertijoMonografia asertijo
Monografia asertijo
 
Mi webquest
Mi webquestMi webquest
Mi webquest
 
C:\Documents And Settings\Administrador\Mis Documentos\Realandia Y Otros Mundos
C:\Documents And Settings\Administrador\Mis Documentos\Realandia Y Otros MundosC:\Documents And Settings\Administrador\Mis Documentos\Realandia Y Otros Mundos
C:\Documents And Settings\Administrador\Mis Documentos\Realandia Y Otros Mundos
 
Realandia Y Otros Mundos
Realandia Y Otros MundosRealandia Y Otros Mundos
Realandia Y Otros Mundos
 
Ud tic. animales salvajes final
Ud tic. animales salvajes finalUd tic. animales salvajes final
Ud tic. animales salvajes final
 
¿La vida es juego? Gamificación y juegos serios para el aprendizaje
¿La vida es juego? Gamificación y juegos serios para el aprendizaje ¿La vida es juego? Gamificación y juegos serios para el aprendizaje
¿La vida es juego? Gamificación y juegos serios para el aprendizaje
 
Informe final de prolog
Informe final de prologInforme final de prolog
Informe final de prolog
 
el lobo la cabra y la col
el lobo la cabra y la colel lobo la cabra y la col
el lobo la cabra y la col
 
UNIDAD DIDÁCTICA. ANIMALES SALVAJES
UNIDAD DIDÁCTICA. ANIMALES SALVAJESUNIDAD DIDÁCTICA. ANIMALES SALVAJES
UNIDAD DIDÁCTICA. ANIMALES SALVAJES
 
UNIDAD DIDÁCTICA. ANIMALES SALVAJES
UNIDAD DIDÁCTICA. ANIMALES SALVAJESUNIDAD DIDÁCTICA. ANIMALES SALVAJES
UNIDAD DIDÁCTICA. ANIMALES SALVAJES
 

Último

NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
NadiaMartnez11
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
El Fortí
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
Wilian24
 

Último (20)

Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptxEL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
semana 4 9NO Estudios sociales.pptxnnnn
semana 4  9NO Estudios sociales.pptxnnnnsemana 4  9NO Estudios sociales.pptxnnnn
semana 4 9NO Estudios sociales.pptxnnnn
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 

Monografia lobo cabra y col

  • 1. 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
  • 2. 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
  • 3. 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
  • 4. 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.
  • 5. 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.
  • 6. 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 Tiempo0 PARA CADA vértice u V [G] HACER SI estado[u]=no visitado ENTONCES DFS-recorrer (u, tiempo)
  • 7. 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 Tiempotiempo+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 Tiempotiempo+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
  • 8. 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.
  • 9. 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
  • 10. 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).
  • 11. 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),
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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,
  • 16. 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
  • 17. 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),
  • 18. 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),
  • 19. 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('ttt'),write('tLado 2'),nl, write('HtLobtCabtCol'), write(' '), write('HtLobtCabtCol'),nl, mostrar(R).
  • 20. 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.
  • 21. 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/