Sei sulla pagina 1di 6

EXPLICACION DE LA BUSQUEDA EN PROFUNDIDAD QUE REALIZA EL SISTEMA DE TOMA DE DESICIONES

“EL PRESTAMITO”

GRUPO “OPENTIX”

INTEGRANTES: Univ. Jose Luis Blas Ralde

Univ. Giovannka Ninoska Antia Oliver Ferrufino

DICCIONARIO DE TERMINOS UTILIZADOS

Ficheros:

Scripts.js Este archivo contiene los scripts necesarios para enviar las preguntas y mostrar las inferencias
de la interface de usuario.

Motor.js Aquí se encuentra el motor de inferencias

Funciones y variables del fichero motor.js

var db=new Array(); matriz que almacena todas las reglas separadas por casillas

var regla=new Array(); vector que alacena todas las reglas una por casilla

var trace=new Array(); verctor que almacena las reglas visitadas por cada inferencia

var tracen=new Array(); vector que guarda el número de regla utilizada en cada inferencia

var flag=0; variable que verifica si una nueva regla es valida o no

reglas(regla,db) función que agrega cada regla del vector “regla[]” a la matriz “db[]” separadas por
casillas.

inferencia(v1,v2) función que realiza la inferencia, verifica las entradas, devuelve la salida de una regla,
verifica si una regla es nueva o duplicada, si una regla es nueva la agrega a la matriz de reglas “db[]’ y al
vector de reglas ‘regla[]”, llena los vectores “trace[]” ,”tracen[]”.

busqueda(v1,v2,db,n,1) función que realiza la búsqueda en profundidad de 2 predicados devuelve el


resultado de una inferencia si esta es valida.

dic(pred) devuelve el significado de un predicado.

EXPLICACION DEL FUNCIONAMIENTO DEL MOTOR DE INFERENCIA CON BACTRACKING

EJEMPLO

Pregunta de usuario: >

¿Si presento los requisitos a cuanto


de préstamo puedo acceder?
inferencia(x,u) Predicados a enviar para su inferencia:
x=El número de cuotas
u=Cumplimiento de requisitos

Se verifica que v2 no este vacío esto para verificar si


