miércoles 28 de enero de 2009

Paradigmas de la Inteligencia Artificial. Su evolucion

En sus primeros años la Inteligencia Artificial (IA) pretendía lograr un algoritmo general que fuese capaz de resolver cualquier tipo de problema, el famoso solucionador general de problemas, a través de métodos heurísticos. Se creía que todos los problemas se podían resolver recorriendo un árbol de objetivos y la solución del problema, consistía en encontrar el camino correcto, desechando todas aquellas vías poco fértiles. La dificultad estaba en cómo desechar esas ramas o caminos improductivos, quién podría garantizar que ese camino después no fuese el mas adecuado, hasta qué profundidad había que recorrer el árbol para estar seguro de que esa vía era errónea, cómo evitar, qué producto de la ramificación creciente del árbol, un exceso de combinaciones incalculables (explosión combinatoria). Con el tiempo estos resolvedores generales fueron abandonados y se trató de darle solución a problemas más específicos, problemas que dependían de un dominio de aplicación y los cuales se solucionaban a través de los conocimientos que se poseían sobre ese dominio, lo que dio lugar a la explosión de los sistemas basados en conocimientos mas conocidos como sistemas expertos, los cuales debido a la estrechez de su dominio en la  solución de los problemas, no cumplían con las expectativas de los usuarios. Esto, entre otras cosas, trajo como consecuencia la crisis del paradigma simbolista dentro de la IA lo que originó nuevos paradigmas siendo los más importantes los basados en el conexionismo y los basados en la cooperación y es sobre estos últimos donde haremos hincapié dada su relación con la distribución inteligente de la información y la cooperación entre agentes inteligentes los cuales se ajustan a las necesidades de una sociedad basada en el conocimiento.

 

Por otra parte se pretendía comprender los estados mentales a través de "mundos de juguetes", ya que no se conocía lo suficiente sobre la naturaleza de la inteligencia y, por otro lado, existía aquello de que lo aprendido en esos dominios de juguete se podría extender sin dificultades a problemas más complejos.

 

La IA abandona los sistemas autistas (encerrados en si mismos) para dar lugar a sistemas abiertos que comparten información de forma inteligente, a la vez que permite la combinación de diferentes paradigmas de representación del conocimiento como los basados en reglas, los marcos (frames), los guiones, etc.

 

 

 

martes 13 de enero de 2009

Ejemplo sencillo de un sistgema experto

La Inteligencia Artificial sigue siendo una ciencia para elegidos, siendo su utilización propiedad casi exclusiva de centros de investigación y universidades. Y es que aun en estos tiempos sigue exigiendo por parte del  programador de un gran derroche de  ingenio y de gran esfuerzo y dedicación.

 

Como ya sabemos un Sistema Experto  simple, consta de:

1.      Una base de hechos.

2.      Una base de conocimientos.

3.      Una maquina de inferencias.

 

Ahora veremos un ejemplo de un programita en Javascript. Recuerdan el caso de las tinas?

 

Vamos a recordarlo: Se tienen dos tinas una de 3 gls y otra de 4 gls, ambas vacías y una pila o llave de agua, para ir llenandolas.  Se quiere dejar dos galones en la tina de 4 gls, ejecutando las acciones de llenar una tina, vaciar una tina en la otra y botar el contenido de una tina. Ya se acuerdan?

 

Aquí les va el programa en Javascript.

 

<HTML>

<HEAD>

<TITLE>Tinas</TITLE>

</HEAD>

<BODY>

<CENTER>Programa TINAS <CENTER>

<BR>

<script>

function tinas()

