Ao de la promocin de la industria Responsable y del Compromiso Climtico
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS 12/06/2014 En el siguiente documento aprenderemos las tcnicas o mtodos de pruebas SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 1
Ingeniero: Rolando, Cha vez Guille n INTEGRANTES: ACEVEDO TORNERO, ALDAIR AGUILAR RAMIREZ, HECTOR TASAYCO MUNAYCO, LUIS
Ciclo Acadmico: IX Correo Corporativo FIS 20093132@sistemasunica.edu.pe Ciclo Acadmico: IX Correo Corporativo FIS 20094168@sistemasunica.edu.pe Ciclo Acadmico: IX Correo Corporativo FIS 20094168@sistemasunica.edu.pe
YARMAS MOSQUERA, ANGEL
Ciclo Acadmico: IX Correo Corporativo FIS 20081976@sistemasunica.edu.pe
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 2
DEDICATORIA ESTE TRABAJO VA DEDICADO A NUESTROS COMPAN EROS ESPERANDO QUE SEA DE AYUDA PARA INCREMENTAR SUS CONOCIMIENTOS EN EL A REA DE SISTEMAS EXPERTOS.
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 3
INDICE Introduccio n6 Ana lisis del Problema.7 1. Identificacio n del problema7 2. Mejor Solucio n.8 3. Fuentes de Informacio n.8 4. Descripcio n del problema.9 4.1 Mo dulo de preguntas iniciales...9 4.2 Mo dulo de preguntas comunes.10 4.3 Desvo a modulo correspondiente.11 4.3.1 PORTATILES..11 4.3.2 DOMESTICOS15 5. Conceptualizacio n..18 5.1 Conceptos que aparecen.18 5.2 Fases...18 5.3 Preguntas.18 5.4 Esquema de Preguntas.19 5.4.1 PC PARA USO PARTICULAR..20 5.4.2 PC PARA USO DOMESTICO..20 5.4.3 PC PARA NEGOCIO...20 5.4.4 PC PARA USO PROPIO (PROFESIONAL)..20 6. Tipo y Espacio de Bu squeda...21 7. Problemas con CLIPS......22 8. Programacio n CLIPS22 8.1 Comandos Ba sicos en CLIPS...22 8.2 Introduccio n de Hechos y Reglas.22 8.2.1 Hecho.22 8.2.2 Regla23 8.2.3 Hechos Ordenados..23 8.2.4 Operaciones con hechos..23 SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 4
8.2.5 Variables24 8.2.6 Entrada y Salida24 9. Operadores CLIPS26 9.1 Comandos Utilizados en el problema..26 9.1.1 Operador defclass.26 9.1.2 Operador definstance.28 9.1.3 Defmessage-handler28 9.1.4 Constructor deffunction29 9.1.5 Constructor desmodule..30 9.1.6 Definicio n de plantillas31 9.1.7 Constructor defrule32 9.1.8 Constructor de hechos deffact.33 10. A rbol de Decisiones34 11. Codigo del Problema..35 12. CONCLUSIONES..105 13. BIBLIOGRAFIA106
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 5
INDICE DE IMGENES 1. Figura1. Compras de PC.7 2. Figura2. Fuentes de Informacin.8
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 6
Introduccin Se considera a alguien un experto en un problema cuando este individuo tiene conocimiento especializado sobre dicho problema. En el rea de los (SE) a este tipo de conocimiento se le llama conocimiento sobre el dominio. La palabra dominio se usa para enfatizar que el conocimiento pertenece a un problema especfico. Antes de la aparicin del ordenador, el hombre ya se preguntaba si se le arrebatara el privilegio de razonar y pensar. En la actualidad existe un campo dentro de la inteligencia artificial al que se le atribuye esa facultad: el de los sistemas expertos (SE). Estos sistemas tambin son conocidos como Sistemas Basados en Conocimiento, los cuales permiten la creacin de mquinas que razonan como el hombre, restringindose a un espacio de conocimientos limitado. En teora pueden razonar siguiendo los pasos que seguira un experto humano (mdico, analista, empresario, etc.) para resolver un problema concreto. Este tipo de modelos de conocimiento por ordenador ofrece un extenso campo de posibilidades en resolucin de problemas y en aprendizaje. Su uso se extender ampliamente en el futuro, debido a su importante impacto sobre los negocios y la industria.
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 7
Anlisis del Problema
1. IDENTIFICACION En esta parte analizaremos el problema; el problema consiste en la recomendacin de la compra de una pc, es decir cuando nosotros vamos a comprar una pc, ya sea para un negocio o para uso domstico, el programa nos hace recomendaciones (Preguntas) como si desea la pc para uso domstico o para un negocio, si tenemos espacio suficiente para la pc, si el precio es importante, etc. Por ultimo sale como resultado la recomendacin que el software nos dice que PC podemos adquirir de acuerdo a las preguntas que nos hizo. Esta parte es importante para saber en qu consiste el problema, y pensar si es apropiado en resolverlo con CLIPS, y encontrar fuentes de conocimiento que ayuden a resolverlo.
Figura 1. Compras de una PC
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 8
2. MEJOR SOLUCION Al principio se hizo un poco complicado buscar la solucin al problema, pero al final con informacin en internet y experiencias personales al comprar una pc, pudimos resolver el problema.
3. FUENTES DE INFORMACION Como el tema no es sencillo, ya que necesitamos muchas lneas de cdigo para resolver el problema, los expertos hemos sido nosotros mismos, ya que hemos llevado los cursos de ensamblaje de computadoras, conocemos del tema. Para la parte tcnica, hemos consultado programas parecidos, como es el caso de Sistema experto de turismo por Barcelona. ste es parecido a nuestro tema, ya que hace muchas preguntas para extraer informacin del ususario, y entonces llenar huecos del objeto solucin con instancias que cumplan las condiciones que ha dicho el usuario.
Figura 2. Fuentes de Informacin
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 9
4. DESCRIPCION DEL PROBLEMA 4.1 Modulo Preguntas iniciales Hace un conjunto de preguntas que pretenden clasificar al usuario en cuatro categoras posibles (domestico, autnomo, pyme y empresarial) Preguntar datos sobre el usuario: Tipo de uso del PC
Comprobamos si es un usuario domestico Desea el PC para su uso particular Desea el PC pasa su casa/familia
Si es domestico nos interesa si necesita movilidad Si es domstico en las prestaciones del equipo no han de ser muy altas Tiene poco espacio para colocar su PC? Desea poder mover su PC de ubicacin? Determinamos si es una Pyme Lo desea para su pequeo negocio?
Determinamos si es un autnomo o un profesional liberal Es un profesional liberal/autnomo?
Si es una pyme no interesa saber la potencia que necesitan Necesita su PC solo para tareas de oficina/contabilidad? Desea adems usar programas especficos para la actividad de su empresa (diseo grfico, clculo de estructuras, ...)?
Determinamos si es un PC para una empresa grande Es el gestor de compras de una empresa grande?
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 10
Si es una empresa queremos saber para que se usara el PC y con ello determinamos su potencia Desea un PC para las oficinas? Lo desea para un empleado que necesita desplazarse? Lo desea para tareas con altas necesidades (desarrollo de soft, diseo grafico, ...)? Lo necesita para dar servicios (conectividad, bases de datos, servidor de aplicaciones, servidor de ficheros, ...)?
Si es un autnomo queremos saber si necesita movilidad y para que quiere usar el PC Su trabajo le obliga a desplazarse? Lo desea para labores de edicin y contabilidad? Lo necesita para desarrollar su trabajo?
Saltamos al mdulo de preguntas comunes
4.2 Mdulo de preguntas comunes Aqu se obtiene informacin comn a todas las recomendaciones Evidentemente las preguntas que hay aqu son bastante simples necesitaremos aadir ms cosas si queremos dar consejos mejores.
Sin identificar Si no hemos identificado al usuario no podemos hacer mucho Lo sentimos, pero la aplicacin no puede aconsejarle
Determinamos si quiere software libre o no Es usted fan del software libre?
Determinamos si el dinero es un impedimento Es el precio importante? SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 11
4.3 Desvo a modulo correspondiente En funcin de las preguntas que hagamos y de los tipos de recomendaciones que hagamos deberamos aadir ms reglas a. Domsticos b. Porttiles c. Workstation d. Servidores
4.3.1 PORTATILES Mdulo de recomendacin de porttiles Estas preguntas son especficas para determinar las caractersticas del porttil a recomendar. Preguntas para determinar compra de porttiles Si el equipo es para uso domstico y va a estar siempre enchufado no importa la duracin de la batera "El equipo va estar casi siempre enchufado?
Determinamos si quiere DVD Desea reproducir pelculas de DVD?
Determinamos si quiere grabadora Desea hacer copias de seguridad en CD/DVD?
Determinamos si le gustara tener un ratn externo Le es ms cmodo usar un ratn externo?
Si el dinero es un problema decidimos poner componentes ms asequibles
Si no son domsticos y no hay problema de dinero ponemos un DVD y una tarjeta grfica mejor SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 12
Determinamos si le hace falta una aplicacin ofimtica Necesita una aplicacin ofimtica?
Los usuarios no domsticos necesitan una buena batera
Los usuarios domsticos y autnomos con poco dinero solo se podrn conectar con modem Desea poder conectarse a internet?
Los usuarios domsticos y autnomos con ms dinero pueden querer ADSL Desea poder conectarse a internet a alta velocidad? Desea poder conectar otros equipos? Los usuarios empresariales pueden querer conectarse a una red Desea poder conectar su equipo a una red? Utilizar tecnologa inalmbrica?
Determinamos las necesidades de almacenamiento de los usuarios no domsticos Desea tener gran capacidad de almacenamiento? Desea tener almacenamiento porttil extra?
Los usuarios domsticos o con pocas necesidades no necesitan mucha capacidad de almacenamiento
Determinamos s importa el peso a los usuarios no domsticos Le gustara que el porttil tuviera poco peso?
Cuando hemos acabado pasamos a configurar el equipo
Configuracin final del porttil con la informacin recolectada SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 13
Creamos la instancia sobre la que trabajaremos
Memoria Si el precio no importa entonces ms memoria
CPU Si el precio no importa entonces Intel Si las prestaciones han de ser altas ms frecuencia de reloj
Batera Configuramos la batera Seleccionamos todas las bateras Si no nos importa el dinero cogemos la que dure ms Si nos importa el dinero cogemos una que dure entre 3 y 10 horas Si no nos importa la batera cogemos la que dure menos
Placa Base Cogemos cualquier placa base para porttiles Evidemente podramos haber usado el precio o las prestaciones para decidir
Software Eleccin del software ofimtico Si se es fan del soft. Libre o se tiene poco dinero entonces OpenOffice
Eleccin del sistema operativo Si se es fan del soft libre o se tiene poco dinero entonces Linux
Dispositivos de salida SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 14
Eleccin del monitor Si se quiere poco peso o importa el precio 14p, si no 15p
Tarjeta de Video Si las necesidades son bajas o hay poco dinero 32Mb, si no 64Mb
Dispositivos de almacenamiento Almacenamiento para porttiles Si las necesidades son grandes 80Gb, si no 40Gb Si importa el precio entonces el disco ms barato Discos USB extra Si importa el precio entonces el ms barato
Elegimos un DVD o un CDROM La regla elige cualquiera, pero se pueden imponer ms condiciones
Dispositivos de entrada Si se prefiere un ratn externo le ponemos un ratn para porttil
Comunicaciones Tarjeta de red PCMCIA, Ethernet o WiFi ADSL router o modem Modem PCMCIA
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 15
4.3.2 DOMESTICOS Modulo de recomendacion de ordenadores domsticos Estas preguntas son especficas para determinar las caractersticas del ordenador domstico a recomendar
Preguntas para determinar compra de ordenadores domsticos
Determinamos si quiere DVD Desea reproducir pelculas de DVD? Desea jugar a juegos de ltima generacin?
Determinamos si quiere grabadora Desea hacer copias de seguridad en CD/DVD?
Si el dinero es un problema decidimos poner componentes ms asequibles
Los usuarios domsticos y autnomos con poco dinero solo se podrn conectar con modem Desea poder conectarse a internet?
Los usuarios domsticos y autnomos con ms dinero pueden querer ADSL Desea poder conectarse a internet a alta velocidad? Desea poder conectar otros equipos?
Los usuarios pyme necesitan ADSL Desea poder conectarse a internet a alta velocidad? Desea poder conectar otros equipos?
Determinamos si le hace falta una aplicacin ofimtica Necesita una aplicacin ofimtica?
Determinamos si le hace falta una aplicacin de contabilidad si es un usuario no domestico Necesita una aplicacin de contabilidad?
Los usuarios domsticos o con pocas necesidades no necesitan mucha capacidad de almacenamiento
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 16
Determinamos las necesidades de almacenamiento de los usuarios no domsticos Desea tener gran capacidad de almacenamiento? Desea tener almacenamiento porttil extra?
Cuando hemos acabado pasamos a configurar el equipo
Configuracin final del ordenador domestico con la informacin recolectada Configuracin del ordenador domestico
Creamos la instancia sobre la que trabajaremos
Memoria Si el precio no importa entonces ms memoria CPU Si el precio no importa entonces intel Si las prestaciones han de ser altas ms frecuencia de reloj
Placa Base Cogemos cualquier placa base para porttiles Evidemente podramos haber usado el precio o las prestaciones para decidir
Software Eleccin del software ofimtico Si se es fan del soft libre o se tiene poco dinero entonces OpenOffice
Eleccin del sistema operativo Las pymes pueden usar Linux Si se es fan del soft libre o se tiene poco dinero entonces Linux Los usuarios domsticos solo usan Windows
Dispositivos de salida Eleccin del monitor Si importa el precio 15p, si no 17p
Tarjeta de Video Si las necesidades son bajas o hay poco dinero 32Mb, si no 64Mb SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 17
Dispositivos de almacenamiento
Almacenamiento para domsticos Si las necesidades son grandes 200Gb, si no 80Gb, si importa el precio entonces el disco ms barato
Elegimos un DVD o un CDROM La regla elige cualquiera, pero se pueden imponer ms condiciones
Comunicaciones Tarjeta de red PCMCIA, Ethernet o WiFi
ADSL router o modem Crea el template consejo con la solucin
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 18
5. CONCEPTUALIZACIN Hay que descubrir qu elementos tiene el problema, y qu relacin hay entre ellos. Tambin saber cmo lo hace un experto de verdad para solucionar el problema: qu conocimientos necesita, que hiptesis maneja, qu reglas considera como sentido comn, etc.
5.1 Conceptos que aparecen Leyendo el enunciado, una actividad puede tener: Descripcin: nombre, tipo. Uso Ubicacin Software Libre Precio Duracin
Las actividades pueden ser: De comprar El resto
El usuario tiene: Presupuesto Si quiere la PC para uso personal o para negocio Gustos sobre software Libre
5.2 FASES El problema consiste en 3 fases: Preguntas al usuario sobre aspectos personales acerca del uso de la PC Eleccin de Instancias (actividades) ms adecuadas Mostrar la planificacin final
5.3 PREGUNTAS Para saber qu clase de PC necesita el usuario: Preguntar para qu quiere su PC Desea el PC para su uso particular? Pregunta muy importante, ya que de ac se derivan las preguntas siguientes.
Preguntar para qu quiere su PC Desea el PC pasa su casa/familia? Esta pregunta muy importante por si la anterior responde que no. SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 19
Preguntar para qu quiere su PC Lo desea para su pequeo negocio? Esta pregunta muy importante por si la anterior responde que no.
Nos decidimos por estas preguntas, ya que con pocas preguntas nos permite sacar mucha informacin.
Hemos usado el sistema de las preguntas a falta de poder hacer cosas ms complejas, como mens grficos. Para el usuario sera ms fcil marcar en una lista las actividades que le gustan y las que no (como una encuesta), y saltarse lo que vea poco interesante.
5.4 Esquema de Preguntas
5.4.1 PC PARA USO PARTICULAR
Desea el PC para su uso particular? (s/n) si Tiene poco espacio para colocar su PC? (s/n) si Desea poder mover su PC de ubicacin? (s/n) si Es el precio importante? (s/n) si Es usted fan del software libre? (s/n) no Desea poder conectarse a internet? (s/n) si El equipo va estar casi siempre enchufado? (s/n) si Desea hacer copias de seguridad en CD/DVD? (s/n) si Le es ms cmodo usar un ratn externo? (s/n) si Necesita una aplicacin ofimtica? (s/n) si
5.4.2 PC PARA USO DOMESTICO
Desea el PC para su uso particular? (s/n) no SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 20
Desea el PC pasa su casa/familia? (s/n) si Tiene poco espacio para colocar su PC? (s/n) si Desea poder mover su PC de ubicacin? (s/n) si Es el precio importante? (s/n) si Es usted fan del software libre? (s/n) no Desea poder conectarse a internet? (s/n) si El equipo va estar casi siempre enchufado? (s/n) si Desea hacer copias de seguridad en CD/DVD? (s/n) si Le es ms cmodo usar un ratn externo? (s/n) si Necesita una aplicacin ofimtica? (s/n) si
5.4.3 PC PARA NEGOCIO
Desea el PC para su uso particular? (s/n) no Desea el PC pasa su casa/familia? (s/n) no Lo desea para su pequeo negocio? (s/n) si Necesita su PC solo para tareas de oficina/contabilidad? (s/n) si Es el precio importante? (s/n) si Es usted fan del software libre? (s/n) no Desea poder conectarse a internet a alta velocidad? (s/n) si Desea poder conectar otros equipos? (s/n) si Necesita una aplicacin de contabilidad? (s/n) si Desea hacer copias de seguridad en CD/DVD? (s/n) si Necesita una aplicacin ofimtica? (s/n) si
5.4.4 PC PARA USO PROPIO (PROFESIONAL)
Desea el PC para su uso particular? (s/n) no Desea el PC pasa su casa/familia? (s/n) no Lo desea para su pequeo negocio? (s/n) no Es un profesional liberal/autnomo? (s/n) si Su trabajo le obliga a desplazarse? (s/n) si Lo desea para labores de edicin y contabilidad? (s/n) si Es el precio importante? (s/n) si Es usted fan del software libre? (s/n) no Desea poder conectarse a internet? (s/n) si SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 21
Le gustara que el porttil tuviera poco peso? (s/n) si Desea hacer copias de seguridad en CD/DVD? (s/n) si Le es ms cmodo usar un ratn externo? (s/n) si Necesita una aplicacin ofimtica? (s/n) si
6. TIPO Y ESPACIO DE BUSQUEDA Nuestro problema es de sntesis (no de anlisis), y se adapta perfectamente a la definicin de resolucin constructiva: tenemos casi infinitas soluciones, y tenemos que construir una poco a poco. Obtenemos informacin sobre unas restricciones (mediante preguntas al usuario) y luego intentamos disear la solucin, combinando elementos (actividades) de forma que cumplan las restricciones. Si hubiramos usado perfiles de usuario (el tranquilo, el pijo, el culto,...) para asociar a las actividades, el enfoque del problema podra cambiar: se podra hacer que, a partir de las preguntas que le hacemos al usuario, el sistema detectara aproximadamente en qu perfil o perfiles se encuentra. Entonces, la parte de las preguntas sera de anlisis, en concreto se podra hacer con clasificacin heurstica. Pero nosotros no procesamos ni intentamos clasificar los datos del usuario, por tanto slo hacemos sntesis. No se trata de clasificacin heurstica porque no tenemos un conjunto de soluciones predefinidas, ni hacemos matching con ningn patrn para clasificar las entradas. El mecanismo que usamos para hacer la resolucin constructiva es el de proponer y aplicar, ya que: Tenemos mucho conocimiento sobre el dominio (todo el que nos ha dado el usuario; para eso hacemos las preguntas). Conocemos los componentes del problema: sabemos todos los datos de cada actividad Conocemos las restricciones: las hemos creado a partir de la informacin que da el usuario Tenemos el problema descompuesto en muchas fases: poner las actividades obligatorias, las perfectas, las que cumplen slo dos condiciones, etc. El mtodo que usamos es el de elegir el operador correcto de un conjunto grande, en donde estn ordenados mediante un sistema de preferencias basado en el "salience" de las reglas de CLIPS. SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 22
7. PROBLEMAS CON CLIPS CLIPS nos ha dado bastantes problemas: No acepta Unicode en sus reglas En modo interactivo no usa las funciones habituales readline() de Linux, por lo que no se pueden usar los cursores si nos equivocamos al escribir. Es difcil de automatizar para hacer las pruebas: no acepta parmetros y hay que hacer trucos raros con la entrada estndar. 8. PROGRAMACION CLIPS
8.1 Comandos bsicos en CLIPS Todos los comandos se escriben entre parntesis. Algunos comandos pueden ejecutarse desde los Mens - (exit) salir de CLIPS - (clear) borra de CLIPS todos los hechos, reglas y definiciones. Equivalente a cerrar CLIPS y abrirlo de nuevo - (reset) pone el sistema en su estado inicial. (Borra todos los hechos; coloca un hecho inicial (initial_fact) as como todos los que el usuario defina por defecto. Debe de efectuarse antes de ejecutar cualquier programa. - (run) ejecuta el programa cargado en CLIPS - (load nombrefichero.clp) Carga un programa CLIPS a partir del fichero nombrefichero.clp
8.2 Introduccin a los Hechos y Reglas
8.2.1 Hecho - Es un elemento de informacin elemental - Se almacena en la llamada lista de hechos. - Cada hecho en la lista de hechos tiene un identificador que indica su ndice en la lista - Hay dos tipos de hechos: Ordenados No ordenados. SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 23
8.2.2 Regla - Sirven para representar el conocimiento del experto - En general, una regla se expresa de la forma SI las condiciones son ciertas ENTONCES haz alguna accin.
8.2.3 Hechos ordenados - Son los formados por varios smbolos entre parntesis separados por espacios. - Se pueden utilizar para representar: o Un valor: (lunes) - hoy es lunes o Una pareja atributo-valor: (color verde) - el color es verde o Una tripleta atributo-objeto-valor: (hijo_de Luis Daniel) - Luis es hijo de Daniel - En los hechos ordenados la posicin es importante. No es lo mismo o (hijo_de Luis Daniel) ; Luis es hijo de Daniel o (hijo_de Daniel Luis) ; Daniel es hijo de Luis - Los comentarios en CLIPS se escriben con punto y coma
8.2.4 Operaciones con Hechos - Agregar un hecho o Los hechos se agregan en CLIPS con el comando (assert) o Ejemplo: CLIPS> (assert (color verde)) <Fact-0> o CLIPS responde a la agregacin de un hecho con <Fact-xx> donde xx es el ndice numrico asignado a ese hecho o Se pueden agregar varios hechos simultneamente haciendo por ejemplo: (assert (sabor dulce)(sabor salado)(sabor amargo) ) - Examinar los hechos o Para examinar todos los hechos en memoria se utiliza el comando (facts) o Ejemplo: CLIPS> (facts) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 24
f-0 (color verde) For a total of 1 fact - Eliminar un hecho o Los hechos se borran en CLIPS con el comando (retract) o Ejemplo: CLIPS> (retract 0) o Ntese que para borrar un hecho es necesario conocer su ndice o Puede eliminarse todos los hechos mediante (retract *)
8.2.5 Variables - Una variable almacena informacin dinmica, esto es, los valores que toma pueden cambiar (a diferencia de un hecho que siempre es esttico). - Permiten la escritura de reglas ms generales y complejas. Nombre de una variable Se compone del smbolo ? y de uno o ms caracteres. - Ejemplos: ?nombre ?color Uso de las variables - Uno de los usos ms comunes de las variables es el de tomar un valor en el antecedente de una regla y usarlo en el consecuente. - El proceso de tomar valores en el antecedente se llama emparejamiento de patrones. - Las reglas se activan para todos los valores de las variables que cumplen el antecedente.
8.2.6 Entrada y Salida Imprimir informacin - Se utiliza: (printout dispositivo elementos_a_imprimir) El valor de dispositivo para el monitor es t Los elementos a imprimir se separan por espacios. Para separar lineas se pone crlf Ejemplo: (defrule busca_persona (persona ?nombre1 ?ojos1 ?pelo1) => (printout t ?nombre1 " tiene los ojos " ?ojos1 " y el pelo " ?pelo1 crlf) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 25
Leer informacin - Se utiliza: (read dispositivo) Si el dispositivo es el teclado, la lectura se hace con (read) Ejemplo: (defrule aguas_residuales (tipo agua residual) => (printout t Est el agua turbia? (si/no)) (assert(turbia agua (read)) Para Lectura/Escritura de ficheros consultar el manual
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 26
9. OPERADORES DE CLIPS
9.1 Comandos utilizados en el Problema
9.1.1 Operador defclass En la programacin orientada a objetos una clase es una plantilla que describe las caractersticas o atributos comunes de los objetos. La plantilla de la palabra se utiliza en el sentido de una herramienta que se utiliza para construir objetos con atributos. Cada clase es una abstraccin de un sistema real-worls o algn otro sistema lgico que estamos tratando de modelar.
Caractersticas de clase: Abstraccin Herencia Encapsulacin Polimorfismo De vinculacin dinmica
El comportamiento de un objeto se define por sus mensajes manipuladores (controladores). Un mensaje de controlador para un objeto responde a los mensajes y realiza las acciones necesarias.
La forma general de defclass: (defclass <class-name> (is-a <superclasses> ) (slot 1) (slot 2) ... (slot N))
La forma general de defclass: Sintaxis (defclass nombre [comentario] (is-a <nombre superclase>) (role concrete | abstract) [Opcional] (pattern-match reactive | non-reactive) [Opcional] SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 27
<definicin slots> (nombre del campo) < denificin multi-Slot> (nombre del campo multiple) <definicin handlers> ) En cada clase se especifica Su superclase (is-a) [es posible herencia mltiple]. Si es abstracta o concreta (puede tener instancias) (role). Si los cambios en sus slots (Nombres del campo) pueden disparar los patrones de las reglas (pattern-match reactive) o no (pattern-match non-reactive). Lista de slots con sus restricciones o Limitar el acceso al slot: (visibility public|private), (access read-write|read-only|initializa-only) o Indica si crear handlers get y set para ese slot: (create-accesor ?NONE|read|write|read-write)
EJEMPLO
(defclass ser_vivo (is-a USER) (role abstract) (slot nombre (type STRING))
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 2
(slot color (type SYMBOL)))
(defclass hombre (is-a animal) (role concrete) (slot pais (type SYMBOL)) (slot DNI (type SYMBOL)))
9.1.2 Operador definstance
Declaracin instancias iniciales: (definstances) Instancias a crear al inicio de la ejecucin (comando (reset)) Siempre existe objeto initial-object (de clase INITIAL-OBJECT) EJEMPLO (definstances personas (juan of hombre (nombre "juan") (luis of hombre (nombre "luis") (pablo of hombre (nombre "pablo"))
9.1.3 defmessage-handler
CLIPS le permite definir sus propios mensajes manipuladores (vase tambin el polimorfismo). El formato general de un mensaje de controlador es el siguiente: (defmessage-handler <class-name> <message-name> [handler type] [optional-comment] (<parameters>* [wildcard-parameter]) <action>*) Tenga en cuenta que slo el valor de la ltima accin se devuelve.
Tipo de controlador dir cundo ejecutar el manejador. Los tipos de manejadores se enumeran en el orden en que se llaman normalmente durante la ejecucin del mensaje:
_around - la creacin de ambiente para los otros manipuladores, devuelve un valor _befora - un poco de trabajo antes de primaria, no devuelve el valor _primary - las principales tareas de un mensaje, se devuelve un valor SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 2
_after - un poco de trabajo despus de primaria (por ejemplo, limpieza), no devuelve el valor Simple mensaje de controlador para agregar valores de dos objetos Number: (defmessage-handler NUMBER + (?arg) (+ ?self ?arg))
Definicin de handlers: (defmessage-handler <clase> <handler> (<parametros>) <lista instrucciones> Acceso a variables y ejecucin de handlers (mtodos): ([instancia] send <nombre handler> <paramatros>) En slots donde se defina modificador create-accessor se crean dos handlers get-<nombre slot> set-<nombre slot>
Definicin de funciones: (deffunction ....) Divisin en mdulos: (defmodule ...)) Exportacin e importaciones de elementos: plantillas, hechos, reglas, clases, ... Uso de factores de certidumbre asociados a reglas y hechos Simulacin de razonamiento hacia atrs
9.1.4 Constructor deffunction Por funcin consideramos tanto las funciones predefinidas en CLIPS como las definidas por el usuario en este lenguaje, o las definidas en un lenguaje externo (C, FORTRAN o ADA) y enlazados con el entorno de CLIPS. En versiones previas de CLIPS este ltimo tipo de funciones era la nica forma de aadir funciones a CLIPS (teniendo que recompilar el propio CLIPS con cada nueva funcin) Para definir una funcin utilizamos la construccin (deffunction) El valor retornado por una funcin es el resultado de evaluar la ltima sentencia
Las funciones siguen una sintaxis tipo LISP con notacin prefija: (id-fun arg1 arg2) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 3
Polimorfismo: Mediante la construccin (defgeneric) podemos sobrecargar funciones y definir nuevos comportamientos en funcin del nmero y tipo de los argumentos.
Los elementos de una funcin son 5: 1. Nombre 2. Comentario (opcional) 3. Lista de cero o ms argumentos obligatorios 4. Unos argumentos para recibir el resto de argumentos recibidos (opcional) 5. La secuencia de acciones y expresiones que se ejecutarn
< port-item >::= ?ALL | ?NONE | <constructor-potable> ?ALL | <constructor-potable> ?NONE | SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 4
<constructor-potable> <nombre-constructor>*
Un defmodule no puede ser redefinido o incluso suprimirse una vez que se define (con la excepcin del mdulo principal, que puede ser redefinido una vez). La nica manera de eliminar un mdulo es con el comando clear. Tras la puesta en marcha y despus de una orden clara, CLIPS construye automticamente el siguiente defmodule.
9.1.6 Definicin de plantillas (deftemplate)
Consiste en una serie de campos (slots) que almacenarn datos relativos a un hecho determinado. Dichos campos estn etiquetados, siendo innecesario introducir sus valores en un orden predeterminado. Adems, en este tipo de estructuras es posible introducir un valor por defecto para los campos, de forma que el usuario se evita la necesidad de introducir todos y cada uno de los valores de los campos al afirmar un hecho perteneciente a un tipo establecido.
La forma general de definir una plantilla es mediante la instruccin (deftemplate), cuya sintaxis general es la siguiente: (deftemplate <nombre de plantilla> "Comentario opcional entre comillas" <definicin campo-1> <definicin campo-2> ... <definicin campo-n> ) <definicin campo> = (Slot <nombre campo> [(type <tipo al que pertenece> ) [default <valor por defecto>)] | Multislot <nombre campo_mltiple> [(type <tipo al que pertenece> ) [default <valor por defecto>)]...)
Los puntos suspensivos indican que existen otras primitivas (tambin opcionales) que se pueden introducir al definir un campo en una plantilla.
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 5
Ejemplo: La siguiente instruccin define una plantilla llamada 'paciente'
Una regla se define mediante el constructor defrule y su sintaxis es:
(defrule <identificador> [<constructor>] [<declaracion>] ; Propiedades de la regla <elemento-condicional>* ; Parte izquierda (LHS) => <accion>*) ; Parte derecha (RHS)
La parte izquierda de una regla est formada por una serie de elementos a los que se les llama elementos condicionales. La parte derecha contiene una lista de acciones que se llevarn a cabo cuando en la base de afirmaciones se satisfagan los elementos condicionales del antecedente. El smbolo => separa el antecedente del consecuente de la regla.
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 6
9.1.8 Constructor de hechos (deffact)
Un hecho se puede afirmar de dos formas diferentes: Con la orden (assert): Desde el entorno de CLIPS se puede afirmar un hecho directamente con (assert (hecho-a-afirmar)), esta forma se utiliza cuando no son muchos los hechos que queremos afirmar. Con el constructor (deffacts): Desde un fichero texto, guardado con la extensin .clp podemos afirmar un conjunto de hechos bajo un identificador del constructor:
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 7
ARBOL DE DECISION SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 8
10. CODIGO DEL PROBLEMA
;;; Prototipo de Sistema Experto para la recomendacion de compra de un PC ;;; Asignatura: SISTEMAS EXPERTOS - FACULTAD DE INGENIERIA DE SISTEMAS - UNIVERSIDAD NACIONAL SAN LUIS GONZAGA DE ICA ;;; Curso 2014 I - ICA PERU
;;; ---FIS
(defclass %3ACLIPS_TOP_LEVEL_SLOT_CLASS "Clase Falsa para guardar la informacin de ranura de nivel superior" (is-a USER) (role abstract) (single-slot Capacidad ;+ (comment "Capacidad de almacenamiento del componente en Gbytes") (type SYMBOL) (allowed-values 20Gb 40Gb 80Gb 160Gb 200Gb 320Gb 240Gb) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Distribucion ;+ (comment "Version del SO") (type STRING) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Fabricante ;+ (comment "Fabricante del componente") (type STRING) (default "generico") ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Tipo_monitor ;+ (comment "Tipo del monitor") (type SYMBOL) (allowed-values CRT LCD) (default CRT) ;+ (cardinality 0 1) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 9
(create-accessor read-write)) (single-slot Grabador ;+ (comment "Es una unidad grabadora") (type SYMBOL) (allowed-values Si No) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Frecuencia ;+ (comment "Frecuencia de reloj de la CPU") (type FLOAT) ;+ (cardinality 0 1) (create-accessor read-write)) (multislot Software ;+ (comment "Software que necesita el PC") (type INSTANCE) ;+ (allowed-classes Soft) (create-accessor read-write)) (single-slot Placa ;+ (comment "Placa base del PC") (type INSTANCE) ;+ (allowed-classes Placa_base) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Procesador ;+ (comment "Tipo de procesador del PC") (type INSTANCE) ;+ (allowed-classes CPU) ;+ (cardinality 0 1) (create-accessor read-write)) (multislot Dispositivos_de_Almacenamiento ;+ (comment "Dispositivos de almacenamiento del PC") (type INSTANCE) ;+ (allowed-classes Almacenamiento) (create-accessor read-write)) (single-slot Memoria ;+ (comment "Tamao de la memoria") SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 10
(type SYMBOL) (allowed-values 256Mb 512Mb 1Gb 2Gb 4Gb 8Gb 16Gb) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Num_puertos ;+ (comment "Numero de puertos del router") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Conector ;+ (comment "Tipo de conexion que usa el dispositivo") (type SYMBOL) (allowed-values USB Serie Paralelo inalambrico PS-2 IDE SCSI Serial_ATA PCI PCMCIA) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Conectores_IDE ;+ (comment "Numero de conectores IDE") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Puertos_USB ;+ (comment "numero de puertos USB") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Puertos_Firewire ;+ (comment "Numero de puertos firewire") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Slots_PCI ;+ (comment "Numero de slots PCI") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 11
(single-slot Slots_AGP ;+ (comment "Numero de slots AGP") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Conectores_Serial_ATA ;+ (comment "Numero de conectores serial ATA") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Pulgadas ;+ (comment "Pulgadas del monitor") (type SYMBOL) (allowed-values 15p 17p 19p 21p 14p) ;+ (cardinality 1 1) (create-accessor read-write)) (single-slot Memoria_Video ;+ (comment "Tamao de la memoria de video") (type SYMBOL) (allowed-values 32Mb 64Mb 128Mb 256Mb) ;+ (cardinality 1 1) (create-accessor read-write)) (single-slot Tipo_impresora ;+ (comment "Tipo de impresora") (type SYMBOL) (allowed-values Inyeccion Laser) ;+ (cardinality 1 1) (create-accessor read-write)) (multislot Dispositivos_de_Entrada ;+ (comment "Dispositivos de entrada del PC") (type INSTANCE) ;+ (allowed-classes Entrada) (create-accessor read-write)) (multislot Dispositivos_de_Salida ;+ (comment "Dispositivos de salida del PC") (type INSTANCE) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 12
;+ (allowed-classes Salida) (create-accessor read-write)) (multislot Dispositivos_de_Comunicacion ;+ (comment "Dispositivos de comunicacion del PC") (type INSTANCE) ;+ (allowed-classes Comunicacion) (create-accessor read-write)) (single-slot Modelo ;+ (comment "Modelo de la CPU") (type STRING) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Precio ;+ (comment "Precio del componente") (type FLOAT) ;+ (cardinality 1 1) (create-accessor read-write)) (multislot Version ;+ (comment "SOs sobre los que se ejecuta el software") (type SYMBOL) (allowed-values Windows Linux) (create-accessor read-write)) (single-slot Tipo_raton ;+ (comment "Tipo de raton") (type SYMBOL) (allowed-values bola optico) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Programa ;+ (comment "Nombre del programa") (type STRING) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Para_portatil ;+ (comment "Es para portatil?") (type SYMBOL) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 13
(allowed-values Si No) ;+ (cardinality 1 1) (create-accessor read-write)) (single-slot Tipo_red ;+ (comment "Tipo de tecnologia de red") (type SYMBOL) (allowed-values Ethernet WiFi) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Duracion ;+ (comment "Duracion de la bateria en horas") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Tipo_bateria ;+ (comment "Tipo de bateria del PC") (type INSTANCE) ;+ (allowed-classes Bateria) ;+ (cardinality 0 1) (create-accessor read-write)))
(defclass componente "Componentes de un PC" (is-a USER) (role concrete) (single-slot Precio ;+ (comment "Precio del componente") (type FLOAT) ;+ (cardinality 1 1) (create-accessor read-write)))
(defclass Linux "SO Linux" (is-a SO) (role concrete))
(defclass Windows "SO Windows" (is-a SO) (role concrete))
(defclass Aplicacion "Aplicaciones software" (is-a Soft) (role concrete) (multislot Version ;+ (comment "SOs sobre los que se ejecuta el software") (type SYMBOL) (allowed-values Windows Linux) (create-accessor read-write)) (single-slot Programa ;+ (comment "Nombre del programa") (type STRING) ;+ (cardinality 0 1) (create-accessor read-write)))
(defclass Ofimatica "Programas o suites para edicion, hojas de calculop, presentaciones, etc" (is-a Aplicacion) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 15
(role concrete))
(defclass Disenyo_Grafico "Aplicaciones para el diseo grafico" (is-a Aplicacion) (role concrete))
(defclass Comunicacion "Dispositiv de comunicacionn" (is-a Hard) (role concrete) (single-slot Conector ;+ (comment "Tipo de conexion que usa el dispositivo") (type SYMBOL) (allowed-values USB Serie Paralelo inalambrico PS-2 IDE SCSI Serial_ATA PCI PCMCIA) ;+ (cardinality 0 1) (create-accessor read-write)))
(defclass Modem "Modem telefonico" SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 16
(is-a Comunicacion) (role concrete))
(defclass Tarjeta_red "Tarjeta de red" (is-a Comunicacion) (role concrete) (single-slot Tipo_red ;+ (comment "Tipo de tecnologia de red") (type SYMBOL) (allowed-values Ethernet WiFi) ;+ (cardinality 0 1) (create-accessor read-write)))
(defclass Router "Router de red" (is-a Comunicacion) (role concrete) (single-slot Num_puertos ;+ (comment "Numero de puertos del router") (type INTEGER) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
(defclass Tarjeta_video "Tarjeta de video" (is-a Salida) (role concrete) (single-slot Memoria_Video ;+ (comment "Tamao de la memoria de video") (type SYMBOL) (allowed-values 32Mb 64Mb 128Mb 256Mb) ;+ (cardinality 1 1) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 20
(create-accessor read-write)) (single-slot Para_portatil ;+ (comment "Es para portatil?") (type SYMBOL) (allowed-values Si No) ;+ (cardinality 1 1) (create-accessor read-write)))
(defclass Tarjeta_sonido "Tarjeta de sonido" (is-a Salida) (role concrete))
(defclass Impresora "Impresora" (is-a Salida) (role concrete) (single-slot Conector ;+ (comment "Tipo de conexion que usa el dispositivo") (type SYMBOL) (allowed-values USB Serie Paralelo inalambrico PS-2 IDE SCSI Serial_ATA PCI PCMCIA) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Tipo_impresora ;+ (comment "Tipo de impresora") (type SYMBOL) (allowed-values Inyeccion Laser) ;+ (cardinality 1 1) (create-accessor read-write)))
(defclass Entrada "Dispositivos de entrada" (is-a Hard) (role concrete) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 21
(single-slot Conector ;+ (comment "Tipo de conexion que usa el dispositivo") (type SYMBOL) (allowed-values USB Serie Paralelo inalambrico PS-2 IDE SCSI Serial_ATA PCI PCMCIA) ;+ (cardinality 0 1) (create-accessor read-write)))
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 22
(defclass Almacenamiento "Dispositivos de almacenamiento" (is-a Hard) (role concrete) (single-slot Conector ;+ (comment "Tipo de conexion que usa el dispositivo") (type SYMBOL) (allowed-values USB Serie Paralelo inalambrico PS-2 IDE SCSI Serial_ATA PCI PCMCIA) ;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Para_portatil ;+ (comment "Es para portatil?") (type SYMBOL) (allowed-values Si No) ;+ (cardinality 1 1) (create-accessor read-write)))
(defclass DVD "DVD" (is-a Almacenamiento) (role concrete) (single-slot Grabador ;+ (comment "Es una unidad grabadora") (type SYMBOL) (allowed-values Si No) ;+ (cardinality 0 1) (create-accessor read-write)))
(defclass CDROM "CDROM" (is-a Almacenamiento) (role concrete) (single-slot Grabador ;+ (comment "Es una unidad grabadora") (type SYMBOL) (allowed-values Si No) ;+ (cardinality 0 1) (create-accessor read-write))) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
(defclass Bateria "Bateria para portatil" (is-a Hard) (role concrete) (single-slot Duracion ;+ (comment "Duracion de la bateria en horas") (type INTEGER) ;+ (cardinality 0 1) (create-accessor read-write)))
(defclass PC "Clase generica para elaborar la recomendacion" (is-a USER) (role concrete) (multislot Software ;+ (comment "Software que necesita el PC") (type INSTANCE) ;+ (allowed-classes Soft) (create-accessor read-write)) (single-slot Placa ;+ (comment "Placa base del PC") (type INSTANCE) ;+ (allowed-classes Placa_base) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 24
;+ (cardinality 0 1) (create-accessor read-write)) (single-slot Procesador ;+ (comment "Tipo de procesador del PC") (type INSTANCE) ;+ (allowed-classes CPU) ;+ (cardinality 0 1) (create-accessor read-write)) (multislot Dispositivos_de_Almacenamiento ;+ (comment "Dispositivos de almacenamiento del PC") (type INSTANCE) ;+ (allowed-classes Almacenamiento) (create-accessor read-write)) (single-slot Memoria ;+ (comment "Tamao de la memoria") (type SYMBOL) (allowed-values 256Mb 512Mb 1Gb 2Gb 4Gb 8Gb 16Gb) ;+ (cardinality 0 1) (create-accessor read-write)) (multislot Dispositivos_de_Entrada ;+ (comment "Dispositivos de entrada del PC") (type INSTANCE) ;+ (allowed-classes Entrada) (create-accessor read-write)) (multislot Dispositivos_de_Salida ;+ (comment "Dispositivos de salida del PC") (type INSTANCE) ;+ (allowed-classes Salida) (create-accessor read-write)) (multislot Dispositivos_de_Comunicacion ;+ (comment "Dispositivos de comunicacion del PC") (type INSTANCE) ;+ (allowed-classes Comunicacion) (create-accessor read-write)))
(defclass Portatil "PC portatil" SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
(Capacidad 200Gb) (Conector Serial_ATA) (Fabricante "IBM") (Para_portatil No) (Precio 120.0)) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
(Fabricante "Sony") (Para_portatil No) (Precio 300.0) (Pulgadas 17p) (Tipo_monitor LCD)) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
(Conectores_IDE 1) (Conectores_Serial_ATA 2) (Fabricante "ASUS") (Para_portatil No) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; ---------------- ;;; Message handler para imprimir el resultado
;;; Recorre todos los elementos del slot que recibe como parametro (deffunction imprime-todo (?v) (if (> (length$ ?v) 0) then (loop-for-count (?i 1 (length ?v)) (send (nth$ ?i ?v) print) (printout t crlf) ) ) ) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 43
;;; Message handler especifico par portatiles ;;; Llama al message handler del padre y luego imprime ;;; el slot bateria (defmessage-handler Portatil imprime primary () (call-next-handler) (printout t "Bateria: " crlf) (send ?self:Tipo_bateria print) (printout t crlf) )
;;; Message handler para la clase PC, ;;; imprime todos los slots de la clase (defmessage-handler PC imprime primary () (printout t "Procesador: " crlf) (send ?self:Procesador print) (printout t crlf) (printout t "Placa Base: " crlf) (send ?self:Placa print) (printout t crlf) (printout t "Memoria: " ?self:Memoria crlf crlf) (printout t "Software: " crlf) (imprime-todo ?self:Software) (printout t "Dispositivos de almacenamiento: " crlf) (imprime-todo ?self:Dispositivos_de_Almacenamiento) (printout t "Dispositivos de entrada: " crlf) (imprime-todo ?self:Dispositivos_de_Entrada) (printout t "Dispositivos de salida:" crlf) (imprime-todo ?self:Dispositivos_de_Salida) (printout t "Dispositivos de comunicacion: " crlf) (imprime-todo ?self:Dispositivos_de_Comunicacion) )
;;; ---------------------------------------------------------- ;;; Template del resultado (deftemplate consejo "Lista de PCs que cumplen las caracteristicas deseadas" SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 44
(slot PC) )
;;;----------------------------------- ;;; Funciones para preguntar cosas
;;; Obtiene una respuesta de entre un conjunto de respuestas posibles (deffunction ask-question (?question $?allowed-values) (printout t ?question) (bind ?answer (read)) (while (not (member ?answer ?allowed-values)) do (printout t ?question) (bind ?answer (read)) ) ?answer)
;;; Hace una pregunta a la que hay que responder si o no (deffunction si-o-no-p (?question) (bind ?response (ask-question ?question si no s n)) (if (or (eq ?response si) (eq ?response s)) then TRUE else FALSE))
;;; --------------------------------- ;;; Otras funciones
;;; Halla la instancia con el minimo valor para un slot ;;; El primer parametro es la instancia ;;; El segundo parametro es el metodo que accede al slot ;;; El tercer parametro es el valor con el que inicializar la variable que busca (deffunction minimum-slot (?li ?sl ?init) (bind ?min ?init) (loop-for-count (?i 1 (length ?li)) (bind ?v (send (nth$ ?i ?li) ?sl)) (if (< ?v ?min) then SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; Halla la instancia con el maximo valor para un slot ;;; El primer parametro es la instancia ;;; El segundo parametro es el metodo que accede al slot ;;; El tercer parametro es el valor con el que inicializar la variable que busca (deffunction maximum-slot (?li ?sl ?init) (bind ?max ?init) (loop-for-count (?i 1 (length ?li)) (bind ?v (send (nth$ ?i ?li) ?sl)) (if (> ?v ?max) then (bind ?max ?v) (bind ?ins (nth$ ?i ?li)) ) ) (return ?ins) )
;;;----------------------- ;;;---- REGLAS
(defrule presentacion "regla que presenta al sistema" (declare (salience 10)) => (printout t "------------------------------" crlf) (printout t "------ Sistema de Compra Para la recomendacin de una PC -----" crlf) (printout t "------------------------------" crlf) (printout t crlf) (focus preguntas-determinar-usuario ) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 46
)
(defrule resultado-consejo "Regla salida de consejo" (declare (salience 10)) (consejo (PC ?r)) => (printout t "---------------------------------" crlf) (printout t "El PC que mejor se adapta a sus necesidades es: " crlf) (printout t crlf (class ?r) crlf crlf) (send ?r imprime) (printout t crlf) (halt) )
;;; ----- Modulo Preguntas iniciales ;;; Hace un conjunto de preguntas que pretenden clasificar al usuario ;;; en cuatro categorias posibles (domestico, autonomo, pime y empresarial) ;;; Ademas recoge informacion particular de cada tipo (defmodule preguntas-determinar-usuario "Modulo de preguntas tipo de usuario" (import MAIN ?ALL) (export ?ALL))
;;; Template que almacena el tipo de usuario (deftemplate tipo-uso "tipo de uso del PC" (slot uso) )
;;; Iniciamos el sistema con un tipo de uso desconocido (deffacts tipo-usuario (tipo-uso (uso desconocido)) )
;;; Comprobamos si es un usario domestico SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 47
(defrule determinar-tipo-PC-1 ?u <-(tipo-uso (uso desconocido)) => (if (si-o-no-p "Desea el PC para su uso particular? (s/n) ") then (modify ?u (uso domestico)) else (if (si-o-no-p "Desea el PC pasa su casa/familia? (s/n) ") then (modify ?u (uso domestico)) ) ) )
;;; Si es domestico nos interesa si necesita movilidad ;;; Si es domestico el las prestaciones del equipo no han de ser muy altas (defrule determinar-tipo-PC-2 (tipo-uso (uso domestico)) => (if (si-o-no-p "Tiene poco espacio para colocar su PC? (s/n) ") then (if (si-o-no-p "Desea poder mover su PC de ubicacion? (s/n) ") then (assert (movilidad)) ) ) (assert (prestaciones bajas)) )
;;; Determinamos si es una Pyme (defrule determinar-tipo-PC-3 ?u <- (tipo-uso (uso desconocido)) => (if (si-o-no-p "Lo desea para su pequeo negocio? (s/n) ") then (modify ?u (uso pyme)) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 48
) )
;;; Determinamos si es un autonomo o un profesional liberal (defrule determinar-tipo-PC-4 ?u <- (tipo-uso (uso desconocido)) => (if (si-o-no-p "Es un profesional liberal/autonomo? (s/n) ") then (modify ?u (uso autonomo)) ) )
;;; Si es una pyme no interesa saber la potencia que necesitan (defrule determinar-tipo-PC-5 (tipo-uso (uso pyme)) => (if (si-o-no-p "Necesita su PC solo para tareas de oficina/contabilidad? (s/n) ") then (assert (prestaciones bajas)) else (if (si-o-no-p "Desea ademas usar programas especificos para la actividad de su empresa (diseo grafico, calculo de estructuras, ...)? (s/n) ") then (assert (prestaciones altas)) else (assert (prestaciones bajas)) ) ) )
;;; Determinamos si es un PC para una empresa grande (defrule determinar-tipo-PC-6 ?u <- (tipo-uso (uso desconocido)) => (if (si-o-no-p "Es el gestor de compras de una empresa grande? (s/n) ") SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 49
then (modify ?u (uso empresarial)) ) )
;;; Si es una empresa queremos saber para que se usara el PC y con ello ;;; determinamos su potencia (defrule determinar-tipo-PC-7 (tipo-uso (uso empresarial)) => (if (si-o-no-p "Desea un PC para las oficinas? (s/n) ") then (assert (oficinas)) (assert (prestaciones bajas)) else (if (si-o-no-p "Lo desea para un empleado que necesita desplazarse? (s/n) ") then (assert (movilidad)) (assert (prestaciones bajas)) else (if (si-o-no-p "Lo desea para tareas con altas necesidades (desarrollo de soft, diseo grafico, ...)? (s/n) ") then (assert (tareas-complejas)) (assert (prestaciones altas)) else (if (si-o-no-p "Lo necesita para dar servicios (conectividad, bases de datos, servidor de aplicaciones, servidor de ficheros, ...)? (s/n) ") then (assert (servicios)) (assert (prestaciones altas)) ) ) ) ) ) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 50
;;; Si es un autonomo queremos saber si necesita movilidad y para que ;;; quiere usar el PC (defrule determinar-tipo-PC-8 (tipo-uso (uso autonomo)) => (if (si-o-no-p "Su trabajo le obliga a desplazarse? (s/n) ") then (assert (movilidad)) ) (if (si-o-no-p "Lo desea para labores de edicion y contabilidad? (s/n) ") then (assert (prestaciones bajas)) else (if (si-o-no-p "Lo necesita para desarrollar su trabajo? (s/n) ") then (assert (prestaciones altas)) else (assert (prestaciones bajas)) ) ) )
;;; Saltamos al modulo de preguntas comunes (defrule a-preguntas-comunes (declare (salience -1)) => (focus preguntas-comunes) )
;;; Modulo de preguntas comunes ;;; Aqui se obtiene informacion comun a todas las recomendaciones ;;; Evidentemente las preguntas que hay aqui son bastante simples ;;; necesitareis aadir mas cosas si quereis dar consejos mejores (defmodule preguntas-comunes "preguntas comunes a todos los usuarios" SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; --- Sin identificar ;;; Si no hemos identificado al usuario no podemos hacer mucho (defrule no-hay-consejo (declare (salience 20)) (tipo-uso (uso desconocido)) => (printout t "---------------------------------" crlf) (printout t "Lo sentimos, pero la aplicacion no puede aconsejarle" crlf) (printout t crlf) (halt) )
;;; Determinamos si quiere software libre o no (defrule software-libre (declare (salience 10)) => (if (si-o-no-p "Es usted fan del software libre? (s/n) ") then (assert (software-libre Si)) else (assert (software-libre No)) ) )
;;; Determinamos si el dinero es un impedimento (defrule importancia-del-precio (declare (salience 10)) (not (precio ?p)) => (if (si-o-no-p "Es el precio importante? (s/n) ") then (assert (precio Si)) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 52
else (assert (precio No)) ) )
;;; Desvio a modulo correspondiente ;;; En funcion de las preguntas que hagais y de los tipos de recomendaciones ;;; que hagais debereis aadir mas reglas
;;; --- Workstations (defrule a-modulo-oficina-workstation (not (movilidad)) (prestaciones altas) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;;--------------------- PORTATILES ;;; Modulo de recomendacion de portatiles ;;; Estas preguntas son especificas para determinar las caracteristicas del ;;; portatil a recomendar
(defmodule compra-de-portatil "preguntas para determinar compra de portatiles" (import MAIN ?ALL) (import preguntas-determinar-usuario ?ALL) (import preguntas-comunes ?ALL) (export ?ALL) )
;;; Si el equipo es para uso domestico y va a estar siempre ;;; enchufado no importa la duracion de la bateria (defrule domesticos-bateria (tipo-uso (uso domestico)) => (if (si-o-no-p "El equipo va estar casi siempre enchufado? (s/n) ") then (assert (duracion-bateria no-critico)) else (assert (duracion-bateria critico)) ) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 54
)
;;; Determinamos si quiere DVD (defrule domesticos-DVD (tipo-uso (uso domestico)) (precio No) => (if (si-o-no-p "Desea reproducir peliculas de DVD? (s/n) ") then (assert (almacenamiento DVD)) else (assert (almacenamiento CDROM)) ) )
;;; Determinamos si quiere grabadora (defrule grabadora => (if (si-o-no-p "Desea hacer copias de seguridad en CD/DVD? (s/n) ") then (assert (grabacion Si)) else (assert (grabacion No)) ) )
;;; Determinamos si le gustaria tener un raton externo (defrule raton-externo => (if (si-o-no-p "Le es mas comodo usar un raton externo? (s/n) ") then (assert (raton-externo Si)) else (assert (raton-externo No)) ) ) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 55
;;; Si el dinero es un problema decidimos poner componentes ;;; mas asequibles (defrule todos-restriccion-de-precio (precio Si) => (assert (almacenamiento CDROM)) (assert (graficos bajo)) (assert (memoria minimo)) )
;;; Si no son domesticos y no hay problema de dinero ponemos un DVD ;;; y una tarjeta grafica mejor (defrule resto-DVD (tipo-uso (uso ~domestico)) (precio No) => (assert (almacenamiento DVD)) (assert (graficos alto)) )
;;; Determinamos si le hace falta una aplicacion ofimatica (defrule ofimatica => (if (si-o-no-p "Necesita una aplicacion ofimatica? (s/n) ") then (assert (soft ofimatica)) ) )
;;; Los usuarios no domesticos necesitan una buena bateria (defrule resto-bateria (tipo-uso (uso ~domestico)) => (assert (duracion-bateria critico)) ) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 56
;;; Los usuarios domesticos y autonomos con poco dinero solo se ;;; podran conectar con modem (defrule modem (precio Si) (tipo-uso (uso domestico|autonomo)) => (if (si-o-no-p "Desea poder conectarse a internet? (s/n) ") then (assert (comunicacion modem)) ) )
;;; Los usuarios domesticos y autonomos con mas dinero pueden querer ;;; ADSL (defrule ADSL (precio No) (tipo-uso (uso domestico|autonomo)) => (if (si-o-no-p "Desea poder conectarse a internet a alta velocidad? (s/n) ") then (if (si-o-no-p "Desea poder conectar otros equipos? (s/n) ") then (assert (ADSL router)) else (assert (ADSL modem)) ) ) )
;;; Los usuarios empresariales pueden querer conectarse a una red (defrule WIFI-o-Ethernet (tipo-uso (uso empresarial)) => (if (si-o-no-p "Desea poder conectar su equipo a una red? (s/n) ") then SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; Determinamos las necesidades de almacenamiento de los usuarios no ;;; domesticos (defrule no-domestico-almacenamiento-portatil (tipo-uso (uso ~domestico)) (prestaciones altas) => (if (si-o-no-p "Desea tener gran capacidad de almacenamiento? (s/n) ") then (assert (almacenamiento-disco-duro alto)) else (assert (almacenamiento-disco-duro bajo)) ) (if (si-o-no-p "Desea tener almacenamiento portatil extra? (s/n) ") then (assert (almacenamiento-externo Si)) ) )
;;; Los usuarios domesticos o con pocas necesidades no necesitan mucha capacidad ;;; de almacenamiento (defrule domestico-prestaciones-bajas-almacenamiento-portatil (or (tipo-uso (uso domestico)) (prestaciones bajas)) => (assert (almacenamiento-disco-duro bajo)) )
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 58
;;; Determinamos si importa el peso a los usuarios no domesticos (defrule importancia-del-peso (tipo-uso (uso ~domestico)) => (if (si-o-no-p "Le gustaria que el portatil tuviera poco peso? (s/n) ") then (assert (peso Si)) else (assert (peso No)) ) )
;;; Cuando hemos acabado pasamos a configurar el equipo (defrule todo-determinado (declare (salience -1)) => (focus configurar-portatil) )
;;; Configuracion final del portatil con la informacion recolectada (defmodule configurar-portatil "configuracion del portatil" (import MAIN ?ALL) (import compra-de-portatil ?ALL) (import preguntas-determinar-usuario ?ALL) (export ?ALL) )
;;; Creamos la instancia sobre la que trabajaremos (defrule crea-instancia-inicial (declare (salience 10)) => (make-instance [p] of Portatil) )
;;; ----- Memoria ;;; Si el precio no importa entonces mas memoria SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 59
(defrule configura-memoria ?x <- (object (is-a Portatil)) (precio ?p) => (switch ?p (case No then (send ?x put-Memoria 512Mb)) (case Si then (send ?x put-Memoria 256Mb)) ) )
;;; ------ CPU ;;; Si el precio no importa entonces intel ;;; Si las prestaciones han de ser altas mas frecuencia de reloj (defrule configura-CPU ?x <- (object (is-a Portatil)) (precio ?p) (prestaciones ?pr) => (if (eq ?p No) then (bind ?cpu (find-all-instances ((?ins CPU_portatil)) (eq ?ins:Fabricante "Intel"))) else (bind ?cpu (find-all-instances ((?ins CPU_portatil)) (eq ?ins:Fabricante "AMD"))) ) (if (eq ?pr altas) then (send ?x put-Procesador (maximum-slot ?cpu get-Frecuencia 0)) else (send ?x put-Procesador (minimum-slot ?cpu get-Frecuencia 5)) ) )
;;; ------ Bateria
;;; Configuramos la bateria (defrule configura-bateria ?x <- (object (is-a Portatil)) (duracion-bateria ?b) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 60
(precio ?p) => ;;; Seleccionamos todas las baterias (bind ?bt (find-all-instances ((?ins Bateria)) TRUE)) (switch ?b (case critico then (switch ?p (case No then ;;; Si no nos importa el dinero cogemos la que dure mas (send ?x put-Tipo_bateria (maximum-slot ?bt get-Duracion 0)) ) (case Si then ;;; Si nos importa el dinero cogemos una que dure entre 3 y 10 horas (send ?x put-Tipo_bateria (find-instance ((?ins Bateria)) (and (> ?ins:Duracion 3) (< ?ins:Duracion 10)) ) ) ) ) ) (case no-critico then ;;; Si no nos importa la bateria cogemos la que dure menos (send ?x put-Tipo_bateria (minimum-slot ?bt get-Duracion 20)) ) ) )
;;; --------- Placa Base ;;; Cogemos cualquier placa base para portatiles ;;; Evidemente podriamos haber usado el precio o las ;;; prestaciones para decidir (defrule placa-base-portatil ?x <- (object (is-a Portatil)) => (send ?x put-Placa SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; ---------- Software ;;; Eleccion del software ofimatico (defrule software-ofimatico ?x <- (object (is-a Portatil)) (soft ofimatica) (software-libre ?sl) (precio ?p) => ;;; Si se es fan del soft libre o se tiene poco dinero entonces OpenOffice (if (or (eq ?sl Si) (eq ?p Si)) then (slot-insert$ ?x Software 1 (find-instance ((?ins Ofimatica)) (= ?ins:Precio 0))) else (slot-insert$ ?x Software 1 (find-instance ((?ins Ofimatica)) (> ?ins:Precio 0))) ) )
;;; Eleccion del sistema operativo (defrule sistema-operativo ?x <- (object (is-a Portatil)) (software-libre ?sl) (precio ?p) => ;;; Si se es fan del soft libre o se tiene poco dinero entonces Linux (if (or (eq ?sl Si) (eq ?p Si)) then (slot-insert$ ?x Software 1 (find-instance ((?ins Linux)) (= ?ins:Precio 0))) else (slot-insert$ ?x Software 1 (find-instance ((?ins Windows)) (> ?ins:Precio 0))) ) )
;;; -------- Dispositivos de salida
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 62
;;; Eleccion del monitor (defrule monitor ?x <- (object (is-a Portatil)) (peso ?ps) (precio ?p) => ;;; Si se quiere poco peso o importa el precio 14p, si no 15p (if (or (eq ?ps Si) (eq ?p Si)) then (slot-insert$ ?x Dispositivos_de_Salida 1 (find-instance ((?ins Monitor)) (and (eq ?ins:Pulgadas 14p) (eq ?ins:Para_portatil Si)))) else (slot-insert$ ?x Dispositivos_de_Salida 1 (find-instance ((?ins Monitor)) (and (eq ?ins:Pulgadas 15p) (eq ?ins:Para_portatil Si)))) ) )
;;; Tarjeta de Video (defrule tarjeta-grafica ?x <- (object (is-a Portatil)) (graficos ?g) (precio ?p) => ;;; Si las necesidades son bajas o hay poco dinero 32Mb, si no 64Mb (if (or (eq ?g bajo) (eq ?p Si)) then (slot-insert$ ?x Dispositivos_de_Salida 1 (find-instance ((?ins Tarjeta_video)) (and (eq ?ins:Memoria_Video 32Mb) (eq ?ins:Para_portatil Si)))) else (slot-insert$ ?x Dispositivos_de_Salida 1 (find-instance ((?ins Tarjeta_video)) (and (eq ?ins:Memoria_Video 64Mb) (eq ?ins:Para_portatil Si)))) ) )
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 63
;;; -------- Dispositivos de almacenamiento
;;; Almacenamiento para portatiles ;;; Si las necesidades son grandes 80Gb, si no 40Gb ;;; si importa el precio entonces el disco mas barato (defrule almacenamiento ?x <- (object (is-a Portatil)) (almacenamiento-disco-duro ?al) (precio ?p) => (switch ?al (case alto then (bind ?c 80Gb)) (case bajo then (bind ?c 40Gb)) ) (bind ?hd (find-all-instances ((?ins Disco_duro)) (and (eq ?ins:Conector IDE) (eq ?ins:Para_portatil Si) (eq ?ins:Capacidad ?c)))) (if (eq ?p No) then (slot-insert$ ?x Dispositivos_de_Almacenamiento 1 (maximum-slot ?hd get-Precio 0)) else (slot-insert$ ?x Dispositivos_de_Almacenamiento 1 (minimum-slot ?hd get- Precio 1000)) ) )
;;; Discos USB extra ;;; Si importa el precio entonces el mas barato (defrule almacenamiento-externo ?x <- (object (is-a Portatil)) (almacenamiento-externo Si) (precio ?p) => (bind ?hd (find-all-instances ((?ins Disco_duro)) (eq ?ins:Conector USB))) (if (eq ?p No) then (slot-insert$ ?x Dispositivos_de_Almacenamiento 1 (maximum-slot ?hd get-Precio 0)) else SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; Elegimos un DVD o un CDROM ;;; La regla elige cualquiera, pero se pueden imponer mas condiciones (defrule CDROM-o-DVD ?x <- (object (is-a Portatil)) (almacenamiento ?al) (grabacion ?g) => (if (eq ?al DVD) then (slot-insert$ ?x Dispositivos_de_Almacenamiento 1 (find-instance ((?ins DVD)) (eq ?ins:Grabador ?g)) ) else (slot-insert$ ?x Dispositivos_de_Almacenamiento 1 (find-instance ((?ins CDROM)) (eq ?ins:Grabador ?g)) ) )
)
;;; Escogemos una disquetera si no nos importa el peso (defrule configura-disquetera ?x <- (object (is-a Portatil)) (peso No) => (slot-insert$ ?x Dispositivos_de_Almacenamiento 1 (find-instance ((?ins Disco_flexible)) (eq ?ins:Para_portatil Si))) )
;;; ------- Dispositivos de entrada ;;; Si se prefiere un raton externo le ponemos un raton para portatil (defrule configura-raton-externo SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; ADSL router o modem (defrule configura-ADSL ?x <- (object (is-a Portatil)) (ADSL ?r) => (switch ?r (case router then (slot-insert$ ?x Dispositivos_de_Comunicacion 1 (find-instance ((?ins Router_ADSL)) TRUE))) (case modem then (slot-insert$ ?x Dispositivos_de_Comunicacion 1 SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; Crea el template consejo con la solucion (defrule solucion-portatil (declare (salience -1)) ?x <- (object (is-a Portatil)) => (assert (consejo (PC ?x))) )
;;;--------------------- DOMESTICOS ;;; Modulo de recomendacion de ordenadores domesticos ;;; Estas preguntas son especificas para determinar las caracteristicas del ;;; ordenador domestico a recomendar
(defmodule compra-de-domestico "preguntas para determinar compra de ordenadores domesticos" (import MAIN ?ALL) (import preguntas-determinar-usuario ?ALL) (import preguntas-comunes ?ALL) (export ?ALL) ) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 67
;;; Determinamos si quiere DVD (defrule domesticos-DVD (tipo-uso (uso domestico)) (precio No) => (if (si-o-no-p "Desea reproducir peliculas de DVD? (s/n) ") then (assert (almacenamiento DVD)) else (assert (almacenamiento CDROM)) ) )
;;; Determinamos si quiere DVD (defrule domesticos-DVD (tipo-uso (uso domestico)) (precio No) => (if (si-o-no-p "Desea jugar a juegos de ultima generacion? (s/n) ") then (assert (graficos alto)) else (assert (graficos bajo)) ) )
;;; Determinamos si quiere grabadora (defrule grabadora => (if (si-o-no-p "Desea hacer copias de seguridad en CD/DVD? (s/n) ") then (assert (grabacion Si)) else (assert (grabacion No)) ) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 68
)
;;; Si el dinero es un problema decidimos poner componentes ;;; mas asequibles (defrule todos-restriccion-de-precio (precio Si) => (assert (almacenamiento CDROM)) (assert (graficos bajo)) (assert (memoria minimo)) )
;;; Los usuarios domesticos y autonomos con poco dinero solo se ;;; podran conectar con modem (defrule modem (precio Si) (tipo-uso (uso domestico|autonomo)) => (if (si-o-no-p "Desea poder conectarse a internet? (s/n) ") then (assert (comunicacion modem)) ) )
;;; Los usuarios domesticos y autonomos con mas dinero pueden querer ;;; ADSL (defrule ADSL-1 (precio No) (tipo-uso (uso domestico|autonomo)) => (if (si-o-no-p "Desea poder conectarse a internet a alta velocidad? (s/n) ") then (if (si-o-no-p "Desea poder conectar otros equipos? (s/n) ") then (assert (ADSL router)) else SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 69
(assert (ADSL modem)) ) ) )
;;; Los usuarios pyme necesitan ADSL (defrule ADSL-2 (tipo-uso (uso pyme)) => (if (si-o-no-p "Desea poder conectarse a internet a alta velocidad? (s/n) ") then (if (si-o-no-p "Desea poder conectar otros equipos? (s/n) ") then (assert (ADSL router)) else (assert (ADSL modem)) ) ) )
;;; Determinamos si le hace falta una aplicacion ofimatica (defrule ofimatica => (if (si-o-no-p "Necesita una aplicacion ofimatica? (s/n) ") then (assert (soft ofimatica)) ) )
;;; Determinamos si le hace falta una aplicacion de contabilidad ;;; si es un usuario no domestico (defrule contabilidad (tipo-uso (uso ~domestico)) => (if (si-o-no-p "Necesita una aplicacion de contabilidad? (s/n) ") SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 70
then (assert (soft contabilidad)) ) )
;;; Los usuarios domesticos o con pocas necesidades no necesitan mucha capacidad ;;; de almacenamiento (defrule domestico-prestaciones-bajas-almacenamiento (or (tipo-uso (uso domestico)) (prestaciones bajas)) => (assert (almacenamiento-disco-duro bajo)) )
;;; Determinamos las necesidades de almacenamiento de los usuarios no ;;; domesticos (defrule no-domestico-almacenamiento (tipo-uso (uso ~domestico)) (prestaciones altas) => (if (si-o-no-p "Desea tener gran capacidad de almacenamiento? (s/n) ") then (assert (almacenamiento-disco-duro alto)) else (assert (almacenamiento-disco-duro bajo)) ) (if (si-o-no-p "Desea tener almacenamiento portatil extra? (s/n) ") then (assert (almacenamiento-externo Si)) ) )
;;; Cuando hemos acabado pasamos a configurar el equipo (defrule todo-determinado (declare (salience -1)) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 71
=> (focus configurar-domestico) )
;;; Configuracion final del ordenador domestico con la informacion recolectada (defmodule configurar-domestico "configuracion del ordenador domestico" (import MAIN ?ALL) (import compra-de-domestico ?ALL) (import preguntas-determinar-usuario ?ALL) (export ?ALL) )
;;; Creamos la instancia sobre la que trabajaremos (defrule crea-instancia-inicial (declare (salience 10)) => (make-instance [p] of Domestico) )
;;; ----- Memoria ;;; Si el precio no importa entonces mas memoria (defrule configura-memoria ?x <- (object (is-a Domestico)) (precio ?p) => (switch ?p (case No then (send ?x put-Memoria 512Mb)) (case Si then (send ?x put-Memoria 256Mb)) ) )
;;; ------ CPU ;;; Si el precio no importa entonces intel ;;; Si las prestaciones han de ser altas mas frecuencia de reloj (defrule configura-CPU ?x <- (object (is-a Domestico)) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; --------- Placa Base ;;; Cogemos cualquier placa base para portatiles ;;; Evidemente podriamos haber usado el precio o las ;;; prestaciones para decidir (defrule placa-base-portatil ?x <- (object (is-a Domestico)) => (send ?x put-Placa (find-instance ((?ins Placa_base)) (eq ?ins:Para_portatil No)))
)
;;; ---------- Software ;;; Eleccion del software ofimatico (defrule software-ofimatico ?x <- (object (is-a Domestico)) (soft ofimatica) (software-libre ?sl) (precio ?p) SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 73
=> ;;; Si se es fan del soft libre o se tiene poco dinero entonces OpenOffice (if (or (eq ?sl Si) (eq ?p Si)) then (slot-insert$ ?x Software 1 (find-instance ((?ins Ofimatica)) (= ?ins:Precio 0))) else (slot-insert$ ?x Software 1 (find-instance ((?ins Ofimatica)) (> ?ins:Precio 0))) ) )
;;; Eleccion del sistema operativo (defrule sistema-operativo ?x <- (object (is-a Domestico)) (software-libre ?sl) (precio ?p) (uso ?u) => (if (eq ?u pyme) then ;;; Las pymes pueden usar linux ;;; Si se es fan del soft libre o se tiene poco dinero entonces Linux (if (or (eq ?sl Si) (eq ?p Si)) then (slot-insert$ ?x Software 1 (find-instance ((?ins Linux)) (= ?ins:Precio 0))) else (slot-insert$ ?x Software 1 (find-instance ((?ins Windows)) (> ?ins:Precio 0))) ) else ;;; Los usuarios domesticos solo usan Windows (slot-insert$ ?x Software 1 (find-instance ((?ins Windows)) (> ?ins:Precio 0))) ) )
;;; -------- Dispositivos de salida
;;; Eleccion del monitor (defrule monitor ?x <- (object (is-a Domestico)) (precio ?p) => ;;; Si importa el precio 15p, si no 17p SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; Tarjeta de Video (defrule tarjeta-grafica ?x <- (object (is-a Domestico)) (graficos ?g) (precio ?p) => ;;; Si las necesidades son bajas o hay poco dinero 32Mb, si no 64Mb (if (or (eq ?g bajo) (eq ?p Si)) then (slot-insert$ ?x Dispositivos_de_Salida 1 (find-instance ((?ins Tarjeta_video)) (and (eq ?ins:Memoria_Video 32Mb) (eq ?ins:Para_portatil No)))) else (slot-insert$ ?x Dispositivos_de_Salida 1 (find-instance ((?ins Tarjeta_video)) (and (eq ?ins:Memoria_Video 64Mb) (eq ?ins:Para_portatil No)))) ) )
;;; -------- Dispositivos de almacenamiento
;;; Almacenamiento para domesticos ;;; Si las necesidades son grandes 200Gb, si no 80Gb ;;; si importa el precio entonces el disco mas barato (defrule almacenamiento SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; ADSL router o modem (defrule configura-ADSL ?x <- (object (is-a Domestico)) (ADSL ?r) => (switch ?r SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
;;; Crea el template consejo con la solucion (defrule solucion-domestico (declare (salience -1)) ?x <- (object (is-a Domestico)) => (assert (consejo (PC ?x))) )
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS
SISTEMAS EXPERTOS 78
11. CONCLUSIONES
Actualmente el duro, difcil y cambiante mercado competitivo se vuelve ms complejo por la gran diversidad de informacin que se ven obligados a almacenar y analizar, razn por la cual las empresas se ven en la necesidad de recurrir a poderosas y/o robustas herramientas o sistemas que les sirvan de soporte a la hora de tomar decisiones. De esta forma estos inteligentes, precisos y eficientes sistemas son adoptados por ms organizaciones, en las cuales se convierten y/o transforman en una importante estrategia de negocio. Por otra parte es importante mencionar que estos seguirn siendo usados en los todos y cada una de las reas y/o campos donde los expertos humanos sean escasos. Por consecuencia de lo anterior estos sistemas son utilizados por personas no especializadas, por lo cual el uso frecuente de los (SE) les produce y/o genera conocimiento a los usuarios.
SISTEMA EXPERTO PARA LA RECOMENDACION DE LA COMPRA DE UN PC - CLIPS