Universidad de Colima Facultad de Ingeniería Mecánica y Eléctrica Bases de datos inteligentes. TESIS que para obtener el grado de Maestro en Ciencias Área Computación Presenta: Sergio Antonio Becerra Zepeda Asesor: Mc. Rodolfo Gallardo Rosales Coquimatlán, Colima. Junio 1999 Exp.No.:__0014___ Fecha:__08-05-99_ Acta No. :___5____ C. SERGIO ANTONIO BECERRA ZEPEDA________ Domicilia: CALDERON NÚM. 191________________ Localidad. CIUDAD GUZMÁN, JALISCO___________ Teléfono (341) 2 59 41_________________________ En cumplimiento al artículo: 13 y 14 del reglamento de titulación, a los artículos: 46 y 48 del reglamento de estudios de Posgrado vigente y al articulo: 46 de las normas complementarias al reglamento de Posgrado, correspondientes al Posgrado de la Facultad de Ingeniería Mecánica y Eléctrica. Informamos a usted que ha sido autorizado por este Consejo Técnico del Posgrado su tema de Tesis para obtener el grado de Maestro en Ciencias Computacionales titulado: " BASES DE DATOS INTELIGENTES "__________________________________________ __________________________________________________________________ para ser desarrollado bajo los siguientes puntos: I II III IV V VI VII INTRODUCCIÓN SISTEMAS BASADOS EN CONOCIMIENTO SISTEMAS EXPERTOS .-ARQUITECTURA DE UNA BDI PROGRAMACIÓN DE UNA BDI ESTADO DEL ARTE CONCLUSIONES BIBLIOGRAFÍA Asimismo hacemos de su conocimiento que de acuerdo con la línea de investigación en la cual se enmarca s u proyecto ha sido autorizado como asesor de tesis el C. MC. RODOLFO GALLARDO ROSALES_____________________ A partir de la fecha de aprobación tendrá como plazo un año para presentar su examen de grado, en caso contrario tendrá usted derecho a una prórroga única de seis meses so pena de perder el registro de su proyecto. Una vez concluidos los tramites de revisión de su documento de tesis e integrado su expediente de titulación deberá recoger el oficio que acompañará a el visto bueno de su asesor de tesis, los cuales encabeza cada uno de los ejemplares de su tesis. M.C. Rodolfo Gallardo Rosales Mayo 8, 1999. H. Consejo Técnico de Posgrado de la F.I.M.E. Universidad de Colima. Presente. Por medio de este conducto, informo a ese Consejo Técnico de Posgrado que el C. Sergio Antonio Becerra Zepeda, terminó su período de revisión de tesis para: MAESTRÍA EN CIENCIAS COMPUTACIONALES Bajo el título: “BASES DE DATOS INTELIGENTES” cuyo contenido he el siguiente: 1. INTRODUCCIÓN 2. SISTEMAS BASADOS EN CONOCIMIENTO 3. SISTEMAS EXPERTOS 4. ARQUITECTURA DE UNA BDI 5. PROGRAMACIÓN DE UNA BDI 6. ESTADO DEL ARTE CONCLUSIONES el cual cumple con los requisitos necesarios para su aprobación, por lo cual lo autorizo para su impresión. Atentamente Will it to be possible than does a machine make the same as make the human brings when do think ? Turing 1950 I Abstract I Abstract Descripción: En las bases de datos inteligentes se concentra la evolución e integración de las bases de datos relacionales - activas y las técnicas avanzadas para la búsqueda, recuperación y procesamiento de la información en el área de los sistemas expertos y la inteligencia artificial. En este proyecto se pretende desarrollar un conjunto de herramientas para la construcción de aplicaciones de Bases de Datos que operen a un nivel de abstracción superior frente a las técnicas convencionales. Este mayor poder de abstracción, combinado con otras herramientas permitirá la creación de ambientes inteligentes que combinen las tecnologías dé bases de datos, bases de conocimiento e inteligencia artificial. Nuestro principal objetivo detallar el conjunto teórico mediante el cual pueda manipularse una base de datos relaciona1 de manera transparente, extrayendo conocimientos a partir del análisis de estructuras simples, interrelacionando procesos de adquisición de datos con procesos de inferencia, en suma, consolidar un punto de partida en la representación y manipulación semántica de las aplicaciones avanzadas. Presenta: Me. Sergio Antonio Becerra Zepeda Candidato al Grado de Maestro en Ciencias Computacionales. Validación: Universidad de Colima Facultad de Ingeniería Mecánica y Eléctrica Maestría en Ciencias Computacionales. Junio, 1999. II. Tabla de Contrenidos II. Tabla de Contenidos. I Abstrac II Tabla de contenidos 1. Introducción 2. Sistemas basados en conocimiento 2.1 Antecedentes 4 2.2 Enfoques de los SGDB 6 2.3 Evolución de los SGDB 7 2.4 Clasificación de los SGBD 10 2.4.1 Sistemas orientados al proceso y SGBD clásicos 10 2.4.2 SGBD semánticos 11 2.4.3 SGBD activos 11 2.4.4 SGBD deductivos 12 2.4.5 SGBD orientados al objeto 13 2.4.6 SGBD multidimensionales 14 2.5 Conocimiento y bases de datos 16 2.6 Representación del conocimiento 17 2.6.1 Representación mediante cálculo de predicados 21 2.6.2 Representación mediante redes semánticas 22 2.6.3 Representación mediante reglas de producción 23 2.6.4 Representación por objetos estructurados 24 2.6.5 Representación mediante procedimientos 25 2.6.6 Representación mediante árboles de decisión 26 2.6.7 Representación mediante listas de decisión 26 2.7 Representación lógica se un SGDB relaciona1 27 2.7.1 Estructura e integridad 27 2.7.2 Manipulación de datos 28 II. Tabla de Contenidos 3. Sistemas Expertos 3.1 Antecedentes 31 3.2 Programación lógica en sistemas expertos 32 3.2.1 Conceptos básicos 3.3 Sistemas expertos y bases de datos inteligentes 35 36 4. Arquitectura base de datos inteligente 4.1 Fundamentos 38 4.2 Descripción 39 4.3 Arquitectura 45 4.3.1 Computación Evolutiva e IPL 48 4.3.2 Conocimiento con incertidumbre 49 4.3.2.1 Tratamiento de los valores inciertos 56 4.3.2.2 Tratamiento de la información desconocida o condicional 60 5. Programación de una base de datos inteligente 5.1 Consideraciones generales 66 5.2 Base de datos persistente y en intenso 66 5.2.1 Recordset 66 5.2.2 Database Object 68 5.2.3 SQL en Visual Basic 70 5.2.4 Edición de las Bases persistente y en intenso 88 5.2.4.1 Representación gráfica de los datos 4.3.2 Manipulación de la base en intenso 92 95 5.3 Archivos binarios 96 5.4 Filtrado y preproceso 105 5.4.1 Difusor simple 105 5.4.2 Difusor con múltiples condiciones 107 5.5 Manipulación de la base de datos en intenso 108 5.6 Programación lógica paralela 114 II. Tabla de Contenidos 6. Estado del Arte 6.1 El Análisis inteligente de datos 126 6.2 Desafíos en la explotación inteligente de datos 130 7. Conclusiones III Referencias Bibliográficas 115 1 Introducción 1 1. Introducción Una de las principales preocupaciones de los desarrolladores de software destinado a la administración de bases de datos, es la creciente necesidad de incorporar herramientas que permitan acceder y manipular eficientemente las colecciones de datos que distinguen a las nuevas tecnologías de la información. Los esquemas operativos orientados a soluciones administrativas generales han multiplicado su nivel de exigencia, precisando productos que efectúen análisis sobre los datos almacenados, para responder eficientemente a consultas no planificadas; con capacidad para realizar operaciones entre los datos estructurados (propios de la mayoría de bases actuales), con distintos tipos de datos no estructurados, y - fundamentalmente- con capacidad de procesar estas características en la oferta de soluciones. En este terreno, comienza a acuñarse el término de bases de datos inteligentes en el que convergen los fundamentos teóricos de la Inteligencia Artificial con los sistemas relacionales activos; adicionando a la estructura del motor relaciona1 un motor de inferencia, que habilita conjuntos de acciones disparadas por reglas y consultas ampliadas por inferencia. Existe un robusto compendio teórico (modelos matemáticos), para la construcción de sistemas que soporten un gran número de reglas complejas para la inferencia automática de la información y el tratamiento de la incertidumbre (un soporte de reglas declarativas para expresar las interrelaciones semánticas entre objetos de la base de datos), entre este conjunto, destacan los algoritmos genéticos, la lógica difusa (fuzzy Iógic) y la lógica multievaluada. La eficiente implementación de una BDI(Base de Datos Inteligente), precisa del desarrollo de un sistema que posea la capacidad de gestionar conocimiento 1 Introducción 2 complejo a través del procesamiento de datos simples, provenientes tanto de ficheros controlados de forma autónoma como de un SGDB(Sistema Gestor de Bases de Datos); incorporar la capacidad de utilizar la experiencia en un dominio particular de aplicación para resolver clases de problemas dentro del dominio. Es importante destacar que existe un limitado número SGDB comerciales orientados exclusivamente a estos aspectos (p.ej. Datalog), de hecho, las tecnologías aplicadas en este dominio se construyen como extensiones de los sublenguajes DML Y DDL particulares del lenguaje anfitrión; tecnologías que recuperan segmentos de los avances de la Inteligencia Artificial y los expresan fundamentalmente- en la semántica de los procesos de consulta. Por ello, existen múltiples enfoques híbridos en los que encontramos esquemas operativos lógicos y procedurales, entre los que destacan los denominada minería de datos (data mining) con un sólido punto de partida: la tecnología KDD (Knowdlege Discovery in Databases) recientemente incorporada por IBM en el desarrollo de sistemas expertos. En este proyecto se pretende desarrollar un conjunto de herramientas para la construcción de aplicaciones de Bases de Datos que operen a un nivel de abstracción superior al de los manejadores de BDs actuales. Estas herramientas estarán diseñadas para facilitar su integración con los sofisticados ambientes de desarrollo de uno de los principales manejadores de Bases de Datos actuales: Jet@ de Microsoft. Este mayor poder de abstracción combinado con sus posibilidades de integración con otras herramientas permitirá la creación de ambientes inteligentes orientados a usuarios finales que combinen las tecnologías de bases de datos, bases de conocimiento, programación orientada a objetos, e interfaces intuitivas para usuarios finales. En el desarrollo de nuestra investigación pormenorizamos sobre el conjunto de 1 Introducción 3 indicadores involucrados en la arquitectura de bases de datos, dando cuenta de los esquemas operativos y evolución de los SGDB, el impacto de las tecnologías aplicadas a la inteligencia artificial sobre éste dominio en particular (representación del conocimiento) y los modelos matemáticos que dan coherencia al conjunto. En todos los casos, se ejemplifican las operaciones y procesos considerando el enfoque relaciona1 con que opera Jet. Finalmente, se desarrollan prototipos con el objetivo de acreditarla validez del conjunto teórico expuesto; dichos, operan en dos formas: mediante una interfaz entre aplicaciones donde el sistema manipula una base de datos relaciona1 (base persistente), de la que se obtienen los datos (base en intenso) que serán procesados tanto por una aplicación periférica (motor de inferencia): Prolog; y mediante objetos y procedimientos desarrollados específicamente en el lenguaje nativo de la aplicación en general: Visual Basic 6 Enterprise Edition. Los prototipos recuperan y expresan los nudos de nuestra investigación, en su diseño hemos considerado distintas vistas que dan transparencia a los procesos de que se ocupa el sistema, esto es, en todo momento es posible editar la estructura de la base persistente, los datos concentrados en la base en intenso y el repositorio de reglas que determina el comportamiento del motor de inferencia en razón directa a los datos q ue procesa. 2. Sistemas basados en conocimiento 4 2. Sistemas Basados en Conocimiento. 2.1 Antecedentes La sofisticación de la tecnología moderna de las bases de datos es el resultado de la evolución que a lo largo de varias décadas ha tenido lugar en el procesamiento de los datos y en la gestión de la información. La tecnología de acceso a los datos se ha desarrollado desde los primitivos de los años cincuenta hasta los potentes e integrados sistemas de hoy en día, arrastrados de un lado por las necesidades y las demandas de la administración y, de otro, restringida por las limitaciones de la tecnología. Las expectativas de la administración han crecido paralelamente a la evolución de las tecnologías. Los primeros sistemas de procesamiento de datos ejecutaron las tareas administrativas para reducir el papeleo. Más recientemente, los sistemas se han expandido hacia la producción y la gestión de la información, la que se ha convertido en un recurso vital para las compañías. Actualmente, la función más importante de los sistemas de bases de datos consiste en proporcionar el fundamento a los sistemas de información para la gestión corporativa. Una base de datos es un conjunto de Información, en sentido amplio, el término puede aplicarse a cualquier agregado de datos; técnicamente es una colección de datos, agrupados con un propósito específico en una o mas entidades lógicas (archivos). En términos estrictos, “base de datos”, hace referencia sólo al lugar donde está depositada la información (hablando tanto desde la perspectiva del hardware, como del software), dicha información -generalmente- está soportada por un sistema para su gestión SGBD. Las bases de datos son accedidas generalmente por un conjunto de aplicaciones periféricas que incluyen tecnologías y herramientas de muy diverso tipo con los que interactúa y que sirven de interfaz entre los usuarios y la base de datos. En la actualidad, el impulso impuesto por el desarrollo de los sistemas de información, ha 2. Sistemas basados en conocimiento 5 provocado la evolución de las bases de datos en conjuntos abstractos, denominados almacenes de datos (datawarehouse). Incorporar conocimiento en un sistema de bases de datos fue sugerido por el desarrollo en el campo de la Inteligencia Artificial (programación de comportamientos inteligentes). La investigación en IA incluye estudios sobre la representación de reglas lógicas que operen sobre los datos, esto es sistemas que descansan sobre una base de conocimientos para razonar sobre el conjunto de datos. Históricamente, la evolución de los SGBD nos ha proporcionado métodos para analizar datos y encontrar correlaciones y dependencias entre ellos. Sin embargo, el análisis de datos ha cambiado recientemente y ha adquirido una mayor importancia, debido principalmente a tres factores: a) Incremento de la potencia de los ordenadores. Aunque la mayoría de los métodos matemáticos fueron desarrollados durante los años 60 y 70, la potencia de cálculo de los grandes ordenadores de aquella época (equivalente a la de los ordenadores personales de hoy en día) restringía su aplicación a pequeños ejemplos “de juguete”, fuera de los cuales los resultados resultaban demasiado pobres. Algo similar ha ocurrido con la capacidad de almacenamiento de los datos y su coste asociado. b) Incremento del ritmo de adquisición de datos. El crecimiento de la cantidad de datos almacenados se ve favorecido no sólo por el abaratamiento de los discos y sistemas de almacenamiento masivo, sino también por la automatización de muchos experimentos y técnicas de recogida de datos. Se estima que la cantidad de información almacenada en todo el mundo se duplica cada 20 meses; el número y tamaño de las bases de datos probablemente crece más rápidamente. c) Por último, han surgido nuevos métodos, principalmente de aprendizaje y representación de conocimiento, desarrollados por la comunidad de inteligencia artificial, estadística y física de dinámicas no lineales. Estos métodos complementan a 2. Sistemas basados en conocimiento 6 las tradicionales técnicas estadísticas en el sentido de que son capaces de inducir relaciones cualitativas generales, o leyes. Estos nuevos métodos matemáticos y técnicas software, para análisis inteligente de datos y búsqueda de regularidades en los mismos, se denominan actualmente técnicas de minería de datos o data mining. A su vez, la minería de datos ha permitido el rápido desarrollo de lo que se conoce como descubrimiento de conocimiento en bases de datos. En este capítulo, desarrollaremos un estudio introductorio a los SGBD, pormenorizando en su enfoque y evolución, derivando los fundamentos teóricos en que se soportará el desarrollo de bases de datos inteligentes. 2.2 Enfoques de los SGBD Una clasificación primaria de los SGBD, nos permite establecer los tipos básicos según el tipo de estructura de datos que soporta: • Enfoque jerárquico. Parte de una estructura de datos basada en un conjunto de registros diferentes guardados en un único archivo y jerarquizados entre sí mediante ligas. Su estructura de árbol, impone que un elemento padre puede tener varios elementos hijo, pero no su inverso. Precisa de punteros físicos. • Enfoque de Red (Codasyl). Similar al enfoque jerárquico en tanto al uso de registros y ligas, pero dentro del esquema jerárquico un elemento de inferior jerarquía puede tener varios elementos situados a un nivel superior del mismo. Las bases de datos gestionadas bajo este enfoque implementan registros conectores (estructuras de datos que sirven para asociar a otras dentro de un fichero). Precisa de punteros físicos • Enfoque relacional. Se caracteriza por la representación de datos en forma de 2. Sistemas basados en conocimiento 7 tablas, en las que los conjuntos de registros tienen un formato fijo e idéntica estructura. El enfoque relaciona1 en bases de datos parte del modelo relaciona1 en matemáticas y, por tanto, son susceptibles de aplicar al minio todas las formulaciones teóricas que éste presenta; en objetivos posteriores desarrollamos una descripción exhaustiva de este enfoque, puesto que el prototipo BDI, de nuestro estudio utiliza un SGBD relaciona1 (Microsoft Jet). • Orientado a objetos. Basada en el encapsulamiento de código y datos en unidades denominadas objetos, que interactúan con el sistema a través de mensajes. El agrupamiento de objetos con métodos y variables comunes se estructura en clases jerárquicas. • Enfoque Lógico. No es esencialmente distinto al enfoque relacional, pero se sustenta en la lógica de predicados de primer orden para representar y manipular los datos, con lo que se obtiene un modelo relaciona1 flexible con capacidades para la deducción automática, a éste pertenecen los SGBD deductivos. Una característica de los tres primeros modelos mencionados es que sólo aceptan datos escalares individuales tipificados y nulos ("NULL"). Como característica general, los esquemas han sido desarrollados con la capacidad de operar sobre datos “ideales”, en el supuesto de que la información a procesar es exacta, correcta y bien definida. 2.3 Evolución de los SGBD La historia de las bases de datos inicia a mediados de los años cincuenta, en el momento en que comenzaron a introducirse los ordenadores para automatizar la gestión de las empresas, fundamentalmente con desarrollos en COBOL, y se han caracterizado por el uso de tecnologías orientadas a la estructuración de datos mediante modelos jerárquicos y Codasyl (p.ej. IMS de IBM; IDMS de Cullinet) de lógica procedimental, que obligan al programador a desplazarse registro a registro, hecho que implica una escasa flexibilidad. 2. Sistemas basados en conocimiento 8 En 1970 se propuso el modelo relacional, basado en los trabajos del Dr. Codd, básicamente el modelo matemático que dio fundamentos a la segunda generación de SGBD, caracterizada por una mayor independencia físico-lógica, dado que actúan sobre conjuntos de registros; entre ellas destacan ORACLE, DB2, INGRES, INFORMIX, SYBASE, etc. Codd propuso un modelo simple de datos en el que todos ellos se representarían en tablas constituidas por filas y columnas. A dichas tablas se les dio en nombre matemático de relaciones, denominándose así el sistema como relacional. Codd también propuso dos lenguajes para manipular los datos en las tablas: álgebra y cálculo relacional, que soportan la manipulación de los datos sobre la base de operadores lógicos en lugar de los punteros físicos utilizados en los modelos jerárquicos y de red. El resultado fue la aparición de sistemas relacionales durante la última mitad de los setenta que soportaban lenguajes como el Structured Query Language (SQL), el Query Language (Quel) y el Query-by-Example(QBE): los trabajos de investigación que se realizaron durante la década de los ochenta se centraron en la optimización de consultas, lenguajes de alto nivel, teoría de la normalización, organizaciones físicas para el almacenamiento de las relaciones, algoritmos para la gestión de memorias intermedias (buffers), técnicas de indexación para un acceso asociativo más rápido (distintas variaciones de los árboles), sistemas distribuidos, diccionarios de datos, gestión de transacciones, etc. Estas investigaciones han tenido como consecuencia la elevada tasa de transacciones de muchos de los productos actuales que permiten asegurar entornos transaccionales en línea (OLTP) muy eficientes y seguros. También cabe recordar que durante la primera mitad de los ochenta se estandariza el lenguaje SQL (el SQUANSI se aprueba en 1986), ofreciendo, al cabo de poco tiempo, prácticamente todos los productos una interfaz SQL, aún los no relacionales (sistemas “renacidos”). El enfoque relaciona1 permite a los programadores la manipulación de tuplas procedentes de distintos ficheros y tablas en una misma base de datos mediante consultas estructuradas, habilitando acciones múltiples sobre los registros. La aparición 2. Sistemas basados en conocimiento 9 y estandarización de SQL, permitió una mayor integración, multiplicó las tareas asignadas a las bases de datos e implicó el desarrollo de sistemas de uso transparente, cuya facilidad de manejo derivó en una excepcional productividad e impresionante impacto económico. La tercer generación de SGBD, tiene como principal característica la optimización relaciona1 de los sistemas en entornos multiusuario, la gestión de objetos que permite tipos de datos complejos (texto, imagen, audio...), el encapsulamiento de la semántica de datos que proporciona un soporte robusto para la recuperación automática de la información y mantenimiento de las restricciones de integridad entre datos. Es posible clasificar los distintos sistemas como gestores de información “natural”. En la evolución de esta generación destacan dos indicadores: una arquitectura a tres niveles con descripción recursiva de datos (ANSI, ISO) como referencia; y el modelo relacional. Nivel Definición Conceptual Nivel estructural de la base de datos que define su esquema lógico. Externo Nivel estructural de la base de datos que define las vistas de los usuarios. Interno Nivel estructural de la base de datos que define la vista física. Tabla 1. Arquitectura de tres niveles. La explosión de los sistemas de información obligó a los desarrolladores de SGBD a la implementación de potentes gestores destinados a usuarios finales, con interfaces intuitivas -gráficas fundamentalmente- dotadas de asistentes generadores de código: Access (Visual Basic, SQL), Visual Fox (SQL), En la siguiente figura, ilustramos un resumen de la cronología expuesta: 2. Sistemas basados en conocimiento 10 Archivos con acceso directo Archivos Secuenciales 1960 SGBD RELACIONALES. SGBD JERARQUICOS 1970 SGBD RED Publicación del modelo Relaciona1 de Codd 1980 2000 SGBD ORIENTADOS AL OBJETO SGBD LÓGICOS (REL AMPLIADOS) 2.4 Clasificación de los SGBD 2.4.1 Sistemas Orientados al proceso y SGBD clásicos Sistemas que operan sobre conjuntos de registros agrupados en “ficheros”, cuya naturaleza reside en la recuperación y almacenamiento simple, dado que no almacenan ningún tipo de información para el procesamiento de datos, las restricciones, procesos y el control se distribuye en los programas que acceden a los ficheros. Estos sistemas “clásicos” enfrentan graves problemas de redundancia al encontrarse dispersa la semántica de los datos en los programas. Se distinguen por el acceso secuencial a cadenas de caracteres, interpretadas por los programas. Este tipo de sistema no es considerado como una base de datos en el sentido estricto del término; será hasta que aparezcan los primeros ficheros u archivos en los que pueda almacenarse la descripción de los datos (catálogo o diccionario) que consideremos la primer clasificación de SGBD (Clásicos), aún cuando prácticamente todas las restricciones sobre los datos se comprueban en los programas. 2. Sistemas basados en conocimiento 11 2.4.2 SGBD semánticos En la medida en que evolucionaron los componentes físicos de los ordenadores y se hizo posible el uso de mayor memoria para operaciones lógicas, los SGBD incorporaron mayor número de información sobre los datos en el propio catálogo de la base de datos, habilitando restricciones de diferentes tipos (CHECK), aserciones e incluso dominios, así, en un SGBD semántico la base de datos incluye información sobre restricciones, información sobre datos y los datos en sí. 2.4.3 SGBD activos En este tipo de sistemas, los desarrolladores incorporan acciones que el sistema ejecuta sin la intervención del usuario, a través de disparadores, reglas, demonios, etc. Tecnología basada en procedimientos que se activan de forma automática, y que han sido previamente especificados en la fase de definición -intensión- de la base de datos. 2. Sistemas basados en conocimiento 12 De hecho, representan patrones invocados donde las condiciones para invocar se revisan en cada paso, frente a los SGBD semánticos, encontramos además, en la base de datos información de control. Atendiendo los conceptos de algunos autores, un SGBD activo se distingue porque su modelo de conocimiento describe las situaciones y las reacciones correspondientes: Evento, Condición, Acción (ECA, cuando ocurre un evento se evalúa la condición y si ésta se satisface se ejecuta la acción). Sistemas que incorporan una ampliación al Lenguaje de Definición de Datos (LDD), con el objetivo de definir con mayor precisión y naturalidad el conjunto de reglas que se ejecutan, el uso de SQL es prioritario en el desarrollo de estos sistemas. 2.4.4 SGBD deductivos La programación lógica ha ido evolucionando desde mediados de la década pasada hasta nuestros días ampliando sus horizontes en el desarrollo de sistemas gestores de bases de datos, la programación lógica, en forma similar a los primeros desarrollos de bases de datos. Centra su acción en el núcleo de los programas que acceden a los datos, de hecho, la programación lógica se utiliza principalmente como lenguaje de consulta, mientras que la tecnología de base de datos se emplea para asegurar un almacenamiento eficiente y fiable. Los SGBD deductivos se puede implementar añadiendo al SGBD facilidades para almacenar y gestionar reglas, extendiendo el procesador de consultas del SGBD o acoplando un SGBD con un sistema Prolog. 2. Sistemas basados en conocimiento 13 Aunque, normalmente, en lugar de utilizar un lenguaje como Prolog (que procesa una tupla a la vez) se suele emplear un lenguaje relaciona1 declarativo denominado DATALOG, que es poco procedimental y orientado a conjuntos, lo que lo hace más adecuado para bases de datos. Sintácticamente el DATALOG es muy parecido al Prolog, existiendo en la actualidad diferentes versiones. Este tipo de lenguajes resulta muy útil para hacer consultas de tipo recursivo, siendo clásica la de los ancestros de una persona (conociendo que los padres de una persona son sus ancestros, así como los padres de los ancestros). Sin embargo, todavía no existen productos comerciales que puedan incluirse en esta categoría, aunque algunas de sus nociones se van incorporando en la nueva generación de SGBD relacionales-activos” Las reglas, suelen almacenarse en ficheros de texto o con formato plano independientes, con el objetivo de ser “reprogramables” y se accede a ellos generalmente- en forma binaria; el motor de inferencia se encuentran en el núcleo del programa que accede a los datos. En sistemas más complejos se enlaza el modulo de “respuesta” como la entrada “inf. de procesos” de una SGBD activa. 2.4.5 SGBD orientadas al objeto Conocidos también como SGBO, aunque podríamos considerarlos como la tendencia a 2. Sistemas basados en conocimiento 14 extender los SGBD relacionales mediante la incorporación de la programación orientada a objetos, en esta tendencia destacan: interfaces de PO0 sobre motores relacionales (Visual Basic, VC++, J++, etc.), herramientas de conversión de esquemas relacionales a esquemas OO y viceversa, herramientas de migración de esquemas, interoperabilidad de BDR y BDO, etc. Este tipo de sistemas comienza a incursionar en forma sólida en el mercado, debido a la aparición de un número cada vez mayor de herramientas de conectividad entre los mundos relacional y orientado a objetos: • lnterfaces de programación orientada a objetos sobre motores relacionales, • Herramientas de conversión de esquemas relacionales a esquemas OO y viceversa, • Herramientas de migración de esquemas, bases de datos y aplicaciones relacionales a OO y viceversa, • Herramientas que aseguran la interoperabilidad de bases de datos relacionales y bases de objetos. Algunos aspectos en los que se considera necesaria una mayor investigación, son: combinar acceso declarativo y acceso navegacional, soportar completamente la funcionalidad de los objetos compuestos, acceso a los metadatos, almacenamiento de los servicios (métodos) en la base de datos, definición dinámica de clases, mecanismos para definir restricciones y disparadores, gestión de la extensión de las clases, soporte de vistas y lenguajes de consulta y de optimización, es conveniente particularizar que en febrero de 1997 en reunión del grupo ISO/IEC JTC1/SC21M/G3 se presentó la solicitud de aprobación del SQL3 (las partes Foundafion, Bindings, Persistent Stored Modules y Object) como norma internacional con efectos a diciembre de 1998; actualmente existe una sólida convergencia entre OQL y SQL3. 2.4.6 SGBD multidimensionales 2. Sistemas basados en conocimiento 15 Los sistemas de base relacional han sido diseñado específicamente para soportar el procesamiento analítico de los datos: On Line Analytical Processing (OLAP), representan los datos mediante matrices de n dimensiones denominadas “hipercubos” asignando a cada dimensión un dominio específico jerarquizado, cada casilla del hipercubo contiene datos agregados (información de...) que relacionan los elementos entre las distintas dimensiones, de hecho, éstas actúan como apuntadores para identificar los valores dentro de la matriz. Es importante destacar que el modelo de matriz de datos que aplica la lógica multidimensional no está asociado a una representación física de los datos, ni utiliza LDD particulares, sus principales diferencias frente al modelo de tablas relacionadas, reside en que todos los dominios pueden encontrase relacionados, en contraparte dentro del esquema de tablas, las relaciones afectan sólo campos clave o campos con naturaleza idéntica-asociativa. Otra significativa diferencia es que los sistemas relacionales soportan estructuras planas y presentan serias dificultades para gestionar interrelaciones multidimensionales por ejemplo, las limitaciones funcionales de SQL que sólo pueden efectuar SUM (sumatoria) y AVG (Average, promedio) del mismo campo en todas las tuplas, pero no puede aplicarse a diferentes columnas en una misma tupla. 2. Sistemas basados en conocimiento 16 2.5 Conocimiento y bases de datos Los métodos generales desarrollados para la resolución de problemas y técnicas de s búsqueda al inicio de la era de la IA demostraron no ser suficientes para resolver los problemas orientados a las aplicaciones, ni fueron capaces de satisfacer los difíciles requerimientos de la investigación. A este conjunto de métodos, procedimientos y técnicas, se lo conoce como Inteligencia Artificial Débil. La principal conclusión que se derivó de este trabajo inicial fue que los problemas difíciles sólo podrían ser resueltos con la ayuda del conocimiento específico acerca del dominio del problema. La aplicación de estas ideas dio lugar al desarrollo de los denominados Sistemas Basados en Conocimiento (Knowledge Based Systems) y al aparecimiento de la Ingeniería Cognoscitiva, como una rama de la IA, que estudia los sistemas basados en el conocimiento. La definición de un sistema basado en conocimiento puede resumirse de la siguiente manera: “Es un sistema computarizado capaz de resolver problemas en el dominio en el cual posee conocimiento específico”. La solución es esencialmente la misma que hubiera dado un ser humano confrontado con idéntico problema, aunque no necesariamente el proceso seguido por ambos puede ser igual. El simple concepto dado, puede causar confusión ya que muchos sistemas basados en programas convencionales podrían ser incorrectamente categorizados como sistemas basados en conocimiento. Esta inconsistencia puede ser aclarada, sobre la base de tres conceptos fundamentales que distinguen a los sistemas basados en conocimiento de los programas algorítmicos convencionales y de los programas generales basados en búsqueda: 1 .La separación que existe entre el conocimiento, y la forma cómo éste es utilizado. 2. El uso de conocimiento específico de un determinado dominio. 2. Sistemas basados en conocimiento 17 3. La naturaleza heurística, antes que algorítmica del conocimiento utilizado. Dicho de una manera simple, los programas convencionales utilizan algoritmos para resolver problemas, mientras que los sistemas basados en conocimiento resuelven problemas donde las soluciones algorítmicas no existen o son muy costosas para ser implementadas. Actualmente, el amplio éxito de los sistemas de bases de datos, combinado con las necesidades de gestión de información y los desarrollos que han emanado del estudio de la IA, han dado como resultado un interés creciente en extender los sistemas de bases de datos a sistemas de bases de datos inteligentes, elevando su utilidad al punto en que pueda construirse conocimiento a partir de datos simples y que éste — conocimiento— permita controlare interpretar la estructura en su conjunto, Wiederhold , los describe de la siguiente manera: • Conocimiento estructural. Conocimiento sobre las dependencias y restricciones entre los datos. • Conocimiento general procedimental. Conocimiento que sólo puede ser descrito por un procedimiento. • Conocimiento específico de la aplicación. Conocimiento que está determinado por las reglas y convenios que se aplican en un dominio de problema en particular. En el desarrollo de una base de datos inteligente implica la representación del conocimiento, definido más allá de su forma extensa (hechos e instancias almacenados en la base), mediante mecanismos lógicos. 2.6 Representación del conocimiento La representación del conocimiento es el punto neural de la programación lógica cuando ésta se aplica al procesamiento de datos, comprende el estudio de formalismos y estructuras en el tratamiento de objetos, hechos, eventos, relaciones, etc. Los 2. Sistemas basados en conocimiento 18 tradicionales sistemas basados en conocimiento han utilizado con gran asiduidad, para representar el conocimiento, una extensión de la lógica de proposiciones, denominada lógica "0+" o representación objeto-atributo-valor. Fundamentemos, ¿ Qué es el conocimiento y qué técnicas se utilizan para represetarlo y manipularlo ? Puede ser definido como el conjunto de hechos y principios acumulados por la humanidad, o el acto, hecho o estado de conocer. Es la familiaridad con el lenguaje, conceptos, procedimientos, reglas, ideas, abstracciones, lugares, costumbres y asociaciones, unida a la habilidad de utilizar estas nociones en forma efectiva para modelar diferentes aspectos del universo que nos rodea. Los conceptos de conocimiento e inteligencia están íntimamente ligados. La inteligencia requiere de la posesión y acceso al conocimiento. Conocimiento no debe ser confundido con datos o información. El conocimiento incluye y requiere del uso de datos e información. Además, combina relaciones, dependencias, y la noción del saber con datos e información. En el caso que nos ocupa, tenemos la certeza de que de los datos en bruto raramente se obtendrán de una manera directa beneficios. Su verdadero valor radica en la posibilidad de extraer información útil para el soporte de decisiones o la exploración y compresión del fenómeno que es la fuente de datos. En general, nuestra habilidad para analizar y comprender conjuntos de datos masivos decrece mucho más rápidamente que nuestra capacidad de unir y almacenar estos datos. Por tanto, es necesario una nueva generación de técnicas y herramientas computacionales para soportar la extracción de conocimiento útil para grandes volúmenes de datos. Otros términos relacionados con el conocimiento y que son ocasionalmente empleados son epistemología y metaconocimiento. Epistemología es el estudio de la naturaleza del conocimiento, mientras que metaconocimiento es conocimiento acerca del 2. Sistemas basados en conocimiento 19 conocimiento, esto es, conocimiento acerca de lo que se conoce. El conocimiento puede ser de tipo procedimental, declarativo o heurístico. Conocimiento procedimental es aquel conocimiento compilado que se refiere a la forma de realizar una cierta tarea (el saber como hacerlo). Por ejemplo, los pasos necesarios para resolver una ecuación algebraica son expresados como conocimiento procedimental. Por otro lado, el conocimiento declarativo es conocimiento pasivo, expresado como sentencias acerca de los hechos del mundo que nos rodea (el saber que hacer). La información personal en una base de datos es un típico ejemplo de conocimiento declarativo. Tales tipos de datos son piezas explícitas de conocimiento independiente. El conocimiento heurístico es un tipo especial de conocimiento usado por los humanos para resolver problemas complejos. El adjetivo heurístico significa medio para descubrir. Está relacionado con la palabra griega heuriskein que significa descubrir, encontrar. Se entiende por heurístico a un criterio, estrategia, método o truco utilizado para simplificar la solución de problemas. El conocimiento heurístico usualmente se lo adquiere a través de la experiencia. Dado que el conocimiento es importante y primordial para el comportamiento inteligente, su representación constituye una de las máximas prioridades de la investigación en IA. El conocimiento puede ser representado como imágenes mentales en nuestros pensamientos, como palabras habladas o escritas en algún lenguaje, en forma gráfica o en imágenes, como cadenas de caracteres o colecciones de señales eléctricas o magnéticas dentro de un computador. En nuestro estudio, consideraremos las representaciones escritas y sus correspondientes estructuras de datos utilizadas para su almacenamiento en un computador. La forma de representación que se escoja dependerá del tipo de problema a ser resuelto y de los métodos de inferencia que mejor respondan al conjunto. 2. Sistemas basados en conocimiento 20 Una representación del conocimiento puede ser un esquema o dispositivo utilizado para capturar los elementos esenciales del dominio de un problema. Una representación manipulable es aquella que facilita la computación. En representaciones manipulables, la información es accesible a otras entidades que usan la representación como parte de una computación. Debido a la variedad de formas que el conocimiento puede asumir, los problemas involucrados en el desarrollo de una representación del conocimiento son complejos, interrelacionados y dependientes del objetivo. En términos generales, se debe tratar que el conocimiento esté representado de tal forma que: • Capture generalizaciones. • Pueda ser comprendido por todas las personas que vayan a proporcionarlo y procesarlo. • Pueda ser fácilmente modificado. • Pueda ser utilizado en diversas situaciones aún cuando no sea totalmente exacto o completo. • Pueda ser utilizado para reducir el rango de posibilidades que usualmente debería considerarse para buscar soluciones. El conocimiento declarativo puede ser representado con modelos relacionales y esquemas basados en lógica. Los modelos relacionales pueden representar el conocimiento en forma de árboles, grafos o redes semánticas. Los esquemas de representación lógica incluyen el uso de lógica proposicional y lógica de predicados. Los modelos procedimentales y sus esquemas de representación almacenan conocimiento en la forma de cómo hacer las cosas. Pueden estar caracterizados por gramáticas formales, usualmente implantadas por sistemas procedimentales y sistemas basados en reglas (sistemas de producción). o lenguajes 2. Sistemas basados en conocimiento 21 Las representaciones declarativas son usualmente más expansivas y costosas, en el sentido que la enumeración puede ser redundante e ineficiente. Sin embargo, la modificación de las representaciones simplemente se agrega o se declarativas elimina es usualmente conocimiento. Las muy fácil; representaciones’ procedimentales, en cambio, pueden ser más compactas, sacrificando flexibilidad. Representaciones prácticas pueden incluir elementos tanto declarativos (listado de hechos conocidos), como procedimentales (un conjunto de reglas para manipular los hechos). 2.6.1 Representación mediante cálculo de predicados Fundamentado en la lógica simbólica, trata esencialmente las relaciones entre enunciados o proposiciones simples y las compuestas (mediante conectivas aplicadas a proposiciones simples). Las conectivas utilizadas son las siguientes: Conectiva Denotada como Simbología Y AND ^,& O OR v (no exclusivo) NO NOT ¬ IMPLICA IF-THEN ⊃⇒ EQUIVALENTE IF-ANO-ONLY-IF ≡ El resultado de evaluar una proposición es falso o verdadero: P Q P^Q PvQ ~P P⊃ ⊃Q P≡Q T T T T F T T T F F T F F F F T F T T T F F F F F T T T 2. Sistemas basados en conocimiento 22 Un sistema que implemente la inferencia por cálculo de predicados deberá diferenciar los siguientes elementos: • Términos, los cuales pueden ser; constantes, variables o funciones • Conjuntos de predicados asociados a uno o más argumentos definidos previamente • Conjuntos de conectivas u operadores lógicos (v. Tabla) • Cuantificadores universales: existe, para todo (∀ (X)). Este mecanismo de inferencia es el más viable para la implementación de sistemas de naturaleza deductiva, sin embargo resulta -en el mejor de los casos- insuficiente en la implementación de sistemas de naturaleza inductiva. 2.6.2 Representación mediante redes semánticas Tipo de representación surgida de trabajo en reconocimiento de lenguaje natural y la búsqueda de modelos para la memoria humana en que intervienen dos tipos de entidades básicas: Nodos y Ligas asociativas, donde los nodos pueden ser de dos tipos: • Referidos en forma directa al significado del concepto - nodo tipo (clase). • Referidos indirectamente al concepto mediante un apuntador al nodo tipo - nodo “token” (instancia u objeto). Los “conceptos” se definen en forma indirecta en la red semántica mediante la referencia a otros nodos, que a su vez se refieren a otros, etc. Esto es análogo a la definición en un diccionario, en donde se usan otras palabras (nodos) para definir una palabra, que a su vez están definidas en función de otras palabras. Las ligas también pueden ser de diferentes tipos indicando diferentes relaciones entre nodos, algunas de las más usadas son: 2. Sistemas basados en conocimiento • B es una subclase o instancia de A (es) • B y A están relacionados en la forma indicada por R • Conjunción (A & B & C ... ) • Disjunción ( Av B v C . ..) 23 La red semántica se puede ver dividida en planos. En cada plano se tiene la definición de un concepto, pero estos tienen ligas a otros planos en que hay conceptos relacionados. Es decir que un nodo tiene ligas a nodos del mismo plano que lo definen, pero también a nodos de otros planos que están relacionados, como subclases, superclases, analogías, etc. En cada plano hay un nodo tipo y una serie de nodos “token”, los conceptos representados de esta manera se pueden definir inmediatamente (la definición directa mediante los nodos en el mismo plano) y por concepto completo (todos los nodos y relaciones a las que se pueda llegar en red partiendo de dicho nodo). En general es posible usar este tipo de estructuras para diferentes tipos de razonamiento: 1.- Búsqueda asociativa: Encontrar si están relacionados dos o más conceptos, y su tipo de relación mediante el seguimiento de la red hasta encontrar las interacciones. 2.- Reconocimiento: Dada una serie de características (nodos “token”) encontrar el concepto (nodo clase) que mejor las define mediante su búsqueda y seguimiento en la red. 3.- Descripción: Expresar un concepto en base a sus componentes y relaciones entre ellas (procesamiento del lenguaje natural). 2.6.3 Representación del conocimiento por reglas de producción Representación que utiliza reglas de reestructuración en el reconocimiento sintáctico del Lenguaje Natural; tiene sus antecedentes en los trabajos de Post (1943), los algoritmos 2. Sistemas basados en conocimiento 24 de Markov y en la lingüística de Chomsky. Básicamente, una regla de producción consta de un par ordenado de símbolos (situación-acción), la sintaxis de las reglas es diversa y se estructura en función del proceso de selección y ejecución de éstas. En el desarrollo de un motor que utilice está representación, se precisa de un intérprete que accese a las reglas, manipule variables y en algunos casos clases sintácticas (parsing), en éste, recae el proceso de inferencia denominado "control": • Selección de las reglas pertinentes. • Validación (reglas cumplidas) • Ejecución de las acciones especificadas por las reglas cumplidas. Podemos observar que funcionalmente el sistema opera en fases de reconocimiento (selección de reglas pertinentes, validación) y acción. El proceso de validación deberá además contar con un esquema de operación para discriminar en caso de que exista más de una regla aplicable a una situación dada: a) Establecer orden en los datos b) Clasificar reglas por prioridad de ejecución c) Ejecutar la regla más recientemente instanciada d) Metareglas... Los sistemas basados en la representación del conocimiento mediante producción de regias son útiles en los casos donde se trabaja con gran cantidad de estados independientes: sistemas con objetivos amplios y acciones de corto alcance, dada su representación modular y uniforme. 2.6.4 Representación del conocimiento por objetos estructurados Los objetos estructurados tienen diversas denominaciones, entre las que destacan: Esquemas (Bartlett 1932), Frames (Minsky 1975), Scripts (Schank, Abelson 1977), 2. Sistemas basados en conocimiento 25 Objetos (Goldeberg. 1977, Steels 1982, entre otros), Descriptores funcionales (Kay M. 1982), las características generales de este modelo de representación son: a) Cada objeto tiene asociado un conjunto de atributos que lo caracterizan. b) Cada atributo tiene asociado un valor, el cual a su vez puede ser otro objeto c) Los atributos(valor) corresponden a: 1. El nombre de un procedimiento específico (ejecutable automáticamente o mediante requisición). 2. Apuntadores a otros objetos. 3. Valores obtenidos durante ejecución. 4. Valores por defecto 5. Constantes. Los estados de los objetos definidos por el sistema son: Activos Cuando se encuentra presente en la lista de hipótesis en curso de tratamiento. Semiactivos Cuando es parte de una hipótesis alternativa. Inactivos Cuando el objeto se ha eliminado o no ha sido instanciado. 2.6.5 Representación mediante procedimientos Este tipo de representación utiliza un lenguaje de alto nivel en el tratamiento de los conocimientos, en forma explícita mediante un programa. El comportamiento del programa está dirigido por instrucciones, los conocimientos que trata no se expresan en forma declarativa, sino que se encuentran a través de todo el programa. 2. Sistemas basados en conocimiento 26 2.6.6 Representación mediante árboles de decisión Los árboles de decisión son una forma de representación sencilla, muy usada entre los sistemas de aprendizaje supervisado, para clasificar ejemplos en un número finito de clases. Se basan en la partición del conjunto de ejemplos según ciertas condiciones que se aplican a los valores de los atributos. Su potencia descriptiva viene limitada por las condiciones o reglas con las que se divide el conjunto de entrenamiento; por ejemplo, estas reglas pueden ser simplemente relaciones de igualdad entre un atributo y un valor, o relaciones de comparación (“mayor que”, etc.), etc. Los sistemas basados en árboles de decisión forman una familia llamada TDIDT (Top-Down Induction of Decisión Trees), cuyo representante más conocido es ID3 (Interactive Dichotomizer) se basa en la reducción de la entropía media para seleccionar el atributo que genera cada partición (cada nodo del árbol), seleccionando aquél con el que la reducción es máxima. Los nodos del árbol están etiquetados con nombres de atributos, las ramas con los posibles valores del atributo, y las hojas con las diferentes clases. 2.6.7 Representación mediante listas de decisión Las listas de decisión son otra forma de representación basada en lógica de proposiciones. Es una generalización de los árboles de decisión y de representaciones conjuntivas (CNF) y disyuntivas (DNF). Una lista de decisión es una lista de pares de la forma (d1, C1 ), (d2, C2 ),..., (d n , C n ) donde cada d i es una descripción elemental, cada C i es una clase, y la última descripción C n es el valor verdadero. La clase de un objeto será C j cuando d j sea la primera descripción que lo satisface. Por tanto, se puede pensar en una lista de decisión como en una regla de la forma “si di entonces C1 , sino si d2 ..., sino si d n entonces C n ". Se pretende mejorar el aprendizaje a partir de ejemplos con ruido (al evitar la dependencia de ejemplos específicos e incorporar una poda del espacio de búsqueda). Las descripciones elementales de los pares que forman la lista de decisión tienen la misma forma que los complejos de AQ. 2. Sistemas basados en conocimiento 27 2.7 Representación Lógica de un SGDB relaciona1 En los siguientes párrafos ofreceremos una visión detallada del esquema relacional, desde la óptica de la lógica de primer orden, ocupándonos de 4a estructura e integridad de los datos así como de su manipulación. 2.7.1 Estructura e integridad. Con atención a cómo se encuentran estructurados los datos: Un dominio es un conjunto -normalmente finito- de valores. El producto cartesiano de una serie de dominios D1;D2; ...;Dn, denotado por: D1xD2x... x Di, es el conjunto de todas las tuplas (x 1;x 2;...x n,) tales que para cualquier i, i = 1 ;...; se verifica que X i n ∈ D i. Se llama relación a cualquier subconjunto del producto cartesiano de dos o más dominios; Una instancia de BD es un conjunto finito de relaciones finitas. Se llama cardinalidad de una relación al número de tuplas que lo contiene. La aridad o grado de una relación R ⊂ D1 x D2 x . . . x D n es n i, esto es, el número de dominios que intervienen en su definición. Normalmente una relación es representada como una tabla de valores, en las que las columnas llevan asociado un identificador (atributo), así los valores de un atributo asociado a la columna i, pertenecen al dominio Di. Una relación R de atributos A1, A2,. . . . An; define lo que se llama un esquema de relación, denotado por R(A1; A2; . . . An,), de manera que una relación específica R1, con un conjunto concreto de tuplas resulta una instancia o extensión de dicho esquema. No todas las instancias acordes con un determinado esquema son semánticamente válidas (coherentes con la semántica asociada de BD), por lo que existen restricciones de integridad asociadas a cada esquema de relación. Finalmente, podemos definir la 2. Sistemas basados en conocimiento 28 estructura general como un superconjunto de esquemas de relación y de restricciones de integridad. 2.7.2 Manipulación de datos La manipulación de datos en el esquema relaciona1 se efectúa mediante un lenguaje formal: Álgebra y Cálculo Relacional, de la primera obtenemos una colección de operadores y operaciones explícitas, la segunda proporciona la semántica para definir las relaciones resultantes. • Algebra Relacional. Los operadores básicos de AR pueden agruparse en: Operación de asignación. Que asigna los resultados de otras operaciones relacionales a una nueva relación con el objetivo de preservar los resultados. Operaciones sobre conjuntos. Unión, Intersección, Diferencia y Producto Cartesiano, a excepción de ésta última, se precisa que los operandos sean del mismo grado y que los iésimos atributos tengan el mismo dominio. Operaciones especiales. Selección, Proyección, reunión y División: * Selección: Operador algebraico que produce un subconjunto “horizontal” de una relación específica, por ejemplo, el subconjunto de las tuplas de una Relación para el cual se cumple un predicado dado, expresado como combinación booleana de términos. *Proyección: Produce un subconjunto “vertical” de una relación dada, es decir, el subconjunto obtenido al seleccionar los atributos. 2. Sistemas basados en conocimiento 29 *Reunión: La reunión de la relación A sobre el atributo X con la relación 5 sobre el atributo Y, da como resultado todas las tuplas t, tales que t, es la concatenación de una tupla de A con una de 5 en que se verifique una condición determinada sobre Xe Y *División: Divide una relación R de grado m+n entre una relación R' de grado n, produciendo una de grado m. • Cálculo Relaciona1 (tupías [CRT] y dominios[CRD]) Cálculo Relacional de Tupías. Una expresión en el CRT, tiene la forma {P/P(t)} que representa el conjunto de todas las tuplas t que hacen verdadera la fórmula o predicado P. Usaremos t[A] para denotar el valor que tiene la tupla t para el atributo A y t ∈ R para denotar que t está en la relación R. Se dice que una variable para t es libre si no se encuentra cuantificada (universal o existencialmente). Una fórmula del CRT se compone de átomos, de las siguientes formas: - k ∈ R, donde k es una variable tupla y R una relación. - k[x] θ v[y], donde k y v son variables tupla, x es un atributo sobre el que se define k y θ operador de comparación (<, >, >=, <=,=). - s[x] θ c, igual que el caso anterior, con c como constante del domino del atributo x. Las fórmulas se construyen a partir de los átomos usando las siguientes reglas: - Un átomo es una fórmula. - Si P, es una fórmula, entonces (P1 ) y (¬P1), también lo son. - Si P1 y P2 son formulas, también lo son P1 ∧ P2 , P1 v P2, y P1, ⇒ P2 - Si P1 (s) es una fórmula que contiene una variable de tupla libre s, entonces ∃s ∈ R (P1 (s)) y ∀s ∈ R (PI (s)) también lo son. 2. Sistemas basados en conocimiento 30 Siguiendo esta definición es posible generar una relación infinita, por ejemplo el número de tuplas que no están en una relación {t/¬ (t∈R)}, así se introduce el concepto de dominio de una fórmula P, dom(P) es el conjunto de todos los valores representados por P. Cálculo relacional de dominios. Esta forma del cálculo relaciona1 utiliza variables de dominio a las que se asignan valores del dominio de un atributo (dato). Las expresiones tienen la forma: {<x1 ,x2,…xn, > | P (x1,x2 ,..., xn, ) } donde x1,x2 ,..., xn representan las variables de dominio y P la fórmula compuesta de átomos, éstos pueden tener las siguientes formas: - < x1 ,X2,...,xn >∈ R, donde R es una relación de n atributos. - xθy, con x e y operados por comparación. - xθc, equivalente al caso anterior y c es una constante del domino del atributo de x.. 3. Sistemas expertos 31 3. Sistemas expertos 3.1 Antecedentes En las últimas décadas, se han producido grandes cambios en el entorno de las empresas y las organizaciones, como consecuencia de los avances de las nuevas tecnologías de la producción, de la información y de las comunicaciones. En este nuevo entorno, la toma de decisiones de una manera eficaz precisa de una forma rápida de información suficiente, actualizada y oportuna, utilizando los ordenadores electrónicos y los medios que proporciona la tecnología de la información. Además, gracias a las investigaciones realizadas en la inteligencia artificial, con el desarrollo de los sistemas basados en el conocimiento y los sistemas expertos, también se han producido grandes avances en el tratamiento del conocimiento, factor fundamental para la toma de decisiones. El estudio y desarrollo de los Sistemas Expertos (SEs) comenzó a mediados de la década del 60. Entre 1965 y 1972 fueron desarrollados varios de estos sistemas, muchos de ellos tuvieron un alcance muy limitado, otros como MYCIN, DENDRAL y PROSPECTOR, constituyeron la base histórica de los SEs y aún en la actualidad son de gran interés para los investigadores que se dedican al estudio y construcción de los mismos. En teoría estos sistemas son capaces de razonar siguiendo pasos comparables a los que sigue un especialista (médico, biólogo, geólogo, matemático, etc.), cuando resuelve un problema propio de su disciplina. Por ello el creador de un SE debe comenzar por identificar y recoger, del experto humano, los conocimientos que éste utiliza: conocimientos teóricos, pero sobre todo los conocimientos empíricos adquiridos en la práctica. Los sistemas expertos son programas de ordenador que capturan el conocimiento de un experto e imitan sus procesos de razonamiento cuando resuelven los problemas en 3. Sistemas expertos 32 un determinado dominio. Los sistemas expertos son un subconjunto especial dentro de los sistemas basados en el conocimiento, que incorporan en la base de conocimiento del sistema el conocimiento de un experto. Una definición formal de los sistemas expertos, aceptada por muchos autores, es la aprobada por el Grupo Especialista en Sistemas Expertos de la Sociedad Británica de Ordenadores, que los define de la forma siguiente: “Un sistema experto es visto como la incorporación en un ordenador de un componente basado en el conocimiento, que se obtiene a partir de la pericia (conocimiento técnico) de un experto, de tal forma que el sistema pueda ofrecer asesoramiento inteligente o tomar una decisión inteligente sobre una función del proceso. Una característica adicional deseable, que muchos considerarían fundamental, es la capacidad del sistema, si se le solicita, de justificar su propia línea de razonamiento de un modo directamente inteligible para el interrogador...“. Los sistemas expertos también pueden ser definidos en función de sus características funcionales. En este sentido, Hayes-Roth considera como características más importantes de los sistemas expertos las siguientes: 1. Pueden resolver problemas normalmente atacados por los expertos humanos; 2. Razonan heurísticamente, usando lo que los expertos consideran que son reglas empíricas efectivas, e interactúan con los humanos de forma adecuada, incluyendo el lenguaje natural; 3. Manipulan y razonan sobre descripciones simbólicas; 4. Pueden funcionar con datos inciertos; 5. Contemplan múltiples hipótesis; 6. Pueden explicar su proceso de razonamiento y justificar sus conclusiones. 7. Aplican técnicas de búsqueda. 8. Pueden inferir nuevos conocimientos a partir de los existentes. 3.2 Programación lógica en Sistemas expertos La programación lógica tiene sus antecedentes más próximos en los trabajos de prueba automática de teoremas de los años sesenta. J. A. Robinson propone en 1965 una 3. Sistemas expertos 33 regla de inferencia a la que llama resolución (Regla que se aplica sobre cierto tipo de fórmulas del Cálculo de Predicados de Primer Orden, llamadas cláusulas y la demostración de teoremas bajo esta regla de inferencia se lleva a cabo por reducción al absurdo), mediante la cual la demostración de un teorema puede ser llevada a cabo de manera automática, sus trabajos sirvieron de base al primer lenguaje de programación que contempla, como parte del intérprete, los mecanismos de inferencia necesarios para la demostración automática. Este primer lenguaje está basado en el formalismo matemático de la Lógica de Primer Orden y ha dado inicio a un nuevo y activo campo de investigación entre las matemáticas y la computación que se ha denominado la Programación Lógica. En 1971 aparece PROLOG (Programing in Logic), desarrollado en la Universidad de Marsella, Francia, que cuenta con un lenguaje formal mediante el cual es posible representar fórmulas llamadas axiomas, que permiten describir fragmentos del conocimiento y, además, consta de un conjunto de reglas de inferencia que aplicadas a los axiomas, permiten derivar nuevo conocimiento. Una característica general de la arquitectura de sistemas en PROLOG, es la existencia de una “base de hechos” o “base de conocimientos” que alimentan las variables particulares de los axiomas en el proceso de inferencia, esta base, al igual que en los SGBD procedimentales, se encuentran en un archivo externo al núcleo del programa, la base en sí, no contiene información sobre los datos, ésta se deriva de la posición particular de cada término (áridad). La programación Lógica aplicada a los SGBD, es un campo relativamente nuevo, de hecho, la mayoría de los SGDB comerciales no utilizan motores de inferencia en su desarrollo, en virtud de que son sistemas orientados a la obtención de “información”, no de “conocimientos” y sus áreas de aplicación -generalmente comerciales - no precisan de la algorítmica compleja inherente a los sistemas basados en conocimiento. Sin embargo la penetración de las tecnologías “expertas”, en el área comercial de las empresas, obliga un replanteamiento de esta condición. 3. Sistemas expertos 34 La programación lógica aplicada al desarrollo de SGBD, comienza a formar parte de los nuevos desarrollos de grandes corporativos, que ven en estos sistemas la plusvalía inherente al desplazamiento de los expertos humanos. Es un hecho que los SGBD han evolucionado para atender las exigencias de nuevos dominios culturales, científicos, industriales y comerciales, generando distintos tipos de SGBD (ver. Clasificación de SGBD, Cap. ll), y no se espera que la Programación Lógica de estos sistemas desplace a los existentes, sin embargo, representan el camino ideal para aplicaciones específicas, en las que se precisa la inferencia para manipular eficientemente un conjunto de datos y representar conocimientos: • Sistemas de diagnosis. Que siguen un proceso de búsqueda de las razones del funcionamiento incorrecto de un sistema a partir de la información disponible en la base de datos. Aquí se podrían tener en cuenta tanto aplicaciones de diagnóstico médico como de averías, en el primero de los casos existen antecedentes sólidos: FLUIDEX, EACH, TROPICAID, SPHINX, y MYCIN (desarrollado a mediados de 1970) es el más representativo. • Sistemas de pronóstico. Que deducen consecuencias posibles a partir de una situación. Su objetivo es determinar el curso del futuro en función de información sobre pasado y presente. Esto abarca diversos problemas, tales como predicciones meteorológicas, predicciones demográficas, o incluso previsiones de la evolución bursátil entre otros. Quizá la aplicación más conocida sea PROSPECTOR, un sistema para la evaluación de emplazamientos geológicos. • Sistemas de planificación. Que establecen una secuencia de acciones a realizar encaminadas a la consecución de una serie de objetivos. En esta área, destaca la simulación donde se busca representar un estado real y evaluar distintas variables para determinar caminos óptimos. Los planes y las decisiones en la producción se desarrollan y llevan a cabo en un mundo de representaciones simbólicas de hechos y conjeturas, muchas de las cuales no están informatizadas y representan la 3. Sistemas expertos 35 experiencia y el conocimiento de expertos. En cada estadio de los procesos de planificación, decisión y control para las operaciones de producción, sea ésta automatizada o no, las personas expertas son las que asesoran, localizan los fallos y dirigen. Ellas son las que ayudan a interpretar la multitud de datos procedentes de los departamentos de diseño, de la planta de producción y de los representantes de los clientes, observan modelos procesables en dichos datos, prueban mentalmente, y con ordenadores, posibles líneas de acción, recomiendan las medidas que la gerencia debe tomar y ayudan luego a poner en marcha sistemas pensados para conseguir planificaciones mejores, operaciones más fluidas y una competencia más efectiva. Los Sistemas de planificación ofrecen procedimientos informatizados para perfeccionar la toma de decisiones de la gerencia por medio de la combinación del conocimiento que poseen los expertos acerca del tipo de acciones que tiene que efectuar y la forma y el tiempo en que debe llevarlas a cabo con la permanencia, lógica, memoria y velocidad de cálculo del ordenador. El común denominador de estos sistemas radica en la forma en que utilizan las bases de datos, manipulando la información existente para aplicarla a soluciones que van desde sencillas inferencias hasta complejos procesos de representación mediante el uso de la lógica. 3.2.1 Conceptos básicos Sistema experto como su nombre lo dice es un sistema computarizado que emula el proceso de razonamiento de un experto humano en un área o campo especifico. Los programas convencionales utilizan datos exactos lo que es una indudable ventaja de los computadores. Esta clase de datos se denomina conocimiento factual o preciso. Los humanos usamos una mezcla de ese conocimiento factual y de conocimiento heurístico (o sea la intuición lógica), que es una indisputable ventaja de los humanos. Los sistemas expertos tratan de emular ese conocimiento heurístico, lo que los hace superiores a los programas convencionales ya que pueden tratar con datos “inciertos”, 3. Sistemas expertos 36 o sea no precisos. Básicamente el Sistema Experto esta compuesto por los siguientes módulos: 1. Base de conocimientos: Consiste en las reglas, procedimientos y datos intrínsecos al área del problema. Generalmente se construye a través de consulta con uno o varios expertos del área, para incluir el conocimiento heurístico, manuales, etc. La base, contiene el conocimiento del sistema con respecto a un tema específico para el que se diseña el sistema. Este conocimiento se codifica según una notación específica que incluye reglas, predicados, redes semánticas, frames y objetos. 2. Motor de inferencia: Es el mecanismo usado para extraer el conocimiento de la base de conocimientos, para alcanzar una solución o conclusión determinada. Combina los hechos y las preguntas particulares, utilizando la base de conocimiento, seleccionando los datos y pasos apropiados para presentar los resultados. 3. Interface con el usuario: Es el medio de comunicación entre el sistema experto y el usuario. 3.3 Sistemas expertos y Bases de datos Inteligentes Aunque el desarrollo de un sistema experto esta claramente influenciado por los métodos de representación del conocimiento aplicados a SGBD no cuentan con todas las capacidades de gestión de éstos. Para los efectos de nuestro estudio, la arquitectura de los sistemas expertos, constituye el eje sobre el que se ha de construir el modulo de gestión de base de conocimientos, esto es, la gestión de procesos deductivos de la base de reglas que opera sobre la base de datos. Técnicamente en una BDI converge la arquitectura de un SE y sistemas basados en conocimiento por lo que para en su desarrollo se incluye como aspecto fundamental la programación del conocimiento (figura 6), la cual hace uso de la representación 3. Sistemas expertos 37 explícita del conocimiento a utilizar por el sistema y de su interpretación y manipulación lógica por medio de mecanismos de inferencia, que permitan deducir nuevo conocimiento a partir del que ya se conoce. Figura 6. Aspectos a considerar en la programación de SE. La programación basada en lógica brinda las capacidades de responder a preguntas que no se pueden atacar fácilmente con los lenguajes de manipulación de datos de la programación procedimental. Aunque la creación de vistas es similar al uso de reglas para definir bases de datos en intenso, éstas no son tan poderosas como las reglas lógicas. En particular, los lenguajes relacionales no pueden expresar consultas recursivas que son a menudo útiles para formular consultas complejas (las interrelaciones transitivas tales como la jerarquía entre partes, las listas de ancestros y las jerarquías de dirección por ejemplo). 4. Arquitectura de una BDI 38 4. Arquitectura de BDI 4.1 Fundamentos En el presente capítulo, abordaremos en forma somera los principales indicadores teóricos que conceptualizan la IA (Inteligencia Artificial) vinculados con los alcances de nuestra investigación. Una buena definición de IA es algo elusiva y controversial, fundamentalmente porque la inteligencia humana no está completamente entendida. Cada libro de texto en IA propone una definición que enfatiza las diferentes perspectivas que, cada autor cree, encierra el campo. A continuación se transcriben algunas de ellas: “La IA es una rama de la ciencia de computación que comprende el estudio y creación de sistemas computarizados que manifiestan cierta forma de inteligencia: sistemas que aprenden nuevos conceptos y tareas, sistemas que pueden razonar y derivar conclusiones útiles acerca del mundo que nos rodea, sistemas que pueden comprender un lenguaje natural o percibir y comprender una escena visual, y sistemas que realizan otro tipo de actividades que requieren de inteligencia humana”. “La IA es una ciencia que trata de la comprensión de la inteligencia y del diseño de máquinas inteligentes, es decir, el estudio y la simulación de las actividades intelectuales del hombre (manipulación, razonamiento, percepción, aprendizaje, creación)”. “La IA es el estudio de las computaciones que permiten percibir, razonar y actuar”. “La IA es un campo de estudio que busca explicar y emular el comportamiento inteligente en términos de procesos computacionales”. “La IA estudia las representaciones y procedimientos que automáticamente resuelven problemas usualmente resueltos por humanos” 4. Arquitectura de una BDI 39 A pesar de la diversidad de conceptos propuestos para la IA, en general todos coinciden en que la IA trata de alcanzar inteligencia a través de la computación. Toda computación, requiere de una representación de cierta entidad y de un proceso para su manipulación. Desde el punto de vista de los objetivos, la IA puede considerarse en parte como ingeniería y en parte como ciencia: Como ingeniería, el objetivo de la IA es resolver problemas reales, actuando como un conjunto de ideas acerca de cómo representar y utilizar el conocimiento, y de cómo desarrollar sistemas informáticos. Como ciencia, el objetivo de la IA es buscar la explicación de diversas clases de inteligencia, a través de la representación del conocimiento y de la aplicación que se da a éste en los sistemas informáticos desarrollados. Para usar la IA se requiere una comprensión básica de la forma en que se puede representar el conocimiento y de los métodos que pueden utilizar o manipular ese conocimiento. Desde el punto de vista de ingeniería, la mayor parte del trabajo requerido para construir sistemas de IA, está basado en el desarrollo de adecuadas representaciones de conocimiento y sus correspondientes estrategias de manipulación. 4.2 Descripción Las aplicaciones de mayor impacto que han surgido de la Inteligencia Artificial se concentran en los Sistemas Basados en Conocimiento. Desafortunadamente, estos sistemas son útiles en función de la validez de su conocimiento, además de que su construcción es un proceso complejo y costoso. A su lado, los SGBD relacionales 4. Arquitectura de una BDI 40 han evolucionado hasta consolidar una robusta plataforma altamente funcional y económica, con un alto grado de penetración en distintos mercados: los sistemas de bases de datos conllevan la automatización de cada vez más actividades reduciendo costos y mejorando la calidad de desempeño, por ello, importantes grupos de investigadores han concentrado sus esfuerzos en el diseño y desarrollo de herramientas informáticas que apoyen el descubrimiento de conocimiento y exploten la experiencia, en dichos sistemas. En muchas áreas del saber, el conocimiento se ha venido obteniendo por el clásico método hipotético deductivo de la ciencia positiva. En él es fundamental el paso inductivo inicial: a partir de un conjunto de observaciones y de unos conocimientos previos, la intuición del investigador le conduce a formular la hipótesis. Esta “intuición” resulta inoperante cuando no se trata de observaciones aisladas y casuales, sino de millones de datos almacenados en soporte informático. En el fondo de todas las investigaciones sobre inducción en bases de datos subyace la idea de automatizar ese paso inductivo. Las técnicas de análisis estadístico, desarrolladas hace tiempo, permiten obtener ciertas informaciones útiles, pero no inducir relaciones cualitativas generales, o leyes que enuncien su comportamiento; para esto se requieren técnicas de análisis inteligente que todavía no han sido claramente establecidas. Por ello, se incrementa de forma continua la diferencia existente entre la cantidad de datos disponibles y el conocimiento extraído de los mismos. Cada vez más investigaciones dentro de la inteligencia artificial están enfocadas a la inducción de conocimiento en bases de datos. Consecuencia de esta creciente necesidad ha aparecido un nuevo campo de interés: la minería de datos (data mining), que incluye nuevos métodos matemáticos y técnicas siftware ("sift", que puede traducirse como escuadriñar, cernir, etc.) para análisis inteligente de datos. 4. Arquitectura de una BDI 41 La minería de datos surge a partir de sistemas de aprendizaje inductivo en ordenadores, al ser aplicados a bases de datos, y su importancia crece de tal forma que incluso es posible que, en el futuro, los sistemas de aprendizaje se usen de forma masiva como herramientas para analizar datos a gran escala. Se denomina descubrimiento de conocimiento en bases de datos (Knowdlege Discovery in Database) al proceso global de búsqueda de nuevo conocimiento a partir de los datos de una base de datos. Este proceso incluye no sólo el análisis inteligente de los datos con técnicas de minería de datos, sino también diversos pasos previos de regular complejidad, como el filtrado y preprocesado de los datos, y los posteriores, como la interpretación y validación del conocimiento extraído en que se involucran técnicas de la ingeniería del conocimiento. En el esquema operativo de la minería de datos se distinguen -en razón directa de su implementación sobre SGBD relacionales activos- dos arquitecturas básicas: la primera de ellas enfocada al descubrimiento de conocimiento mediante búsquedas exhaustivas de características “interesantes” en el total de la BDD, por ejemplo un comportamiento irregular en un dominio particular: descenso o incremento de los valores que habitualmente los compone; la segunda -en que sustentamos nuestra tesis- que opera con un propósito específico atendiendo un conjunto de reglas predefinidas y operando en un marco finito (segmentos de la BDD), para la solución de problemas particulares o la estructuración de conocimiento en lenguaje de alto nivel, obtenida sobre dominios finitos ( v. fig. 7). Normalmente el término minería de datos lo usan estadísticos, analistas de datos, y la comunidad de sistemas de gestión de información, mientras que KDD es más utilizado en inteligencia artificial y aprendizaje en ordenadores. 4. Arquitectura de una BDI 42 Fig. 7 KDD en un dominio finito. En las bases de datos inteligentes [BDI] se pretende capitalizar tanto la evolución e integración de las bases de datos relacionales activas, como las técnicas avanzadas para el almacenamiento, recuperación y procesamiento de la información en el área de los sistemas expertos e inteligencia artificial. Fundamentalmente, una BDI, deberá ser capaz de deducir hechos a partir de la base de datos aplicando axiomas deductivos o reglas de inferencia a esos hechos. La eficiente implementación de una BDI, precisa del desarrollo de un sistema que posea la capacidad de gestionar conocimiento complejo a través del procesamiento de datos simples, provenientes tanto de ficheros controlados de forma autónoma como de un SGDB (v.fig.8), incorporar la capacidad de utilizar la experiencia en un dominio particular de aplicación para resolver clases de problemas dentro del dominio. 4. Arquitectura de una BDI 43 Fig. 8 Procesamiento de datos en una BDI. Su principal objetivo es permitir al usuario manipular el contenido de su base de datos de manera transparente, ofreciéndole herramientas para extraer conocimientos a partir del análisis del contenido de sus datos, interrelacionar información proveniente de diversas fuentes usando medios diversos, usar conocimientos y hacer inferencias para facilitar la recuperación y visualización de la información, apoyando la toma de decisiones y ofreciendo una alternativa para representar y manipular la semántica de las aplicaciones avanzadas. Los principales pasos dentro del proceso interactivo e iterativo del KDD pueden verse en la figura 8, y son los siguientes: 1. Desarrollo y entendimiento del dominio de la aplicación, el conocimiento relevante y los objetivos del usuario final. Este paso requiere cierta dependencia usuario/analista, pues intervienen factores como: conocer los cuellos de botella del dominio, saber qué partes son susceptibles de un procesado automático y cuáles no, cuáles son los objetivos, los criterios de rendimiento exigibles, para qué se usarán los resultados que se obtengan, compromisos entre simplicidad y precisión del conocimiento extraído, etc. 2. Creación del conjunto de datos objetivo, seleccionando el subconjunto de variables o ejemplos sobre los que se realizará el descubrimiento. Esto implica consideraciones 4. Arquitectura de una BDI 44 sobre la homogeneidad de los datos, su variación a lo largo del tiempo, estrategia de muestreo, grados de libertad, etc. 3. Preprocesado de los datos: eliminación de ruido, estrategias para manejar valores ausentes, normalización de los datos, etc. 4. Transformación y reducción de los datos. Incluye la búsqueda de características útiles de los datos según sea el objetivo final, la reducción del número de variables y la proyección de los datos sobre espacios de búsqueda en los que sea más fácil encontrar una solución. Este es un paso crítico dentro del proceso global, que requiere un buen conocimiento del problema y una buena intuición, y que, con frecuencia, marca la diferencia entre el éxito o fracaso de la minería de datos (paso 7). 5. Elección del tipo de sistema para minería de datos. Esto depende de si el objetivo del proceso de KDD es la clasificación, regresión, agrupamiento de conceptos (clustering), detección de desviaciones, etc. 6. Elección del algoritmo de minería de datos 7. Minería de datos. En este paso se realiza la búsqueda de conocimiento con una determinada representación del mismo. 8. Interpretación del conocimiento extraído, con posibilidad de iterar de nuevo desde el primer paso. La obtención de resultados aceptables dependerá de factores como: definición de medidas del interés del conocimiento (de tipo estadístico, en función de su sencillez, etc.) que permitan filtrarlo de forma automática, existencia de técnicas de visualización para facilitar la valoración de los resultados o búsqueda manual de conocimiento útil entre los resultados obtenidos. 4. Arquitectura de una BDI 45 9. Consolidación del conocimiento descubierto, incorporándolo al sistema, o simplemente documentándolo y enviándolo a la parte interesada. Este paso incluye la revisión y resolución de posibles inconsistencias. 4.3 Arquitectura Los SGBD Inteligentes no existen como tales, por lo que en la arquitectura de una base de datos inteligente intervienen múltiples factores y condicionales derivadas de las estrategias que el programador decida implementar y las necesidades del sistema a desarrollar, sin embargo, en el grueso de los estudios enfocados al desarrollo de un sistema inteligente de bases de datos, se distingue como objetivo de la intetfaz: proporcionar consejo y apoyo a la toma de decisiones, ofrecer opiniones informadas y explicación de sus razonamientos, además, deberá permitir que el directivo u operador manipule grandes volúmenes de información entre los que encontramos ejemplos, reglas, heurísticas, hechos e incluso modelos de predicción con probabilidades de certeza. Los beneficios son amplios y múltiples, por ejemplo la reducción en el tiempo de toma de decisiones, apoyo a la toma de decisiones basada en hechos, el mejoramiento del desempeño de personal no experto, la acelerada capacitación de personal mediante tutores, flexibilidad y apoyo a la reorganización y la reingeniería, el mejor diagnóstico de fallas, el mejor mantenimiento, la optimización de tiempos y movimientos, el mejor servicio, y la retención del conocimiento y experiencia corporativa; para ello, considerando el desarrollo de una BDI sobre un motor relacional, el sistema -regularmente- integrará: 1. Una base de datos relacional. Base principal en la que se concentra en diversas tablas el total de datos útiles del sistema. 2. Una base de conocimiento dinámica. Base en intenso, constituida de selección de tuplas involucradas en un proceso de inferencia particular. 4. Arquitectura de una BDI 46 3. Módulos de Preproceso. Enfocados al tratamiento de los datos inciertos en la base persistente. (Lógica fuzzy y multivaluada) 4. Una base de reglas. Estructuran los procesos de inferencia en marcos de operación determinados. 5. Módulos de acceso binario. Cuando intervienen procesos de selección y filtrado para los que no se estructura un campo clave, precisamos de archivos binarios a los que el sistema acceda en forma eficiente y rápida. La inteligencia en una base de datos, no está necesariamente relacionada con la estructura de la BDD, sino en la explotación que el sistema pueda hacer de éstos. Así una BDI puede estar soportada en SGBD comerciales, siempre que cuente con un módulo lógico o extensión lógica, desarrollada en el lenguaje anfitrión, o en un lenguaje de programación lógica, para implementar la inteligencia del sistema. Esta extensión se aplica fundamentalmente en el lenguaje para la manipulación (DML) de datos (en el caso de una BDI no soportada en SGDB, su arquitectura implica la creación de DDL y DML), esta extensión deberá crear funciones y procedimientos particulares, de las que se espera: • Descubrimiento de conocimiento y búsquedas inteligentes. Integrando técnicas de inteligencia artificial para extraer conocimiento a partir del análisis de los datos, la mayoría de los lenguajes anfitriones incorporan estructuras de control sobre las que se pueden implementar (Computación evolutiva e IPL). • Tratamiento de la Incertidumbre. Procesamiento lógico de condicionales: datos inexistentes, inaplicables, desconocidos, indefinidos, etc. (Conocimiento con incertidumbre) Para los efectos de nuestro estudio, nos ocuparemos de la arquitectura basada en los 4. Arquitectura de una BDI 47 estudios sobre transformación de problemas ILP (Programación Lógica Inductiva) a formato proposicional, la mecánica de transformación se basa en la idea de convertir conjuntos de datos del formato relacional a formato proposicional, y, si es el caso, volver a convertir el conocimiento obtenido a formato relacional. La forma de pasar de formato relaciona1 a formato proposicional consiste en crear una nueva relación, extendiendo cada tupla de la relación objetivo con un atributo adicional para cada posible literal (combinando cada predicado de la base de datos en intenso con cada variable del consecuente). En este proceso, el sistema deberá seleccionar de la base persistente, tuplas procedentes de una o diversas tablas, filtrar (en el caso de que exista incertidumbre, mediante lógica fuzzy o multivaluada), ordenar y crear la base en intenso, con los campos precisos para la sustituir con sus valores las variables en el formato proposicional; el motor de inferencia operará sobre éstos (base en intenso, o base de conocimiento) aplicándoles el conjunto de reglas pertinentes (base de reglas), para determinar la solución a un problema determinado, creando una nueva relación, informando resultados o - en su caso- modificando la base de datos persistente. Fig. 9 Arquitectura Relacional-ILP 4. Arquitectura de una BDI 48 La base en intenso, en el sistema propuesto, puede edificarse en -por lo menos dos formatos físicos (el formato proposicional, es persistente en ambos): un archivo plano (dbintdb) o mediante un objeto (Table) del lenguaje anfitrión. El formato físico -en cada caso- dependerá de la base de reglas y la naturaleza del motor de inferencia: Formato Archivo Plano (dbint.db) Características Tanto la base de reglas como el motor de inferencia operan en forma periférica al sistema (Uso de Prolog). Table La base de reglas y las funciones de inferencia pertenecen al lenguaje nativo (Visual Basic 6) 4.3.1 Computación evolutiva e IPL La computación evolutiva es una rama de la inteligencia artificial enfocada al desarrollo de algoritmos genéticos, esto es, modelos lógico-matemáticos, que aproximen las operaciones máquina, al razonamiento natural. Las aplicaciones prácticas de la llamada Inteligencia Artificial han sido foco de controversia por muchos años. Claramente, si comparamos los sistemas desarrollados con las habilidades cognoscitivas humanas, podemos considerar que el desarrollo es aún primitivo. Sin embargo, en años recientes, las técnicas de esta rama de las ciencias de la información han abordado muchos campos prácticos y desarrollados herramientas sofisticadas de uso cotidiano en sectores comerciales e industriales. La ingeniería en sus diversas instancias, trata de desarrollar modelos de los procesos de interés (social, económico, etc.) para después, a través de herramientas 4. Arquitectura de una BDI 49 y metodologías adecuadas, poder extraer resultados útiles en diversos sentidos. El modelado puede efectuarse apoyándose en las leyes físicas que rigen, bajo condiciones determinadas, las interacciones entre los diversos subsistemas que componen el proceso, e inclusive pueden obedecer a relaciones= empíricas elaboradas como fruto de la observación y la experiencia (relaciones estadísticas, borrosas, etc.). Las relaciones pueden poseer carácter estático cuando no interviene el tiempo como parámetro modelador, o dinámico cuando dependen de éste. La extracción de resultados de un modelo está asociada a la determinación de valores paramétricos de variables conocidas como variables de estado del proceso, estos valores obedecen al conjunto de restricciones que definen el proceso y que configuran el espacio de soluciones viables. En este universo, múltiples algoritmos genéticos o evolucionistas basados en la existencia de un universo de acción (espacio finito de la base persistente), en que un agente o entidad lógica parte de su conocimiento sobre los hechos inmediatos (conocimiento base, existente en las relaciones persistentes) y puede, en caso de que verifique relaciones base sobre un requerimiento particular, evolucionar ampliando dicho conocimiento mediante un proceso de inferencia lógica fundamentalmente heurístico. Dichos algoritmos se pueden edificar a partir de la programación lógica inductiva (Inductive Logic Programming ILP), que describiremos brevemente. La programación lógica inductiva se define como la intersección entre el aprendizaje inductivo y la programación lógica. Esto es así porque utiliza técnicas de ambos campos: • Del aprendizaje inductivo en los ordenadores hereda su objetivo: desarrollar herramientas y técnicas para inducir hipótesis a partir de observaciones (ejemplos) y sintetizar nuevo conocimiento a partir de la experiencia. • De la programación lógica hereda básicamente el formalismo de representación y su 4. Arquitectura de una BDI 50 orientación a la semántica. La ILP utiliza la programación lógica como mecanismo para representar las hipótesis y las observaciones, superando así dos de las principales limitaciones de las técnicas clásicas de aprendizaje en ordenadores: la rigidez en la representación del conocimiento (v. Cap. 1) y la dificultad para expresar conocimiento de base (background knowledge). En los sistemas de aprendizaje de orden - 0 el conjunto de entrenamiento consta de vectores de valores, cada uno perteneciente a una clase conocida. El conckimiento inducido permite definir clases en función del valor de los atributos, siendo representable con expresiones de la lógica de proposiciones. En ocasiones, se representa en forma de árbol de decisión: ID3, C4.5, etc. y a veces en forma de reglas: PRISM, C4.5 rules, etc. Por el contrario, en los sistemas de aprendizaje de primer orden, el conjunto de entrenamiento lo forman relaciones definidas de forma extensional, y el conocimiento de base lo constituyen otras relaciones, definidas intensionalmente: El objetivo del aprendizaje es, en estos sistemas, la construcción de un programa lógico que defina de forma intensional una relación objetivo (extensional) del conjunto de entrenamiento. En este tipo de definiciones lógicas se permite la recursión y algunos cuantificadores, muy útiles cuando se trabaja con objetos estructurados, difíciles de describir en un formato objeto-atributo-valor. Se puede considerar la programación lógica inductiva como la búsqueda de cláusulas, consistentes con los ejemplos de entrenamiento, en lenguaje de primer orden. Dentro del espacio de todas las posibles cláusulas, se puede definir una ordenación entre ellas, dada por la relación de generalización (una cláusula es más general que otra cuando cubre un superconjunto de las tuplas cubiertas por la segunda). Según sea el método con el que se recorre el espacio de posibles cláusulas, podemos distinguir varias técnicas: generalización relativa menos general, resolución inversa, búsqueda de grafos refinados, modelos de reglas, transformación del problema a formato proposicional, etc. 4. Arquitectura de una BDI 51 a. Generalización relativa menos general La generalización menos general (least general generalization) de Plotkin se basa en la idea de que si dos cláusulas c 1 y c 2 son ciertas, la generalización más específica común a ambas Igg(c 1 c 2) será también cierta con bastante plausibilidad. Esto permite realizar generalizaciones de forma conservadora. A las técnicas de generalización a partir de los datos se las denomina también técnicas de búsqueda de abajo hacia arriba (bottom-up). La generalización menos general de dos cláusulas (que puedan generalizarse) es el resultado de aplicar la generalización menos general a cada par de literales de ambas, tanto en el antecedente como en el consecuente. Para cada par de literales, esta operación se realiza comparándolos y sustituyendo por variables los atributos que no coincidan. Por ejemplo: c 1 = enfermo (pedro) :hijo-de(pedro, juan), fumador(juan) c 2 = enfermo (alberto) :hijo-de(alberto, josé), fumador(josé) Igg(c 1 , c 2) = enfermo(X) :hijo-de(X, Y), fumador(Y). La generalización relativa menos general (rigg) de dos cláusulas, es la generalización menos general de ambas, relativa a cierto conocimiento de base. La rigg es la técnica en que se basa el sistema GOLEM. Normalmente, el número de literales de una rigg crece al menos de forma exponencial con el número de ejemplos existentes. Por ello, GOLEM utiliza restricciones que evitan la introducción de literales redundantes, aunque aún así el número de ellos suele ser grande. Existen sistemas que combinan técnicas de búsqueda de abajo hacia arriba (generalización menos general, como hace GOLEM) 4. Arquitectura de una BDI 52 con técnicas de arriba hacia abajo (especialización por introducción de nuevos literales, como FOIL). b. Resolución inversa La idea básica de la resolución inversa (inverse resolution) consiste en invertir la regla de resolución, de la inferencia deductiva, obteniendo así un método de generalización. Aplicada en lógica proposicional, la resolución establece que (silogísmo hipotético) dadas las premisas p v q y 9 v r, se deduce que p v r. En lógica de predicados de primer orden, la resolución requiere sustituciones de variables por valores de atributos. La resolución inversa utiliza un operador de generalización basado en invertir la sustitución. Por ejemplo, dados los hechos: b1 = enfermo(pedro) b2 = hijo-de(pedro, juan) b3 = fumador(juan) tomando b1 y b2, y la sustitución inversa ql -1 = {pedro/Y} se obtiene: cl = enfermo(Y) :- hijo-de(Y, juan) tomando ahora cl y b3, y la sustitución inversa q2 -1 = {Juan/X} se obtiene: c2 = enfermo(Y) :- hijo-de(Y, X), fumador(X). c. Búsqueda en grafos refinados La principal técnica de especialización en ILP es la búsqueda de arriba a abajo (topdown search) en grafos refinados (refinement graphs). Los sistemas que utilizan esta 4. Arquitectura de una BDI 53 técnica, comienzan con la cláusula más general, a la que aplican especializaciones hasta que sólo cubra tuplas positivas. Fig. 10 Grafos refinados. Se denominan grafos refinados porque las operaciones de especialización (refinado) que se realizan durante la búsqueda se pueden representar en un grafo acíclico y dirigido (fig. 10). En este grafo, cada nodo representa una cláusula (el nodo superior es la cláusula más general) y cada arco representa una operación de especialización (sustitución de una variable por una constante, o incremento de un nuevo literal en la cláusula en construcción). La búsqueda dentro de éste grafo suele ser heurística, debido a que se produce una explosión combinatoria en el conjunto de posibles especializaciones, que hace inabordable la búsqueda exhaustiva. d. Patrones de reglas. Se denominan patrones de reglas a un tipo especial de reglas en las que los predicados son variables. La búsqueda de reglas se realiza a partir de los patrones de reglas existentes, proporcionados por el usuario. Para cada patrón de regla se prueban todas las posibles combinaciones de predicados existentes y, cada una de las reglas así 4. Arquitectura de una BDI 54 obtenidas, se evalúa con los datos de entrenamiento. Por ejemplo, con un patrón de reglas de la forma: P(X) :- R(X,Y), Q(Y) se podría obtener, por ejemplo, la regla enfermo(X) hijo-de(X,Y), fumador(Y). e. Cláusulas Normalmente el objetivo de los sistemas de ILP es la inducción de reglas que definan ciertos predicados. Estas reglas deberían ser lo suficientemente precisas como para poder reemplazar a los ejemplos de la base de datos y que éstos fueran deducidos a partir de las mismas. Pero puede considerarse un enfoque diferente, conocido como ILP no monótono, que consiste en la búsqueda de restricciones dentro de la base de datos. Estas restricciones pueden tener la forma de una cláusula en lógica de predicados de primer orden: padre-de(X,Y) v madre-de(X,Y) :- progenitor-de(X,Y) progenitor-de(X,Y) :- padre-de(X,Y) falso :- padre-de(X,Y), madre-de(X,Y) La última de ellas se interpreta como que una persona no puede ser a la vez padre y madre de otra. 4.3.2 Conocimiento con incertidumbre La incertidumbre está asociada, de forma inseparable, con la información. Aunque existen diferentes formas de incertidumbre, cabe destacar la que se produce como 4. Arquitectura de una BDI 55 consecuencia de la imprecisión y subjetividad propias de la actividad humana. En muchas ocasiones sacrificamos parte de la información precisa disponible por otra más vaga pero más robusta, lo que permite manejar de forma eficiente la complejidad asociada al mundo real. Muchos de los conceptos manejados habitualmente son, en sí mismos, vagos o borrosos, es decir, sus límites no están perfectamente determinados, y no por ello carecen de significación. La lógica borrosa y la teoría de conjuntos borrosos ofrecen un método natural para representar esa imprecisión y subjetividad humanas. El tratamiento de la incertidumbre es un rasgo típico de las aplicaciones en que se involucra la inteligencia artificial; aplicada al desarrollo de SGBD, la incertidumbre se centra en el tratamiento de dos indicadores fundamentales: • Datos inciertos o difusos. • Datos desconocidos o condicionales. Los primeros se caracterizan por formas verbales indeterminadas que representan rangos heurísticos de valor (alto, muy alto, a menudo, etc.); los segundos, denominados valores nulos. Ambos constituyen uno de los problemas teóricos más importantes en las bases de datos con el consecuente impacto en la construcción de aplicaciones. Motro propone clasificar la incertidumbre en diversos tipos: - incertidumbre propiamente dicha: cuando no es posible determinar si una aserción es cierta o falsa; por ejemplo, no estamos seguros de que “Juan tenga 30 años”. - imprecisión: la información no es tan específica como debería ser: “Juan tiene entre 30 y 40 años”, “Juan no tiene más de 40 años”. - vaguedad: conocimiento del estilo de “Juan pertenece a la tercera edad”. 4. Arquitectura de una BDI - 56 inconsistencia: cuando el modelo tiene dos o más aserciones que no pueden ser ciertas, por ejemplo, “Juan tiene entre 37 y 45 años” y “la edad de Juan es 34”. - ambigüedad: si algunos elementos del modelo no poseen una semántica completa, dando lugar a distintas interpretaciones. Esto suele producirse al establecer magnitudes sin especificar su unidad de medida. Este autor señala que hasta ahora se ha intentado solucionar los casos de incertidumbre no dejando almacenar cierta información o mediante los valores nulos; por lo que propone incluir nuevas técnicas en los SGBD como los factores de incertidumbre que se emplean en los Sistemas de Recuperación de la Información o en los Sistemas Expertos, y la lógica borrosa (fuzzy). En esta misma línea se encuentra Johnston, que propone una lógica multivaluada “reglamentada” a la que se le añaden “áreas de la lógica que van más allá de la lógica proposicional y de predicado de primer orden”, como pueden ser: la lógica modal, la lógica no monotónica y la lógica funcional no verdadera. 4.3.2.1 Tratamiento de los valores inciertos. El tratamiento de los valores difusos en las BD relacionales implica la creación de un mecanismo capaz de expresar la incertidumbre en valores numéricos, para ello existen distintos algoritmos, la mayoría derivados de la lógica difusa (fuzzy logic), basada en la Teoría de Conjuntos Difusos, donde un elemento no necesariamente pertenece o no pertenece a un conjunto, sino que hay un continuo de “grados de pertenencia”. El grado de pertenencia a un conjunto(p), y puede tomar valores entre 0 y 1. 4. Arquitectura de una BDI 57 Fig. 11 Lógica Fuzzy. Podemos denotar esto como: µ.A(x) → [0,1]. A µ también se le conoce como el “valor de verdad” porque representa el grado en que una proposición es verdadera. Mediante esta herramienta podemos asignar distintos valores considerando las posibilidades _ explícitas del atributo (Universo de discurso [Ω]), así un conjunto difuso Λ sobre un _ universo de discurso Ω, es un conjunto de ares: Λ = {x; µA(x): x ∈ Ω; µA(x) ∈ [O,1]}, _ donde µA(x) se denomina grado de pertenencia de x a Λ. Existen múltiples representaciones de conocimiento difuso mediante la lógica fuzzy, para los efectos de nuestro estudio, tan sólo describiremos aquéllas posibles asignaciones de valor operando sobre datos concretos, así las etiquetas lingüísticas aplicadas corresponden al dominio específico (columnas) que se trate por ejemplo: 1. Escalar simple. Por ejemplo Aptitud=buena; representado mediante la distribución de posibilidad 1 /buena. 2. Número simple. Por ejemplo Edad=28; representado mediante la distribución de posibilidad 1128. 3. Conjunto de posibles asignaciones excluyentes de escalares. Por ejemplo Aptitud = {buena; mala}, expresado por {1 /mala; 1 /buena}. 4. Conjunto de posibles asignaciones excluyentes de números. Por ejemplo Edad={20;21 }; representado mediante { 1/20; 1/21}. 4. Arquitectura de una BDI 58 5. Distribución de posibilidad en el dominio de los escalares. Por ejemplo Aptitud={0.6/mala; 0. 7/regular}. 6. Distribución de posibilidad en el dominio de los números. Por ejemplo Edad={0.4/23;1.0124;0. 8/25}. 7. Número real ∈ [0,1] representando grados de cumplimiento. Por ejemplo Calidad=0.9 Adicionalmente se consideran los valores desconocidos, indefinidos o nulos, sin embargo, en nuestro estudio nos ocupamos de ellos mediante la lógica multievaluada que se expone en forma exhaustiva en objetivos posteriores. Evidentemente, el universo de los conjuntos difusos es amplio, nuestro estudio sólo recupera algunas de sus formas y técnicas básicas en virtud de que en el SGBD relacional, la implementación de un diccionario de datos en que se clasifiquen los estados de pertenencia restringiendo su forma verbal en una relación simple(opciones predefinidas), constituyen un modelo difusor universal, de esta forma, el usuario del sistema expresa un estado determinado como valor, y el sistema, tanto en el motor relaciona1 como el de inferencia, opera con el producto asociado. Una vez que se asignen los valores asignados por lógica difusa a las tupias que corresponda, su tratamiento dependeran -en cada caso- del proceso que las requiera y serán operadas en forma convencional por el grado de pertenencia asociado. 4. Arquitectura de una BDI 59 Fig. 12. Restricción de formas verbales en relaciones simples. En su forma inversa, el difusor ataca directamente el contenido de los campos con una función de pertenencia (rango) y construye la base en intenso asignando etiquetas lingüísticas determinadas: BAJA, ALTA, URGENTE..., Por ejemplo: Sea R(T1,..., Tn), donde: R(T1,T2,T3) con T1 (Id), T2(prioridad), T3 (lectura). Dada una función de pertenencia: F(P) Ii (0.3) Is (0.8) Tenemos: ∀(T2){ T2 =< P(H) [T2 (Baja)] | T2>=P(Is)[T2 (Urgente)] | T2 (Alta)} 4. Arquitectura de una BDI 60 La estructura básica de un Sistema de Lógica Difusa se muestra en la figura 13. El sistema recibe varias entradas numéricas y entrega varias salidas numéricas. El bloque Difusor se encarga de convertir las entradas en conjuntos difusos, que son entregados al bloque Máquina de Inferencia; este bloque, apoyado en un conjunto de reglas de la forma IF... THEN... , produce varios conjuntos difusos para que el bloque Concresor los tome y los convierta en etiquetas lingüísticas concretas. Fig. 13 Estructura básica de un sistema de lógica difusa. Cada una de las variables de entrada y de salida tiene una representación dentro del Sistema de Lógica Difusa en forma de Variables Lingüísticas. Finalmente atendiendo una de las recomendaciones generales sobre el diseño de SGBD relacionales, se utilizará la lógica fuzzy exclusivamente en aquellos dominios que lo exijan o que representen estados intermedios de procesos en desarrollo. 4.3.2.2 Tratamiento de la información desconocida o condicional Si bien los valores nulos (también se le denomina “valor ausente o condicional”) no son un concepto exclusivo del modelo relacional, ha sido en el contexto de este modelo donde se ha abordado su estudio de manera más sistemática y donde se están realizando más investigaciones a fin de formalizar su tratamiento. La necesidad de los “valores nulos” o “marcas” en bases de datos es evidente por diversas razones: - Crear tuplas con ciertos atributos desconocidos. 4. Arquitectura de una BDI - 61 Añadir un nuevo atributo (columna) a una relación (tabla) existente; atributo que, en el momento de añadirse, no tendría ningún valor para las tuplas de la relación. - Atributos inaplicables a ciertas tuplas, por ejemplo, la editorial para un artículo (ya que suponemos que un artículo no tiene editorial) En la atención de estas necesidades se ha definido esquemas lógicos sensibemente distintos a la lógica habitual, denominados lógica trivaluada y lógica tetravaluada. a. Lógica trivaluada (L3V) En las siguiente figura aparecen las tablas de verdad para la lógica trivaluada, donde existen los valores C (cierto), F (falso) y Q (quizás). Además, se incluye un nuevo operador denominado MAYE, que aplicado al valor de una expresión “quizás”, da como resultado “cierto”. AND C Q F OR C Q F NOT MAYBE C C Q F C C C C C C C C Q Q Q F Q C Q Q Q Q Q C F F F F F C Q F F C F F Tabla de verdad para la lógica trivaluada. Adicionalmente se precisa introducir otros dos operadores especiales: a) IS NULL, que toma el valor cierto si el operando es nulo y falso en caso contrario b) IF NULL, que toma dos operandos y que devuelve el valor del primero, salvo que sea nulo, en cuyo caso devuelve el valor del segundo. En cuanto a las operaciones aritméticas- con valores- nulos, se considera nulo el resultado de sumar, multiplicar, restar o dividir un valor nulo con cualquier otro valor. 4. Arquitectura de una BDI 62 Por lo que respecta a los operadores algebraicos, el producto cartesiano no se ve afectado por la presencia de valores nulos, la restricción sólo devuelve aquellas tuplas cuya condición se evalúa a “cierto” no ‘falso” ni “quizás”, y la proyección debe eliminar tuplas duplicadas teniendo en cuenta los nulos, por lo que dos tuplas se considerarán duplicadas si atributo a atributo son ambos iguales y no nulos, o ambos nulos. Finalmente es muy importante considerar si los valores asignados en las tuplas van a formar parte de operaciones de agregación con el fin de aplicar funciones estadísticas, v.g. suma, varianza, media, etc., en cuyo caso determinar su uso o discriminar su número. En el lenguaje SQL las columnas admiten valores nulos a no ser que se especifique NOT NULL, y se soporta la lógica trivaluada, cuyas tablas de verdad ya hemos representado. En SQL para determinar si un valor es nulo se utiliza el predicado NULL: <Nombre de columna> IS NULL También podemos combinar este predicado con el operador NOT: <Valor> IS NOT NULL Un aspecto a tener en cuenta es el comportamiento del predicado cuando opera sobre más de una columna. En efecto: WHERE (col-x, col_y) IS NULL, será cierto si ambos son nulos, mientras que: WHERE (col-x, col_y) IS NOT NULL, será cierto si ambos son no nulos; existiendo otras dos variantes: WHERE NOT(col x, col-Y) IS NULL, que será falso si ambos son nulos, pero cierto si alguno es nulo o lo son los dos, finalmente: WHERE NOT(col x, coly) IS NOT NULL, será cierto si alguno o ambos son nulos, y falso sólo si ninguno es nulo. La expresión que juega el papel del operador IF NULL es la siguiente: COALESCE(VaI1,Va12, Va13,.... Valn) que devuelve el valor1, si no es nulo, o el valor2, o el valorn, salvo que todos sean nulos devolviendo entonces nulo. 4. Arquitectura de una BDI 63 Si en lugar de nulos se emplean valores por defecto, el lenguaje ofrece la posibilidad de convertir el valor por defecto a nulo mediante la expresión NULLIF. Por ejemplo: . . . WHERE NULLIF (año, -99) > 1980, que es equivalente a: CASE WHEN año = -99 THEN NULL ELSE año END Para comprobar si un predicado (o una combinación de éstos) es cierta, falsa o quizás se utiliza: p IS [NOT] TRAE FALSE UNKNOWN este último (UNKNOWN) corresponde al operador MA YBE Así, por ejemplo, podemos formular la siguiente consulta: SELECT titulo FROM libros WHERE (año = 1996) IS UNKNOWN; b. Lógica tetravaluada (L4V) La lógica tetravaluada surge de la necesidad de diferenciar dos tipos importantes de valores nulos: inaplicables, esto es, que no tienen sentido, de desconocidos aplicables, es decir, que momentáneamente son desconocidos pero deberían existir y puede que, 4. Arquitectura de una BDI 64 en un determinado momento, lleguen a conocerse. Esta diferencia, que puede parecer académica en exceso, es de hecho muy importante para reflejar con más precisión la semántica del universo del discurso a tratar y para responder de manera “más inteligente” a las consultas que se realicen sobre la base de datos. En la lógica cuatrivaluada se distingue, por tanto, entre un valor nulo o marca que representa información desconocida pero aplicable, que denominaremos α, de otro que representa información inaplicable, que denominaremos β. En este caso las operaciones aritméticas quedan modificadas como sigue, siendo ↔ un operador aritmético y x un valor no nulo de la base de datos: x↔α=α↔x=α x↔β=β↔x=β α↔β=β↔α=β α↔α=α β↔β=β A continuación se muestran las tablas de verdad para la lógica cuatrivaluada, donde por “A”(Aplicable) y por “I” (Inaplicable) se representan los valores de verdad de la lógica cuatrivaluada, según CODD. AND C A F I OR C A F I NOT C C A F I C C C C C C F A A A F I A C A A A A A F F F F F F C A F F F C I I I F I I C A F I I I Lógica tetravaluada según CODD El lenguaje SQL con que opera el motor relaciona1 Jet, no soporta aún la lógica 4. Arquitectura de una BDI 65 tetravaluada, por lo que se precisa una extensión del lenguaje de manipulación de datos, implementada en el lenguaje anfitrión, considerando los siguientes indicadores: 1. Si el operador es AND y cualquier operando es falso el resultado es falso 2. Si el operador es OR y cualquier operando es cierto, el resultado es cierto Si el resultado tiene definida una clase nula y uno o más operandos son nulos: 1. Si el operador es OR el resultado es el valor nulo que tiene la posición mayor, En caso contrario, el resultado es el valor nulo que tiene la posición menor En cualquier otro caso es resultado es el valor nulo general Por otro lado, Gessert propone asociar a cada tabla de datos que pueda contener valores nulos una “tabla de estados lógicos” que se corresponde fila a fila y campo a campo a la tabla de datos y que posee las mismas claves. Mediante este esquema, la tabla de datos no tendría valores nulos, y en la tabla de estados se almacenarían los siguientes valores NA inaplicable AF que indica que es falso AM que indica que es desconocido pero aplicable AT que señala que es cierto De forma que no sea necesario complicar el lenguaje de manipulación (con IS NULL, IS UNKNOWN, etc.) sino que simplemente basta con consultar la tabla de estados. Tampoco se requiere modificar la estructura de datos relaciona1 ni extender las columnas para tener en cuenta la presencia del indicador de nulos. Es pues una representación sencilla a base de metadatos. 5. Programación de una BDI 66 5. Programación de una BDI 5.1 Consideraciones generales Como hemos citado; dada la arquitectura propuesta, el proceso de inferencia constituye el nudo en la fase de intención del sistema, en este capítulo, abordaremos los principales indicadores que propicien dicho inferencia, tanto si el proceso se verifica mediante funciones del lenguaje anfitrión, como por un motor periférico. En principio, nos ocuparemos de detallar las partes en común. 5.2 Las bases de datos persistente e intenso La creación y manipulación de la base de datos persistente, así como la base de datos en intenso, en el sistema propuesto, se efectúan a través de los diversos objetos predefinidos que Visual Basic incorpora, centraremos nuestro interés en los objetos RecordSet, Oatabase y los procedimientos para efectuar consultas a través de SQL. 5.2.1 RecordSet Llamaremos RecordSet (DynaSets, SnapShot, Tables y Query) a un conjunto de registros que cumplen una determinada condición y que pueden ser tratados como un conjunto de tuplas, tenemos diferentes tipos de RecordSet con distintas propiedades, estos se declaran como variables en el dominio del módulo o si es el caso como variables globales: • SnapShot es un RecordSet de sólo lectura. • DynaSet es un tipo RecordSet que se lee al abrir y escribe en la base de datos al ser cerrado. • Tables es un RecordSet que contiene toda la información de la misma. El RecordSet contiene todos los registros de la misma. 5. Programación de una BDI • 67 QueryDef es una consulta (Query) que se encuentra predefinida en la base de datos. 1. Métodos *Métodos asociados al Desplazamiento MoveFirst GO TOP. Va al primer registro. MoveNext SKIP. Avanza un registro. MovePrevious SKIP -1. Retrocede un registro. MoveLast GO BOTTOM. Va al último registro. *Métodos asociados a la Búsqueda FindFirst Localiza el primer registro que cumple una condición. FindNext Localiza el siguiente registro que cumpla una condición. FindPrevious Localiza el registro anterior que cumpla una condición. FindLast Localiza el último registro que cumpla una condición. Seek Busca un registro (en una tabla). *Métodos para edición. Addnew APPEND BLANK. Añade un registro. Delete DELETE. Borra un registro. Edit Edita un registro para ser modificado. Update Actualiza la edición que hayamos hecho. Close Cierra el RecordSet. Clone Crea una copia del RecordSet. *Métodos para obtener información del RecordSet ListFields Lista campos. (Regresa SnapShots) Listindexes Lista índices. (Regresa SnapShots) 5. Programación de una BDI 68 2. Objetos Contenidos Fields Retorna un objeto con las definiciones de los campos. 3. Propiedades BOF BOF(). Estamos al inicio del RecordSet. EOF FOF(). Estamos al final del RecordSet. BookMark Marca un registro . RecordCount Número de registros en el SnapShot. DateCreated Fecha de creación. LastModified Fecha de última modificación. LastUpdated Fecha de última actualización. Filter SET FILTER TO. Para poner expresiones de filtro. Index SET INDEX TO. Para saber o cambiar el índice activo en una tabla. Sort Determina la expresión por el que se ordenará el RecordSet. NoMatch FOUND(). Regresa true si fracasa la búsqueda. LockEdits Determina el tipo de bloqueo a usar. Name Indica el nombre del RecordSet (tabla..). Transactions True si la base soporta transacciones. Updatable True si puedo modificar los datos del RecordSet. 5.2.2 Database Object Mediante este objeto nos comunicaremos con la base de datos. Toda la jerarquía de clases que comienza aquí, y para llamar a los métodos de los RecordSets, siempre tendremos que pasar por un objeto database. En la inteligencia de simplificar, agruparemos, por su funcionalidad, todos sus métodos, propiedades y funciones relacionadas. 5. Programación de una BDI 69 1. Métodos * Métodos Para obtener información de la estructura ListTables Obtenemos un SnapShot con descripciones de las tablas ListFields Obtenemos un SnapShot con información de los campos * Métodos para crear y borrar consultas CreateQueryDef Crea Querys (consultas) en la base de datos DeleteQueryDef Borra Querys (consultas) de la base de datos * Métodos para interactuar con los datos Open Table Devuelve un objeto Table CreateDynaset Devuelve un objeto DynaSet CreateSnapshot Devuelve un objeto SnapShot OpenQuerydef Devuelve un objeto QueryDef * Método para cerrar la base de datos Close Cierra la base de datos (elimina el objeto de memoria) * Métodos involucrados en las transacciones Begin Trans Inicia la transacción CommitTrans Graba en el disco las modificaciones RollBack Vuelve a la situación anterior * Métodos para ejecutar comandos SQL Execute Ejecuta un comando SQL usando VB ExecuteSgl Ejecuta un comando SQL a través de ODBC 2. Propiedades Collating Order Determina cómo vamos a comparar cadenas 5. Programación de una BDI 70 Connect Determina qué tipo de bases externas abriremos (dBase...) Name Nombre de la base de datos QueryTimeout Tiempo de espera desde tras errores en conexiones ODBC Trañsactions Indica si el driver acepta transacciones Updatable 3. Objetos Contenidos TableDefs Devuelve un objeto TableDef (definiciones de la base) 4. Funciones Relacionadas OpenDatabase Devuelve un objeto database RegisterDatabase Para conectarse vía ODBC RepaírDatabase Arregla bases de datos dudosas CompactDatabase PACK CreateDatabase Crea una nueva base de datos FreeLocks Libera los bloqueos Begin Trans Comienza una transacción CommítTrans Graba en el disco el resultado de una transacción RollBack Vuelve atrás en una transacción SetDataAccessOption Opciones para gestión de bases ACCESS SetDefaultWorkSpace Establece usuario y clave para bases codificadas ACCESS 52.3 SQL en Visual Basic Visual Ba-sic es un lenguaje de programación de propósito general, con una gran potencia en toda su estructura. Su implementación en el sistema operativo Windows y sus herramientas visuales, han hecho de este lenguaje un líder indiscutible en lo que a desarrollo de aplicaciones se refiere. Con la versión 3.0. se implementó la gestión de bases de datos a muy alto nivel, pudiendo gestionar bases de datos de tipo Access, Paradox, dBASE, FoxPro, etc. Este paso de gigante ha hecho de Visual Basic uno de 5. Programación de una BDI 71 los lenguajes favoritos por los desarrolladores de aplicaciones de bases de datos. Visual Basic incorpora esta extensión junto a nuestras bases de datos, obteniendo potentes resultados. De hecho, las consultas que se realizan en Access, están desarrolladas o basadas en este lenguaje, por lo que su implementación en Visual Basic no es complicada. El objetivo principalde SQL es la realización de consultas y cálculos con los datos de una o varias tablas. a) Escribir mandatos en SQL 1. Un mandato en SQL se expresa en una cadena de caracteres o String. 2. Dicho mandato se puede escribir en la propiedad RecordSource de un control Data, con el fin de crear una consulta en la interfaz. 3. Los nombres de los campos especificados (y de las tablas), que contengan más de una palabra, han de encerrarse entre corchetes ([nombre]). Como norma general, se suelen escribir siempre entre corchetes. 4. Para especificar un determinado campo de una determinada tabla, se ha de escribir primero el nombre de la tabla, un punto y, a continuación, el nombre del campo (nombre_tabla.nombre_campo). 5. Al especificar una expresión de búsqueda, si ésta se refiere a una expresión de caracteres, éstos han de encerrarse entre comillas, normalmente simples (‘expresión-a-buscar’). 6. Para especificar una fecha en una búsqueda, ésta debe encerrarse entre almohadillas o pragmas (#fecha#). 7. Si se utiliza la propiedad RecordSource del control Data, para crear nuestras consultas en SQL, tras introducir el mandato SQL (siempre como una expresión de cadena) es necesario refrescar el control Data (control-data. Refresh). b) La sentencia SELECT y la cláusula FROM La sentencia SELECT “selecciona” los campos que conformarán la consulta, es decir, que establece los campos que se visualizarán o compondrán la consulta. El parámetro 5. Programación de una BDI 72 ‘lista-campo está compuesto por uno o más nombres de campos, separados por comas, pudiéndose especificar también el nombre de la tabla a la cual pertenecen seguido de un punto y del nombre del campo correspondiente. Si el nombre del campe o de la tabla está compuesto de más de una palabra, este nombre ha de escribirse entre corchetes ([nombre]). Si se desea seleccionar todos los campos de una tabla, sE puede utilizar el asterisco (*) para indicarlo. Una sentencia SELECT no puede escribirse sin la cláusula FROM. Una cláusula es una extensión de un mandato que complementa a una sentencia o instrucción, pudiendo complementar también a otras sentencias. Es, por decirlo así, un accesorio imprescindible en una determinada máquina, que puede también acoplarse a otras máquinas. En este caso, la cláusula FROM permite indicar en qué tablas o en qué consultas (queries) se encuentran los campos especificados en la sentencias SELECT. Estas tablas o consultas se separan por medio de comas (,), y, si sus nombres están compuestos por más de una palabra, éstos se escriben entre corchetes ([nombre]). He aquí algunos ejemplos de mandatos SQL en la estructura SELECT...FROM...: SELECT nombre, apellidos FROM clientes; Selecciona los campos ‘nombre’ y ‘apellidos’ de la tabla ‘clientes’. SELECT clientes. nombre, producto FROM clientes, productos; Selecciona el campo ‘nombre’ de la tabla ‘clientes’, y el campo ‘producto’ de la tabla productos. SELECT pedidos. * FROM pedidos; Selecciona todos los campos de la tabla ‘pedidos’. SELECT * FROM pedidos; Selecciona todos los campos de la tabla ‘pedidos’. SELECT nombre, apellidos, telefono FROM clientes; Selecciona los campos ‘nombre’, ‘apellidos’ y ‘telefono’ de la tabla ‘clientes’. SELECT [codigo postal] FROM [tabla morosos]; Selecciona el campo 'codigo postal’ de la tabla ‘tabla morosos’. 5. Programación de una BDI 73 c) Claúsula WHERE La claúsula WHERE es opcional, y permite seleccionar qué registros aparecerán en la consulta (si no se especifica aparecerán todos los registros). Para indicar este conjunto de registros se hace uso de criterios o condiciones, que no es más que una comparación del contenido de un campo con un determinado valor (este valor puede ser constante (valor predeterminado), el contenido de un campo, una variable, un control, etc.). He aquí algunos ejemplos que ilustran el uso de esta cláusula: SELECT * FROM clientes WHEREnombre='ALFREDO; Selecciona todos los campos de la tabla ‘clientes’, pero los registros de todos aquellos clientes que se llamen ‘ALFREDO’. SELECT * FROM abonados WHERE estado ='NAYARIT' OR estado='JALISCO' OR estado ='COLIMA'; Selecciona todos los campos de la tabla ‘abonados’, pero los registros de todos los abonados de los estados de NAYARIT, JALISCO, COLIMA SELECT nombre, apellidos FROM abonados WHEREedad>=18; Selecciona los campos ‘nombre’ y ‘apellidos’ de la tabla abonados, escogiendo a aquellos abonados que sean mayor de edad (a partir de 18 años). SELECT * FROM abonados WHERE edad>=18 AND edad<=45; Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 años. SELECT * FROM abonados WHERE edad BETWEEN 18 AND 45; Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 años. SELECT * FROM diario WHERE fecha 471119 7#; Selecciona los apuntes de ‘diario’ realizados el 1 de Julio de 1.997 (la fecha ha de indicarse en inglés (mes/día/año)). SELECT * FROM diario WHEREfeCha<=#12/31/96#; Selecciona los apuntes de ‘diario’ realizados antes del 1 de Enero de 1.997. SELECT * FROM diario WHERE fecha BETWEEN #7/1/97# AND#7/31/97#; Selecciona los apuntes de ‘diario’ realizados en Julio de 1.997. 5. Programación de una BDI 74 SELECT * FROM clientes WHERE nombre LIKE'AL*, Selecciona los clientes cuyo nombre comience con los caracteres ‘AL’. SELECT * FROM clientes WHERE apellidos LIKE '*EZ, Selecciona los clientes cuyos apellidos terminen con los caracteres 'E?. SELECT * FROM clientes WHERE apellidos LIKE '*ZAMO*' Selecciona los clientes cuyos apellidos contengan, en cualquier posición, los caracteres ‘ZAMO’. SELECT * FROM clientes WHERE estado IN (‘JALISCO’, ‘COLIMA’, ‘NAYARIT’, 'MEXICO', ‘PUEBLA '); Selecciona todos los clientes de los estados JALISCO, COLIMA, NAYARIT, MEXICO, PUEBLA. d) Cláusula ORDER BY La cláusula ORDER BY suele escribirse al final de un mandato en SQL. Dicha cláusula establece un criterio de ordenación de los datos de la consulta, por los campos que se especifican en dicha cláusula. La potencia de ordenación de dicha cláusula radica en la especificación de los campos por los que se ordena, ya que el programador puede indicar cuál será el primer criterio de ordenación, el segundo, etc., así como el tipo de ordenación por ese criterio: ascendiente o descendiente. (...) ORDER B Y campo 9 [ASC/DESC][, campo2 [ASC/DESC]...] La palabra reservada ASC es opcional e indica que el orden del campo será de tipo ascendiente (O-9 A-Z), mientras que, si se especifica la palabra reservada DESC, se indica que el orden del campo es descendiente (9-O Z-A). Si no se especifica ninguna de estas palabras reservadas, la cláusula ORDER BY toma, por defecto, el tipo ascendiente [ASC]. He aquí algunos ejemplos: 5. Programación de una BDI 75 SELECT nombre, apellidos, tele fono FRO M clientes ORDER B Y apellidos, nombre; Crea una agenda telefónica de ‘clientes’ ordenada por ‘apellidos’ y ‘nombre’. SELECT * FROM pedidos ORDER BY fecha DESC; Relación de ‘pedidos’ ordenados desde el más antiguo hasta el más moderno. SELECT * FROM abonados ORDER BY apellidos, nombre, fecha-nacimiento DESC; Relación de ‘abonados’ por ‘apellidos’ y ‘nombre’ ascendientemente, y por ‘fechanacimiento’ en orden descendiente (del más viejo al más joven). e) Programación SQL desde el control data Gracias al control ‘Data’ (.vbx) podremos utilizar fácilmente la potencia de SQL. Lo primero que hay que tener en cuenta es que la consulta realizada en SQL posea los mismos campos que la interfaz diseñada, y que los controles encargados de mostrar o modificar la base de datos, estén perfectamente vinculados al control Data. Por ejemplo: realizamos una ficha de ‘clientes’, por lo que diseñamos una interfaz con diversas Text Box vinculadas a un control Data que contendrá los datos. Estas Text Box se vinculan gracias a las propiedades 'DataSource' y 'DataField'. La propiedad 'DataSource' corresponde a la fuente de los datos, en este caso, el nombre del control ‘Data’. En la propiedad 'DataField' se especifica el nombre del campo a tratar por cada Text Box (‘nombre’, 'direccion', ‘nif, ‘telefono’, etc.). Por otro lado, en la propiedad 'DatabaseName' del control ‘Data’, se ha de especificar la ruta completa de la base de datos (base.mdb), y la propiedad 'RecordSource' se reservará para indicar, en una cadena o String, el mandato en SQL correspondiente cuando sea necesario. Así se podría crear una variable de tipo String en un módulo, e insertar el mandato en SQL correspondiente antes de llamar a la ficha. Al llamar a la ficha, la Form correspondiente tendrá un evento Load, donde se insertará un código similar al siguiente: control-data.RecordSource = variable-SQL control-data. Refresh 5. Programación de una BDI 76 Obviamente, dependiendo del caso, la programación se hará diferente. Pero la norma común es crear una interfaz en concreto, con unos campos concretos y, cuando sea necesario, establecer como valor de la propiedad 'RecordSource' el mandato en SQL, y refrescar el control Data correspondiente. De esta manera, el coñtrol Data contendrá el resultado de la consulta. f) Eliminación dinámica de registros El lenguaje SQL nos permite eliminar registros que cumplan las condiciones o criterios indicadas a través de la sentencia DELETE, cuya sintaxis es la siguiente: DELETE FROM tablas WHERE criterios Donde el parámetro ‘tablas’ indica el nombre de las tablas de las cuales se desea eliminar los registros, y, el parámetro ‘criterios’, representa las comparaciones o criterios que deben cumplir los registros a eliminar, respetando a aquellos registros que no los cumplan. Si - por ejemplo - quisiéramos eliminar todos los pedidos realizados por el cliente cuyo código sea 4 en el día de hoy, utilizaríamos la siguiente sentencia: DELETE FROM pedidos WHERE [codígo cliente]=4 AND fecha=Now(); g) Aritmética con SQL * Sumas o totales Para sumar las cantidades numéricas contenidas en un determinado campo, hemos de utilizar la función SUM, cuya sintaxis es la siguiente: SUM(expresión) Donde ‘expresión’ puede representar un campo o una operación con algún campo. 5. Programación de una BDI 77 La función SUM retorna el resultado de la suma de la expresión indicada en todos los registros que son afectados por la consulta. Veamos algunos ejemplos: SELECT SUM(unidades) FROM pedidos; Retorna el total de unidades pedidas (la suma de todos los valores almacenados en el campo ‘unidades’ de la tabla ‘pedidos’). Este resultado se toma como un nuevo campo en el RecordSet. SELECT SUM(ingresos-gastos) AS saldo FROM diario; Retorna el saldo final de una tabla llamada ‘diario’. Este resultado se toma como un nuevo campo en el RecordSet y se le llama ‘saldo’. SELECT SUM(unidades) AS tota/ FROM pedidos WHEREfecha =Now(); Retorna el total de unidades pedidas hoy. Este resultado se toma como un nuevo campo en el RecordSet y se le llama ‘total’. * Promedios o medias aritméticas Para averiguar el promedio de unas cantidades utilizaremos la función AVG, cuya sintaxis es la siguiente: AVG(expresión) La función AVG retorna el promedio o media aritmética de la expresión especificada, en todos los registros afectados por la consulta. Esto es lo mismo que realizar una suma (SUM) y, después, dividir el resultado entre el número de registros implicados. He aquí algunos ejemplos: SELECT AVG(unidades) FROM PEDIDOS; Retorna el promedio de unidades pedidas (la media de todos los valores almacenados en el campo ‘unidades’ de la tabla ‘pedidos’). Este resultado se toma como un nuevo campo en el RecordSet. SELECTA VG(ingresos-gastos) AS saldo-medio FROM diario; 5. Programación de una BDI 78 Retorna el saldo medio de una tabla llamada ‘diario’. Este resultado se toma como un nuevo campo en el RecordSet y se le llama ‘saldo-medio’. SELECTA VG(unidades) AS media FROM pedidos WHERE fecha=Now(); Retorna el promedio de unidades pedidas hoy. Este resultado se toma como un nuevo campo en el RecordSet y se le llama 'media'. * Valores mínimos y máximos También es posible conocer el valor mínimo o máximo de un campo, mediante las funciones MIN y MAX, cuyas sintaxis son las siguientes: MIN(expresión) MAX(expresión) He aquí algunos ejemplos: SELECT MIN(unidades) AS minimo FROM pedidos; Retorna el pedido más pequeño y lo refleja en el campo ‘minimo’. SELECT MAX(unidades) AS maximo FROM pedidos WHERE fecha=Now(); Retorna el pedido más grande de hoy y lo refleja en el campo ‘maximo’. SELECT MAX(gastos) AS maximo FROM diario; Retorna el gasto más costoso reflejado en el diario contable, y lo representa en el campo ‘maximo’. * Conteo de registros Para conocer cuántos registros hay utilizaremos la función COUNT, cuya sintaxis es la siguiente: COUNT(expresión). 5. Programación de una BDI 79 La función COUNT retorna el número de registros indicados en la expresión. He aquí algunos ejemplos: SELECT COUNT(*) AS num_pedidos FROM pedidos WHERE fecha=Now(); Retorna el número de pedidos realizados hoy. Este resultado se toma como un nuevo campo en el RecordSet y se le llama 'num_pedidos'. SELECT COUNT(*) AS casados FROM clientes WHERE casado=True; Retorna el número de clientes casados. Este resultado se toma como un nuevo campo y se le llama ‘casados’. SELECT COUNT(*) AS num pagos FROM diario WHERE gastos=25594; Retorna el número de pagos por un importe equivalente a 25594. Este resultado se toma como un nuevo campo en el RecordSet, y se le llama ‘num-pagos’. SELECT SUM(unidades) AS total, AVG(unidades) AS media, COUNT(*) AS registros, MAX(unidades) AS maximo, MIN(unidades) AS minimo FROM pedidos WHERE fecha BETWEEN #111197# AND #6130/97#; Retorna el total, la media, el máximo y el mínimo de unidades pedidas, y el número de pedidos realizados, durante el primer semestre de 1997 h) Omisión de registros duplicados En una consulta podría ser útil omitir registros que estén duplicados. Por ejemplo, en nuestros pedidos hay duplicación, puesto que un cliente realiza varios pedidos en el mismo día. Quizá necesitemos una historia para conocer los días y los clientes que realizaron algún pedido, pero no necesitaremos toda la lista, si no que nos diga, únicamente, mediante una línea, qué cliente realizó algún pedido y en qué día. Para ello, utilizaremos el predicado DISTINCT, cuya sintaxis es la siguiente: SELECT DISTINCT lista-campos . . . 5. Programación de una BDI 80 El predicado DISTINCT omite aquellos registros duplicados en los campos especificados. En el problema expuesto, utilizaremos la siguiente sentencia: SELECT DISTINCT [codigo cliente], fecha FROM pedidos; Si deseamos que la consulta sea más completa y nos visualice también el nombre y los apellidos correspondientes del cliente en cuestión (estos datos están en la tabla ‘clientes’ y no en ‘pedidos’), escribiríamos este mandato: SELECT DISTINCT pedidos.fecha, pedidos.[codigo cliente], clientes. nombre, clientes. apellidos FRO M pedidos, clientes WHERE clientes.[codigo cliente] = pedidos. [codigo cliente]; i) Reemplazar datos Es posible reemplazar el valor de un campo, para el total de la tabla al que pertenezca mediante UPDATE, su sintaxis es la siguiente: UPDATE lista-tablas SET campo=nuevo valor (,campo=nuevo valor] [WHERE...] Donde lista-tablas representa el nombre de las tablas donde se realizarán las sustituciones o reemplazos. El parámetro campo indica el campo que se va a modificar, y el parámetro nuevo-valor respresenta una expresión (constante, valor directo, un cálculo, etc.) cuyo resultado o valor será el nuevo valor del campo. La sentencia UPDATE es muy versátil y potente, por lo que podemos realizar reemplazos condicionantes, ya que permite la cláusula WHERE. De ello se deduce que - por ejemplo -, si se desea bajar un 10% el importe del seguro a aquellos asegurados que cumplan más de dos años de carnet de conducir, y que tengan más de 22 años de edad, tendríamos que escribir la siguiente sentencia: UPDATE asegurados SET importe=importe/1. 1 WHERE edad>22 AND YEAR(Now)YEAR(expedicion)>2; 5. Programación de una BDI 81 Adicionalmente es posible utilizar varias tablas y sustituir el valor de un campo de una de las tablas con el valor del campo de otra tabla, o bien reemplazar el valor de unos campos de alguna tabla si el valor de los campos de otras tablas cumple una serie de requisitos. j) Grupos de registros Si se precisa mostrar un resumen de los datos que tenemos, especificando el total - por ejemplo -, de los ingresos y de los gastos de cada día, en lugar de visualizar todos los ingresos y gastos realizados al detalle. Para llevar a cabo esta tarea hemos de tener en cuenta, en primer lugar, bajo qué campo se van a agrupar los datos (en lo expuesto, sería el campo fecha), y, a continuación, realizar la consulta mediante la cláusula GROUP BY, cuya sintaxis es la siguiente: SELECT . . . FROM . . . [WHERE . . .] GROUP BY lista-campos Básicamente, la cláusula GROUP BY agrupa o combina registros con idéntico valor en los campos especificados, en un único registro. Imaginemos que queremos hacer un resumen de nuestros pedidos, y queremos saber cuántos pedidos y unidades han realizado cada uno de nuestros clientes. Para ello, se escribiría una sentencia como ésta: SELECT codigó cliente, count(codígo cliente) AS num pedidos, SUM(unidades) AS cantidad FROM pedidos GROUP BY codigó cliente; Para saber cuántos pedidos se realizaron cada día: SELECT fecha, count(fecha) AS num pedidos FROM pedidos GROUP BY fecha; Para conocer cuántas unidades se pidieron cada día, tipearíamos esta sentencia: SELECT fecha, SUM(unidades) AS cantidad FROM pedidos GROUP BY fecha; 5. Programación de una BDI 82 En la siguiente sentencia se muestra para cada cliente aquellos días en que se realizó un pedido, resumiéndose el número de pedidos realizados así como el total de unidades pedidas: SELECT fecha, codigó cliente, COUNT(codigo cliente) AS num pedidos, SUM(unidades) AS cantidad FROM pedidos GROUP BY fecha, codigó cliente HAVING fecha<#116197#; Como se puede apreciar, se ha especificado una condición a través de la cláusula HAVING, que indica los criterios o condiciones a cumplir por los registros a visualizar en un agrupamiento. En esta ocasión, la condición era de aquellos pedidos realizados antes del seis de enero de 1997. Para conocer una estadística de pedidos diaria, utilizaremos la siguiente sentencia: SELECT fecha, COUNT(fecha) AS pedidos, SUM(unidades) AS subtotal, MIN(unidades) AS mínimo, MAX(unidades) AS maximo, A VG(unidades) AS promedio FROM pedidos GROUP BY fecha; k) Combinación de datos Las consultas realizadas hasta ahora requerían de una dosis de habilidad para conseguir crear un conjunto de datos que tuviese información combinada de dos tablas. Pero, podemos combinar datos de una manera mucho más sencilla y eficaz: mediante las operaciones JOIN, las cuales permiten combinar datos de dos tablas. La operación JOIN más común es INNER JOIN, cuya sintaxis es: tabla 1 INNER JOIN tabla2 ON tabla J .campó común=tabla2.campó común Donde tabia1 y tabla2 representan el nombre de las tablas a combinar. Ambas tablas han de tener un campo común o igual para poder realizar correctamente la combinación de los datos. Por ejemplo: 5. Programación de una BDI 83 SELECT * FROM pedidos INNER JOIN clientes ON pedidos.codigo cliente = clientes. codigo cliente; El resultado será un conjunto de registros con los datos de las dos tablas. Este conjunto poseerá el nombre de todos los campos de la tabla pedidos y de todos los campos de la tabla clientes. En cada registro aparecerán los datos relacionados, es decir, que en un pedido aparecerán los datos del mismo y los datos personales del cliente que realizó el pedido. La operación INNER JOIN combina los datos de las dos tablas siempre que haya valores coincidentes en los campos comunes o enlazados. Existen también otras dos formas de combinar: LEFT JOIN y RIGHT JOIN. Ambas tienen la misma sintaxis que INNER JOIN, pero estas operaciones incluyen todos los registros de una tabla y aquellos registros de la otra en que los campos comunes sean iguales. En la operación LEFT JOIN, incluye todos los registros de la primera tabla (parámetro tabla1) y aquellos registros de la segunda tabla (parámetro tabla2) en que los campos comunes sean iguales. En la operación RIGHT JOIN ocurre lo contrario: incluye todos los registros de la segunda tabla y aquellos registros de la primera tabla en que los campos comunes sean iguales. Aunque la diferencia entre las tres operaciones parezca inexistente, en realidad sí existe. La operación INNER JOIN realiza una combinación con todos aquellos registros de las dos tablas en que el campo común de ambas tenga el mismo valor, mientras que las operaciones LEFT JOIN y RIGHT JOIN realizan la combinación de todos los registros de la tabla que combinan (ya sea la primera para LEFT JOIN o la segunda para RIGHT JOIN), aunque en la otra tabla, en el campo común no haya coincidencia. 5. Programación de una BDI 84 La prueba se ve rápidamente si se introduce un código de cliente en el campo campocliente de la tabla pedidos que no exista: SELECT * FROM pedidos INNER JOIN clientes ON pedidos. codigo_clíente = clientes. codigó cliente; El registro que contiene el pedido del cliente que no existe no aparece, puesto que no hay coincidencia. Si utilizamos: SELECT * FROM pedidos LEFT JOIN clientes ON pedidos. codigó cliente = clientes. codigo cliente; Observaremos que aparecen todos los registros de la tabla pedidos, incluido aquel donde indicamos que el pedido fue solicitado por el cliente inexistente, pero en los campos relacionados (campos de la tabla clientes) no habrá ningún dato relacionado o combinado. Si utilizamos: SELECT * FROM pedidos LEFT JOIN clientes ON pedidos. codigó cliente = clientes. codigó cliente; Obtendremos el mismo resultado que con la operación INNER JOIN, puesto que se visualizan todos aquellos registros que existen en clientes y aquellos que coincidan con el campo clave en la tabla pedidos. Como el código inexistente no existe en la tabla clientes, este registro no aparece. Mediante las herramientas citadas, es posible recuperar los datos objetivo que serán transformados al formato IPL, dichos datos, generalmente serán el producto de varias consultas cuyos productos se redireccionan hacia un archivo a partir del que se edificará la base de datos en intenso, sobre la que opera el proceso de inferencia. Consideremos el siguiente ejemplo: 5. Programación de una BDI 85 Sean R1(T1,…, Tn), y R2 (T1,..., T,), donde: R1 (T1,T2,T3 T5,T4) con T1 (CVE), T2(MAX1), T3(MAX2) T4(MAX3), T5(MAX4). R2 (T1,T2,T3 T5,T4) con T1 (CVE), T2(L1), T3(l-2) T4(L3), T5(L4). Considerando un esquema de BD persistente en que se precisa: Tabla: Motor . CVE String ' 5 Indice primario. MAX1 - MAX4 Double Tabla: Lecturas . CVE String ' 5 Indice primario. L1 - L4 Double Relacionadas por el campo CVE. Y una base en intenso compuesta por el total de registros edificada con base a la siguiente estructura: motor(cve, m 1, m2, m3, m4). Iectura(cve,11,12,13,14). Tenemos: a) Creación de la base persistente: ' Listado 1 Creación de la base persistente: 'Código: Visual Basic 'Contenida en el CD anexo 5. Programación de una BDI Private Function makedb() '{ Creación de la BD Const DbPath As String = "'PATH\geneal.mdb" Dim NewDb As Database Dim Ws As Workspace Set Ws = DBEngine. Workspaces(0) Dim DbOpciones As Long DbOpciones = db Version70 + db Encrypt Set NewDb = Ws. CreateDatabase(DbPath, dbLangGeneral, DbOpciones) '{ Definición de tablas Dim NewTb As TableDef Set NewTb = NewDb. Create TableDef("motor'') '{ Definición de los campos de la tabla ReDim Campo(1 To 5) As Field Set Campo(l) = NewTb. CreateField("CVE”; dbText, 5) Set Campo(2) = NewTb. CreateField("MAXI", dbLong) Set Campo(3) = NewTb. CreateField("MAX2”, dbLong) Set Campo(#) = NewTb. CreateField("MAX3”; dbLong) Set Campo (5) = NewTb. CreateField("MAX4'; dbLong) Dim i As Byte For i = I To 5 NewTb. Fields. Append Campo(i) Next í '{ Definición de índice de la tabla Dim Idxid_ct As Index Dim Campoid As Field Set Idxid_ct = NewTb. Createlndex("CVE”) Idxid_ct. Primary = True Set Campoid = Idxid_ct. CreateField("CVE”) Idxid_ct. Fields. Append Campoid NewTb. Indexes. Append Idxid_ct NewDb. TableDefs. Append NewTb ‘{ Utilizando SQL Dim SQLCreate As String SQLCreate = "CREATE TABLE LECTURAS (CVE TEXT (5), " 86 5. Programación de una BDI SQLCreate = SQLCreate + "L l LONG, L2 LONG,” SQLCreate = SQLCreate + "L3 LONG, L4 LONG )" NewDb. Execute (SQLCreate) '{ Creación de índice SQLCreate = "CREATE INDEX Fol ON LECTURAS (C VE) WITH PRIMARY" NewDb. Execute (SQLCreate) '{ Definición de las relaciones entre tablas empleando el objeto relación Dim NewRel As Relation Dim CampoRel As Field Set NewRel = NewDb. CreateRelation("motor-lecturas”) NewRel. Table = "motor” NewRel. Foreign Table = "lecturas" Set CampoRel = NewRel. CreateField("CVE”) Campo Rel. ForeignName = "CVE" '{ Agregar el campo a la relación y la relación a la DB NewRel. Fields. Append Campo Rel NewDb. Relations.Append NewRel '{ Se cierra la base de datos y se liberan los recursos NewDb. Close End Function b) Creación de la base en intenso: 'Listado 2 Creación de la base en intenso (Considerando un archivo plano) 'Código Visual Basic. 'Contenida en el CD anexo. Private Function makebdi() Dim dbDatos As Database Dim tb, bt As Recordset Dim tipe, btipe As String free = FreeFile Open "'Path+file" For Output As #free Set db = OpenDatabase("'Path+file') '{ Path + file se sustituyen por los parámetros reales presentes '{ En el sistema 87 5. Programación de una BDI 88 Set tb = db. OpenRecordset("motor") Set bt = db. OpenRecordset("lecturas”) tipe = “Objeto” btipe = “Lecturas” While Not tb. EOF A$ = tb!CVE B$ = tb!MAXl C$ = tb!MAX2 D$ = tb/MAX3 e$ = tb!MAX4 Ab$ = Chr(44) + C$ + Chr(44) + D$ + Chr(44) + e$ f$ = tipe + Chr(40) + A$ + Chr(44) + B$ + Ab + Chr(41) + Chr(46) Listl.Addltem f$ Print #free, f$ tb. MoveNext Wend tb. Close While Not bt. EOF A$ = bt!CVE B$ = bt!L1 C$ = bt!L2 D$ = bt!L3 e$ = bt!L4 Ab$ = Chr(44) + C$ + Chr(44) + D$ + Chr(44) + e$ f$ = btipe + Chr(40) + A$ + Chr(44) + B$ + Ab + Chr(41) + Chr(46) Print #free, f$ bt. MoveNext Wend bt. Close db. Close Close #free End Function 52.4 Edición de las Bases Persistentes y en Intenso. En el desarrollo de los distintos prototipos, hemos incluido un vista global de las bases de datos que recuperan tanto la estructura como el contenido de dicha, con el objetivo de consolidar una aplicación totalmente transparente, el siguiente listado constituye su base de operación ( En fragmentos de código, se hace referencia a los objetos contenidos en el prototipo de ejemplo anexo al presente documento): 5. Programación de una BDI a) Edición de la base persistente. 'Listado 3, Explorar la base persistente 'Código: Visual Basic. Option Explicit Dim WorkDb As Database Dim td As Tabl eDef Dim Database/sOpen As Boolean Dim CurrentTable As Recordset Dim TablelsOpen As Boolean Dim source As String Private Sub Form Load() Dim td As TableDef Set WorkDb = DBEngine. Workspaces(O). OpenDatabase("path+file") Da to Basels Open = True For Each td In WorkDb. TableDefs If td.Attributes = 0 Then IstOfTables. Addltem td. Name End If Next td End Sub Private Sub Form Unload(CANCEL As Integer) If DataBaselsOpen Then WorkDb. Close End Sub Private Sub LstOfFields_Click() On Resume Next Dim td As TableDef Dim Fid As Field Dim This/tem As Integer Set td = WorkDb. TableDefs(IstOfTables) If IstOfFields <> "" Then Set Fid = td. Fields(IstOfFields) Select Case Fld. Type Case dbByte: IbIType. Caption = "Byte" Case dblnteger: IbIType. Caption = "Integer" Case dbLong: IbIType. Caption = "Long" Case db Text: IbIType. Caption = "Text" Case dbSingle: IbIType. Caption = "Single" Case db Boolean: IbIType. Caption = "Boolean" Case dbDouble: /b/Type. Caption = "Double" 89 5. Programación de una BDI Case dbCurrency: IbiType. Caption = "Currency" Case dbDate: IbiType. Caption = “Date” Case db Time: IbiType. Caption = “Time” Case dbLongBinary: IbiType. Caption = "Binary" Case dbBinary.: IbiType. Caption = "Binary" Case dbMemo: IbiType. Caption = “Memo” Case Eise: IbiType. Caption = Fid. Type End Select lb/Size. Caption = Fid. Size IbtSample = “Ejemplo del Campo: " & Fid. Name IstSample. Ciear if Val(txtNumberoSamples) > 0 Then CurrentTabie. MoveFirst Do Until CurrentTabie. EOF Or Thisitem >= Vai(txtNumberoSampies) if err = 0 Then if Not isNuii(CurrentTabie(Fid. Name)) Then IstSample.Additem CurrentTable(FId. Name) if err <> 0 Then Select Case err Case 3 167: istSampie.Additem "<Deleted>" Case Eise: IstSample.Addltem "<Err=" & Trim$(Str$(err)) & ">" End Seiect End if Eise IstSample.Add/tem "<Null>" End if Eise Seiect Case err Case 3167: IstSampie.Add/tem "<Deleted>" Case Eise: istSampie.Additem "<Err-" & Trim$(Str$(err)) & ">" End Seiect End If CurrentTabie. MoveNext Thisitem = Thisitem + 1 Loop End If End if End Sub Private Sub IstOfindexes_Click() Dim Fid As Field Dim idx As index Set idx = td. Indexes(IstOflndexes) IstOf/ndexFields. Ciear For Each Fid In idx. Fieids IstOfindexFields. Addltem Fid. Name Next Fid 90 5. Programación de una BDI LstOfFields Click End Sub Private Sub IstOfTables_Click() Dim Fld As Field Dim Idx As Index If TablelsOpen Then CurrentTable. Close Set Current Table = WorkDb. OpenRecordset(lstOfTables) TablelsOpen = True lstOfFíelds. Clear Set td = WorkDb. TableDefs(lstOfTables) For Each Fld In td. Fields IstOfFields. Addltem Fld. Name Next Fld IblType. Caption “” lblSize. Caption = "" IstOfindexes. Clear For Each Idx In td.lndexes IstOflndexes. Addltem Idx. Name Next Idx lstSampie. Clear End Sub Private Sub brtDataBaseName KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then cmdOpen Click End Sub b) Edición de la base en intenso ‘Listado 4, Editar la base en intenso ‘Código: Visual Basic. Private Funcfion EditBdi() Dim count As Integer Dim free, ncar As Integer free = FreeFile Open "c:lfinaNnfo1. txt” For Input As #free scar = LOF(free) Bditxt. Text = Input(ncar, free) Close free End Funcfion 91 5. Programación de una BDI 92 5.2.4.1 Representación gráfica de los datos La representación gráfica de los datos contenidos en la base en intenso, constituyen una forma sencilla de visualizar los resultados de los distintos procesos de selección y filtrado, previos al proceso de inferencia. ‘Listado 5, Representación gráfica en árbol ‘Código: Visual Basic. Option Explicit Dim cont_mostrados As Long Dim mi_left As Long Dim mi_top As Long Dim avance_left As Long Dim avance_top As Long Dim media_caja As Long Dim mínimo_ punto As Long Dim cancelar_arbol As Boolean Private Sub Aceptar Click() Unload Me End Sub Private Sub Btn_Arbol_ClickQ Dim i As Long Dim X As Long Dim cod arbo As String Dim desc arbo As String Dim cod padre arb() As Stting Btn_Arbol. Visible = False Aceptar. Visible = False selectFileObligatory CTE_C_PRG_ARBOL, “*,db”, CTE_TIPO_ARCHIVO_TEXTO, “Abrir Fichero de arboI" "&Abrir" If Not cancelar_operation_fichero_gf Then On Error Resume Next s_aut_leer_arbol_GAIH cod_arb(), desc_arb(), cod_padre_arb() cont-mostrados = 0 mi-top = avance-top Screen. MousePointer = CTE_ARENA cancelar-arboi = True While cancelar-arbol cancelar-arbol = False For i = 1 To UBound(cod_arb) 5. Programación de una BDI If cod padre arb(i) = "" Then mi_ left = avance_left f_expandir_nodo_GAIH i, cod_arb(), desc_arb(), cod_padre_arb() Do Events End If If cancelar-arbol Then Me. Cls Do Events For X = 1 To cont-mostrados Unload Etiqueta(X) Next X Exit For End If Next i Wend Screen. MousePointer = CTE_DEFECTO End If End Sub Private Sub Form_Load() Me. KeyPreview = True frm_uO_arbo.AutoRedraw = False frm_uO_arbo. WindowState = CTE_MAXIMIZED frm uO_arbo. DrawWdth = 4 avance_left = 1200 / 15 avance-top = 300 / 15 media-caja = 120 / 15 minimo punto = 4 End Sub Function f_expandir_nodo_GAIH(nodo As Long, cod_arb() As String, desc_arb() As String, cod _padre_arb() As String) As Boolean Dim viejo_left As Long Dim numero-hijos As Long s_mostrar_etiqueta_GAIH nodo, desc_arb() viejo_left = mi_left numero-hijos = f_mostrar_hijos_GAIH(nodo, cod_arb(), desc_arb(), cod_padre_arb() mi_ left = viejo_left If numero-hijos > 0 Then f_expandir_nodo_GAIH = True Else f_expandir_nodo_GAIH = False End If End Function Private Sub s_mostrar_etiqueta_GAIH(nodo As Long, desc_arb() As String) cont-mostrados = cont-mostrados + 1 Load Etiqueta(cont_mostrados) Etiqueta(cont_mostrados).left = mi_left + desviacion_ejes_X Etiqueta(cont_mostrados).top = mi_top + desviacion_ejes_Y 93 5. Programación de una BDI 94 Etiqueta(cont_mostrados). Visible = True Etiqueta(cont_mostrados). Caption = desc_arb(nodo) End Sub Function f_mostrar_hijos_GAIH(nodo As Long, cod_arb() As String, desc_arb() As String, cod_padre_arb() As String) As Long Dim i As Long Dim primer-hijo As Boolean Dim cont-hijos As Long Dim pto_x As Long Dim pto_y As Long Dim ha-habido-hijos As Boolean primer-hijo = True cont-hijos = 0 For i = 1 To UBound(cod_arb) lf cod_padre arb(i) = cod_arb(nodo) Then If primer-hijo Then cont-hijos = 1 mi_left = mi_left + avance-left Me. Line (mi_left – avance_left + 20, mi-top + media-caja)-(mi-let?, mi_top media-caja), 0 Else Me. Line (mi_left – avance_left / 4, mi-top + media_caja)-(mi_left, mi-top + media-caja), 0 pto_y = mi-top + media-caja – minimo_punto pto_x = mi_left – avance_left / 4 While Point(pto_x, pto_y) <> 0 PSet (ptc_x, pto_y), 0 Pto_y = pto_y - minimo_punto If pto_y < 0 Then avance-left = avance_left * 2 cancelar_arbol = True Exit Function End If Wend PSet (pto_x, pto_y), 0 cont-hijos = cont-hijos + 1 End If ha-habido-hijos = f_expandir_nodo_GAIH(i, cod_arb(), desc_arb(), cod_padre_arb()) If Not ha-habido-hijos Then mi-top = mi-top + avance-top End If primer-hijo = False End If Next i f_mostrar_hijos_GAIH = cant_hijos End Function 5. Programación de una BDI 95 Private Sub s_aut_leer_arbol_GAIH(cod_arb() As String, desc_arb() As String, cod_ padre_arb() As String) On Error GoTo abrir-error Dim linea As String Dim indice As Long principio: Screen. MousePointer = CTE_ ARENA Open nombre_fichero_gfi For Input As #CTE_NF_63_ARB ReDim cod_arb(1 To 1) As Stnng ReDim desc_arb(1 To 1) As String ReDim cod_padre_arb(1 To 1) As String indice = 0 While Not EOF(CTE_NF_63_ARB) linea = readLinelgnoreComment(CTE_NF_63_ARB) If Len(linea) > 0 Then indice = indice + 1 ReDim Preserve cod_arb(1 To indice) As String ReDim Preserve des_arb(1 To indice) As String ReDim Preserve cod _padre_arb(1 To indice) As String cod_arb(indice) = noQuotes(extField(linea, 1, CTE_SEP, CTE_QUOTED_FIELDS, CTE_NO_2_SEP_AS_ONE)) desc_arb(indice) = noQuotes(extField(linea, 2, CTE_SEP, CTE_QUOTED_FIELDS, CTE_NO_2_SEP_AS_ONE)) cod_padre_arb(indice) = noQuotes(extField(linea, 3, CTE_SEP, CTE_QUOTED_FIELDS, CTE_NO_2_SEP_AS_ONE)) End If Wend Close #CTE_NF_63_ARB DoEvents Screen. MousePointer = CTETDEFECTO Exit Sub abrir_error: s_error_ger CTE_ERROR_GRAVE, Close #CTE_NF_63_ARB DoEvents Screen. MousePointer = CTETDEFECTO If Not automatice_gcf Then selectFiteObligatoty CTE_C_TPRG_ARBOL, “*.txt”, CTET_TIPO_ARCHIVO_TEXTO, “Abrir Fichero de árbol”, "&Abrir" CTE_SELECCIONAR _FICHERO_OBLIGATORIO_OP_FICH If cancelar_operacion_fichero_gfi Then Exit Sub End If Go To principio End Sub 5. Programación de una BDI 96 5.3 Archivos binarios En el desarrollo de una base de datos inteligente, es común el uso de datos no persistentes, tratados como archivos binarios que se crean y destruyen según sea preciso en el desarrollo de la aplicación, generalmente concentran datos en estado intermedio útiles para procesos particulares de inferencia pero no necesarios de forma persistente. Aún cuando la mayoría del Hardware actual está provisto de RAM suficiente para tratar grandes' grupos de datos mediante arreglos, éstos generan pérdida de eficiencia en un contexto general, por ello, la mejor opción es el uso de archivos binarios temporales, grabados en disco a cuyos datos se accede cuando es necesario, consideremos el siguiente ejemplo, con las características básicas(buscar, eliminar, editar, agregar): Sean R(T1,.... Tn), donde: R1 (T1,T2,T3,T4,T5) con: T1 (CVE), T2(MUESTRA), T3(FECHA) T4(VALOR), T5(CONTADOR). Obtenida por los módulos ( En fragmentos de código, se hace referencia a objetos[¡ ista_muestra, frmBinary] contenidos en el prototipo de ejemplo anexo al presente documento): ‘Listado 6 Datos binarios ‘Código: Visual Basic. BinaryDB1. bas Public DatabasePath As String Public BackupDatabasePath As String Public IndexPath As String Public ditty As Boolean Public cualq_camb As Boolean Public Const DOT = "¤" Public Const Marca-en = "@Marca-en@" Private Const DATABASE_RECORD_LIMIT = 65000 5. Programación de una BDI 97 Private Const COLUMN_WIDTH = 20 Private Const DATABASE_NAME = "Bintmp.tmp” Private Const INDEX_NAME = "Bintmp.idx" Private Const BACKUP_DATABASE_NAME = "Bintmp.mb0" Private Const BACKUP_INDEX_NAME = "Bintmp.id0" Private Const START_BYTE_PART = 1 Private Const LEN_BYTE_PART = 2 Private Const FROM_PART = 3 Pnvate Const SUBJECT_PART = 4 Private Const DATE_PART = 5 Private Const TO_PART = 6 Private Const INDEX_PART = 7 Public Sub AddRecord() On Error Resume Next cualq_camb = True frmRec.txtDate = Now recnext& = CLng( Val(Read/ndex("RecNext"))) frmRec. txtl ndex = recnext& & "" frmRec.Show 1 BinaryMgmt. AddRecordFinish Unload frmRec On Error Go To 0 On Error Resume Next End Sub Private Sub AddRecordFinish() On Error Resume Next Dim message As String message = Trim(frmRec. txtMessage) Open DatabasePath For Binary As #1 byte-next = Readlndex("ByteNext”) rec-next = Readlndex("RecNext") Put #1, byte-next, message Close # 1 len-bytes = Len(message) v$ = byte-next & DOT & len-bytes & DOT & Trim(frmRec.txtFrom) & DOT & Ttim(frmRec.txtSubject) & DOT & Trim (frmRec. txtDate) & DOT & Trim(frmRec. txtTo) & DOT & “HECHO” Wntelndex “R” & rec-next, v$ byte-next = byte-next + len-bytes Write/ndex "ByteNext" byte-next rec-next = rec-next + 1 Wntelndex "RecNext", rec-next ReadAIlRecords On Error GoTo 0 On Error Resume Next 5. Programación de una BDI End Sub Public Sub EditRecord() On Error Resume Next If frmBinary.lista_muestra. Listindex = 0 Then Exit Sub v$ = frmBinary. lista-muestra. List(frmBinary.lista_muestra.Listlndex) myindex = ParseTab(v$, 5): v $ = “” frmRec. txtlndex myindex = myindex v $ = Readlndex("R" & myindex) start byte& = CLng(Val(Parse(v$, START_BYTE_PART))) len-bytes& = CLng(Val(Parse(v$, LEN-BYTE-PART))) As = filebuffer As String filebuffer = String(len bytes&, 0) Open DatabasePath For Binary As #1 Close # 1, start byte&, filebuffer frmRec.txtDate = Parse(v$, DATE_PART) frmRec.txtTo = Parse(v$, TO_PART) frmRec_txtFrom = Parse(v$, FROM_PART) frmRec.txtSubject = Parse(v$, SUBJECT_PART) frm Rec.txtMessage = Mid$(filebuffer, 1, len-bytes&) frmRec. Sho w 1 If dirty = True Then BinaryMgmt. EditRecordFinish dirty = False End If Unload frmRec On Error Go To 0 On Error Resume Next End Sub Private Sub EditRecordFinish() On Error Resume Next cualq_camb = True Dim message As String message = Trim(frmRec. txtMessage) ‘{Marca-en el registro actual myindex = Trim (frmRec. txtlndex) readin$ = Readlndex("R" & CLng(Val(myindex))) readin$ = Left(readin$, Len (readin$) - 2) readin$ = readin$ & “@Marca-en@” Writelndex "R" & CLng( Val(myindex)), readin$ '{ Escribir un nuevo registro en la base 98 5. Programación de una BDI 99 byte-next = Readlndex("ByteNext") rec-next = Readlndex("RecNext") Put #1, byte-next, message Close #1 '{ En final ( index) len-bytes = Len(message) v$ = byte next & DOT & len-bytes & DOT & Trim(frmRec. txtFrom) & DOT & Trim(frmRec.txtSubject) & DOT & Trim(frmRec. txtDate) & DOT & Trim(frmRec. txtTo) & DOT & “HECHO“ Writelndex "R" & rec-next, v$ byte-next = byte-next + len-bytes Writelndex “Byte Next" byte-next rec-next = rec-next + 1 Writelndex "RecNext"; rec-next End Sub Public Sub DeleteRecord() On Error Resume Next cualq_camb = True ‘{ Marca-en registro actual lf frmBinary.Iista_muestra. Listlndex = 0 Then Exit Sub v$ = frmBinary. lista-muestra. List(frmBinary. lista-muestra. Listlndex) myindex = ParseTab(v$, 5): v$ = "" readin$ = Readlndex("R" & CLng(Val(myindex))) readin$ = Left(readin$, Len(readin$) - 2) readin$ = readin$ & “@Marca-en@” Writelndex "R" & CLng(Val(myindex)), readin$ End Sub Public Sub ReadAllRecords() On Error Resume Next frmBinary. lista-muestra. Clear BuildHeaderList v$ = "dummytext" Do K& = k& + 1 v$ = Readlndex("R" & k&) If v$ = "" Then Exit Do If Right$(v$, Len(Marca en)) <> Marca-en Then frmBinaryiista muestra. Addltem _ Pad(Parse(v$, FROM_PART)) & vbTab & _ 5. Programación de una BDI Pad(Parse(v$, SUBJECT PART)) & vbTab & _ Pad(Parse(v$, DATE-PART)) & vbTab & _ Pad(Parse(v$, TO PART)) & vbTab & _ k& End If Loop Until v$ = “” On Error Go To 0 On Error Resume Next End Sub Public Sub OpenDatabase() On Error Resume Next DatabasePath = App. Path If Right$(DatabasePath, 1) <>”\" Then DatabasePath = DatabasePath + ”\" DatabasePath = DatabasePath + DA TABASE_NAME IndexPath = App. Path If Right$(IndexPath, 1) <>”\" Then IndexPath = IndexPath +”\" IndexPath = IndexPath + INDEX_NAME If Not FileExists(DatabasePath) Then ‘{ crear archivo Open DatabasePath For Output As #1 Close #1 Open IndexPath For Output As # 1 Print #1, "[Index]" Print #1, "RecNext = 1 " Ptint #1, "ByteNext = 1" Close #1 End If On Error GoTo 0 On Error Resume Next End Sub Private Function FileExists(ByVal f$) As Boolean On Error Resume Next SetAttr f$, vbNormal If Err Then FileExists = False Else FileExists = True End If On Error Go To 0 On Error Resume Next End Function 100 5. Programación de una BDI Private Function Pad(ByVaI incoming As String) As String On Error Resume Next Select Case Len(incoming) Case Is < COLUMN_ WIDTH incoming = incoming & Space(COLUMN_WIDTH - Len (incoming)) Case Is > COLUMNTWIDTH incoming = Left$(íncoming, COLUMNTWIDTH) End Select Pad = incoming On Error Go To 0 On Error Resume Next End Function Private Sub BuildHeaderList() On Error Resume Next Dim cofheaders(5) As String colheaders(1) = "CVE” colheaders(2) = “MUESTRA” colheaders(3) = “FECHA” colheaders(4) = “VALOR” colheaders(5) = “CONTADOR” Fork% = 1 To 5 header-row = header-row & Pad(colheaders(k%)) & " " & vb Tab Next k% frmBinary.lista_muestra. Addltem header_row On Error GoTo 0 On Error Resume Next End Sub Public Sub CompactDatabase() On Error Resume Next readin = 1 readout = 2 BackupDatabasePath = App. Path If Right$(BackupDatabasePath, 1) <>”\” Then BackupDatabasePath = BackupDatabasePath & 1" BackupDatabasePath = BackupDatabasePath + BACKUP_DATABASE_NAME Kill BackupDatabasePath FileCopy DatabasePath, BackupDatabasePath Kill DatabasePath Dim filebuffer As String byte next& = I Open BackupDatabasePath For Binary As #readin Open DatabasePath For Binary As #readout For k& = 1 To DATABASE RECORD_LIMIT v$ = Readindex("R" & k&) If v$ = "" Then Exit For 101 5. Programación de una BDI 102 if Right$(v$, Len(Marca_en)) <> Marca-en Then start_byte& = CLng(Vai(Parse(v$, START_BYTE_PART))) len_bytes& = CLng(Val(Parse(v$, LEN-BYTE-PART))) filebuffer = String(len bytes&, 0) Get #readin, start byte&, filebuffer outgoing$ = Mid$(filebuffer,1, len-bytes&) Put #readout, byte next&, outgoing$ v$ = byte-next& & DOT & Parse(v$, LEN-BYTE-PART) & DOT & Parse(v$, FROM_PART) & DOT & Parse(v$, SUBJECT_PART) & DOT& Parse(v$, DATE-PART) & DOT & Parse(v$, TO_PART) & DOT “HECHO” Wnteindex "R" & k&, v$ byte next& = byte-next& + len-bytes& Eise WriteIndex “R” &k&, “@Marca-en@” End If Next if byte_next& = 0 Then byte-next& = 1 Writeindex "ByteNext", byte-next& Writeindex "RecNext" k& Close #readout Close #readin Kiii BackupDatabasePath On Error Go To 0 On Error Resume Next End Sub BinaryDB2.bas Private Const sizer = 255 * 5 Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVai IpApplicationName As String, ByVal IpKeyName As Any, ByVai IpDefault As String, By Val IpReturnedString As String, ByVai nSize As Long, ByVai IpFileName As String) As Long Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVai IpApplicationName As String, ByVal IpKeyName As Any, ByVai IpString As Any, ByVai IpFileName As String) As Long Public Function Readlndex(ByVal IstrKey As String) As String On Error Resume Next Dim lfixedstrRetValue As String * sizer Dim IstrRetValue As String Dim lint Junk As integer Dim IstrSection As String IstrSection = "Index" IfixedstrRet Value = String(sizer, "') 5. Programación de una BDI 103 lintJunk = GetPrivateProfileStríng(IstrSection, IstrKey, " " lfixedstrRet Value, sizer, IndexPath) IstrRet Value = Trim(IfixedstrRetValue) IstrRetValue = Left(IstrRetValue, Len(IstrRetValue) - 1) Readlndex = lstrRet Value On Error Go To 0 On Error Resume Next End Function Public Sub Writelndex(ByVal IstrKey As String, ByVal IstrValue As String) On Error Resume Next Dim IstrSection As String Dim lintJunk As Integer IstrSection = “Index” IstrValue = Trim(IstrValue) IintJunk = WritePrivateProfleString(IstrSection, IstrKey, IstrValue, IndexPath) On Error Go To 0 On Error Resume Next End Sub BinaryDB3.bas Public Declare Function SendMessage Lib "user32" Alias "SendMessageA " (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, IParam As Long) As Long Public Sub IniciaBinary() On Error Resume Next BinaryMgmt. OpenDatabase frmBinary. Show On Error Go To 0 On Error Resume Next End Sub BinaryDB4. bas Public Function Parse(ByVal T$, v%) As String On Error Resume Next Const LIMITE = "¤" T$ = LIMITE + Trim(T$) + LIMITE 5. Programación de una BDI x1% = Len(T$) Place % = 0 For Counterl % = 1 To xI% CurrentChar$ = Mid$(T$, Counter1 %, 1) If CurrentChar$ = LIMITE Then Place % = Place % + 1 If Place% = v% Then xStart% = Counterl % + 1 Exit For End If Next For Counter2% = xStart% To xl% CurrentChar$ = Mid$(T$, Counter2%, 1) If CurrentChar$ = LIMITE Then Place % = Place % + 1 If Place% = v% + 1 Then xStop% = Counter2% - xStart% Exit For End If Next If xStop % = 0 Then Parse = Trim(Mid$(T$, xStart%)) If InStr(Parse, LIMITE) Then Parse = “” Else Parse = Trim(Mid$(T$, xStart%, xStop%)) If InStr(Parse, LIMITE) Then Parse = “” End If On Error GoTo 0 On Error Resume Next End Function Public Function Parse Tab(ByVal T$, v%) As String On Error Resume Next Const LIMITE = vbTab T$ = LIMITE + Trim(Ts) + LIMITE xI% = Len(T$) Place % = 0 For Counter1% = 1 To xI% CurrentChar$ = Mid$(T$, Counter1 %, 1) If CurrentChar$ = LIMITE Then Place % = Place % + 1 If Place% = v% Then xStart% = Counterl % + 1 Exit For End If Next For Counter2 % = xStart % To xl% CurrentChar$ = Mid$(T$, Counter2%, 1) If CurrentChar$ = LIMITE Then Place % = Place % + 1 If Place% = v% + 1 Then 104 5. Programación de una BDI 105 xStop% = Counter2% - xStart% Exit For End If Next if xStop % = 0 Then ParseTab = Trim(Mid$(T$, xStart%)) if InStr(ParseTab, LIMITE) Then Parse Tab = "" Else Parse Tab = Trim(Mid$(T$, xStart%, xStop%)) If InStr(ParseTab, LIMITE) Then Parse Tab "" End If On Error GoTo 0 On Error Resume Next End Function 5.4 Filtrado y preproceso En los ejemplos anteriores, se han utilizado métodos simples, que no precisan de filtrado o preproceso en la construcción de la base de datos en intenso; en los siguientes fragmentos de código se concentran algunos ejemplos en los que interviene el tratamiento de la incertidumbre para la clasificación y selección de los datos objetivo, sólo presentamos los fragmentos centrales. Ejemplos documentados de su uso pueden consultarse en el CD anexo: • Fuzzy DBExpert. • Fuzzy DbRelation. 5.4.1 Difusor simple `Listado 7 Difusor simple `Código: Visual Basic. Private Sub fuzzy() Dim dbDatos As Database 5. Programación de una BDI Dim R As Recordset free = FreeFile Set dbDatos = OpenDatabase('path+file') Set R = DB. OpenRecordset("Iectura”) Open “‘PA TH’\lbase.int" For Output As #free R. MoveFirst While Not R.EOF a$ = R!id b$ = R!prioridad c$ = Rllectura Call difusor(a$, b$, c$) R. Mo veNext Wend R. Close db Datos. Close Close #free End Sub Prívate Function difusor(T1 As String, T2 As Double, T3 As Double) Dim free as integer Dim pertenece, et As String Dim li, Is as Double et = "objeto(" li = 0.3 Is = 0.8 If T2 <= li Then pertenece = ‘Bajo” End If If T2 >= is Then pertenece = “Urgente” Else pertenece = “Alto” End If a$ = Tl b$ = pertenece c$ = T3 f$ = et + T i + ", " +pertenece+", "+T3+"). " Print #free, f$ End Function 106 5. Programación de una BDI 107 54.2 Difusor con múltiples condiciones El siguiente listado, es el eje operativo del ejemplo Fuzzy DBExpert. su implementación bajo la plataforma de Visual Basic se detalla en los módulos asociados al proyecto. El proceso mediante el cual se comunican los objetos en las llamadas a funciones y los valores que regresan están definidos en las clases asociadas al proyecto. ‘Listado 8 Difusor con múltiples condiciones ‘Código: Visual Basic '{ Implementar métodos para calcular el grado de pertenencia '{ de un valor determinado a los conjuntos borrosos de las reglas. Public Function medioConservador(num As Double) As Double if(num <= 20) Then return 0; else if(num > 20 && num < 40) Then return (num/20. - 1.); else if(num == 40) Then return 1; else if(num > 40 && num < 60) Then return ((-num)120. +3.); Else return 0; End If End Function Public Function medioModerado( num As Double)As Double if(num <= 20) Then return 0; else if(num > 20 && num < 40) Then return (num/20. - 1.); else íf(num == 40) Then return 1; else if(num > 40 && num < 60) Then return ((-num)120. +3.); Else return 0; End If End Function 5. Programación de una BDI 108 Public Function pocoArriesgado(num As Double) As Double if(num < 10) Then return ((-0.1) *num+ 1.); Else return 0; End If End Function Public Function medialnversion( num, As Double) As Double if(num <= 25) Then return 0; else if(num > 25 && num < 50) Then return (num/25.- 1.); else if(num == 50) Then return 1; else if(num > 50 && num < 75) Then return ((-num)i25. +3.); Else return 0; End If End Function 5.5 Manipulación de la base de datos en intenso Dependiendo del proceso de inferencia utilizado (Funciones del lenguaje anfitrión o un motor de inferencia periférico), la manipulación de la bases en intenso será: a)La base de datos en intenso esta constituida por un archivo temporal plano. Dicha base, se crea y destruye según sea preciso en las operaciones generales del sistema, las operaciones sobre ésta las efectúa un archivo binario (file.xpl) compilado en Prolog. La temporalidad de este archivo obedece a que el motor debe procesar bases de conocimiento distintas en el marco de procesos de inferencia determinados. Las bases en intenso se manipulan conforme a un conjunto determinado de reglas y funciones que constituyen el núcleo del motor de inferencia, en dichas se deberán concentrar la totalidad de los procesos de inferencia posibles para el total de bases 5. Programación de una BDI 109 temporales involucradas. En las siguientes líneas definiremos las principales funciones con que opera el motor de inferencia de Prolog sobre la base, para atender los requerimientos del sistema, evidentemente el estudio exhaustivo del lenguaje Prolog rebasa el propósito de ésta tesis, por lo que nos ocuparemos exclusivamente de los temas directamente relacionados con nuestro estudio: 1. Representación del conocimiento en la base en intenso: Redes semánticas. 2. Métodos de resolución: Top Down, Bottom Up. 3. Técnicas de búsqueda: Depth First, Breadth First. 4. Modelos heurísticos: Hipotético, Deductivo. 1. Representación del conocimiento en la base en intenso: Redes semánticas. Quizás lo más simple de los sistemas de representación proporcional es la presunción de que los conceptos están debidamente representados como un conjunto de atributos y rasgos semánticos. Esta forma de representación es una aplicación muy natural del lenguaje de la teoría de conjuntos para el problema de como caracterizar la naturaleza de los conceptos. En este punto de vista han existido variaciones en el estudio de la memoria semántica y también sobre presunciones relacionadas con la descripción de la representación del conocimiento. De acuerdo con estos puntos de vista, los conceptos están representados por un aumentado conjunto de rasgos. De esta forma los conceptos pueden permanecer en un conjunto de relaciones familiares. Dos conceptos pueden estar: • Desligados (no tener atributos en común); • Sobrepuestos (tener algunos pero no todos los atributos en común); • Anidados (todos los atributos de un concepto están incluidos en el otro); • Ser idénticos (estar especificados en forma exacta por el mismo conjunto de rasgos). Los rasgos pueden tener pesos asociados y relacionados con ellos que representan 5. Programación de una BDI 110 una prominencia variada y características importantes para los conceptos en cuestión. Como una especie de revisión de todas las aplicaciones de estas ideas expuestas aquí, elegimos para describir "la comparación del rasgo" el modelo propuesto por Smith . 2. Formas o Atributos Semánticos La representación semántica es considerada la más natural, acreditan la relación de los atributos con los elementos por medio de estamentos naturales. Veamos un ejemplo que describe lo más completo posible este tipo de representación: Un animal come alimento, respira aire, tiene masa y está formado por miembros; ahora una persona es del tipo animal, el cual "hereda" todas las características antes descritas del animal. Así también tenemos la posibilidad de detallar más sus cualidades como que tiene en sus partes piernas y brazos. La representación semántica denomina a los símbolos como "nodos" o nudos de una malla de conceptos jerarquizados y bien establecidos con sus relaciones. La red descrita en la figura siguiente determinada con lazos constituidos en (a,R,b), el cual "a" y "b" son los nodos que permanecen enlazados a través de la relación "R" , las flechas muestran el sentido de la relación, sin poseer un carácter recíproco. 5. Programación de una BDI 111 Fig. 14 Representación semántica Para implementar la semántica expresada en la figura anterior, basta con definir la estructura que genera la base donde se describen los hechos. Las siguientes cláusulas proporcionan esta información: r("ANIMAL", respira, aire), r("ANIMAL",tiene, masa). r("ANIMAL",esta_formado_por, miembros), r("ANIMAL", come, alimento). r("PAJARO",es_del_tipo, "ANIMAL"). r("PAJARO", puede, volar). 5. Programación de una BDI 112 r("PAJARO",esta_formado_Por, plumas). r("PAJARO",esta_formado_por, alas). r("CANARIO", es_del_tipo, "PAJARO"). r("CANARIO", color, amarillo). r("Ave X", un_representante_de,"CANARIO"). r("PERSONA", es_del_tipo,"ANIMAL"). r("PERSONA", esta_formado_por, piernas). r("PERSONA", esta_formado_por,brazos). r("Persona X",un_representante_de,"PERSONA"). Podemos observar que la cláusula r( Elemento-I Lazo, Elemento-2) relaciona por medio de "Lazo" el "elemento-I" con el "elemento _2", sólo falta un sistema que haga uso de ella, y exprese el conocimiento que la red determina por medio de la acción. Por ejemplo una expresión clausal que sea capaz de proporcionar en una lista las características que hereda un elemento de la clase. La noción básica de esto es que el conocimiento puede ser representado por un tipo de estructura gráfica directa y nivelada en la cual el elemento estructural básico es un conjunto de nodos interrelacionados mediante relaciones. Los nodos representan conceptos en la memoria. Una relación es una asociación entre los conjuntos de los nodos. Las relaciones son directas y niveladas. Desde este punto de vista el "significado" de un concepto (representado por un nodo) está dado por el patrón de relaciones entre el cual éste participa. Las redes semánticas se caracterizan por el tratamiento de conceptos, representados por nodos, y relaciones entre ellos, representadas por arcos que ligan a los nodos entre sí. Básicamente los nodos pueden ser de dos tipos: • Individuales, representan descripciones o afirmaciones referentes a una instancia individual de un objeto. • Genéricos, representan referentes de una clase o categoría de objetos. 5. Programación de una BDI 113 Los conceptos están previamente ordenados en una taxonomía, y existen los arcos especiales “es un” y “es un tipo de”. El primero liga un nodo individual con uno genérico y expresa que un individuo es de cierta clase, y el segundo liga dos nodos genéricos entre sí y expresa que un concepto o tipo es un subtipo de otro. Es importante destacar que a diferencia del formalismo de la lógica, para las redes semánticas no hay métodos formales y generales de deducción. El significado asignado a una red lo establecen solamente los procedimientos que manipulan la red. 3. Métodos de resolución: Top Down, Bottom Up. Los sistemas de resolución de problemas en IA, están basados en la formulación de la solución del problema como una búsqueda. Se comienza en un estado inicial y la meta es llegar a un estado final u objetivo, el proceso de evaluación de las alternativas para llegar desde el estado inicial al objetivo se designa como búsqueda y el conjunto de pasos posibles para llegar desde un estado inicial al objetivo, es llamado el espacio de búsqueda. Los métodos de resolución se derivan del método de resolución de Robinson y vienen a disminuir su complejidad en la búsqueda, son métodos de inferencia que orientan las búsquedas y las técnicas de éstas. Representan las distintas formas de explorar la información representada por un sistema inteligente. * Método TOP DOWN En el método Top Down se comienza tomando la cláusula objetivo o conclusión y se razona de tal forma de ir a través de las aserciones e implicaciones, derivando nuevos objetivos a partir de los objetivos anteriores hasta que todos los objetivos derivados, son resueltos por las aserciones originales. El encadenamiento hacia atrás “Top Down”, tiene la particularidad de ir generando con las cláusulas que va tomando, una estructura de árbol. Una refutación es un camino en el espacio de búsqueda, en este caso una rama del árbol, que comienza con el objetivo 5. Programación de una BDI 114 y termina con la cláusula vacía. b) Método BOTTOM UP El encadenamiento hacia adelante “Bottom Up”, se comienza con las cláusulas que son aserciones o hipótesis. Para ello se usan las aserciones e implicaciones que permitan derivar nuevas aserciones, se termina cuando eventualmente la cláusula original o hipótesis es resultado de las aserciones derivadas. Una refutación en este método comienza con las aserciones de las cláusulas originales, se utilizan las aserciones para obtener nuevas aserciones a partir de las ya generadas, se termina cuando se deriva una que explícitamente contradiga el objetivo. Este método de resolución genera una estructura más compleja que la generada por “Top Down", por lo cual la búsqueda es más difícil. 5.4 Programación Lógica Paralela (Motor Relacional- Motor de Inferencia) Como podemos apreciar en los ejemplos citados con anterioridad, la base en intenso es, generalmente, una estructura simple, donde se evalúa a sus miembros en función de su peso o áridad; resulta evidente que el repositorio de reglas constituye el eje fundamental del proceso de inferencia. Este repositorio, para los efectos de nuestro estudio, se concentra en funciones ad hoc desarrolladas en el lenguaje anfitrión (Visual Basic) y en archivos binarios (.xpl) compilados por y para el motor de inferencia huésped Amzi4 Prolog. En el primero de los casos se utilizan bloques de sentencias IF THEN ELSE inscritos en ciclos predefinidos (p.ej. fuzzy) y los datos en intenso provienen de objetos Recordset, propios del programa de aplicación. En el segundo, el motor de inferencia consulta un repositorio de reglas predefinido y opera sobre archivos temporales (Base de datos en intenso). 5. Programación de una BDI 115 Fig. 15. Diagrama General de la Arquitectura Propuesta. En las siguientes líneas nos ocuparemos ponderantemente de este caso; es conveniente destacar que los “arcos” o relaciones descritas con anterioridad, serán sustituidos por expresiones capaces de derivar relaciones semánticas complejas (herencia de elementos de clase), no definidas explícitamente en la base en intenso por ejemplo, dada una estructura de base simple (toda persona tiene un nombre y un sexo): persona(nombre, sexo). donde: persona( Carlos, M), persona(Sofía,F), Aplicando la expresión: hombre:-(persona(x,M). mujer:-(persona(x,F). 5. Programación de una BDI 116 Tenemos: De esta forma, en el repositorio de reglas (logic.xpl) podemos concentrar múltiples relaciones semánticas complejas, para atacar el conjunto de necesidades del sistema, así como integrar restricciones de integridad a la base en intenso. El motor de inferencia opera sobre una base de datos en intenso en función de un repositorio de reglas dado; todas las acciones del motor responden a eventos predefinidos que se disparan desde la aplicación, en este proceso - como se ha descrito anteriormente - interviene una secuencia ordenada de pasos, desde la selección de los datos objetivo hasta los productos del proceso de inferencia. Así, el flujo y procesamiento de datos está regulado por el programa de aplicación, éste genera la base en intenso, inicializa el motor de inferencia y a través de él consulta la base citada. 5. Programación de una BDI 117 Todas los ejemplos en que interviene el motor de Proiog tienen la misma base, así que sólo nos ocuparemos de describir el proceso de `búsqueda funcional' tomando como referencia uno de los ejemplos clásicos de la Programación Lógica, ocupándonos de sus aspectos principales; a) La Base Persistente. Compuesta por la tabla: Familia, donde Campo Tipo Tamaño Nombre String 50 Sexo String 9 Padre String 50 Madre String 50 Pareja | Soltero String 50 b) La base en intenso. Compuesta por la estructura: person(nombre,genero,padre,madre,pareja). c) El objetivo de la inferencia. "Descubrir relaciones genealógicas entre los miembros de la base en intenso (Madre, Padre, Tíos, Tías, Abuelos, Abuelas, Primos, Primas, etc.)." 5. Programación de una BDI 118 d) El repositorio de reglas. El repositorio de reglas está escrito en Lenguaje Amzi4! Prolog, compilado en el archivo binario "arbol.xpl", el siguiente es el listado de su código: %Listado 9 arbol.pro %Código: Prolog % Objetivo del proceso de inferencia: relations([padres, esposa, esposo, ancestros, desendientes, hermanos, hermana, hermano, tio, tía, madre, padre, hijos, hijo, hija, sobrinos, sobrina, primos, abuelas, abuelos, nieto, nieta, nietos]). relation(R, X, Y) :relations(Rs), member(R, Rs), Q [R, X, Y], call(Q) % Repositorio de reglas en sí padres(P, C) :- (madre (P, C) ; padre(P, C)). hijos(C, P) :- padres(P, C). hijos (C), P) :- padres(P, C), male(C). hija(C, P) :- padres(P, C), female(C). esposa(W, P) :- spouse(W, P), female(W). esposo(H, P) :- spouse(H, P), male(H). ancestros(A, P) :- padres(A, P). ancestros(A, P) :- padres(X, P), ancestros(A,X). desendientes(D, P) :- padres(P,D). desendientes(D, P) :- padres(P,X), desendiente(D,X) hermanos@ 1, S2) :- full_hermanos(S1, S2( hermanos(S1, S2) :- half hermanos(S 1, S2). full_hermanos(S 1, S2) :madre(M, S2), madre(M, S 1), S 1 \= s2, padre(F, S 1), 5. Programación de una BDI padre(F, S2). half_hermanos(S 1, S2) ;madre(M, S2), madre(M, S1), S1 \= s2, padre(F 1, S1), padre(F2, S2), F 1 \= F2. half hermanos(S1, S2) :padre(F, S2), padre(F, SI), S1\= s2, madre(M 1, S1), madre(M2, S2), MI \= M2. hermana(S, P) :hermanos@a, P), female(S), hermano(8, P) :hermanos(B, P), male(B). tio(U,X) :padres(P,X), hermano(U, P). tia(A,X) :padres(P,X), hermana(A, P). sobrinos(N,X):hermanos(S,X), padres(S, N), male(N). sobrina(N,X) :hermanos(S,X), padres(S, N), female(N). primos(X, Y) :padres(P, Y), hermanos(S, P), 119 5. Programación de una BDI padres(S,X). abuelas(GM,X) :padres(P,X), madre(GM, P). abuelos(GF,X):padres(P,X), padre(GF, P). nieto(GS,X) :nietos(GS,X), male(GS). nieta(GD,X):nietos(GD,X), female(GD). nietos(GC,X) :padres(X, C), padres (C, GC). person(X) :person(X, _,_,_,_) male(X) :person(X, male,_,_,_). female(Y) :person(Y, female,_,_,_). madre(M, C) :person(C,_, M,_,_). padre(F, C) :person(C,_,_, F,_). spouse(S, P) :person(P,_,_,_, S), S \= single. member(X, [X\_]) member(X, [_\ Y]) :- member(X, Y). 120 5. Programación de una BDI e) Inicializar repositorio de reglas y consultar la base en intenso ‘Listado 10 Inicializar el repositorio de reglas ‘Código: Visual Basic Private Sub consult() Dim rc As Integer, tf As lnteger Dim Term As Long Dim xplname As String xplname = Path + “\ARBOL.XPL” InitLS (xplname) LoadLS (xplname) tf = CalIStrLS(Term, "set_mode(string_esc, off)”) If tf <> True Then MsgBox “Error” End If abre familia End Sub Private Sub DisplayRelations() Dim Person As String, Relationship As String Dim StrVal As String Dim rc As Infeger, tf As Integer Dim Term As Long RelatedPersonsList Clear If PersonList. Listlndex < 0 Or RelationshipList. Listlndex < 0 Then Exit Sub End if '{ Se selecciona un miembro de la lista Per-son = Person List. Líst(PersonList. Listlndex) '{ Se selecciona la relación a buscar Relationship = RelationshipList.List(RelationshipList. Listlndex) ' { Se pasan los parámetros de consulta a Prolog tf = CaJIStrLS(Term, Relationship + "(X, "' + Person + “’)”) While (tf) Call GetArgLS(Term,1, bSTR, StrVal) RelatedPersonsList. Addltem StrVal tf = RedoLS() Wend End Sub 121 5. Programación de una BDI Private Sub abrefamilia() Dim rc As Integer, tf As Integer Dim Term As Long CurrentFamily = "'PATH+’\base.int" tf = CaliStrLS(Term, "consult('" + CurrentFamily + “’)”) If (if <> True) Then MsgBox "Error", 0, "" CurrentFamily = “” End If tf = Persons() if = Relations() End Sub Private Sub PersonList Click() Call DisplayRelations End Sub Private Function Persons() As Integer Dim rc As Integer, tf As Integer Dim Term As Long Dim StrVal As String PersonList. Clear tf = CallStrLS(Term, "person(X) “) if (tf <> True) Then Persons = 0 Exit Function End If While (tf = True) Call GetArgLS(Term, 7, bSTR, StrVal) Persontist. Addltem Str Val tf = RedoLS() Wend Persons = 1 End Function Private Function Relations() As Integer Dim rc As Integer, tf As Integer Dim Term As Long, TList As Long Dim StrVal As String RelationshipList. Clear tf = CallStrLS(Term, "relations(X)”) If (i <> True) Then Relations = 0 Return End If Call GetArgLS(Term, 1, bTERM, TList) 122 5. Programación de una BDI Do rc = PopListLS(TList, bSTR, StrVal) If (rc = 0) Then RelationshipList.Addltem StrVal End If Loop While (rc = 0) Relations = 1 End Function Private Sub RelationshipList Click() Call DisplayRelations End Sub ‘{ Funciones de la librería utilizadas Public Sub InitLS(ByVal INIFile As String) Dim rc As Long If IsEmpty(MaxStrLen) Then MaxStrLen = 255 End If If IsEmpty(ErrorMethod) Then ErrorMethod = 0 End If rc = Isinit(EnginelD, INIFile + Chr$(O)) If (rc <> 0) Then Call ErrorHandler("Islnit", rc) End If End Sub Public Sub LoadLS(ByVal XPLFiIe As String) Dim rc As Long rc = IsLoad(EnginelD, XPLFiIe + Chr$(O)) If (rc <> 0) Then Call ErrorHandler("IsLoad", rc) End If End Sub Public Function Ca1IStrLS(TermPtr As Long, ByVa! StrPtr As String) As Bolean Dim (f As Long tf = IsCaIIStr(EnginelD, TermPtr, StrPtr + Chr$(O)) 123 5. Programación de una BDI 124 Select Case tf Case 0 CaII StrL S = False Case I CalIStrLS = Trae Case Else Call ErrorHandler("IsCalIStr", tf) End Select End Function Public Sub GetArgLS(ByVal Term As Long, ByVal ArgNum As Long, ByVal BType As lnteger, Ptr As Variant) Dim rc As Long, tstr As String Dim tlong As Long, tfloat As Single, tint As Integer, tdouble As Double Dim s As String Select Case BType Case bSTR, bA TOM tstr = Space$(MaxStrLen) rc = IsGetArg(EnginelD, Term, ArgNum, BType, ByVal tstr) Ptr = StripStr(tstr) Case bLONG, bADDR, bTERM rc = IsGetArg(EnginelD, Term, ArgNum, BType, tlong) Ptr = tlong Case b/NT, bSHORT rc = IsGetArg(EnginelD, Term, ArgNum, BType, tint) Ptr = tint Case bFLOAT rc = IsGetArg(EnginelD, Term, ArgNum, BType, tfloat) Ptr = tfloat Case bDOUBLE rc = IsGetArg(EnginelD, Term, ArgNum, BType, tdouble) Ptr = tdouble End Select If (rc <> 0) Then Call ErrorHandler(`IsGetArg rc) End If End Sub Public Function PopUstLS(TermPtr As Long, ByVal BType As lnteger, Ptr As Variant) As Long Dim rc As Long, tstr As String, tstr2 As String Dim tlong As Long, ffloat As Single, tint As lnteger, tdouble As Double 5. Programación de una BDI 125 Select Case BType Case bSTR, bATOM tstr = Space$(MaxStrLen) rc = IsPopList(EnginelD, TermPtr, BType, ByVal tstr) Ptr = StripStr(tstr) Case bLONG, bADDR, bTERM rc = IsPopList(EnginelD, TermPtr, B Type, tlong) Ptr = tlong Case bINT, bSHORT rc = IsPopList(EnginelD, TermPtr, BType, tint) Ptr = tint Case bFLOAT rc = IsPopList(EngineiD, TermPtr, BType, float) Ptr = tfloat Case bDOUBLE rc = IsPopList(EnginelD, TermPtr, BType, tdouble) Ptr = tdouble End Select Select Case rc Case 0 PopListLS = rc Case -1 PopListLS = rc Case Else Call ErrorHandler("IsPopList" rc) End Select End Function Hemos seleccionado éste ejemplo por su sencillez y amplia documentación entre los distintos grupos de programación lógica consultados, de hecho, constituye la base de explicación a usuarios de Amzi4, sobre su operación conjunta con Visual Basic; éste y todos los ejemplos concentrados en el prototipo (listados, base persistente, repositorio de reglas, base en intenso), pueden ser editados en las vistas de `Edición' en los prototipos desarrollados. Adicionalmente, se anexa un ejemplo de la presente tecnología, aplicado al diagnóstico. 6. Estado del Arte 126 6. Estado del Arte 6.1 Análisis inteligente de Datos Resulta difícil clasificar las herramientas (que superan ampliamente el centenar) que pueden servir para la explotación inteligente de los almacenes de datos, pero en una primera aproximación podríamos distinguir las siguientes categorías: • Interfaces de consulta “ad hoc” existentes en el entorno de bases de datos (QMF, QBE,etc.) y lenguaje SQL. • Hojas de cálculo, que empiezan a soportar también varias dimensiones en el • tratamiento de datos. • Generadores de informes. • Herramientas de visualización de datos. • Entornos de soporte a la toma de decisiones (EIS/DSS). • Paquetes de análisis estadístico (SAS, SPSS, ...). • Herramientas OLAP. • Aplicaciones de “minería” de datos sofisticadas, basadas en técnicas de Inteligencia Artificial. Las técnicas estadísticas, como el análisis de probabilidad, inferencia, análisis de regresión y correlación, análisis de series temporales, etc. están conociendo un resurgimiento con los entornos de almacenes de datos, y los paquetes que las soportan empiezan a difundirse cada vez más, ofreciendo intetfaces con la mayoría de las plataformas para almacenes de datos. Las herramientas OLAP (siglas que pueden englobar todas las anteriores categorías), se pueden definir como un tipo de tecnología software que permite a los analistas, gestores y ejecutivos obtener una visión de los datos por medio de un acceso rápido, consistente e interactivo a una amplia variedad de posibles vistas de la información que ha sido transformada a partir de datos en bruto para reflejar la dimensionalidad real de 6. Estado del Arte 127 la empresa tal y como la entiende el usuario. Estas herramientas se caracterizan, por tanto, por: - Acceder a una gran cantidad de datos (varios años de ventas). - Analizar las entre diferentes elementos de negocio. - Involucrar datos agregados. - Comparar datos agregados en periodos de tiempo jerárquicos (días, meses, años, etc.). Presentar datos en diferentes perspectivas - Implicar cálculos complejos entre los elementos de datos. Responder rápidamente a las consultas de los usuarios Suele ser muy habitual con estas herramientas realizar el cálculo de las siguientes métricas: - Ratios multidimensionales. - Comparaciones. - Perfiles estadísticos y clasificaciones. Este tipo de herramientas permite a los analistas del negocio verificar hipótesis, que el propio usuario va haciendo y validando con los datos que le devuelven sus consultas, pudiendo navegar por las distintas dimensiones de los datos. Sin embargo, existe otro tipo de técnicas, más potentes, que permiten descubrir información valiosa sin depender del usuario, son las que se engloban dentro de la categoría de minería de datos (data mining) propiamente dicha, en nuestro estudio, sólo hemos pormenorizado en los algoritmos de modelado basados en IPL, sin embargo, existe una fuerte tendencia, en el seno de los grupos de IA, por la utilización de modelados abstractos: Objetos y clases entre otros. 6. Estado del Arte 128 Algunas de las tareas que se llevan a cabo con las herramientas de minería de datos son las siguientes: - Clasificación. Categorizar objetos, es decir, examinar sus características y asignarlos a un conjunto predefinido de clases, por ejemplo, clasificar personas que van a pedir un préstamo según el riesgo que presentan. - Estimación. Mientras que la clasificación obtiene una salida discreta, la estimación consiste en obtener un valor continuo, por ejemplo, ingresos de una familia. En la práctica se utiliza para llevar a cabo clasificaciones. - Predicción. Los datos se clasifican de acuerdo a un comportamiento futuro. - Agrupamiento por afinidad. - Agrupamiento (clustering). Segmentar una base heterogénea en varios grupos (clusters) homogéneos, sin que existan clases predefinidas. - Descripción. Explicación de lo que sucede en la base de datos. Estas tareas se pueden llevar a cabo mediante la aplicación de distintas técnicas que resumimos a continuación: - Análisis de la cesta de la compra, permite identificar grupos de elementos que ocurren juntos en una transacción. - Razonamiento basado en memoria, utiliza instancias conocidas como modelo para hacer predicciones acerca de otras instancias desconocidas. Se utiliza una función de distancia para encontrar los elementos más cercanos a otros y una función de combinación que combina los valores de los elementos más cercanos para hacer una predicción. - Detección de agrupamiento, construye modelos que encuentran registros de datos similares (mediante técnicas geométricas, estadísticas, etc.). - Análisis de enlace, sigue las interrelaciones entre los registros con el fin de desarrollar modelos basados en patrones en las interrelaciones (aplicando teoría de grafos). 6. Estado del Arte 129 - Árboles de decisión y reglas de inducción, dividen los registros del conjunto de entrenamiento en subconjuntos disjuntos cada uno de los cuales se describe por medio de una regla sobre uno o varios campos. - Redes neuronales artificiales, son capaces de aprender de un conjunto inicial, generalizando patrones para clasificación o predicción. Es la técnica más común. - Algoritmos genéticos, aplican los mecanismos de la selección natural y la genética para encontrar un conjunto óptimo de parámetros que describe una función predictiva. Aunque, como hemos señalado, la aplicación más conocida de las herramientas de explotación de datos se da en el marketing (ya que permiten llevar a cabo un marketing selectivo y de precisión: promociones, ofertas individuales, etc.); existe un conjunto muy amplio de aplicaciones: - Agricultura: identificación dé plagas, clasificación de enfermedades,. . . - Banca: concesión de créditos, predicción de quiebras, predicción de valores bursátiles, detección de fraudes, segmentación de clientes (para ofrecer tarjetas de créditos según el tipo de cliente). - Ciencias espaciales, en concreto, astronomía, donde sirven para el análisis de los datos procedentes de telescopios o de sondas. - Distribución: análisis de la cesta (qué elementos tienden a comprar conjuntamente los clientes), patrones basados en tiempo para tomar decisiones respecto a los almacenes, modelos predictivos, . . . - Energía eléctrica: programas de distribución, análisis de incidentes,. . . - Ingeniería: diagnóstico de fallos, CAD,. . . - Medicina; biomedicina, efectos de drogas, costes de los hospitales, análisis genéticos, identificación de tratamientos eficaces,. . . - Seguros: detección de fraudes, reclamaciones no válidas, diseño de productos, análisis de riesgos,. . . - Ventas: identificación de subgrupos específicos, patrones de compra, análisis de productos, predicción de ventas. 6. Estado del Arte 130 Como podemos observar prácticamente todos los sectores empresariales pueden beneficiarse de estas técnicas. 6.2 Desafíos en la explotación inteligente de datos La tecnología de explotación de datos ha avanzado mucho en los últimos años, pero todavía se enfrenta a numerosos retos por resolver, que son objeto de discusión en numerosas conferencias y publicaciones especializadas, donde destacan los siguientes: - Mecanismos de explicación limitados, ya que las herramientas no siempre son capaces de explicar al usuario cómo han llegado a los datos. - Formatos de entrada de datos limitados, por ejemplo, no ofrecen posibilidad de manipular gráficos, textos, fórmulas matemáticas, etc. - Técnicas de validación limitadas, incapacidad de realizar validaciones cruzadas. - Gran consumo de recursos. - Soporte limitado a ciertas plataformas, formatos, tamaños, etc. - Manejo de diferentes tipos de datos; se deberían construir sistemas capaces de explotar los datos no sólo en bases de datos relacionales, sino también espaciales (geográficas), multimedia, etc. - Eficiencia y escalabilidad de los algoritmos de minería de datos, los tiempos de ejecución de estos algoritmos debe ser predecible y aceptable en bases de datos muy grandes. - Utilidad, certeza y expresividad de los resultados de la minería de datos, Las imperfecciones deberían ser expresadas mediante medidas de la incertidumbre en forma de reglas de aproximación. - Expresión de varios tipos de peticiones y resultados de minería de datos, presentando los resultados de diferentes formas y bajo diferentes perspectivas, mediante la utilización de lenguajes de alto nivel, interfaces gráficas, etc. - Minería interactiva del conocimiento a vanos niveles de abstracción, para que el usuario pueda refinar de forma iterativa su petición. 6. Estado del Arte 131 - Minería de información de diversas fuentes. - Protección de la seguridad y privacidad de los datos. - Conjuntos de datos masivos y soporte de alta dimensionalidad así como de bases de datos de millones de registros (varios Gbytes). - Inteligibilidad de los patrones, que desde un punto de vista matemático son correctos pero que a veces el usuario no llega a comprender. 7. Conclusiones 132 7. Conclusiones 1. La confluencia de tecnologías, y en especial de tecnologías de información, ha abierto nuevas avenidas para el desarrollo de sistemas cuyas capacidades conjugan la funcionalidad de tecnologías individuales en un todo cohesivo, sinérgico, destinado al mejoramiento del desempeño del sistema dentro del contexto en el cuál se opera. 2. Un Sistema Inteligente para la administración de bases de datos relacionales combina las funcionalidades y facilidades típicamente encontradas en los sistemas para el soporte de decisiones con técnicas propias de la Inteligencia Artificial y los Sistemas Expertos para la creación de sistemas complejos que permitan la toma de decisiones en una forma más acertada, informada e inteligente. 3. En varios dominios el uso de estructuras lógicas dinámicas aplicadas a la manipulación e interpretación del contenido de una base de datos tiene múltiples ventajas, la principal de ellas se centra en la búsqueda de soluciones en un dominio particular donde el uso de SQL resulta insuficiente. Garantiza que las conclusiones que se derivan de las premisas iniciales son correctas, en función de las reglas de manipulación sintáctica que hayan sido definidas. Pueden ser utilizadas para analizar el conocimiento y para aplicar el razonamiento deductivo sobre dicho conocimiento. Es flexible, ya que permite representar, en forma sencilla, los hechos sin importar para qué son utilizados. Es modular, nuevos hachos pueden ser agregados a la base de conocimiento en forma independiente, sin afectar los tipos de deducción que se pueden hacer. 4. La representación del contenido de las tablas del esquema relaciona1 mediante estructuras simples y el uso de la lógica de primer aplicados desde el motor de inferencia permiten una recursividad controlada en procesos de búsqueda complejos. Representación que permite consultas con parámetros sobre relaciones no explícitas en la definición del esquema relacional. 7. Conclusiones 133 5. El trabajo paralelo entre un motor relaciona1 y un motor de inferencia habilita al sistema de la capacidad de representar el contenido de la base de datos en forma simbólica, esto es, se valen de la manipulación de símbolos para la resolución de problemas. Estos símbolos representan conocimiento acerca de objetos existentes en el mundo real, conceptos, estrategias y heurísticas que el sistema tiene en su poder y que emplea para la resolución del problema. La combinación y disposición de estos símbolos representan relaciones con significado las cuales son interpretadas durante procesos particulares de naturaleza no algorítmica. 6. La implementación de estrategias basadas en el uso de técnicas de inteligencia artificial pueden llevar el proceso de soporte a la toma de decisiones a un nivel mas avanzado del que incorpora el esquema relaciona¡, ya que se dota a estos de la capacidad de usar conocimiento para resolver problemas en la presencia de información incompleta o no estructurada y sugerir decisiones alternativas, a problemas que no pueden ser resueltos por medios algorítmicos convencionales y que requerían la ayuda de otras personas para resolución. Esta funcionalidad permite incrementar la productividad y la eficiencia de aquellos individuos que usan el sistema pero que no poseen la experiencia ni el conocimiento para enfrentar la solución a problemas en un dominio específico. Adicionalmente pueden ayudar a transformar información en conocimientos al proveer mecanismos automáticos para el análisis, organización y síntesis de información en un cuerpo coherente. 7. El tratamiento de la incertidumbre mediante estrategias de lógica difusa y lógica multivaluada permiten una representación global de los datos con una semántica sensiblemente mayor a las representaciones convencionales, permitiendo tratar como miembros de un subconjunto determinado grupos de registros con valores atómicos distintos. Referencias bibliográficas Referencias bibliográficas a) Textos CODD, E.F. “The Relational Model for Database Manaaement: Version 2”. Ed. Addison-wesley, Massachussets, USA, 1990. CORONELL, Gray. “Visual Basic 5". Ed. McGraw-Hill. Madrid. 1997 DATE, J. "An Introduction to Database Systems” Ed. Addison-Wesley, Massachusetts, USA, 1986. FERNÁNDEZ, F. “Fundamentos de Informática: Lógica, Autómatas, Algoritmos y Lenguajes" Ed. Anaya, Salamanca, 1995. HANSEN, W. Gary. “Diseño y Administración de Bases de Datos” Ed. Prentice Hall. México, 1997 KOLMAN, Bernard. “Estructuras de Matemáticas discretas para la computación” Ed. Prentice Hall. México, 1986. KORTH, Henry. “Fundamentos de bases de datos” Ed. McGraw-Hill. Madrid, 1993 Microsoft. "Access 7.0 User Guide " Microsoft. 1998 Microsoft. ‘Visual Basic 5, Enterprise Edition” Book’s on line. 1998 Microsoft. ‘Visual Basic 5, User Guide” Microsoft. 1998 MIRA, J. “Aspectos básicos de la Inteligencia Artificial” Ed. Sanz y Torres, Madrid, 1995. PIATTINI, M. “Concepción v diseña de bases de datos” Del modelo E/R al modelo relacional. Ed. RAMA Addsison-Wesley-Iberoamericana. 1993 ROBINSON,. Philip. 'Aflitgue Turbo Prnloq" Ed. McGraw-Hill. México. 1987 Referencias bibliográficas SHILDT, Herbert. "Programación Avanzada en Turbo Prolog " Ed. McGraw-Hill, México, 1988 SHAFIELD, Rebeca. 'Winproloq 3.6 user quide" LPA Software, 1998. THIERAÜF. "Investigación de operaciones” Ed. Limusa, México, 1997. WINTER, Rick. “Microsoft Access 97, Soluciones Instantáneas” Ed. Prentice Hall, México, 1997. b) Artículos BURGOS, Jorge. “Intercambio dinámico de datos con Visual Basic” Grupo Eidos. Algoritmo. Año 5, 1997. HOPKINS, Johns. " Knowledge-Based Query Formulation for Integrated Information Systems” Techincal Digest. Volumen 18, No. 2, 1997, pp. 261-270 KHOSAFIAN. “lntelligent Database Engines” Database Programming & Design. 1990, pp. 56-65 KRIVDA, Cheryl. “Dinamita para extraer datos” Byte. Año 9, No. 93, 1995, pp. 24-32 Mateos, Julio. “Aplicaciones profesionales en Visual Basic” Grupo Eídos. Algoritmo. Año 5, 1997. PIATTINI, M. “El futuro de las bases de datos (I-V)" Grupo Eídos. Algoritmo. Año 5, 1997. SOM, Guillermo. “Objetos en Visual Basic” Grupo Eidos. Algoritmo. Año 5, 1997. TRIANA, Harvey. ‘Yisuat Basic Experto” Grupo Eidos. Algoritmo. Año 6, 1998. WONG, H. “lntelligent Databases” IA Expert. Volumen 5, No. 3. pp. 38-47 Referencias bibliográficas ZIARKO, Wojciech. “Data-based acquisition and incremental classification rules” Computational Intelligence, Volumen ll, No. 2, 1995, pp. 37-42. modification ZOZAYA, C. “Arquitecturas de Sistemas Expertos”, Soluciones Avanzadas, año 2, No. 13, 1994, pp.41 -47. c) Uniform Resource Locator CHAN, Francis. "Analysis of Decision Support for Distributed Systems” http://www-cad.eecs.berkeley.edu/-fchan/caddis/ds_systems.html GOMEZ, Antonio J. “Inducción de conocimiento en bases de datos” http://www.gsi.dit.upm.es/tesis/anto.html GRAY, James N. “Database Systems: A Textbook Case of Research Paying Off” http://www.cs.washington.edu/homes/lazowska/cra/database.html HAN, J. "LogicBase: A Deductive Database System Prototype” ftp://ftp.fas.sfu.cal/pub/cs/han/dood/cikm94.ps HAN, J. “Constraint-Based Query Evaluation in Deductive Databases” ftp://ftp.fas sfu.ca//pub/cs/han/doodlconstr94.ps HAN, J. “Data Mining ", ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/ency99.ps HAN, J. “Data Mining Techniques”, ftp:/Iftp.fas.sfu.ca/pub/cs/hanlkdd/sigmod96 tuto_des.ps Logic Programmíng Assocíates. “FAQ WinProlog" http://www.lpa.co.uk MOXON, Bruce. “Defining Data Mining” http:/lwww.dbmsmag.com/9608d53. html Tecnológico de Monterrey. “Tutorial de Prolog" http://w3.mor.itesm.mx/-esucar/IA/prolog.html OLSEN. " What Databases ?" http://www.ougf.fi/nouc/Handouts/Olsen/stdOO8. htm of Referencias bibliográficas PANG, A. "Exploratory Mining and Pruning Optimizations of Constrained Associations Rules”, ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/sigmod98.ps The Data Mining Research Group. “lntroduction to DBMiner and Data Mining and Warehousing Concepts" ftp://ftp.fas. sfu. ca/pub/cs/han/slides/boeingintro. ppt Universidad de Guadalajara. “Tutorial de Prolog” http://proton.ucting.udg.mx/proton/tutorial/prolog/Prolog.htm Universidad de Guadalajara. “Tutorial de Prolog” http://www.cultura.udg.mx/tutoriales/prolog/proiog.html