{//Base de hechos

  var x = 0

  var y = 0

  if (document.ftinas.tina[0].checked)

     {x = eval(document.ftinas.tina[0].value)

      document.write("Llenar la tina de 3 gls (3,0)" + "<br>" )

     }

     else

     {y = eval(document.ftinas.tina[1].value)

      document.write("Llenar la tina de 4 gls (0,4)" + "<br>" )

     }

//Maquina de inferencia

for (i=1;i<=15;i++)

        { if (y == 2)

           { document.write("Solucion satisfactoria: Hay dos galones en la tina de 4" + "<br>" )

             break

           }

//Base de conocimientos

//Regla 1:

         if (x == 0 && y == 0)

           { x = 3

             y = 0

             document.write("Llenar la tina de 3 gls (3,0)" + "<br>" )

             continue

           }

//Regla 2:

         if (x == 0 && y == 0)

           { x = 0

             y = 4

             document.write("Llenar la tina de 4 gls (0,4)" + "<br>" )

             continue

           }

//Regla 3:

         if (x == 3 && y == 0)

           { x = 0

             y = 3

             document.write("Vaciar la tina de 3 gls en la de 4 gls (0,3)" + "<br>" )

             continue

           }

//Regla 4:

         if (x == 0 && y == 4)

           { x = 3

             y = 1

             document.write("Vaciar la tina de 4 gls en la de 3 gls (3,1)" + "<br>" )

             continue

           }

//Regla 5:

         if (x == 0 && y == 3)

           { x = 3

             y = 3

             document.write("Llenar la tina de 3 gls (3,3)" + "<br>" )

             continue

           }

//Regla 6:

         if (x == 3 && y == 1)

           { x = 0

             y = 1

             document.write("Botar el contenido de la tina de 3 gls (0,1)" + "<br>" )

             continue

           }

//Regla 7:

          if (x == 3 && y == 3)

           { x = 2

             y = 4

             document.write("Vaciar la tina de 3 gls en la de 4 gls (2,4)" + "<br>" )

             continue

           }

//Regla 8:

          if (x == 0 && y == 1)

           { x = 1

             y = 0

             document.write("Vaciar la tina de 4 gls en la de 3 gls (1,0)" + "<br>" )

             continue

           }

//Regla 9:

          if (x == 2 && y == 4)

           { x = 2

             y = 0

             document.write("Botar el contenido de la tina de 4 gls (2,0)" + "<br>" )

             continue

           }

//Regla 10:

          if (x == 1 && y == 0)

           { x = 1

             y = 4

             document.write("Llenar la tina de 4 gls (1,4)" + "<br>" )

             continue

           }

//Regla 11:

         if (x == 2 && y == 0)

           { x = 0

             y = 2

             document.write("Vaciar la tina de 3 gls en la de 4 gls (0,2)" + "<br>" )

             continue

          } 

//Regla 12:

         if (x == 1 && y == 4)

           { x = 3

             y = 2

             document.write("Vaciar la tina de 4 gls en la de 3 gls (3,2)" + "<br>" )

             continue

          } 

 

  }

}

</script>

Cual de las tinas prefiere llenar?

<br>

<form name="ftinas">

<input type="Radio" name="tina" value="3" checked> Tina de 3 gls

<br>

<input type="Radio" name="tina" value="4"> Tina de 4 gls

<br>

<input type="Button" name="" value=" Entrar " onclick="tinas()">

<br>

</form>

</BODY>

</HTML>

 

Observen que el programa consta de una base de hechos, una maquina de inferencia y base de conocimientos compuesta por 12 reglas. Noten que las reglas impares se refieren a comenzar llenado la tina de 3 gls y las reglas pares son para el llenado de la tina de 4 gls.

La maquina de inferencia lo único que hace es recorrer todas las reglas y en caso de que se llegue a la solución detiene el proceso.

La base de hechos inicializa los hechos (pone en cero las variables) y prepara las condiciones para la interfaz con el usuario.

 

Es bueno destacar que la base de conocimientos (BC) y la maquina de inferencias (MI) estas separados lógicamente (usted puede seguir agregando reglas sin que esto afecte la ejecución del programa), pero físicamente están unidas dentro del mismo programa. En la practica la BC y la MI deben estar separadas lógica y físicamente.

 

Pruebe agregar la siguiente regla y vera que no afecta para nada al  programa:

//Regla 13:

         if (x == 3 && y == 4)

           { x = 3

             y = 0

             document.write("Botar el contenido de  la tina de 4 gls  (3,0)" + "<br>" )

             continue

          } 

 

La regla 13 quiere decir que si esta llena la tina de 3 y esta llena la tina de 4 entonces botar el contenido de la tina de 4.

 

Esto es un ejemplo de cómo cualquier lenguaje por simple que parezca puede ser utilizado para resolver problemas que requieran de inteligencia.