tesis de base de datos inteligente

145
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

Upload: alexander-cartagena

Post on 06-Aug-2015

41 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Tesis de Base de Datos Inteligente

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

Page 2: Tesis de Base de Datos Inteligente

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 INTRODUCCIÓN II SISTEMAS BASADOS EN CONOCIMIENTO III SISTEMAS EXPERTOS IV .-ARQUITECTURA DE UNA BDI V PROGRAMACIÓN DE UNA BDI VI ESTADO DEL ARTE VII 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.

Page 3: Tesis de Base de Datos Inteligente

M.C. Rodolfo Gallardo Rosales

Mayo 8, 1999. H. Consejo Técnico de Posgrado de la F.I.M.E. Universidad de Colima. P r e s e n t e .

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

Page 4: Tesis de Base de Datos Inteligente

Will it to be possible than does a machine make the same

as make the human brings when do think ?

Turing 1950

Page 5: Tesis de Base de Datos Inteligente

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.

I Abstract

Page 6: Tesis de Base de Datos Inteligente

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 Contrenidos

Page 7: Tesis de Base de Datos Inteligente

3. Sistemas Expertos

3.1 Antecedentes 31

3.2 Programación lógica en sistemas expertos 32

3.2.1 Conceptos básicos 35

3.3 Sistemas expertos y bases de datos inteligentes 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 92

4.3.2 Manipulación de la base en intenso 9 5

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

Page 8: Tesis de Base de Datos Inteligente

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

II. Tabla de Contenidos

Page 9: Tesis de Base de Datos Inteligente

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

Page 10: Tesis de Base de Datos Inteligente

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

Page 11: Tesis de Base de Datos Inteligente

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 que procesa.

Page 12: Tesis de Base de Datos Inteligente

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

Page 13: Tesis de Base de Datos Inteligente

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

Page 14: Tesis de Base de Datos Inteligente

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

Page 15: Tesis de Base de Datos Inteligente

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.

Page 16: Tesis de Base de Datos Inteligente

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

Page 17: Tesis de Base de Datos Inteligente

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:

Page 18: Tesis de Base de Datos Inteligente

2. Sistemas basados en conocimiento 10

Archivos con acceso directo

SGBD RELACIONALES.

SGBD JERARQUICOS 1970

Archivos Secuenciales

1960 SGBD RED

1980 2000

Publicación del modelo Relaciona1 de Codd

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.

Page 19: Tesis de Base de Datos Inteligente

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.

Page 20: Tesis de Base de Datos Inteligente

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.

Page 21: Tesis de Base de Datos Inteligente

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

Page 22: Tesis de Base de Datos Inteligente

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

Page 23: Tesis de Base de Datos Inteligente

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.

Page 24: Tesis de Base de Datos Inteligente

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.

Page 25: Tesis de Base de Datos Inteligente

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

Page 26: Tesis de Base de Datos Inteligente

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

Page 27: Tesis de Base de Datos Inteligente

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.

Page 28: Tesis de Base de Datos Inteligente

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 o lenguajes

procedimentales y sistemas basados en reglas (sistemas de producción).

Page 29: Tesis de Base de Datos Inteligente

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 declarativas es usualmente muy fácil;

simplemente se agrega o se elimina conocimiento. Las 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

Page 30: Tesis de Base de Datos Inteligente

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:

Page 31: Tesis de Base de Datos Inteligente

2. Sistemas basados en conocimiento 23

• 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 . ..)

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

Page 32: Tesis de Base de Datos Inteligente

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),

Page 33: Tesis de Base de Datos Inteligente

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.

Page 34: Tesis de Base de Datos Inteligente

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.

Page 35: Tesis de Base de Datos Inteligente

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 ;...; n

se verifica que X i ∈ 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

Page 36: Tesis de Base de Datos Inteligente

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.

Page 37: Tesis de Base de Datos Inteligente

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.

Page 38: Tesis de Base de Datos Inteligente

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..

