Lobo

11
Leyendo el otro día la entrada en Microsiervos que citaba la magnífica explicación de Jesús León del problema de Los puentes de Königsberg vino, no sé por qué extraña razón a mi mente, un viejo problema de mi época de estudiante. En concreto era un problema de Inteligencia Artificial sobre resolución de problemas y espacios de búsqueda: El lobo, la cabra y la col. Os transcribo el enunciado del mismo: Un granjero se encuentra en la orilla de un río junto con un lobo, una cabra y una col. Ademśa dispone de un bote en el que sólo puede transportar una única cosa cada vez. El granjero pretende transportar al lobo, la cabra y la col al otro lado del río 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 comería a la cabra. Tampoco puede dejar la cabra y la col porque la cabra se comería la col. ¿Cómo conseguiría el granjero trasladar todo a la margen derecha del río? Este problema que se resuelve fácilmente invirtiendo un ratillo de pensada, 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.

description

LD

Transcript of Lobo

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. Adema dispone 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 col con 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 boteEstado 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):

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

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 ----> Jarras8 - 0 - 0 ----> Estado inicial, jarra de 8 litros llena5 - 0 - 3 ----> Lleno jarra de 3, me quedan 5 litros en la de 85 - 3 - 0 ----> Paso los 3 litros a la de 52 - 3 - 3 ----> Lleno jarra de 3, me quedan 2 en la de 82 - 5 - 1 ----> Lleno jarra de 5 con la de 3, me sobra 1 litro en la de 37 - 0 - 1 ----> Paso los 5 litros a la de 87 - 1 - 0 ----> Paso el litro de la jarra de 3 a la de 54 - 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 8l0) inicio queda 0,0,81) llenar la jarra de 5, queda 0,5,32) volcar la de 5 en la de 3. queda 3,2,33) juntar el agua del 3l a la del 8l. queda 0,2,65) pasar el agua de 5l a 3l queda 2,0,66) llenar la jarra de 5, con agua de la de 8l. queda 2,5,17) tirar el agua de la de 8L. queda 2,5,08) pasar el agua de 3l a 8l queda 0,5,29) volcar la de 5 en la de 3. queda 3,2,210) juntar el agua del 5l a la del 8l. queda 3,0,4juntamos 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 54.- Ahora tengo 3 litros en la de jarra de 5 y 5 litros en la de 85.- 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)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 de una 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 quenoviene en el video es la solucin. Slo se observa que McClain y Carver lo logran resolver, pero no como.La solucinLa 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.

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 deagalones y otra debgalones, conaybenteros positivos yb>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 servira,bybagalones. Pero, qu otras cantidades? La respuesta en realidad no la s, pero conjeturo que debe ser cualquier nmero menor quebque sea mltiplo del mximo comn divisor deayb.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)

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.* 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.