Programacion
Agosto 17, 2017, 06:13:44 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: SMF - Just Installed!
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: el problema de Inteligencia Artificial de las Jarras de agua.  (Leído 5008 veces)
rromero
Administrator
Newbie
*****
Mensajes: 16


Ver Perfil Email
« : Septiembre 01, 2010, 03:02:42 »

Hola .

El problema de las jarras de agua consiste en que con dos jarras de 4 y 2 litros de capacidad con diferentes movidas logremos que la primera jarra contenga 2 litros son utilizar una jarra adicional.
Enjoy it !!!:


max_en_j1(1,4).
max_en_j2(2,3).

muestra_contenido(C1,C2):- write('J1 tiene: '),write(C1),write(' J2 tiene: '),writeln(C2).

pasar_de_j1_a_j2(C1,C2,NC1,NC2):-      max_en_j2(2,Y), Disponible is Y - C2,
                                       C1 >= Disponible,
                                       writeln('Pasar de J1 a J2'),
                                       NC2 is Disponible+C2,
                                       NC1 is C1-Disponible;
                                       /* No hay otra opcion?*/
                                       max_en_j2(2,Y), Disponible is Y - C2,
                                       C1 < Disponible,
                                       writeln('Pasar de J1 a J2'),
                                       NC2 is C1+C2,
                                       NC1 is 0.

pasar_de_j2_a_j1(C1,C2,NC1,NC2):-      max_en_j1(1,Y), Disponible is Y - C1,
                                       Disponible >= C2,
                                       writeln('Pasar de J2 a J1'),
                                       NC1 is C2,
                                       NC2 is 0;
                                       max_en_j1(1,Y),
                                       Disponible is Y - C1,
                                       Disponible < C2,
                                       writeln('Pasar de J2 a J1'),
                                       NC2 is C2 - Disponible,
                                       NC1 is C1 + (C2-NC2).

contenido_en_j(J1,X,J2,Y):- 1 is J1, number(X),2 is X, write('Objetivo Logrado J1 tiene '), write(X), write(' litros').
contenido_en_j(J1,X,J2,Y):- 2 is J2, number(Y),2 is Y, NX = 0,
                            muestra_contenido(NX,Y),
                            NX2 = Y,
                            NY = 0,
                            muestra_contenido(NX2,NY),
                            contenido_en_j(J1,NX2,J2,Y).

contenido_en_j(J1,C1,J2,C2):-
                      0 is C2, max_en_j1(1,Y), C1 is Y, writeln('Rama Izquierda'),
                      pasar_de_j1_a_j2(C1,C2,NC1,NC2),
                      muestra_contenido(NC1,NC2),
                      NNC2 =0,
                      muestra_contenido(NC1,NNC2),
                      pasar_de_j1_a_j2(NC1,NNC2,NNC1,NNNC2),
                      muestra_contenido(NNC1,NNNC2),
                      max_en_j1(1,NLC1),
                      muestra_contenido(NLC1,NNNC2),
                      pasar_de_j1_a_j2(NLC1,NNNC2,NNNC1,NNNNC2),
                      muestra_contenido(NNNC1,NNNNC2),
                      contenido_en_j(1,NNNC1,2,NNNNC2)
                      ;
                      0 is C1, max_en_j2(2,Y), C2 is Y, writeln('Rama Derecha'),
                      muestra_contenido(C1,C2),
                      pasar_de_j2_a_j1(C1,C2,NC1,NC2),
                      muestra_contenido(NC1,NC2),
                      max_en_j2(2,NC21),
                      muestra_contenido(NC1,NC21),
                      pasar_de_j2_a_j1(NC1,NC21,NNC1,NNC2),
                      muestra_contenido(NNC1,NNC2),
                      contenido_en_j(1,NNC1,2,NNC2).

Rpta.
Caso 1: Jarra 1 tiene 4 litros y Jarra 2 tiene 0 litros.
contenido_en_j(1,4,2,0).
 Rama Izquierda
Pasar de J1 a J2
J1 tiene: 1 J2 tiene: 3
J1 tiene: 1 J2 tiene: 0
Pasar de J1 a J2
J1 tiene: 0 J2 tiene: 1
J1 tiene: 4 J2 tiene: 1
Pasar de J1 a J2
J1 tiene: 2 J2 tiene: 3
Objetivo Logrado J1 tiene 2 litros
true

Caso 2: Jarra 1 tiene 0 litros y Jarra 2 tiene 3 litros.
contenido_en_j(1,0,2,3).
 Rama Derecha
J1 tiene: 0 J2 tiene: 3
Pasar de J2 a J1
J1 tiene: 3 J2 tiene: 0
J1 tiene: 3 J2 tiene: 3
Pasar de J2 a J1
J1 tiene: 4 J2 tiene: 2
J1 tiene: 0 J2 tiene: 2
J1 tiene: 2 J2 tiene: 0
Objetivo Logrado J1 tiene 2 litros
true
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC XHTML 1.0 válido! CSS válido!