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.