Ejecute un sistema experto en HTML

componenteseLa Inteligencia Artificial (IA) sigue siendo una ciencia para elegidos y su utilización es propiedad casi exclusiva de centros de investigación y universidades (actualmente existen muchos laboratorios de IA financiados por las transnacionales de la iformacion). Y es que, aún en estos tiempos, sigue exigiendo por parte del programador de una gran derroche de ingenio, y de gran esfuerzo y dedicación.

Un Sistema Experto simple, consta de:
1. Una base de hechos (BH).
2. Una base de conocimientos (BC).
3. Una máquina o motor de inferencias (MI).

Este es un ejemplo de un programita en Javascript. ¿Conocen el problema de las tinas?

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 llenándolas. 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.

(La tina es un recipiente para contener agua)

Aquí les va el programa en Javascript.

Programa TINAS

<HTML>
<HEAD>
<TITLE>Tinas</TITLE>
</HEAD>
<BODY>
<CENTER>Programa TINAS <CENTER>
<BR>

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)” + “
” )
}
else
{y = eval(document.ftinas.tina[1].value)
document.write(“Llenar la tina de 4 gls (0,4)” + “
” )
}
//Maquina de inferencia
for (i=1;i” )
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)” + “
” )
continue
}
//Regla 2:
if (x == 0 && y == 0)
{ x = 0
y = 4
document.write(“Llenar la tina de 4 gls (0,4)” + “
” )
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)” + “
” )
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)” + “
” )
continue
}
//Regla 5:
if (x == 0 && y == 3)
{ x = 3
y = 3
document.write(“Llenar la tina de 3 gls (3,3)” + “
” )
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)” + “
” )
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)” + “
” )
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)” + “
” )
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)” + “
” )
continue
}
//Regla 10:
if (x == 1 && y == 0)
{ x = 1
y = 4
document.write(“Llenar la tina de 4 gls (1,4)” + “
” )
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)” + “
” )
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)” + “
” )
continue
}

}
}

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 máquina de inferencia y una base de conocimientos, compuesta por 12 reglas. Noten que las reglas impares se refieren a comenzar llenando la tina de 3 gls y las reglas pares son para el llenado de la tina de 4 gls.

La máquina 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 máquina de inferencias (MI) estan separadas 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.

Puede acceder al ejemplo de Sistema Experto en Javascript  aqui