Lobo y Cabra
-
Upload
jorgearmandodavilahurtado -
Category
Documents
-
view
24 -
download
0
Transcript of Lobo y Cabra
-
5/21/2018 Lobo y Cabra
1/10
Leyendo el otro da la entrada enMicrosiervosque citaba la magnfica explicacin
deJess Lendel problema deLos puentes de Knigsbergvino, no s por qu extraa
razn a mi mente, un viejo problema de mi poca de estudiante. En concreto era un
problema deInteligencia Artificialsobre resolucin de problemas y espacios de bsqueda:
El lobo, la cabra y la col. Os transcribo el enunciado del mismo:
Un granjero se encuentra en la orilla de un ro junto con un lobo, una cabra y una col.
Ademadispone de un bote en el que slo puede transportar una nica cosa cada vez. El
granjero pretende transportar al lobo, la cabra y la col al otro lado del ro utilizando el bote.
Sin embargo, debe tener cuidado y no dejar solos en una orilla al lobo y a la cabra porque
el lobo se comera a la cabra. Tampoco puede dejar la cabra y la col porque la cabra se
comera la col. Cmo conseguira el granjero trasladar todo a la margen derecha del ro?
Este problema que se resuelve fcilmente invirtiendo un ratillo de pensada, nos sirve para
explicar mtodos de representacin de espacios de bsqueda. Para ello utilizaremos el
paradigma del espacio de estados que consiste en representar la situacin actual de
problema en estados.
Sobre el ejemplo presentado, fijaremos primeramente un operador de transicin 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 colcon una X. Debemos de fijar tambin un estado inicial que en nuestro problema ser el
listado de los elementos que tengamos en la margen derecha del ro (). 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: () -vaco-
Estado final: (L,C,X)
Asumimos como premisa inicial que si el granjero est en medio de los tres elementos
estos no interactan 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 continuacin se dibuja el espacio de bsqueda de soluciones (perdn por la
precariedad):
http://www.microsiervos.com/archivo/puzzles-y-rubik/puentes-konigsberg.htmlhttp://www.microsiervos.com/archivo/puzzles-y-rubik/puentes-konigsberg.htmlhttp://www.microsiervos.com/archivo/puzzles-y-rubik/puentes-konigsberg.htmlhttp://jesusleon.wordpress.com/about/http://jesusleon.wordpress.com/about/http://jesusleon.wordpress.com/about/http://jesusleon.wordpress.com/2007/08/11/los-siete-puentes-de-konigsberg/http://jesusleon.wordpress.com/2007/08/11/los-siete-puentes-de-konigsberg/http://jesusleon.wordpress.com/2007/08/11/los-siete-puentes-de-konigsberg/http://es.wikipedia.org/wiki/Inteligencia_artificialhttp://es.wikipedia.org/wiki/Inteligencia_artificialhttp://es.wikipedia.org/wiki/Inteligencia_artificialhttp://es.wikipedia.org/wiki/Inteligencia_artificialhttp://jesusleon.wordpress.com/2007/08/11/los-siete-puentes-de-konigsberg/http://jesusleon.wordpress.com/about/http://www.microsiervos.com/archivo/puzzles-y-rubik/puentes-konigsberg.html -
5/21/2018 Lobo y Cabra
2/10
Los nodos del rbol del espacio de soluciones representan diversos estados del problema.
Las lneas que unen los nodos representan los operadores, es decir el viaje del bote.
Como vemos la solucin 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 solucin
sino que ir construyendo el espacio de bsqueda segn el algoritmo que elijamos. El
mtodo que elijamos ser el que determine la eficiencia en encontrar la solucin. Por
ejemplo, no es lo mismo ir construyendo el espacio de bsqueda en profundidad que en
anchura pero los algoritmos ya son otro cantar
-
5/21/2018 Lobo y Cabra
3/10
Una variante es tener dos jarras de 4 y 3 litros respectivamente y lograr dejar
solo 2 litros en la jarra de 4.
Otra variante es la de tener 3 jarras de 8, 5 y 3 litros, se dispone tambin
solamente de 8 litros de agua y se debe lograr dejar 4 litros en la jarra de 8.
@ christian2004:
En estos casos me ayuda mucho plantearlo grficamente: hago el de 8 litros
para ejemplificar:
Esta es una de tantas soluciones posibles:
Cada columna es una jarra indicada como 8 5 y 3, los nmero debajo son los
litros de agua que tengo y que voy pasando:8 - 5 - 3 ----> Jarras
8 - 0 - 0 ----> Estado inicial, jarra de 8 litros llena
5 - 0 - 3 ----> Lleno jarra de 3, me quedan 5 litros en la de 8
5 - 3 - 0 ----> Paso los 3 litros a la de 5
2 - 3 - 3 ----> Lleno jarra de 3, me quedan 2 en la de 8
2 - 5 - 1 ----> Lleno jarra de 5 con la de 3, me sobra 1 litro en la de 3
7 - 0 - 1 ----> Paso los 5 litros a la de 8
7 - 1 - 0 ----> Paso el litro de la jarra de 3 a la de 5
4 - 1 - 3 ----> Lleno la jarra de 3 litros, la de 8 me queda con 4 litros, el
resultado esperado.
Intenta realizar lo mismo con tu problema, te ser ms sencillo luego plantear
el cdigo si ya tienes el proceso armado.
dificil eh? contenido de las jarras de 3l, 5l y 8l
0) inicio queda 0,0,8
1) llenar la jarra de 5, queda 0,5,3
2) volcar la de 5 en la de 3. queda 3,2,3
3) juntar el agua del 3l a la del 8l. queda 0,2,6
5) pasar el agua de 5l a 3l queda 2,0,6
-
5/21/2018 Lobo y Cabra
4/10
6) llenar la jarra de 5, con agua de la de 8l. queda 2,5,1
7) tirar el agua de la de 8L. queda 2,5,0
8) pasar el agua de 3l a 8l queda 0,5,2
9) volcar la de 5 en la de 3. queda 3,2,2
10) juntar el agua del 5l a la del 8l. queda 3,0,4
juntamos 4 litros en la jarra grande.
me hiciste pensar guachin
Tenemos una jarra de 8 litros llena de agua y otras dos vacias de 5 litros y 3 litros
respectivamente.
Cmo haramos para separar exactamente la mitad del agua en dos jarras
distintas?.
SOLUCIN:
1.- La jarra de 8 litros la vacio en la de 3.
2.- Me quedan 5 en la de 8.
3.- Vierto la de 3 en la de 5
4.- Ahora tengo 3 litros en la de jarra de 5 y 5 litros en la de 8
5.- Con la de 8 vuelvo a llenar la de 3 nuevamente.
6.- Ahora tengo 2 litros en la de 8, 3 litros en la de 3 y 3 litros en la de 5.
7.-Vierto la de 3 litros en la de 5 (que ya tena 3) por lo que me queda 1 litro en la
de 3 y 5 litros en la de cinco.
8.- La jarra de 5 litros se pasa a la de 8 (en la que quedaban 2 litros)
-
5/21/2018 Lobo y Cabra
5/10
9.- Ahora tengo 7 litros en la de 8 y 1 litro quedaba en la de 3 que los paso a la de
5 que est vaca.
10 .- Vuelvo a llenar la jarra de 3 litros con los 7 que hay en la jarra de 8 con lo que
me quedan 4 litros en la de 8.
11.- Vierto la de 3 litros en la de 5 (que le quedaba 1 litro) y ya tengo separados los
8 litros en dos jarras con 4 litros cada una.
Resumen del problemaBueno, como pueden ver, en el problema se tienen los siguientes elementos:
una jarra de 5 galones, otra de 3 galones, una fuente para llenar las jarras de
agua y una bscula con detonador.
Entonces, el problema consiste en poner exactamente 4 galones de agua en la
jarra de 5 galones, y ponerlo en la bscula para desactivar la bomba. Un dato
importante, es que no se pueden hacer cosas como "tomar la tercera parte deuna jarra" (como lo intent McClain) pues se debe ser muy preciso, y no se
sabe exactamente donde est la tercera parte de una jarra, pues no son jarras
con una forma regular (cilindros, cubos o paralelepipedos). Otro elemento que
est en el problema es que slo tienen 5 minutos para resolverlo, pero nosotros
nos tomaremos ms tiempo.
Ahora, lo que noviene en el video es la solucin. Slo se observa que McClain
y Carver lo logran resolver, pero no como.
La solucin
-
5/21/2018 Lobo y Cabra
6/10
La solucin es ingeniosa pero simple, consiste en seguir los siguientes pasos:
1. Llenar la jarra de 5 galones (hasta el tope).
2. Con el lquido de la jarra de 5 galones llenar la jarra de 3 galones.
Quedarn 2 galones de agua en la primera jarra.
3. Tirar el agua de la jarra de 3 galones.
4. Poner los 2 galones de agua que hay en la jarra grande en la jarra
pequea. Faltar un galn de agua para que se llene la jarra pequea.
5. Llenar la jarra de 5 galones.
-
5/21/2018 Lobo y Cabra
7/10
6. Verter el agua de la jarra de 5 galones a la pequea hasta que se llene.
Como faltaba un galn para que se llenara, en la jarra de grande quedarn
4 galones.
Con este mtodo, si se tiene cuidado en llenar adecuadamente las jarras y si al
verter el agua de una jarra a otra no se pierde agua, entonces se garantizar
que habr exactamente 4 galones en la jarra grande.
Observen que el paso 6 de esta solucin es el que realizan McClain y Carver al
final del video.
Por otro lado, hay otra forma de resolver este mismo problema, que empieza
por llenar la jarra con tres galones y virtindola en la jarra de 5 galones. Les
dejo como ejercicio buscar esa solucin.
Problema generalEste problema se puede generalizar de la siguiente manera. Consideremos dos
jarras con una capacidad de agalones y otra de bgalones, con ay benteros
positivos y b>a. Si slo se nos permite vaciar o llenar una jarra, o vertir lquido
de una jarra a otra (como en la solucin que explicamos), cules son las
cantidades en galones que podemos servir?
Sin mucha dificultad se ve que podemos servir a, by bagalones. Pero, qu
otras cantidades? La respuesta en realidad no la s, pero conjeturo que debe
ser cualquier nmero menor que bque sea mltiplo del mximo comn divisorde ay b.
-
5/21/2018 Lobo y Cabra
8/10
Pero tal vez eso lo veamos en otro post. Si ustedes tienen una idea de cmo
demostrarlo, pueden escribirnos un comentario.
Se tienen dos jarras de agua, una de 4l y otra de 3l sin escala de medicin.
Se desea tener 2l de agua en la jarra de 4l. Las siguientes operaciones son vlidas: llenar las jarras, tirar
agua de las jarras, pasar agua de una jarra a otra.
Solucin:
* El espacio de estados se define como
{ (X,Y)/ X son los litros en la jarra de 4l con 0 (X, 0)
5. Pasar agua de la jarra de 4l a la jarra de 3l hasta llenarla: Si (X,Y) AND X>0 AND X+Y>=3 => (X-(3-
Y),3)
6. Pasar agua de la jarra de 3l a la jarra de 4l hasta llenarla: Si (X,Y) AND Y>0 AND X+Y>=4 => (4, Y-(4-
X))
7. Pasar toda el agua de la jarra de 4l a la jarra de 3l: Si (X,Y) AND X>0 AND X+Y (0,X+Y)
-
5/21/2018 Lobo y Cabra
9/10
8. Pasar toda el agua de la jarra de 3l a la jarra de 4l: Si (X,Y) AND Y>0 AND X+Y (X+Y,0)
El programa debera encontrar un pasaje de estados para ir del estado (0,0) al estado (2,0). Puede existir
ms de un pasaje de estados hacia la solucin, por ejemplo:
(0,0) => (0,3) => (3,0) => (3,3) => (4,2) => (0,2) => (2,0)
en la cual, a partir del estado inicial, se aplicaron las reglas 2, 8, 2, 6, 3 y 8, hasta conseguir el estado
objetivo.
Otro pasaje de estados hacia la solucin es la siguiente
(0,0) => (4,0) => (1,3) => (1,0) => (0,1) => (4,1) => (2,3) => (2,0)
en la cual se aplicaron las reglas 1, 5, 4, 7, 1, 5 y 4
Con respecto a las reglas se puede concluir que:
* Las condiciones que se establecen en la parte izquierda a veces no son altamente necesarias pero
restringen la aplicacin de la regla a estados ms adecuados. Esto incrementa la eficiencia del programa
que utiliza las reglas. En el ejemplo anterior, la regla
1. Llenar la jarra de 4l: Si (X,Y) AND X (4,Y)
contiene la condicin (X0 => (X-Q, Y)
es decir, tirar agua sin cuantificar, intuitivamente se concluye que la aplicacin de esta regla nunca nos
acercar a la solucin del problema.
-
5/21/2018 Lobo y Cabra
10/10
* A veces, cuando se alcanzan algunos estados resulta obvio cmo se debe continuar hacia la solucin.
Es posible agregar reglas de propsito especial que capturen el conocimiento sobre casos especiales que
conducen a la resolucin del problema. En el ejemplo anterior, se pueden agregar las siguientes reglas de
propsito especial:
Si (X,2) => (2,0)
Si (2,Y) AND Y>0 => (2,0)
Estas reglas no aaden ms potencia al sistema ya que las operaciones que describen las proporcionan
otras reglas ms generales. En el ejemplo, la primera regla agregada es equivalente a la aplicacin de las
reglas generales 3 y 8; y la segunda regla agregada es equivalente a la aplicacin de la regla general 4.
Dependiendo de la estrategia de control que se utilice para seleccionar reglas durante la resolucin del
problema se puede mejorar el rendimiento si se les da preferencia a las reglas de casos especiales.