function inferencia(v1,v2) solo se necesita inferir en una regla directa en nuestro
{ ejemplo:
if(v2!='') V1=x
{
V2=u
n=regla.length-1;
res=busqueda(v1,v2,db,n,1); //realiza el backtraking
Se extrae el tamaño del vector de reglas y se envía los
predicados a la función de búsqueda en profundidad y
la matriz de reglas

function busqueda(v1,v2,db,n,i) En la función de búsqueda se busca si el primer


{ elemento de cada fila de la matriz “db[]” y que sea
if(db[i][0]==v1) //verifica la primera casilla de cada fila es v1
{ directa o necesite del segundo antecedente para inferir
if(db[i][1]=='1') //verifica que v1 se directa o necesite de v2 en este caso x es directo y es la fila 4 correspondiente a
{ la regla:
trace[trace.length]=db[i]; //se almacena la regla encontrada Regla4: xm
tracen[tracen.length]=i; //se guarda el numero de regla usada
si el primer elemento de una fila de la matriz es igual a x
v1=db[i][db[i].length-1]; //reemplaza v1 con su consecuente entonces se reemplaza x por su correspondiente
//console.log("res--"+v1); consecuente en este caso m los nuevos valores de las
i=1; //reinicializa la búsqueda desde la regla 1 variabes son:
V1=m
V2=u
Y se realiza nuevamente la búsqueda buscado m como
primer elemento de alguna fila de la matriz “db[]”
function busqueda(v1,v2,db,n,i) Si se encuentra una fila de la matriz “db{}” que empieza
{ con m se verifica que sea directa o que necesite del
if(db[i][0]==v1) //verifica la primera casilla de cada fila
{ segundo antecedente en nuestro caso existen 2 reglas
if(db[i][1]=='1') que empiezan con m:
{ Regla 10: m ^ tk
… Regla 11: m ^ u  f
}
else
Se verifica que en la regla exista el segundo
{ antecedente para cada fila que empieza con m
if(db[i].indexOf(v2)>-1) //verifica si en la regla existe v2
{ Si ambos predicados están presentes en la regla en
trace[trace.length]=db[i]; //almacena la regla encontrada nuestro caso la regla 11 que se cumple para m y u
tracen[tracen.length]=i; // se guarda el número de regla usada
v1=db[i][db[i].length-1] //devuelve el consecuente para entonces se reemplaza m con el correspondiente
// expresiones de 2 antecedentes consecuente de la regla, los nuevos valores son:
flag=i=1; //reinicializa la búsqueda desde la regla 1y verifica V1=f
//que la regla es valida V2=u
}
Se reinicializa la búsqueda desde la primera regla en
busca de f como primer elemento de alguna fila de la
matriz “db[]”
function busqueda(v1,v2,db,n,i) En la función de búsqueda se busca si el primer
{ elemento de cada fila de la matriz “db[]” en nuestro
if(db[i][0]==v1) //verifica la primera casilla de cada fila es v1
{ caso f es directo y es la fila 5 correspondiente a:
if(db[i][1]=='1') //verifica que v1 se directa o necesite de v2 regla 5: fg
{ entonces se reemplaza f por su correspondiente
trace[trace.length]=db[i]; //se almacena la regla encontrada consecuente en este caso g los nuevos valores de las
tracen[tracen.length]=i; //se guarda el numero de regla usada
variables son:
v1=db[i][db[i].length-1]; //reemplaza v1 con su consecuente V1=g
//console.log("res--"+v1); V2=u
i=1; //reinicializa la búsqueda desde la regla 1 Y se realiza nuevamente la búsqueda buscado g como
primer elemento de alguna fila de la matriz “db[]”

function busqueda(v1,v2,db,n,i) Si en la búsqueda de “db[]” no se encuentra g como


{ primer elemento de sus filas se retorna g como último
… valor encontrado
if(i<=n)
{
v1=busqueda(v1,v2,db,n,i);
}
}
return v1;
}
Ifunction inferencia(v1,v2) La función búsqueda() retorna g y se verifica que este
{ no sea igual al primer antecede esto para verificar si los

res=busqueda(v1,v2,db,n,1); //realiza el backtraking predicados procesados no tienen conclusión
if(res==v1)
{
console.log("no hay conclusion");
console.log(regla);
res="no hay conclusion";
}
Ifunction inferencia(v1,v2) Si g no es igual a v1 entonces se verifica el valor de la
{
… variable flag si esta es igual a 1 se concluye que x y u
res=busqueda(v1,v2,db,n,1); //realiza el backtraking son una regla y se verifica que:
if(res==v1) x^ug
{
… no exista en el vector reglas esto para evitar reglas
else duplicadas
{
if(flag==1) //se agrega la nueva regla y tambien a la db
{ si no es duplicada entonces se agrega la nueva regla al
var reg=v1+','+v2+','+'1'+','+res; vector de reglas “regla[]” y a la matriz de reglas “db[]”
ver=regla.indexOf(reg); //se verifica que no existan reglas duplicadas
if(ver==-1)
{
regla[regla.length]=v1+','+v2+','+'1'+','+res;//se agrega la nueva regla
db[db.length]=new Array();
db[db.length-1]=regla[regla.length-1].split(','); //se agrega la nueva regla
}
}
}
Ifunction inferencia(v1,v2) finalmente se concluye que g es el consecuente de las
{
… reglas x y u y por lo tanto una nueva regla
return res; regla 14: x ^ u  g
} y se retorna al valor de g

Si enviamos g a la función dic() nos devuelve el


dic(g) predicado asociado a g
"Puede acceder a un crédito desde 100 a 10000
dólares "

Es la respuesta para la pregunta


TRACE DE LA EJECUCION DE LA PREGUNTA

Información de entrada para la pregunta y su respuesta

El vector “regla[]” actualizado con la nueva regla 14

Las reglas usadas durante la inferencia 4,11,5


Las reglas 4,11,5 en la matriz “db[]” cada elemento de una regla está en una casilla

Información final del contenido del vector “regla[]” y la matriz “db[]”