Page 39: Tesis de Base de Datos Inteligente

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

Page 40: Tesis de Base de Datos Inteligente

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

Page 41: Tesis de Base de Datos Inteligente

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.

Page 42: Tesis de Base de Datos Inteligente

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

Page 43: Tesis de Base de Datos Inteligente

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”,

Page 44: Tesis de Base de Datos Inteligente

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

Page 45: Tesis de Base de Datos Inteligente

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).

Page 46: Tesis de Base de Datos Inteligente

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”

Page 47: Tesis de Base de Datos Inteligente

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

Page 48: Tesis de Base de Datos Inteligente

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.

Page 49: Tesis de Base de Datos Inteligente

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.

Page 50: Tesis de Base de Datos Inteligente

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.

Page 51: Tesis de Base de Datos Inteligente

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

Page 52: Tesis de Base de Datos Inteligente

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.

Page 53: Tesis de Base de Datos Inteligente

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.

Page 54: Tesis de Base de Datos Inteligente

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

Page 55: Tesis de Base de Datos Inteligente

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

Page 56: Tesis de Base de Datos Inteligente

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 Características

Archivo Plano (dbint.db) 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

Page 57: Tesis de Base de Datos Inteligente

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

Page 58: Tesis de Base de Datos Inteligente

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.

Page 59: Tesis de Base de Datos Inteligente

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)

Page 60: Tesis de Base de Datos Inteligente

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 (top-

down search) en grafos refinados (refinement graphs). Los sistemas que utilizan esta

Page 61: Tesis de Base de Datos Inteligente

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í

Page 62: Tesis de Base de Datos Inteligente

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

Page 63: Tesis de Base de Datos Inteligente

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”.

Page 64: Tesis de Base de Datos Inteligente

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.

Page 65: Tesis de Base de Datos Inteligente

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.

_

_

_

Page 66: Tesis de Base de Datos Inteligente

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.

Page 67: Tesis de Base de Datos Inteligente

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:

Ii (0.3) F(P)

Is (0.8)

Tenemos:

∀ (T2) T2 =< P(H) [T2 (Baja)] | T2>=P(Is)[T2 (Urgente)] | T2 (Alta)

Page 68: Tesis de Base de Datos Inteligente

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.

Page 69: Tesis de Base de Datos Inteligente

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.

Page 70: Tesis de Base de Datos Inteligente

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.

Page 71: Tesis de Base de Datos Inteligente

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,

Page 72: Tesis de Base de Datos Inteligente

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

Page 73: Tesis de Base de Datos Inteligente

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.

Page 74: Tesis de Base de Datos Inteligente

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.

Page 75: Tesis de Base de Datos Inteligente

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)

Page 76: Tesis de Base de Datos Inteligente

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.

Page 77: Tesis de Base de Datos Inteligente

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

Page 78: Tesis de Base de Datos Inteligente

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

Page 79: Tesis de Base de Datos Inteligente

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

Page 80: Tesis de Base de Datos Inteligente

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’.

Page 81: Tesis de Base de Datos Inteligente

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.

Page 82: Tesis de Base de Datos Inteligente

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:

Page 83: Tesis de Base de Datos Inteligente

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 ‘fecha-

nacimiento’ 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

Page 84: Tesis de Base de Datos Inteligente

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.

Page 85: Tesis de Base de Datos Inteligente

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;

Page 86: Tesis de Base de Datos Inteligente

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).

Page 87: Tesis de Base de Datos Inteligente

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 . . .

Page 88: Tesis de Base de Datos Inteligente

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;

Page 89: Tesis de Base de Datos Inteligente

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;

Page 90: Tesis de Base de Datos Inteligente

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:

Page 91: Tesis de Base de Datos Inteligente

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.

Page 92: Tesis de Base de Datos Inteligente

5. Programación de una BDI 84

La prueba se ve rápidamente si se introduce un código de cliente en el campo campo-

cliente 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:

Page 93: Tesis de Base de Datos Inteligente

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

