Documente Academic
Documente Profesional
Documente Cultură
PRCTICA 1
Diseo, Implementacin y Evaluacin de
un Sistema Basado en el Conocimiento
Departamento de Sistemas Informticos y Computacin- UPV
1.- Introduccin.
El objetivo de esta prctica es aplicar las tcnicas y metodologas de la Ingeniera del Conocimiento en el
diseo y construccin de un prototipo de Sistema Basados en el Conocimiento (Sistema Experto), para
aplicar los conocimientos sobre representacin del conocimiento, razonamiento basado en reglas,
inferencia y control. Adicionalmente, esta prctica permitir conocer un entorno de desarrollo de Sistemas
Basados en el Conocimiento (KAPPA-PC).
Las etapas de la prctica son:
1.- Conocimiento del entorno de desarrollo de Sistemas Basados en el Conocimiento (KAPPA).
a) Representacin conocimiento: frames, herencia, mtodos, monitores y objetos. Lenguaje
KAL.
b) Reglas en kappa-pc
c) Inferencia: Razonamiento hacia delante, hacia atrs. Control Inferencial.
d) Interfaz grfica de usuario
2.- Diseo, Implementacin y evaluacin de un Sistema Basado en el Conocimiento (SBC)
En este documento, se describen las principales funcionalidades de KAPPA-PC que sern desarrolladas en
sucesivas sesiones de prcticas. El objetivo de estas sesiones es familiarizarse con las diversas
funcionalidades del entorno de desarrollo y poder desarrollar un prototipo de SBC sobre dicho entorno (que
constituye la evaluacin principal de la prctica).
Adems de la informacin contenida en este documento, se recomienda acceder a la ayuda interna contenida
en el propio entorno KAPPA-PC.
Para cualquier consulta adicional sobre una caracterstica concreta
de KAPPA existe un manual "on-line" en la misma carpeta
Esta ayuda se puede activar pulsando la opcin HELP que aparece a
la derecha de la ventana principal de KAPPA.
Objetos
Reglas
KAPPA-PC
Grficos
Explicacin
Interfaz
Usuario
Librera
Funciones
Help
Notas importantes:
- Object Browser
- EditTools window.
Todas las ventanas siguen los standards de Windows para abrir, cerrar, generar tamao mximo, etc.
Main KAPPA Window muestra los iconos de las otras 7 herramientas existentes:
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 2
Rule Relations, Rule Trace, Inference Brower: Herramientas para depurar, relacionar y
realizar trazas en las reglas y encadenamiento inferencial.
Dado que el modo interactivo es ms rpido para estudiar los distintos tpicos de KAPPA-PC, seguiremos
este mtodo a partir de ahora.
1. En la ventana Object Browser, situarse sobre la clase "Coches" y seleccionar "Add instance"
desde la opcin "Edit" del men.
2. Teclear el identificador de la instancia (Ej. Coche1).
3. Repetir los pasos anteriores para el resto de las instancias.
En la ventana Object Browser veremos el resultado obtenido (las relaciones 'instancias' se representan con
una lnea discontinua:
Nota: Los nombres de las clases e instancias son nicos en toda la jerarqua y no pueden
repetirse. Es habitual indicar el nombre de las instancias en singular y las clases en plural.
* matricula
* propietario
* modelo
* tipo
* color
num_puertas
Coche2
Moto1
Motos
* matricula
* propietario
* modelo
* tipo
* color
Personas
Pepe
nombre
apellidos
direccion
edad
Para ver y editar los slots de un objeto hay que activar el "Editor de Clases / Instancias" (existen dos
formas de hacerlo):
1.- Abrir el editor de clases. Hay dos formas de hacerlo:
a) En la ventana Object Browser, situarse sobre la clase "Vehiculos" y seleccionar "Edit"
desde la opcin "Edit" del men.
b) Situarse sobre la clase "Vehiculos" y pulsar dos veces sobre la clase activada.
2.- Seleccionar "Slots" desde el men y luego la opcin "New" desde el men de "Slots".
3.- Teclear el nombre del slot a introducir. Salvar los cambios.
Con ello, creamos los slots correspondientes en la clase Vehiculo y los slots de la clase Personas.
Tambin debemos crear el slot 'nmero de puertas' en la clase Coches.
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 4
Al crear los slots en la clase Vehiculos, podemos comprobar que se han heredado automticamente a las
subclases e instancias inferiores en la jerarqua. Los asteriscos (*) que aparecen al lado del nombre del slot
significan que dichos slots se han heredado de la jerarqua establecida (Herencia).
Valor: Valor del slot. Cuando un slot no tiene valor, KAPPA le asigna el valor NULL.
Cardinality: Los slots pueden contener uno o ms de un valor. Los posibles valores para esta
opcin de slot son:
-
Value Type: Especifica el tipo de valores del slot. Los tipos de valores que puede tomar un slot son:
- Text: cadena de caracteres, por defecto.
- Number: nmero entero o en coma flotante.
- Boolean: TRUE o FALSE.
- Object: nombre de una clase o instancia.
Allowable Values: Especifica los posibles valores de los slots. Por ejemplo:
Tipo Text: cualquier lista de cadenas de caracteres. Ejemplo: rojo amarillo verde
Si quiero considerar una cadena con espacios en blanco como una nica cadena, hay que
ponerla entre " ". Ejemplo: "rojo amarillo verde"
Tipo Number: Cuando el tipo del slot es numrico se puede especificar un rango para los
valores que puede tomar el slot, delimitando el valor mnimo y mximo.
Tipo Boolean: los lmites en los valores son los propios valores TRUE, FALSE.
Tipo Object: cualquier lista de nombres de CLASES. El valor del slot debe ser el nombre de
un descendiente de una de las clases que aparece en dicha lista.
Slot Inheritance: Full / No Inheritance. Indica si el slot se hereda o no a los objetos inferiores en la
jerarqua. Por efecto es Full.
Monitores:
Valores activos asociados al slot (If Needed, When Accessed, Before Change, After
Change). Se ver en el punto correspondiente a los monitores.
TEXT
Value Type
modelo
numpuertas
color
propietario
edad
tipo
TEXT
NUMBER
TEXT
OBJECT
NUMBER
TEXT
Nota: La especificacin de los slots como tipo OBJECT permite crear una "Red de Objetos":
El slot 'propietario' es de tipo OBJECT. Eso significa que el valor del mismo ser una instancia (o
simplemente un descendiente) de una clase (Personas) que se ha especificado en el campo
Allowable Values.
Los slots de la clase Personas son todo de tipo TEXT, excepto edad de tipo Number.
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 6
Las restricciones sobre la clase de valores en Kappa no tienen efecto automtico y no se aplican al
desarrollador del sistema, pero en cambio s se aplican al usuario del mismo.
El desarrollador del sistema puede introducir valores:
a) En la edicin, por la interfaz interactiva de desarrollo: NO se limita el valor del slot y no se produce
ningn mensaje de aviso.
b) En la asignacin de valores mediante expresiones KAL (utilizadas habitualmente aplicacin de
reglas en el proceso inferencial) se puede limitar mediante un monitor (Ver: Monitor tipo Before
Change).
En la introduccin de valores en la interfaz grfica del usuario S se puede limitar a la clase de valores
especificada, utilizando por ejemplo:
a) PostInputForm, que indicar solo los valores posibles de la clase de valores del slot,
b) Imgenes activas de tipo slider, por ejemplo, en las que se puede delimitar los valores a introducir
por el usuario.
Valores de Slots
Los valores de los slots se pueden introducir desde el Editor de Slots:
1.- Desde el Editor de clases/instancias, abrir el editor de slots. Existen dos formas de hacerlo:
a) Seleccionar "Slots" desde el men y luego "Edit" desde dicho men.
b) Situarse sobre el slot deseado y pulsar dos veces sobre el slot activado.
2.- Introducir el valor y tipo del slot.
3.- Selecciona "Update" desde el editor de clases y luego la opcin "Close" desde dicho men.
Guardar los cambios.
Pepe
* nombre Jose
* apellidos Fernandez Bou
* direccion Calle .....
* edad
27
nombre
apellidos
direccion
edad
Coche1
Coches
Vehiculos
matricula
propietario
modelo
tipo locomocin
color
* matricula
* propietario
* modelo
* tipo *locomocin
* color
numpuertas
Motos
Coche2
* matricula
V-5544-CL
* propietario
Pepe
* modelo
SEAT
* tipo
* locomocion
* color
rojo
* numpuertas 3
Moto1
* matricula
* propietario
* modelo
* tipo *locomocin
* color
Notas:
Cuando de introduce un valor en el slot de una clase, puede comprobarse que todas las
instancias de la clase heredan dicho valor para el slot ( el cual aparece con *).
El valor Pepe del slot propietario permite crear una red de objetos, donde el valor de un slot
representa otro objeto. De esta forma, mediante la expresin KAL:
Coche2:propietario: edad;
podemos obtener la edad del propietario del Coche1.
2.6.- Herencia.
Hay dos tipos de herencia:
a) Herencia de slots: Una subclase hereda los slots de la clase en los que se haya especificado la
opcin 'Full Inheritance to Subclasses and Instances'. Los slots heredados van precedidos por un
asterisco (*).
Si se quiere que un slot no sea heredado por los objetos o frames descendientes, entonces hay
que especificar 'No Inheritance' en el slot correspondiente (excepcin a la herencia). Son
llamados slots propios.
En la Figura previa, el slot 'num_puertas' aparece con (*) en la instancia coche2 porque dicho
atributo se ha definido como heredable en su clase inmediatamente superior (Coche).
El slot 'tipo' se define en la clase Vehiculos y es heredado por todos sus objetos descendientes.
b) Herencia de valores: Si se define un valor en un slot de un objeto y dicho valor es heredado por
los objetos descendendientes, entonces ste valor aparecer precedido por un asterisco (*) en
los objetos donde es heredado.
Si queremos que un slot heredado de una clase superior no tome el valor heredado, sino que
tenga un valor local, basta con definir el nuevo valor del slot en el campo "Value" para el objeto
local concreto. Este nuevo valor se heredar a todas las subclases o instancias que dependan del
objeto al cual se est modificando el valor del slot. En el ejemplo de la Fig.7. si se definiera un
valor distinto para el slot 'tipo' de la clase Coche, ste sera heredado por todas sus instancias.
Si queremos que el valor de un slot heredado vuelva a ser el valor heredado de una clase
superior, basta con presionar el botn (*) situado en el campo "Value" del slot determinado y
todas las instancias y subclases dependientes volvern a tomar el correspondiente valor
heredado.
Mtodos: medio para definir un comportamiento de las clases o instancias que existan.
Monitores: tipo especial de mtodo que se activan automticamente cuando se accede al slot
de un objeto. Por ejemplo, podemos querer que se realicen ciertas tareas automticamente
cuando se modifica el slot (en respuesta a ciertos datos), cuando se accede a l, etc.
Edicin de Mtodos.
En general, lo ms cmodo es utilizar el editor de mtodos para crear y editar los mtodos:
1. Selecciona la clase a la cual se quiere definir el mtodo.
2. Selecciona New desde el men de Mtodos.
3. Escribe el nombre del mtodo en el campo Name. El editor de mtodos aparecer
automticamente.
4. Si el mtodo requiere algn argumento, escribirlo en la ventana Arguments.
5. Escribe el cuerpo del procedimiento en la ventana Body.
6. Selecciona el comando Check Syntax desde la opcin Update del men (o presiona F2) para
comprobar si la sintxis del mtodo es correcta.
Por ejemplo, si tuviramos un slot compra en la clase Vehiculos que indicara el ao de compra y un
slot edad que indicara la edad del vehiculo (ambos slots deben ser de tipo Number), podramos
definir el siguiente mtodo para calcular la edad de cada vehiculo a partir de su ao de compra:
De esta forma, si Coche1:compra es 2001, la siguiente llamada al mensaje calculara pondra el valor
al slot Coche1:edad=9.
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 9
expresion2;
expresionN};
El slot 'TempList' tiene que ser creado, como TEXT multivaluado, previamente por el usuario
en la clase Global.
Cuando la instancia 'Coche1' recibe el mensaje INIT SendMessage (Coche1, INIT); todos
los valores de sus slots vuelve a su estado original (valores iniciales que se han dado en la
definicin de la clase). La funcin GetSlotList obtiene y guarda todos los nombres de slots del
objeto instanciado en la variable Self, en el slot multivaluado (TempList) de la instancia
general Global.
Activar otras funcionalidades de KAPPA-PC: lanzamiento de interfaces, lanzar proceso
de razonamiento, etc..
2.7.2.- Monitores.
Los monitores pueden ser:
If Needed: El mtodo se ejecuta automticamente cuando se solicita el valor del slot y no existe valor
para dicho slot. El mtodo toma como argumento el nombre del slot.
When Accessed: El mtodo se ejecuta cuando se accede al slot. La diferencia de este mtodo con el
anterior es que When Accessed se dispara incluso si el valor del slot es conocido.
Estos dos monitores no pueden lanzar un razonamiento backward,
ya que se creara un bucle infinito
Before Change: El mtodo se ejecuta automticamente justo antes de que se asigne un nuevo valor
al slot y toma como argumentos el nombre del slot y el nuevo valor que se le quiere asignar. Un
mtodo Before Change puede utilizarse para darle al usuario la opcin de cancelar el valor que
pretende asignarle al slot si entra en conflicto con su clase de valores..
After Change: El mtodo se ejecuta automticamente justo despus de asignarle un nuevo valor al
slot y toma como argumentos el nombre del slot y el antiguo valor del mismo. Un mtodo After
Change se podra utilizar para forzar el clculo de otro slot.
En los mtodos y monitores se pueden utilizar los argumentos indicados en cada caso:
Self: Hace referencia al objeto (instancia) que recibe el mensaje. De esta forma, podemos acceder
al valor de otros slots del objeto (Self:slot)
El valor final que quedar en el slot es lo que devuelve el monitor, por ello, se debe
poner habitualmente: newvalue
newvalue;
};
Salvamos el mtodo. Aparecer en la lista de mtodos de la clase.
Ahora ya tenemos un mtodo definido para la clase "Personas". Para convertir dicho mtodo en
un monitor asociado a un slot, se debe hacer:
- Abrimos el slot edad
- Especificamos el mtodo como monitor Before Change del slot edad
- Grabamos y cerramos
Ahora:
o si introducimos la expresin KAL Pepe:edad=10; obtendremos una ventana de aviso y el valor no
se actualizar.
o si introducimos la expresin Pepe:edad=30; el valor del slot se actualizar con dicho valor.
NOTA: Los mtodos solo pueden tener una expresin KAL la cual debe ser finalizada por ;
Para poder poner ms de una expresin, debe ir enmarcada entre llaves:
{expresion1;
expresion2;
..
expresinN };
Esto tambin sirve para las funciones que se definan y en expresiones de la parte
derecha de las reglas.
o Debe tenerse en cuenta que un monitor actuar solo de forma programada (KAL o interfaz usuario).
NOTA: Los mtodos y monitores slo se activan cuando las modificaciones se hacen en
modo programado (leguaje KAL) o durante la ejecucin de reglas.
No funcionan si se modifican los valores en modo interactivo (browser).
NOTA: KAL es case-sensitive, es decir hay que tener cuidado con las maysculas y minsculas a
la hora de escribir los nombres de las funciones, slots, clases y valores.
Acceso a valores
=> 5 ^2;
25
=> coche#4;
devolvera coche4
(suponiendo que los nombres de los propietarios de coche1 y coche2 sean distintos)
Para condicin sobre desigualdad de texto hay que utilizar not()
Ejemplo:
devuelve: TRUE
"Not" no es realmente un operador lgico sino una funcin. Por tanto su argumento debe ir
encerrado entre parntesis.
Ejemplo:
Expresiones especiales:
For:
For counter [start end interval] expression;
Ejemplos:
Crea 19 instancias Obj10, Obj15, Obj20 Obj100 que dependen de la clase Root. Crea para cada
instancia el slot Size y le da el valor del contador.
ForAll:
ForAll [x|className1 y|className2] expression;
Ejemplo:
ForAll [x|Personas]
PostMessage (" El nombre de la persona es " #x:Nombre);
While:
While (testExpression) expression;
Let:
Let [x xExpression] [y yExpression] expression;
If:
If (testExpression)
Then thenExpression
Else elseExpression;
Null? (objeto:slot);
Para establecer la condicin sobre si un slot no tiene valor ( es Null), debe usarse:
Null? (objeto:slot);
PostInputForm:
PostInputForm ( Texto inicial
3.2.- Funciones.
Todo lo que se puede hacer desde el men de KAPPA-PC, como aadir un objeto o activar un mtodo se
puede hacer de forma rpida y eficiente con las funciones de KAPPA.
KAPPA proporciona unas 300 funciones predefenidas de las cuales existe un manual on-line en la opcin
"Help" que aparece en la "Main KAPPA Window". Se pueden usar estas funciones para definir expresiones,
otras funciones o combinar funciones standard.
Definicin de Funciones
Las Funciones definidas son siempre globales. Pueden definirse en:
a) En Edit Tools: 'Edicion de Funciones'
Se indica el nombre, los argumentos y el cuerpo de la funcion
b) Mediante la ventana del interprete KAL:
MakeFunction (Nombre-Funcion, [arg1 arg2 ... argn], Accion);
O bien:
MakeFunction (Nombre-Funcion, [arg1 arg2 ... argn], {Ac1; Ac2; ...Acn});
Las funciones definidas se pueden llamar (son accesibles globalmente):
del
Y particularmente, incluir valores para los slots de las instancias creadas. Por ejemplo:
"Juan es el dueo del coche3", "Pepe es el dueo del coche1 y coche 2",
"Mara es la duea de las motos moto-1 y moto-2", etc.
IMPORTANTE
Al finalizar el punto c y d, eliminad la asociacin de los monitores introducidos
Value Type
Allowable Values
Coche-1
TEXT
TEXT
TEXT
OBJECT
NUMBER
NUMBER
TEXT
TEXT
TEXT
NUMBER
TEXT
NUMBER
Coche-2
Coche3
Personas
ok, nook
ok
cargada
cargada
Min Value: 2
Max Value: 5
CLASE Personas
Slot
nombre
apellidos
direccion
edad
vehiculo
Value Type
TEXT
TEXT
TEXT
Number
OBJECT
Allowable Values
Min-Val:0 Ma-Val=100
VEHICULOS
Editor de reglas.
Para crear una regla, abrir el Editor de Reglas, seleccionar New y dar nombre a la nueva regla que se
va a crear. A continuacin aparecer una pantalla como la de la Figura:
REGLA1
Priority: La prioridad de una regla tambin es opcional, por defecto 0. [-32.000 32.000]
If Then: Las reglas se escriben en lenguaje KAL y deben seguir la sintaxis correcta.
Las expresiones (predicados) de la premisa de las reglas puede separarse por And (y Or, aunque
no es recomendable). Los hechos que aparecen en la parte izquierda (LHS) como en la parte
derecha (RHS) de una regla se refieren a valores de slots de objetos.
La parte If y la parte Then siempre acaba con ;
Se pueden poner varias conclusiones en la parte Then, agrupndolas mediante {}:
{ expresion1;
expresion2;
-------expresionN};
Despus de escribir la regla, es conveniente pulsar F2 o Check Syntax (men Update). No se debe cerrar
el Editor de Reglas a no ser que la regla sea totalmente correcta. Una vez editada la regla, seleccionar
Close desde el men Update para salvar la regla y cerrar el editor.
Nota: La premisa de una regla (IF) debe evaluarse True/False. No puede evaluarse a NULL, o
tener algn valor desconocido.
Las reglas tambin se pueden crear alternativamente desde el intrprete KAL:
=> MakeRule (Regla1, [Coche|Coches] ,
Coche: bateria #= cargada And
Coche:bujias #= ok,
Coche:estado = bien);
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 20
REGLA2
=> MakeRule (Regla2, [coche|Coches],
coche:estado #= Bien,
PostMessage ("El Sistema Electrico esta Bien del Coche: " #coche));
REGLA3
=> MakeRule (Regla3, [Coche |Coches],
Coche:estado #= bien,
Coche:propietario = Juan);
Indica que el proceso de razonamiento debe comenzar de inmediato con los datos
actualmente existentes en la base de conocimientos (si no se pusiera, se efectuara un
razonamiento de tipo event-driven, que se lanzara a partir de un nuevo dato Assert
(<object-name>,<slot-name>) que desencadenara el razonamiento hacia delante).
Los siguientes argumentos son las reglas o conjunto de reglas que estn involucradas en el
encadenamiento hacia delante. Hay que indicar explcitamente una clase de reglas o bien una
lista de reglas: Regla1, Regla2, .
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 21
Clases de Reglas
En KAPPA-PC hay que especificar explcitamente la Lista de Reglas, o Clase de Reglas a utilizar en
cada proceso de encadenamiento. En general, se pueden utilizar todas las reglas, pero se puede dirigir
ms eficientemente el proceso de razonamiento lanzando un proceso inferencial con subconjuntos de
reglas. Esto se puede hacer de dos formas:
a) El subconjunto de reglas se puede establecer cuando se lanza el proceso:
ForwardChain (NULL, Rule1, Rule4, etc.);
b) Se pueden definir Clases de Reglas (en la instancia Global): Para crear un conjunto de
reglas:
1.- Abrir la instancia Global (de Root) y crear un slor multivaluado.
2.- Poner los nombres de las reglas que se desean agrupar como valores de dicho slot.
Una regla puede estar en ms de un conjunto de reglas. Posteriormente se pueden invocar los
distintos grupos de reglas en un encadenamiento hacia delante o hacia atrs.
Por ejemplo, si el slot de la instancia Global donde se han agrupado un conjunto de reglas se
llama ReglasCoche, se podra invocar este grupo de reglas de la siguiente forma:
ForwardChain (NULL, Global:ReglasCoche);
Tarea a Realizar: Lanzar procesos de razonamiento hacia delante con las reglas
anteriores y comprobar su resultado:
ForwardChain ([NOASSERT], NULL, Regla1, Regla2, Regla3)
Despus, volver a la base de hechos inicial (puede usarse una funcin especfica).
Limpia Auxiliar:Instancias
Limpia Auxiliar:Instancias
(preferentemente), o
<objeto:spot#=valor>
Objetivos (Goal)
Los objetivos, al igual que las reglas, se escriben en lenguaje KAL. Los objetivos se escriben en el
Editor de Objetivos (ventana EditTools/Goal). Despus de escribir el objetivo, seleecionar Save y
luego Close desde el men Update.
Los objetivos se pueden utilizar tanto en el encadenamiento hacia delante como hacia atrs. Son
obligatorios para desencadenar un razonamiento hacia atrs pero tambin se pueden emplear para
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 23
detener un proceso de razonamiento hacia delante en un punto especfico. Cuando el test se satisface,
el encadenamiento hacia delante se detiene.
Para obtener una meta (o premisa/subobjetivo), se aplican los siguientes pasos:
1. el dato ya es conocido en el problema (est en la base de hechos)
2. el dato puede deducirse a partir de una regla. Se permiten preguntas al usuario, si se
requiere el valor (no conocido) de un slot.
3. se pregunta al usuario por el valor del dato si:
En caso de que el dato no pueda deducirse por ninguno de los pasos anteriores, el sistema concluye
que el objetivo no se puede demostrar.
Tambin podramos haber hecho una pregunta ms concreta, por ejemplo: Coche2:propietario #=
Juan
Al lanzar un razonamiento hacia atrs con el objetivo de la figura:
BackwardChain (meta1, Regla1, Regla2, Regla3);
La nica regla cuya parte derecha se instancia con el objetivo es la Regla3, tal que la variable de la
conclusin se unifica con el patrn 'Coche2'. El motor de inferencia trata de establecer el valor de
verdad de las premisas:
Coche2:estado #= bien,
El valor del slot no es conocido, pero puede obtenerse a partir de la Regla.1. La variable local de la
regla se instancia tambin con Coche2. De esta forma, se intenta establecer su premisa:
Coche2: bateria #= cargada And
Coche2:bujias #= ok,
Dados los hechos iniciales, el valor de Coche2: bateria es cargada, pero no hay valor para el slot
bujias. De esta forma preguntar al usuario. Dependiendo del valor que se responda, podr o no
asertar la meta.
Coche3:propietario #= Juan
Coche1:propietario #= Juan
Con cada una de las reglas se pueden hacer una serie de operaciones:
o
List Slots: Lista los slots que tienen en comn la regla seleccionada y la regla dependiente
(en la parte Then).
A continuacin se pondr en marcha el motor de inferencia, y tras comprobar que todas las premisas
de la regla se cumplen, pondr el valor del slot estado del 'Coche1' a bien.
Start: esta opcin permite llamar a una funcin definida por el usuario que se llame Start. Esta
funcin podra emplearse, por ejemplo, para iniciar el proceso de razonamiento.
Assert : esta opcin llama a la funcin Assert del lenguaje KAL. Se puede por tanto insertar
un dato <objeto:slot > directamente desde la ventana de trazas en lugar de tener que ir al
intrprete KAL.
ResetForwardChain: Esta opcin vaca la Agenda y la Rule List. Es equivalente a una llamada
a la funcin KAL ResetForwardChain.
Call Function: Esta opcin permite llamar a cualquier funcin KAL definida por el usuario.
Men Options:
Active Trace: Esta opcin permite ver la Agenda y la Rule List durante el encadenamiento
hacia delante. Cualquier par <objeto:slot> que se inserte se listar en la ventana de la Agenda.
Cuando se inicia el encadenamiento hacia delante, los pares <objeto:slot> se van aadiendo y
borrando de la Agenda al igual que las reglas de la Rule List. Si se quieren ver con detalle los
distintos pasos que se van siguiendo, selecciona Step Mode.
Step Mode: Este item slo se puede seleccionar si previamente se ha activado Active Trace.
Step Mode funciona automticamente con ForwardChain.
IMPORTANTE: Para que se active el Step Mode, hay que hacer un Assert especfico, o se debe
seleccionar [NOASSERT] en el ForwardChain.
Despus de especificar los argumentos de ForwardChain, el botn Step mostrar una flecha
para indicar cual ser el siguiente paso a ejecutar. Los contenidos de la Agenda y la Rule List
se van mostrando en las respectivas ventanas.
Inference Browser
Es de utilidad fundamentalmente en el encadenamiento backward. La ventana Inference Browser
permite ver de forma grfica las reglas que el motor de inferencia va invocando, pudiendo comprobar
como el sistema infiere las conclusiones y examinando las lneas de razonamiento.
Por ejemplo, lanzando esta ventana con la Base de Hechos inicial y el encadenamiento hacia atrs:
BackwardChain (meta1, Regla1, Regla2, Regla3);
Podemos ver que se activa la Regla3, la Regla1 y nos pregunta por el valor de Coche2:bujias:
En color verde nos muestra los datos satisfechos, mientras que en color rojo nos mostrara las
premisas que no se han satisfecho.
La Lista de Reglas
La Lista de Reglas (RuleList en la Ventana RuleTrace) muestra las reglas relevantes (tienen una
premisa que unifica con un item de la Agenda <objeto:slot>), y en espera de ser testeadas en un
proceso inferencial forward.
Importante: La Rule List no contiene el conjunto de reglas que son aplicables, es decir
aquellas reglas cuyas LHS se satisface, sino aquel subconjunto de reglas que son
SUSCEPTIBLES de cumplirse (reglas RELEVANTES).
El lugar donde se inserta cada regla en la Rule List depende de la estrategia determinada por el
encadenamiento hacia delante y la Agenda. Por defecto, el proceso de razonamiento hacia delante
contina hasta que no hay ms items en la agenda o en la lista de reglas.
2) Aplicacin Backward:
A partir de una BH con al menos una nueva instancia de motos (sin ningn valor en sus slots!), intentar
obtener la edad de la moto-instancia concreta.
Al preguntar valores durante el encadenamiento, probar al menos con: modelo=sport y
matricula=10000 y comprobar el resultado obtenido.
Comprobar la utilidad de las ventanas RuleTrace e inference Browser
3) Aplicacin Forward
A partir de una BH, en la que existan los nuevos hechos (creando las instancias Coche4 y Luis):
Coche4:puertas=4;
Coche4:propietario=Luis;
Lanzar un razonamiento hacia delante y comprobar los resultados inferidos. Comprobad que en control
no sea SELECTIVE!
De acuerdo a las reglas del sistema, debe obtenerse al menos:
Coche4:color=blanco, Coche4:modelo=turismo, Luis:edad=30,
Comprobar la utilidad de las ventanas RuleTrace e inference Browser
Layout Mode: En este modo se crean las imgenes y se conectan a la aplicacin. Pueden crearse,
revisarse, moverse, y redimensionarse las imgenes en este modo. A la izquierda de la ventana
aparecen un conjunto predefinido de imagenes
Modo Runtime: En el Modo Runtime se usan las imgenes que ya se han creado. Es el modo por
defecto y de uso de la interfaz grfica de KAPPA-PC.
Pueden crearse Sesiones Mltiples (mximo 64) y cada una se edita separadamente. La sesion principal
es 'SESSION' y las dems van numeradas 'SessionN'. Cada ventana de Sesin son objetos (instancias) en
KAPPA-PC y estn en la jerarqua de objetos: Cada ventana de cada 'Session' es una instancia de la
subclase KSession de la clase Kwindow. Para verlas en Object Brower: seleccionar objeto, Edit/Show
Subclasses, o Edit/Show Instances.
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 31
New: Permite crear nuevas ventanas de la Sesin. Cada nueva ventana de la Sesin se numera
automticamente. Se debe estar en el Modo del Esquema para usar esta opcin.
Delete: Permite anular la ventana de la Sesin actualmente activa (y todos los objetos que la
ventana contiene). Se debe estar en el Modo del Esquema usar esta opcin.
Attribute. Permite caracterizar la sesin o las imgenes contenidas en esa sesin (se debe estar
en el Modo del Esquema). Tambin se activa pulsando doble en la ventana de la Sesin o en una
imagen y permite:
Asignar una Funcin de Accin a la imagen (por ejemplo, si es un boton). Debe haberse
definido previamente una funcin global (EditTools: Function) que se puede asociar a la
imagen y se activar cuando se hace un clic del ratn izquierdo. Asignacin de la funcin:
Indicar su nombre en la ventana 'Action' que aparece. Tambien se puede asignar una tecla
de funcion, que hace lo mismo que click izquierdo.
Meter (pasiva): permite supervisar el valor numrico de un slot de tipo Number monovaluado,
mientras una aplicacin est corriendo. Se asocia el slot que debe presentar el valor, as
como se pueden indicar los lmites mximo y mnimo. Cada vez el valor del slot cambia, la
aguja se mueve al valor apropiado.
Slider (activa): Permite monitorizar y cambiar valores de slots numericos monovaluados,
indicando adems el mximo y mnimo valor. En los atributos de la imagen se establece el slot
asociado. Por defecto presenta valores reales. Si se desean valores enteros se debe ajustar el
parmetro interval de la imagen.
SingleListBox (activa): Pone el valor a un slot monovaluado
MultipleListBox (activa): Pone los valores a un slot multivaluado, marcando los valores.
Estas ventanas se sitan en mitad de la pantalla y requieren la inmediata atencin del usuario.
PostMessage: Presenta un mensaje simple al usuario
Esta funcin devuelve TRUE. Formato: PostMessage (string);
Ejemplos:
PostMessage ("Hola, como estas ?");
PostMessage ("El precio de la mesa es " # mesa:precio);
SetPostMessageTitle: Cambia el ttulo a una ventana de PostMessage
Formato: SetPostMessageTitle (string);
Sirve para modificar el ttulo de una ventana PostMessage, que por defecto es KAPPA. Para
cambiarlo hay que usar SetPostMessageTitle. Este ttulo aparecer en todos los mensajes
PostMessage siguientes hasta que se modifique o se reinicie KAPPA-PC.
Ejemplo:
SetPostMessageTitle (Resultados del proceso );
PostMessage ( .. );
AskValue: AskValue (object:slot) AskValue (object, slot);
Esta funcin se utiliza para solicitar informacin. AskValue utiliza el texto definido en el prompt del
slot. El texto por defecto es:
Please, enter the value of object:slot
Para cambiar este mensaje, hay que modificar la lnea de prompt del slot en el editor de slots.
Si se ha especificado un conjunto de valores permitidos (Allowable Values- Min Max), la funcin
AskValue ofrece esta lista de valores permitidos como opciones en la ventana de solicitud.
PostMenu: Es una funcion de interrogacion al usuario que da opciones de respuesta definida.
Permite presentar una lista de opciones por pantalla. Devuelve el valor seleccionado.
Formato: PostMenu (title, opcion1, , opcionN);
title es el texto que aparecer en la ventana del men.
option1, , optionN pueden ser valores explcitamente declarados o el valor de una variable
multicampo.
Slo se puede seleccionar una opcin y es el valor que devuelve la funcin PostMenu.
Se puede cambiar la posicin donde aparece el men, dndole las coordenadas sobre la pantalla.
SetPostMenuPosition (integer, integer);
PostMultipleSelection
Es igual que PostMenu pero permite seleccionar una lista de opciones de valores de slot.
Las opciones seleccionadas se almacenan como el valor de un slot multivaluado.
Formato:
PostMultipleSelection (title, object:slot, option1,..., optionN)
object:slot es un slot multivaluado donde se guardarn las opciones seleccionadas
Tcnicas de Inteligencia Artificial. Prctica 1: Diseo, implementacin y evaluacin de un SBC - 34
Entrega-3: Interfaz
Realizar una interfaz que incluya:
1. Una imagen activa para los slots numpuertas, modelo, matricula, propietario y color del
Coche4
2. Una imagen pasiva para el slot edad de Luis y para el slot edad de Moto1
3. Un botn para hacer una inicializacin de la Base de Hechos (solo valores heredados). Utilizar la
funcin previamente descrita en este documento: Inicializacion de una base de hechos tras un
razonamiento).
4. Un botn para lanzar un encadenamiento hacia delante (por ejemplo el descrito en la Tarea 2.3).
5. Un botn para lanzar un encadenamiento hacia atrs, (por ejemplo el descrito en la Tarea 2.2)
Tras disear esta interfaz, comprobar su funcionamiento para inicializar y dar valores a la BH y
lanzar los dos tipos de razonamiento.
Apretar el botn para lanzar un encadenamiento hacia atrs (y calcular la edad de la Moto1).