Lobo y Cabra

10
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 transp ortar 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. Representare mos 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 co mo premisa ini cial que si el gr anjero e stá en medio de los tres elemen tos 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 e l espacio de bú squeda de so luciones (pe rdón por la precariedad):

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.