Page 94: Tesis de Base de Datos Inteligente

5. Programación de una BDI 86

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), "

Page 95: Tesis de Base de Datos Inteligente

5. Programación de una BDI 87

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

Page 96: Tesis de Base de Datos Inteligente

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):

Page 97: Tesis de Base de Datos Inteligente

5. Programación de una BDI 89

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"

Page 98: Tesis de Base de Datos Inteligente

5. Programación de una BDI 90

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

Page 99: Tesis de Base de Datos Inteligente

5. Programación de una BDI 91

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

Page 100: Tesis de Base de Datos Inteligente

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)

Page 101: Tesis de Base de Datos Inteligente

5. Programación de una BDI 93

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

Page 102: Tesis de Base de Datos Inteligente

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

Page 103: Tesis de Base de Datos Inteligente

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

Page 104: Tesis de Base de Datos Inteligente

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

Page 105: Tesis de Base de Datos Inteligente

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

Page 106: Tesis de Base de Datos Inteligente

5. Programación de una BDI 98

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

Page 107: Tesis de Base de Datos Inteligente

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 & _

Page 108: Tesis de Base de Datos Inteligente

5. Programación de una BDI 100

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

Page 109: Tesis de Base de Datos Inteligente

5. Programación de una BDI 101

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

Page 110: Tesis de Base de Datos Inteligente

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, "')

Page 111: Tesis de Base de Datos Inteligente

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

Page 112: Tesis de Base de Datos Inteligente

5. Programación de una BDI 104

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

Page 113: Tesis de Base de Datos Inteligente

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

Page 114: Tesis de Base de Datos Inteligente

5. Programación de una BDI 106

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

Page 115: Tesis de Base de Datos Inteligente

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

Page 116: Tesis de Base de Datos Inteligente

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

Page 117: Tesis de Base de Datos Inteligente

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

Page 118: Tesis de Base de Datos Inteligente

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.

Page 119: Tesis de Base de Datos Inteligente

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).

Page 120: Tesis de Base de Datos Inteligente

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.

Page 121: Tesis de Base de Datos Inteligente

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

Page 122: Tesis de Base de Datos Inteligente

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).

Page 123: Tesis de Base de Datos Inteligente

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).

Page 124: Tesis de Base de Datos Inteligente

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.

Page 125: Tesis de Base de Datos Inteligente

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.)."

Page 126: Tesis de Base de Datos Inteligente

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),

Page 127: Tesis de Base de Datos Inteligente

5. Programación de una BDI 119

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),

Page 128: Tesis de Base de Datos Inteligente

5. Programación de una BDI 120

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).

Page 129: Tesis de Base de Datos Inteligente

5. Programación de una BDI 121

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

Page 130: Tesis de Base de Datos Inteligente

5. Programación de una BDI 122

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)

Page 131: Tesis de Base de Datos Inteligente

5. Programación de una BDI 123

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))

Page 132: Tesis de Base de Datos Inteligente

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

Page 133: Tesis de Base de Datos Inteligente

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.

Page 134: Tesis de Base de Datos Inteligente

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

Page 135: Tesis de Base de Datos Inteligente

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.

Page 136: Tesis de Base de Datos Inteligente

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).

Page 137: Tesis de Base de Datos Inteligente

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.

Page 138: Tesis de Base de Datos Inteligente

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.

Page 139: Tesis de Base de Datos Inteligente

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.

Page 140: Tesis de Base de Datos Inteligente

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.

Page 141: Tesis de Base de Datos Inteligente

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.

Page 142: Tesis de Base de Datos Inteligente

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

Page 143: Tesis de Base de Datos Inteligente

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

Page 144: Tesis de Base de Datos Inteligente

Referencias bibliográficas

ZIARKO, Wojciech. “Data-based acquisition and incremental modification of classification rules” Computational Intelligence, Volumen ll, No. 2, 1995, pp. 37-42. 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

Page 145: Tesis de Base de Datos Inteligente

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