Sunteți pe pagina 1din 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


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.
M.C. Rodolfo Gallardo Rosales

Mayo 8, 1999.

H. Consejo Técnico de Posgrado


de la F.I.M.E.
Universidad de Colima.
Presente.

Por medio de este conducto, informo a ese Consejo Técnico de Posgrado que el
C. Sergio Antonio Becerra Zepeda, terminó su período de revisión de tesis para:

MAESTRÍA EN CIENCIAS COMPUTACIONALES

Bajo el título:
“BASES DE DATOS INTELIGENTES”

cuyo contenido he el siguiente:

1. INTRODUCCIÓN
2. SISTEMAS BASADOS EN CONOCIMIENTO
3. SISTEMAS EXPERTOS
4. ARQUITECTURA DE UNA BDI
5. PROGRAMACIÓN DE UNA BDI
6. ESTADO DEL ARTE
CONCLUSIONES

el cual cumple con los requisitos necesarios para su aprobación, por lo cual lo
autorizo para su impresión.

Atentamente
Will it to be possible than does a machine make the same
as make the human brings when do think ?
Turing 1950
I Abstract

I Abstract

Descripción:

En las bases de datos inteligentes se concentra la evolución e integración


de las bases de datos relacionales - activas y las técnicas avanzadas para la
búsqueda, recuperación y procesamiento de la información en el área de los
sistemas expertos y la inteligencia artificial.

En este proyecto se pretende desarrollar un conjunto de herramientas para


la construcción de aplicaciones de Bases de Datos que operen a un nivel de
abstracción superior frente a las técnicas convencionales. Este mayor poder de
abstracción, combinado con otras herramientas permitirá la creación de ambientes
inteligentes que combinen las tecnologías dé bases de datos, bases de
conocimiento e inteligencia artificial.

Nuestro principal objetivo detallar el conjunto teórico mediante el cual pueda


manipularse una base de datos relaciona1 de manera transparente, extrayendo
conocimientos a partir del análisis de estructuras simples, interrelacionando
procesos de adquisición de datos con procesos de inferencia, en suma, consolidar
un punto de partida en la representación y manipulación semántica de las
aplicaciones avanzadas.

Presenta:
Me. Sergio Antonio Becerra Zepeda
Candidato al Grado de Maestro en Ciencias Computacionales.

Validación:
Universidad de Colima
Facultad de Ingeniería Mecánica y Eléctrica
Maestría en Ciencias Computacionales.
Junio, 1999.
II. Tabla de Contrenidos

II. Tabla de Contenidos.

I Abstrac
II Tabla de contenidos

1. Introducción

2. Sistemas basados en conocimiento

2.1 Antecedentes 4

2.2 Enfoques de los SGDB 6

2.3 Evolución de los SGDB 7

2.4 Clasificación de los SGBD 10

2.4.1 Sistemas orientados al proceso y SGBD clásicos 10


2.4.2 SGBD semánticos 11
2.4.3 SGBD activos 11
2.4.4 SGBD deductivos 12
2.4.5 SGBD orientados al objeto 13
2.4.6 SGBD multidimensionales 14
2.5 Conocimiento y bases de datos 16

2.6 Representación del conocimiento 17

2.6.1 Representación mediante cálculo de predicados 21


2.6.2 Representación mediante redes semánticas 22
2.6.3 Representación mediante reglas de producción 23
2.6.4 Representación por objetos estructurados 24
2.6.5 Representación mediante procedimientos 25
2.6.6 Representación mediante árboles de decisión 26
2.6.7 Representación mediante listas de decisión 26
2.7 Representación lógica se un SGDB relaciona1 27

2.7.1 Estructura e integridad 27


2.7.2 Manipulación de datos 28
II. Tabla de Contenidos

3. Sistemas Expertos
3.1 Antecedentes 31
3.2 Programación lógica en sistemas expertos 32

3.2.1 Conceptos básicos 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 60
condicional
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 95
5.3 Archivos binarios 96
5.4 Filtrado y preproceso 105

5.4.1 Difusor simple 105


5.4.2 Difusor con múltiples condiciones 107
5.5 Manipulación de la base de datos en intenso 108
5.6 Programación lógica paralela 114
II. Tabla de Contenidos

6. Estado del Arte

6.1 El Análisis inteligente de datos 126

6.2 Desafíos en la explotación inteligente de datos 130

7. Conclusiones

III Referencias Bibliográficas 115


1 Introducción 1

1. Introducción

Una de las principales preocupaciones de los desarrolladores de software


destinado a la administración de bases de datos, es la creciente necesidad de
incorporar herramientas que permitan acceder y manipular eficientemente las
colecciones de datos que distinguen a las nuevas tecnologías de la información.

Los esquemas operativos orientados a soluciones administrativas generales han


multiplicado su nivel de exigencia, precisando productos que efectúen análisis
sobre los datos almacenados, para responder eficientemente a consultas no
planificadas; con capacidad para realizar operaciones entre los datos
estructurados (propios de la mayoría de bases actuales), con distintos tipos de
datos no estructurados, y - fundamentalmente- con capacidad de procesar estas
características en la oferta de soluciones.

En este terreno, comienza a acuñarse el término de bases de datos inteligentes en


el que convergen los fundamentos teóricos de la Inteligencia Artificial con los
sistemas relacionales activos; adicionando a la estructura del motor relaciona1 un
motor de inferencia, que habilita conjuntos de acciones disparadas por reglas y
consultas ampliadas por inferencia.

Existe un robusto compendio teórico (modelos matemáticos), para la construcción


de sistemas que soporten un gran número de reglas complejas para la inferencia
automática de la información y el tratamiento de la incertidumbre (un soporte de
reglas declarativas para expresar las interrelaciones semánticas entre objetos de
la base de datos), entre este conjunto, destacan los algoritmos genéticos, la lógica
difusa (fuzzy Iógic) y la lógica multievaluada.

La eficiente implementación de una BDI(Base de Datos Inteligente), precisa del


desarrollo de un sistema que posea la capacidad de gestionar conocimiento
1 Introducción 2

complejo a través del procesamiento de datos simples, provenientes tanto de


ficheros controlados de forma autónoma como de un SGDB(Sistema Gestor de
Bases de Datos); incorporar la capacidad de utilizar la experiencia en un dominio
particular de aplicación para resolver clases de problemas dentro del dominio.

Es importante destacar que existe un limitado número SGDB comerciales


orientados exclusivamente a estos aspectos (p.ej. Datalog), de hecho, las
tecnologías aplicadas en este dominio se construyen como extensiones de los
sublenguajes DML Y DDL particulares del lenguaje anfitrión; tecnologías que
recuperan segmentos de los avances de la Inteligencia Artificial y los expresan -
fundamentalmente- en la semántica de los procesos de consulta. Por ello, existen
múltiples enfoques híbridos en los que encontramos esquemas operativos lógicos
y procedurales, entre los que destacan los denominada minería de datos (data
mining) con un sólido punto de partida: la tecnología KDD (Knowdlege Discovery
in Databases) recientemente incorporada por IBM en el desarrollo de sistemas
expertos.

En este proyecto se pretende desarrollar un conjunto de herramientas para la


construcción de aplicaciones de Bases de Datos que operen a un nivel de
abstracción superior al de los manejadores de BDs actuales. Estas herramientas
estarán diseñadas para facilitar su integración con los sofisticados ambientes de
desarrollo de uno de los principales manejadores de Bases de Datos actuales:
Jet@ de Microsoft.

Este mayor poder de abstracción combinado con sus posibilidades de integración


con otras herramientas permitirá la creación de ambientes inteligentes orientados
a usuarios finales que combinen las tecnologías de bases de datos, bases de
conocimiento, programación orientada a objetos, e interfaces intuitivas para
usuarios finales.

En el desarrollo de nuestra investigación pormenorizamos sobre el conjunto de


1 Introducción 3

indicadores involucrados en la arquitectura de bases de datos, dando cuenta de


los esquemas operativos y evolución de los SGDB, el impacto de las tecnologías
aplicadas a la inteligencia artificial sobre éste dominio en particular (representación
del conocimiento) y los modelos matemáticos que dan coherencia al conjunto. En
todos los casos, se ejemplifican las operaciones y procesos considerando el
enfoque relaciona1 con que opera Jet.

Finalmente, se desarrollan prototipos con el objetivo de acreditarla validez del


conjunto teórico expuesto; dichos, operan en dos formas: mediante una interfaz
entre aplicaciones donde el sistema manipula una base de datos relaciona1 (base
persistente), de la que se obtienen los datos (base en intenso) que serán
procesados tanto por una aplicación periférica (motor de inferencia): Prolog; y
mediante objetos y procedimientos desarrollados específicamente en el lenguaje
nativo de la aplicación en general: Visual Basic 6 Enterprise Edition.

Los prototipos recuperan y expresan los nudos de nuestra investigación, en su


diseño hemos considerado distintas vistas que dan transparencia a los procesos
de que se ocupa el sistema, esto es, en todo momento es posible editar la
estructura de la base persistente, los datos concentrados en la base en intenso y
el repositorio de reglas que determina el comportamiento del motor de inferencia
en razón directa a los datos q ue procesa.
2. Sistemas basados en conocimiento 4

2. Sistemas Basados en Conocimiento.

2.1 Antecedentes

La sofisticación de la tecnología moderna de las bases de datos es el resultado de la


evolución que a lo largo de varias décadas ha tenido lugar en el procesamiento de los
datos y en la gestión de la información. La tecnología de acceso a los datos se ha
desarrollado desde los primitivos de los años cincuenta hasta los potentes e integrados
sistemas de hoy en día, arrastrados de un lado por las necesidades y las demandas de
la administración y, de otro, restringida por las limitaciones de la tecnología. Las
expectativas de la administración han crecido paralelamente a la evolución de las
tecnologías.

Los primeros sistemas de procesamiento de datos ejecutaron las tareas administrativas


para reducir el papeleo. Más recientemente, los sistemas se han expandido hacia la
producción y la gestión de la información, la que se ha convertido en un recurso vital
para las compañías. Actualmente, la función más importante de los sistemas de bases
de datos consiste en proporcionar el fundamento a los sistemas de información para la
gestión corporativa.

Una base de datos es un conjunto de Información, en sentido amplio, el término puede


aplicarse a cualquier agregado de datos; técnicamente es una colección de datos,
agrupados con un propósito específico en una o mas entidades lógicas (archivos). En
términos estrictos, “base de datos”, hace referencia sólo al lugar donde está depositada
la información (hablando tanto desde la perspectiva del hardware, como del software),
dicha información -generalmente- está soportada por un sistema para su gestión SGBD.

Las bases de datos son accedidas generalmente por un conjunto de aplicaciones


periféricas que incluyen tecnologías y herramientas de muy diverso tipo con los que
interactúa y que sirven de interfaz entre los usuarios y la base de datos. En la
actualidad, el impulso impuesto por el desarrollo de los sistemas de información, ha
2. Sistemas basados en conocimiento 5

provocado la evolución de las bases de datos en conjuntos abstractos, denominados


almacenes de datos (datawarehouse).

Incorporar conocimiento en un sistema de bases de datos fue sugerido por el desarrollo


en el campo de la Inteligencia Artificial (programación de comportamientos inteligentes).
La investigación en IA incluye estudios sobre la representación de reglas lógicas que
operen sobre los datos, esto es sistemas que descansan sobre una base de
conocimientos para razonar sobre el conjunto de datos.

Históricamente, la evolución de los SGBD nos ha proporcionado métodos para analizar


datos y encontrar correlaciones y dependencias entre ellos. Sin embargo, el análisis de
datos ha cambiado recientemente y ha adquirido una mayor importancia, debido
principalmente a tres factores:

a) Incremento de la potencia de los ordenadores. Aunque la mayoría de los métodos


matemáticos fueron desarrollados durante los años 60 y 70, la potencia de cálculo de
los grandes ordenadores de aquella época (equivalente a la de los ordenadores
personales de hoy en día) restringía su aplicación a pequeños ejemplos “de juguete”,
fuera de los cuales los resultados resultaban demasiado pobres. Algo similar ha
ocurrido con la capacidad de almacenamiento de los datos y su coste asociado.

b) Incremento del ritmo de adquisición de datos. El crecimiento de la cantidad de datos


almacenados se ve favorecido no sólo por el abaratamiento de los discos y sistemas de
almacenamiento masivo, sino también por la automatización de muchos experimentos y
técnicas de recogida de datos. Se estima que la cantidad de información almacenada
en todo el mundo se duplica cada 20 meses; el número y tamaño de las bases de datos
probablemente crece más rápidamente.

c) Por último, han surgido nuevos métodos, principalmente de aprendizaje y


representación de conocimiento, desarrollados por la comunidad de inteligencia
artificial, estadística y física de dinámicas no lineales. Estos métodos complementan a
2. Sistemas basados en conocimiento 6

las tradicionales técnicas estadísticas en el sentido de que son capaces de inducir


relaciones cualitativas generales, o leyes.

Estos nuevos métodos matemáticos y técnicas software, para análisis inteligente de


datos y búsqueda de regularidades en los mismos, se denominan actualmente técnicas
de minería de datos o data mining. A su vez, la minería de datos ha permitido el rápido
desarrollo de lo que se conoce como descubrimiento de conocimiento en bases de
datos.

En este capítulo, desarrollaremos un estudio introductorio a los SGBD, pormenorizando


en su enfoque y evolución, derivando los fundamentos teóricos en que se soportará el
desarrollo de bases de datos inteligentes.

2.2 Enfoques de los SGBD

Una clasificación primaria de los SGBD, nos permite establecer los tipos básicos según
el tipo de estructura de datos que soporta:

• Enfoque jerárquico. Parte de una estructura de datos basada en un conjunto de


registros diferentes guardados en un único archivo y jerarquizados entre sí
mediante ligas. Su estructura de árbol, impone que un elemento padre puede tener
varios elementos hijo, pero no su inverso. Precisa de punteros físicos.

• Enfoque de Red (Codasyl). Similar al enfoque jerárquico en tanto al uso de


registros y ligas, pero dentro del esquema jerárquico un elemento de inferior
jerarquía puede tener varios elementos situados a un nivel superior del mismo. Las
bases de datos gestionadas bajo este enfoque implementan registros conectores
(estructuras de datos que sirven para asociar a otras dentro de un fichero). Precisa
de punteros físicos

• Enfoque relacional. Se caracteriza por la representación de datos en forma de


2. Sistemas basados en conocimiento 7

tablas, en las que los conjuntos de registros tienen un formato fijo e idéntica
estructura. El enfoque relaciona1 en bases de datos parte del modelo relaciona1 en
matemáticas y, por tanto, son susceptibles de aplicar al minio todas las
formulaciones teóricas que éste presenta; en objetivos posteriores desarrollamos
una descripción exhaustiva de este enfoque, puesto que el prototipo BDI, de
nuestro estudio utiliza un SGBD relaciona1 (Microsoft Jet).

• Orientado a objetos. Basada en el encapsulamiento de código y datos en


unidades denominadas objetos, que interactúan con el sistema a través de
mensajes. El agrupamiento de objetos con métodos y variables comunes se
estructura en clases jerárquicas.

• Enfoque Lógico. No es esencialmente distinto al enfoque relacional, pero se


sustenta en la lógica de predicados de primer orden para representar y manipular
los datos, con lo que se obtiene un modelo relaciona1 flexible con capacidades para
la deducción automática, a éste pertenecen los SGBD deductivos.

Una característica de los tres primeros modelos mencionados es que sólo aceptan
datos escalares individuales tipificados y nulos ("NULL"). Como característica general,
los esquemas han sido desarrollados con la capacidad de operar sobre datos “ideales”,
en el supuesto de que la información a procesar es exacta, correcta y bien definida.

2.3 Evolución de los SGBD

La historia de las bases de datos inicia a mediados de los años cincuenta, en el


momento en que comenzaron a introducirse los ordenadores para automatizar la
gestión de las empresas, fundamentalmente con desarrollos en COBOL, y se han
caracterizado por el uso de tecnologías orientadas a la estructuración de datos
mediante modelos jerárquicos y Codasyl (p.ej. IMS de IBM; IDMS de Cullinet) de lógica
procedimental, que obligan al programador a desplazarse registro a registro, hecho que
implica una escasa flexibilidad.
2. Sistemas basados en conocimiento 8

En 1970 se propuso el modelo relacional, basado en los trabajos del Dr. Codd,
básicamente el modelo matemático que dio fundamentos a la segunda generación de
SGBD, caracterizada por una mayor independencia físico-lógica, dado que actúan
sobre conjuntos de registros; entre ellas destacan ORACLE, DB2, INGRES, INFORMIX,
SYBASE, etc. Codd propuso un modelo simple de datos en el que todos ellos se
representarían en tablas constituidas por filas y columnas. A dichas tablas se les dio en
nombre matemático de relaciones, denominándose así el sistema como relacional.

Codd también propuso dos lenguajes para manipular los datos en las tablas: álgebra y
cálculo relacional, que soportan la manipulación de los datos sobre la base de
operadores lógicos en lugar de los punteros físicos utilizados en los modelos jerárquicos
y de red. El resultado fue la aparición de sistemas relacionales durante la última mitad
de los setenta que soportaban lenguajes como el Structured Query Language (SQL), el
Query Language (Quel) y el Query-by-Example(QBE): los trabajos de investigación que
se realizaron durante la década de los ochenta se centraron en la optimización de
consultas, lenguajes de alto nivel, teoría de la normalización, organizaciones físicas
para el almacenamiento de las relaciones, algoritmos para la gestión de memorias
intermedias (buffers), técnicas de indexación para un acceso asociativo más rápido
(distintas variaciones de los árboles), sistemas distribuidos, diccionarios de datos,
gestión de transacciones, etc. Estas investigaciones han tenido como consecuencia la
elevada tasa de transacciones de muchos de los productos actuales que permiten
asegurar entornos transaccionales en línea (OLTP) muy eficientes y seguros. También
cabe recordar que durante la primera mitad de los ochenta se estandariza el lenguaje
SQL (el SQUANSI se aprueba en 1986), ofreciendo, al cabo de poco tiempo,
prácticamente todos los productos una interfaz SQL, aún los no relacionales (sistemas
“renacidos”).

El enfoque relaciona1 permite a los programadores la manipulación de tuplas


procedentes de distintos ficheros y tablas en una misma base de datos mediante
consultas estructuradas, habilitando acciones múltiples sobre los registros. La aparición
2. Sistemas basados en conocimiento 9

y estandarización de SQL, permitió una mayor integración, multiplicó las tareas


asignadas a las bases de datos e implicó el desarrollo de sistemas de uso transparente,
cuya facilidad de manejo derivó en una excepcional productividad e impresionante
impacto económico.

La tercer generación de SGBD, tiene como principal característica la optimización


relaciona1 de los sistemas en entornos multiusuario, la gestión de objetos que permite
tipos de datos complejos (texto, imagen, audio...), el encapsulamiento de la semántica
de datos que proporciona un soporte robusto para la recuperación automática de la
información y mantenimiento de las restricciones de integridad entre datos.

Es posible clasificar los distintos sistemas como gestores de información “natural”. En la


evolución de esta generación destacan dos indicadores: una arquitectura a tres niveles
con descripción recursiva de datos (ANSI, ISO) como referencia; y el modelo relacional.

Nivel Definición
Conceptual Nivel estructural de la base de datos que define su esquema lógico.
Externo Nivel estructural de la base de datos que define las vistas de los
usuarios.
Interno Nivel estructural de la base de datos que define la vista física.
Tabla 1. Arquitectura de tres niveles.

La explosión de los sistemas de información obligó a los desarrolladores de SGBD a la


implementación de potentes gestores destinados a usuarios finales, con interfaces
intuitivas -gráficas fundamentalmente- dotadas de asistentes generadores de código:
Access (Visual Basic, SQL), Visual Fox (SQL), En la siguiente figura, ilustramos un
resumen de la cronología expuesta:
2. Sistemas basados en conocimiento 10

Archivos con SGBD


acceso directo RELACIONALES.
SGBD
JERARQUICOS 1970
Archivos 1960 SGBD 1980 2000
Secuenciales RED

Publicación del modelo SGBD


Relaciona1 de Codd ORIENTADOS
AL OBJETO
SGBD LÓGICOS
(REL AMPLIADOS)

2.4 Clasificación de los SGBD

2.4.1 Sistemas Orientados al proceso y SGBD clásicos

Sistemas que operan sobre conjuntos de registros agrupados en “ficheros”, cuya


naturaleza reside en la recuperación y almacenamiento simple, dado que no almacenan
ningún tipo de información para el procesamiento de datos, las restricciones, procesos y
el control se distribuye en los programas que acceden a los ficheros.

Estos sistemas “clásicos” enfrentan graves problemas de redundancia al encontrarse


dispersa la semántica de los datos en los programas. Se distinguen por el acceso
secuencial a cadenas de caracteres, interpretadas por los programas.

Este tipo de sistema no es considerado como una base de datos en el sentido estricto
del término; será hasta que aparezcan los primeros ficheros u archivos en los que
pueda almacenarse la descripción de los datos (catálogo o diccionario) que
consideremos la primer clasificación de SGBD (Clásicos), aún cuando prácticamente
todas las restricciones sobre los datos se comprueban en los programas.
2. Sistemas basados en conocimiento 11

2.4.2 SGBD semánticos

En la medida en que evolucionaron los componentes físicos de los ordenadores y se


hizo posible el uso de mayor memoria para operaciones lógicas, los SGBD incorporaron
mayor número de información sobre los datos en el propio catálogo de la base de
datos, habilitando restricciones de diferentes tipos (CHECK), aserciones e incluso
dominios, así, en un SGBD semántico la base de datos incluye información sobre
restricciones, información sobre datos y los datos en sí.

2.4.3 SGBD activos

En este tipo de sistemas, los desarrolladores incorporan acciones que el sistema


ejecuta sin la intervención del usuario, a través de disparadores, reglas, demonios, etc.
Tecnología basada en procedimientos que se activan de forma automática, y que han
sido previamente especificados en la fase de definición -intensión- de la base de datos.
2. Sistemas basados en conocimiento 12

De hecho, representan patrones invocados donde las condiciones para invocar se


revisan en cada paso, frente a los SGBD semánticos, encontramos además, en la base
de datos información de control.

Atendiendo los conceptos de algunos autores, un SGBD activo se distingue porque su


modelo de conocimiento describe las situaciones y las reacciones correspondientes:
Evento, Condición, Acción (ECA, cuando ocurre un evento se evalúa la condición y si
ésta se satisface se ejecuta la acción). Sistemas que incorporan una ampliación al
Lenguaje de Definición de Datos (LDD), con el objetivo de definir con mayor precisión y
naturalidad el conjunto de reglas que se ejecutan, el uso de SQL es prioritario en el
desarrollo de estos sistemas.

2.4.4 SGBD deductivos

La programación lógica ha ido evolucionando desde mediados de la década pasada


hasta nuestros días ampliando sus horizontes en el desarrollo de sistemas gestores de
bases de datos, la programación lógica, en forma similar a los primeros desarrollos de
bases de datos. Centra su acción en el núcleo de los programas que acceden a los
datos, de hecho, la programación lógica se utiliza principalmente como lenguaje de
consulta, mientras que la tecnología de base de datos se emplea para asegurar un
almacenamiento eficiente y fiable. Los SGBD deductivos se puede implementar
añadiendo al SGBD facilidades para almacenar y gestionar reglas, extendiendo el
procesador de consultas del SGBD o acoplando un SGBD con un sistema Prolog.
2. Sistemas basados en conocimiento 13

Aunque, normalmente, en lugar de utilizar un lenguaje como Prolog (que procesa una
tupla a la vez) se suele emplear un lenguaje relaciona1 declarativo denominado
DATALOG, que es poco procedimental y orientado a conjuntos, lo que lo hace más
adecuado para bases de datos. Sintácticamente el DATALOG es muy parecido al
Prolog, existiendo en la actualidad diferentes versiones. Este tipo de lenguajes resulta
muy útil para hacer consultas de tipo recursivo, siendo clásica la de los ancestros de
una persona (conociendo que los padres de una persona son sus ancestros, así como
los padres de los ancestros). Sin embargo, todavía no existen productos comerciales
que puedan incluirse en esta categoría, aunque algunas de sus nociones se van
incorporando en la nueva generación de SGBD relacionales-activos”

Las reglas, suelen almacenarse en ficheros de texto o con formato plano


independientes, con el objetivo de ser “reprogramables” y se accede a ellos -
generalmente- en forma binaria; el motor de inferencia se encuentran en el núcleo del
programa que accede a los datos. En sistemas más complejos se enlaza el modulo de
“respuesta” como la entrada “inf. de procesos” de una SGBD activa.

2.4.5 SGBD orientadas al objeto

Conocidos también como SGBO, aunque podríamos considerarlos como la tendencia a


2. Sistemas basados en conocimiento 14

extender los SGBD relacionales mediante la incorporación de la programación orientada


a objetos, en esta tendencia destacan: interfaces de PO0 sobre motores relacionales
(Visual Basic, VC++, J++, etc.), herramientas de conversión de esquemas relacionales
a esquemas OO y viceversa, herramientas de migración de esquemas, interoperabilidad
de BDR y BDO, etc.

Este tipo de sistemas comienza a incursionar en forma sólida en el mercado, debido a


la aparición de un número cada vez mayor de herramientas de conectividad entre los
mundos relacional y orientado a objetos:

• lnterfaces de programación orientada a objetos sobre motores relacionales,


• Herramientas de conversión de esquemas relacionales a esquemas OO y
viceversa,
• Herramientas de migración de esquemas, bases de datos y aplicaciones
relacionales a OO y viceversa,
• Herramientas que aseguran la interoperabilidad de bases de datos relacionales y
bases de objetos.

Algunos aspectos en los que se considera necesaria una mayor investigación, son:
combinar acceso declarativo y acceso navegacional, soportar completamente la
funcionalidad de los objetos compuestos, acceso a los metadatos, almacenamiento de
los servicios (métodos) en la base de datos, definición dinámica de clases, mecanismos
para definir restricciones y disparadores, gestión de la extensión de las clases, soporte
de vistas y lenguajes de consulta y de optimización, es conveniente particularizar que
en febrero de 1997 en reunión del grupo ISO/IEC JTC1/SC21M/G3 se presentó la
solicitud de aprobación del SQL3 (las partes Foundafion, Bindings, Persistent Stored
Modules y Object) como norma internacional con efectos a diciembre de 1998;
actualmente existe una sólida convergencia entre OQL y SQL3.

2.4.6 SGBD multidimensionales


2. Sistemas basados en conocimiento 15

Los sistemas de base relacional han sido diseñado específicamente para soportar el
procesamiento analítico de los datos: On Line Analytical Processing (OLAP),
representan los datos mediante matrices de n dimensiones denominadas “hipercubos”
asignando a cada dimensión un dominio específico jerarquizado, cada casilla del
hipercubo contiene datos agregados (información de...) que relacionan los elementos
entre las distintas dimensiones, de hecho, éstas actúan como apuntadores para
identificar los valores dentro de la matriz.

Es importante destacar que el modelo de matriz de datos que aplica la lógica


multidimensional no está asociado a una representación física de los datos, ni utiliza
LDD particulares, sus principales diferencias frente al modelo de tablas relacionadas,
reside en que todos los dominios pueden encontrase relacionados, en contraparte
dentro del esquema de tablas, las relaciones afectan sólo campos clave o campos con
naturaleza idéntica-asociativa.

Otra significativa diferencia es que los sistemas relacionales soportan estructuras


planas y presentan serias dificultades para gestionar interrelaciones multidimensionales
por ejemplo, las limitaciones funcionales de SQL que sólo pueden efectuar SUM
(sumatoria) y AVG (Average, promedio) del mismo campo en todas las tuplas, pero no
puede aplicarse a diferentes columnas en una misma tupla.
2. Sistemas basados en conocimiento 16

2.5 Conocimiento y bases de datos

Los métodos generales desarrollados para la resolución de problemas y técnicas de s


búsqueda al inicio de la era de la IA demostraron no ser suficientes para resolver los
problemas orientados a las aplicaciones, ni fueron capaces de satisfacer los difíciles
requerimientos de la investigación. A este conjunto de métodos, procedimientos y
técnicas, se lo conoce como Inteligencia Artificial Débil. La principal conclusión que se
derivó de este trabajo inicial fue que los problemas difíciles sólo podrían ser resueltos
con la ayuda del conocimiento específico acerca del dominio del problema.

La aplicación de estas ideas dio lugar al desarrollo de los denominados Sistemas


Basados en Conocimiento (Knowledge Based Systems) y al aparecimiento de la
Ingeniería Cognoscitiva, como una rama de la IA, que estudia los sistemas basados en
el conocimiento. La definición de un sistema basado en conocimiento puede resumirse
de la siguiente manera: “Es un sistema computarizado capaz de resolver problemas en
el dominio en el cual posee conocimiento específico”.

La solución es esencialmente la misma que hubiera dado un ser humano confrontado


con idéntico problema, aunque no necesariamente el proceso seguido por ambos
puede ser igual.

El simple concepto dado, puede causar confusión ya que muchos sistemas basados en
programas convencionales podrían ser incorrectamente categorizados como sistemas
basados en conocimiento.

Esta inconsistencia puede ser aclarada, sobre la base de tres conceptos fundamentales
que distinguen a los sistemas basados en conocimiento de los programas algorítmicos
convencionales y de los programas generales basados en búsqueda:

1 .La separación que existe entre el conocimiento, y la forma cómo éste es utilizado.
2. El uso de conocimiento específico de un determinado dominio.
2. Sistemas basados en conocimiento 17

3. La naturaleza heurística, antes que algorítmica del conocimiento utilizado.

Dicho de una manera simple, los programas convencionales utilizan algoritmos para
resolver problemas, mientras que los sistemas basados en conocimiento resuelven
problemas donde las soluciones algorítmicas no existen o son muy costosas para ser
implementadas.

Actualmente, el amplio éxito de los sistemas de bases de datos, combinado con las
necesidades de gestión de información y los desarrollos que han emanado del estudio
de la IA, han dado como resultado un interés creciente en extender los sistemas de
bases de datos a sistemas de bases de datos inteligentes, elevando su utilidad al punto
en que pueda construirse conocimiento a partir de datos simples y que éste —
conocimiento— permita controlare interpretar la estructura en su conjunto, Wiederhold ,
los describe de la siguiente manera:

• Conocimiento estructural. Conocimiento sobre las dependencias y restricciones


entre los datos.
• Conocimiento general procedimental. Conocimiento que sólo puede ser descrito por
un procedimiento.
• Conocimiento específico de la aplicación. Conocimiento que está determinado por
las reglas y convenios que se aplican en un dominio de problema en particular.

En el desarrollo de una base de datos inteligente implica la representación del


conocimiento, definido más allá de su forma extensa (hechos e instancias almacenados
en la base), mediante mecanismos lógicos.

2.6 Representación del conocimiento

La representación del conocimiento es el punto neural de la programación lógica


cuando ésta se aplica al procesamiento de datos, comprende el estudio de formalismos
y estructuras en el tratamiento de objetos, hechos, eventos, relaciones, etc. Los
2. Sistemas basados en conocimiento 18

tradicionales sistemas basados en conocimiento han utilizado con gran asiduidad, para
representar el conocimiento, una extensión de la lógica de proposiciones, denominada
lógica "0+" o representación objeto-atributo-valor.

Fundamentemos, ¿ Qué es el conocimiento y qué técnicas se utilizan para represetarlo


y manipularlo ?

Puede ser definido como el conjunto de hechos y principios acumulados por la


humanidad, o el acto, hecho o estado de conocer. Es la familiaridad con el lenguaje,
conceptos, procedimientos, reglas, ideas, abstracciones, lugares, costumbres y
asociaciones, unida a la habilidad de utilizar estas nociones en forma efectiva para
modelar diferentes aspectos del universo que nos rodea.

Los conceptos de conocimiento e inteligencia están íntimamente ligados. La inteligencia


requiere de la posesión y acceso al conocimiento. Conocimiento no debe ser
confundido con datos o información. El conocimiento incluye y requiere del uso de datos
e información. Además, combina relaciones, dependencias, y la noción del saber con
datos e información.

En el caso que nos ocupa, tenemos la certeza de que de los datos en bruto raramente
se obtendrán de una manera directa beneficios. Su verdadero valor radica en la
posibilidad de extraer información útil para el soporte de decisiones o la exploración y
compresión del fenómeno que es la fuente de datos. En general, nuestra habilidad para
analizar y comprender conjuntos de datos masivos decrece mucho más rápidamente
que nuestra capacidad de unir y almacenar estos datos. Por tanto, es necesario una
nueva generación de técnicas y herramientas computacionales para soportar la
extracción de conocimiento útil para grandes volúmenes de datos.

Otros términos relacionados con el conocimiento y que son ocasionalmente empleados


son epistemología y metaconocimiento. Epistemología es el estudio de la naturaleza del
conocimiento, mientras que metaconocimiento es conocimiento acerca del
2. Sistemas basados en conocimiento 19

conocimiento, esto es, conocimiento acerca de lo que se conoce.

El conocimiento puede ser de tipo procedimental, declarativo o heurístico. Conocimiento


procedimental es aquel conocimiento compilado que se refiere a la forma de realizar
una cierta tarea (el saber como hacerlo). Por ejemplo, los pasos necesarios para
resolver una ecuación algebraica son expresados como conocimiento procedimental.

Por otro lado, el conocimiento declarativo es conocimiento pasivo, expresado como


sentencias acerca de los hechos del mundo que nos rodea (el saber que hacer). La
información personal en una base de datos es un típico ejemplo de conocimiento
declarativo. Tales tipos de datos son piezas explícitas de conocimiento independiente.

El conocimiento heurístico es un tipo especial de conocimiento usado por los humanos


para resolver problemas complejos. El adjetivo heurístico significa medio para descubrir.
Está relacionado con la palabra griega heuriskein que significa descubrir, encontrar. Se
entiende por heurístico a un criterio, estrategia, método o truco utilizado para simplificar
la solución de problemas. El conocimiento heurístico usualmente se lo adquiere a través
de la experiencia.

Dado que el conocimiento es importante y primordial para el comportamiento


inteligente, su representación constituye una de las máximas prioridades de la
investigación en IA. El conocimiento puede ser representado como imágenes mentales
en nuestros pensamientos, como palabras habladas o escritas en algún lenguaje, en
forma gráfica o en imágenes, como cadenas de caracteres o colecciones de señales
eléctricas o magnéticas dentro de un computador. En nuestro estudio, consideraremos
las representaciones escritas y sus correspondientes estructuras de datos utilizadas
para su almacenamiento en un computador. La forma de representación que se escoja
dependerá del tipo de problema a ser resuelto y de los métodos de inferencia que mejor
respondan al conjunto.
2. Sistemas basados en conocimiento 20

Una representación del conocimiento puede ser un esquema o dispositivo utilizado para
capturar los elementos esenciales del dominio de un problema. Una representación
manipulable es aquella que facilita la computación. En representaciones manipulables,
la información es accesible a otras entidades que usan la representación como parte de
una computación.

Debido a la variedad de formas que el conocimiento puede asumir, los problemas


involucrados en el desarrollo de una representación del conocimiento son complejos,
interrelacionados y dependientes del objetivo. En términos generales, se debe tratar
que el conocimiento esté representado de tal forma que:

• Capture generalizaciones.
• Pueda ser comprendido por todas las personas que vayan a proporcionarlo y
procesarlo.
• Pueda ser fácilmente modificado.
• Pueda ser utilizado en diversas situaciones aún cuando no sea totalmente exacto o
completo.
• Pueda ser utilizado para reducir el rango de posibilidades que usualmente debería
considerarse para buscar soluciones.

El conocimiento declarativo puede ser representado con modelos relacionales y


esquemas basados en lógica. Los modelos relacionales pueden representar el
conocimiento en forma de árboles, grafos o redes semánticas. Los esquemas de
representación lógica incluyen el uso de lógica proposicional y lógica de predicados.

Los modelos procedimentales y sus esquemas de representación almacenan


conocimiento en la forma de cómo hacer las cosas. Pueden estar caracterizados por
gramáticas formales, usualmente implantadas por sistemas o lenguajes
procedimentales y sistemas basados en reglas (sistemas de producción).
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 ⊃Q
P⊃ P≡Q
T T T T F T T
T F F T F F F
F T F T T T F
F F F F T T T
2. Sistemas basados en conocimiento 22

Un sistema que implemente la inferencia por cálculo de predicados deberá diferenciar


los siguientes elementos:

• Términos, los cuales pueden ser; constantes, variables o funciones


• Conjuntos de predicados asociados a uno o más argumentos definidos
previamente
• Conjuntos de conectivas u operadores lógicos (v. Tabla)

• Cuantificadores universales: existe, para todo (∀ (X)).

Este mecanismo de inferencia es el más viable para la implementación de sistemas de


naturaleza deductiva, sin embargo resulta -en el mejor de los casos- insuficiente en la
implementación de sistemas de naturaleza inductiva.

2.6.2 Representación mediante redes semánticas

Tipo de representación surgida de trabajo en reconocimiento de lenguaje natural y la


búsqueda de modelos para la memoria humana en que intervienen dos tipos de
entidades básicas: Nodos y Ligas asociativas, donde los nodos pueden ser de dos
tipos:

• Referidos en forma directa al significado del concepto - nodo tipo (clase).


• Referidos indirectamente al concepto mediante un apuntador al nodo tipo - nodo
“token” (instancia u objeto).

Los “conceptos” se definen en forma indirecta en la red semántica mediante la


referencia a otros nodos, que a su vez se refieren a otros, etc. Esto es análogo a la
definición en un diccionario, en donde se usan otras palabras (nodos) para definir una
palabra, que a su vez están definidas en función de otras palabras.

Las ligas también pueden ser de diferentes tipos indicando diferentes relaciones entre
nodos, algunas de las más usadas son:
2. Sistemas basados en conocimiento 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
2. Sistemas basados en conocimiento 24

de Markov y en la lingüística de Chomsky. Básicamente, una regla de producción


consta de un par ordenado de símbolos (situación-acción), la sintaxis de las reglas es
diversa y se estructura en función del proceso de selección y ejecución de éstas.

En el desarrollo de un motor que utilice está representación, se precisa de un intérprete


que accese a las reglas, manipule variables y en algunos casos clases sintácticas
(parsing), en éste, recae el proceso de inferencia denominado "control":

• Selección de las reglas pertinentes.


• Validación (reglas cumplidas)
• Ejecución de las acciones especificadas por las reglas cumplidas.

Podemos observar que funcionalmente el sistema opera en fases de reconocimiento


(selección de reglas pertinentes, validación) y acción. El proceso de validación deberá
además contar con un esquema de operación para discriminar en caso de que exista
más de una regla aplicable a una situación dada:

a) Establecer orden en los datos


b) Clasificar reglas por prioridad de ejecución
c) Ejecutar la regla más recientemente instanciada
d) Metareglas...

Los sistemas basados en la representación del conocimiento mediante producción de


regias son útiles en los casos donde se trabaja con gran cantidad de estados
independientes: sistemas con objetivos amplios y acciones de corto alcance, dada su
representación modular y uniforme.

2.6.4 Representación del conocimiento por objetos estructurados

Los objetos estructurados tienen diversas denominaciones, entre las que destacan:
Esquemas (Bartlett 1932), Frames (Minsky 1975), Scripts (Schank, Abelson 1977),
2. Sistemas basados en conocimiento 25

Objetos (Goldeberg. 1977, Steels 1982, entre otros), Descriptores funcionales (Kay M.
1982), las características generales de este modelo de representación son:

a) Cada objeto tiene asociado un conjunto de atributos que lo caracterizan.

b) Cada atributo tiene asociado un valor, el cual a su vez puede ser otro objeto

c) Los atributos(valor) corresponden a:

1. El nombre de un procedimiento específico (ejecutable automáticamente o


mediante requisición).
2. Apuntadores a otros objetos.
3. Valores obtenidos durante ejecución.
4. Valores por defecto
5. Constantes.

Los estados de los objetos definidos por el sistema son:

Activos Cuando se encuentra presente en la lista de hipótesis en curso de


tratamiento.
Semiactivos Cuando es parte de una hipótesis alternativa.
Inactivos Cuando el objeto se ha eliminado o no ha sido instanciado.

2.6.5 Representación mediante procedimientos

Este tipo de representación utiliza un lenguaje de alto nivel en el tratamiento de los


conocimientos, en forma explícita mediante un programa. El comportamiento del
programa está dirigido por instrucciones, los conocimientos que trata no se expresan en
forma declarativa, sino que se encuentran a través de todo el programa.
2. Sistemas basados en conocimiento 26

2.6.6 Representación mediante árboles de decisión

Los árboles de decisión son una forma de representación sencilla, muy usada entre los
sistemas de aprendizaje supervisado, para clasificar ejemplos en un número finito de
clases. Se basan en la partición del conjunto de ejemplos según ciertas condiciones
que se aplican a los valores de los atributos. Su potencia descriptiva viene limitada por
las condiciones o reglas con las que se divide el conjunto de entrenamiento; por
ejemplo, estas reglas pueden ser simplemente relaciones de igualdad entre un atributo
y un valor, o relaciones de comparación (“mayor que”, etc.), etc. Los sistemas basados
en árboles de decisión forman una familia llamada TDIDT (Top-Down Induction of
Decisión Trees), cuyo representante más conocido es ID3 (Interactive Dichotomizer) se
basa en la reducción de la entropía media para seleccionar el atributo que genera cada
partición (cada nodo del árbol), seleccionando aquél con el que la reducción es máxima.
Los nodos del árbol están etiquetados con nombres de atributos, las ramas con los
posibles valores del atributo, y las hojas con las diferentes clases.

2.6.7 Representación mediante listas de decisión

Las listas de decisión son otra forma de representación basada en lógica de


proposiciones. Es una generalización de los árboles de decisión y de representaciones
conjuntivas (CNF) y disyuntivas (DNF). Una lista de decisión es una lista de pares de la
forma (d1, C1 ), (d2, C2 ),..., (d n , C n ) donde cada d i es una descripción elemental, cada
C i es una clase, y la última descripción C n es el valor verdadero.

La clase de un objeto será C j cuando d j sea la primera descripción que lo satisface.


Por tanto, se puede pensar en una lista de decisión como en una regla de la forma “si di
entonces C1 , sino si d2 ..., sino si d n entonces C n ". Se pretende mejorar el aprendizaje
a partir de ejemplos con ruido (al evitar la dependencia de ejemplos específicos e
incorporar una poda del espacio de búsqueda). Las descripciones elementales de los
pares que forman la lista de decisión tienen la misma forma que los complejos de AQ.
2. Sistemas basados en conocimiento 27

2.7 Representación Lógica de un SGDB relaciona1

En los siguientes párrafos ofreceremos una visión detallada del esquema relacional,
desde la óptica de la lógica de primer orden, ocupándonos de 4a estructura e integridad
de los datos así como de su manipulación.

2.7.1 Estructura e integridad.

Con atención a cómo se encuentran estructurados los datos: Un dominio es un conjunto


-normalmente finito- de valores.

El producto cartesiano de una serie de dominios D1;D2; ...;Dn, denotado por: D1xD2x... x
Di, es el conjunto de todas las tuplas (x 1;x 2;...x n,) tales que para cualquier i, i = 1 ;...; 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
2. Sistemas basados en conocimiento 28

estructura general como un superconjunto de esquemas de relación y de restricciones


de integridad.

2.7.2 Manipulación de datos

La manipulación de datos en el esquema relaciona1 se efectúa mediante un lenguaje


formal: Álgebra y Cálculo Relacional, de la primera obtenemos una colección de
operadores y operaciones explícitas, la segunda proporciona la semántica para definir
las relaciones resultantes.

• Algebra Relacional.

Los operadores básicos de AR pueden agruparse en:

Operación de asignación. Que asigna los resultados de otras operaciones relacionales


a una nueva relación con el objetivo de preservar los resultados.

Operaciones sobre conjuntos. Unión, Intersección, Diferencia y Producto Cartesiano, a


excepción de ésta última, se precisa que los operandos sean del mismo grado y que los
iésimos atributos tengan el mismo dominio.

Operaciones especiales. Selección, Proyección, reunión y División:

* Selección: Operador algebraico que produce un subconjunto “horizontal” de una


relación específica, por ejemplo, el subconjunto de las tuplas de una Relación para el
cual se cumple un predicado dado, expresado como combinación booleana de
términos.

*Proyección: Produce un subconjunto “vertical” de una relación dada, es decir, el


subconjunto obtenido al seleccionar los atributos.
2. Sistemas basados en conocimiento 29

*Reunión: La reunión de la relación A sobre el atributo X con la relación 5 sobre el


atributo Y, da como resultado todas las tuplas t, tales que t, es la concatenación de una
tupla de A con una de 5 en que se verifique una condición determinada sobre Xe Y

*División: Divide una relación R de grado m+n entre una relación R' de grado n,
produciendo una de grado m.

• Cálculo Relaciona1 (tupías [CRT] y dominios[CRD])

Cálculo Relacional de Tupías. Una expresión en el CRT, tiene la forma {P/P(t)} que
representa el conjunto de todas las tuplas t que hacen verdadera la fórmula o predicado
P. Usaremos t[A] para denotar el valor que tiene la tupla t para el atributo A y t ∈ R para
denotar que t está en la relación R. Se dice que una variable para t es libre si no se
encuentra cuantificada (universal o existencialmente).

Una fórmula del CRT se compone de átomos, de las siguientes formas:

- k ∈ R, donde k es una variable tupla y R una relación.


- k[x] θ v[y], donde k y v son variables tupla, x es un atributo sobre el que se define k y θ
operador de comparación (<, >, >=, <=,=).
- s[x] θ c, igual que el caso anterior, con c como constante del domino del atributo x.

Las fórmulas se construyen a partir de los átomos usando las siguientes reglas:

- Un átomo es una fórmula.


- Si P, es una fórmula, entonces (P1 ) y (¬P1), también lo son.
- Si P1 y P2 son formulas, también lo son P1 ∧ P2 , P1 v P2, y P1, ⇒ P2
- Si P1 (s) es una fórmula que contiene una variable de tupla libre s, entonces ∃s ∈ R
(P1 (s)) y ∀s ∈ R (PI (s)) también lo son.
2. Sistemas basados en conocimiento 30

Siguiendo esta definición es posible generar una relación infinita, por ejemplo el número
de tuplas que no están en una relación {t/¬ (t∈R)}, así se introduce el concepto de
dominio de una fórmula P, dom(P) es el conjunto de todos los valores representados
por P.

Cálculo relacional de dominios. Esta forma del cálculo relaciona1 utiliza variables de
dominio a las que se asignan valores del dominio de un atributo (dato). Las expresiones
tienen la forma: {<x1 ,x2,…xn, > | P (x1,x2 ,..., xn, ) } donde x1,x2 ,..., xn representan las
variables de dominio y P la fórmula compuesta de átomos, éstos pueden tener las
siguientes formas:

- < x1 ,X2,...,xn >∈ R, donde R es una relación de n atributos.


- xθy, con x e y operados por comparación.
- xθc, equivalente al caso anterior y c es una constante del domino del atributo de x..
3. Sistemas expertos 31

3. Sistemas expertos

3.1 Antecedentes

En las últimas décadas, se han producido grandes cambios en el entorno de las


empresas y las organizaciones, como consecuencia de los avances de las nuevas
tecnologías de la producción, de la información y de las comunicaciones. En este nuevo
entorno, la toma de decisiones de una manera eficaz precisa de una forma rápida de
información suficiente, actualizada y oportuna, utilizando los ordenadores electrónicos y
los medios que proporciona la tecnología de la información. Además, gracias a las
investigaciones realizadas en la inteligencia artificial, con el desarrollo de los sistemas
basados en el conocimiento y los sistemas expertos, también se han producido grandes
avances en el tratamiento del conocimiento, factor fundamental para la toma de
decisiones.

El estudio y desarrollo de los Sistemas Expertos (SEs) comenzó a mediados de la


década del 60. Entre 1965 y 1972 fueron desarrollados varios de estos sistemas,
muchos de ellos tuvieron un alcance muy limitado, otros como MYCIN, DENDRAL y
PROSPECTOR, constituyeron la base histórica de los SEs y aún en la actualidad son
de gran interés para los investigadores que se dedican al estudio y construcción de los
mismos.

En teoría estos sistemas son capaces de razonar siguiendo pasos comparables a los
que sigue un especialista (médico, biólogo, geólogo, matemático, etc.), cuando resuelve
un problema propio de su disciplina. Por ello el creador de un SE debe comenzar por
identificar y recoger, del experto humano, los conocimientos que éste utiliza:
conocimientos teóricos, pero sobre todo los conocimientos empíricos adquiridos en la
práctica.

Los sistemas expertos son programas de ordenador que capturan el conocimiento de


un experto e imitan sus procesos de razonamiento cuando resuelven los problemas en
3. Sistemas expertos 32

un determinado dominio. Los sistemas expertos son un subconjunto especial dentro de


los sistemas basados en el conocimiento, que incorporan en la base de conocimiento
del sistema el conocimiento de un experto. Una definición formal de los sistemas
expertos, aceptada por muchos autores, es la aprobada por el Grupo Especialista en
Sistemas Expertos de la Sociedad Británica de Ordenadores, que los define de la forma
siguiente: “Un sistema experto es visto como la incorporación en un ordenador de un
componente basado en el conocimiento, que se obtiene a partir de la pericia
(conocimiento técnico) de un experto, de tal forma que el sistema pueda ofrecer
asesoramiento inteligente o tomar una decisión inteligente sobre una función del
proceso. Una característica adicional deseable, que muchos considerarían fundamental,
es la capacidad del sistema, si se le solicita, de justificar su propia línea de
razonamiento de un modo directamente inteligible para el interrogador...“. Los sistemas
expertos también pueden ser definidos en función de sus características funcionales.
En este sentido, Hayes-Roth considera como características más importantes de los
sistemas expertos las siguientes:

1. Pueden resolver problemas normalmente atacados por los expertos humanos;


2. Razonan heurísticamente, usando lo que los expertos consideran que son reglas
empíricas efectivas, e interactúan con los humanos de forma adecuada, incluyendo
el lenguaje natural;
3. Manipulan y razonan sobre descripciones simbólicas;
4. Pueden funcionar con datos inciertos;
5. Contemplan múltiples hipótesis;
6. Pueden explicar su proceso de razonamiento y justificar sus conclusiones.
7. Aplican técnicas de búsqueda.
8. Pueden inferir nuevos conocimientos a partir de los existentes.

3.2 Programación lógica en Sistemas expertos

La programación lógica tiene sus antecedentes más próximos en los trabajos de prueba
automática de teoremas de los años sesenta. J. A. Robinson propone en 1965 una
3. Sistemas expertos 33

regla de inferencia a la que llama resolución (Regla que se aplica sobre cierto tipo de
fórmulas del Cálculo de Predicados de Primer Orden, llamadas cláusulas y la
demostración de teoremas bajo esta regla de inferencia se lleva a cabo por reducción al
absurdo), mediante la cual la demostración de un teorema puede ser llevada a cabo de
manera automática, sus trabajos sirvieron de base al primer lenguaje de programación
que contempla, como parte del intérprete, los mecanismos de inferencia necesarios
para la demostración automática.

Este primer lenguaje está basado en el formalismo matemático de la Lógica de Primer


Orden y ha dado inicio a un nuevo y activo campo de investigación entre las
matemáticas y la computación que se ha denominado la Programación Lógica.

En 1971 aparece PROLOG (Programing in Logic), desarrollado en la Universidad de


Marsella, Francia, que cuenta con un lenguaje formal mediante el cual es posible
representar fórmulas llamadas axiomas, que permiten describir fragmentos del
conocimiento y, además, consta de un conjunto de reglas de inferencia que aplicadas a
los axiomas, permiten derivar nuevo conocimiento. Una característica general de la
arquitectura de sistemas en PROLOG, es la existencia de una “base de hechos” o
“base de conocimientos” que alimentan las variables particulares de los axiomas en el
proceso de inferencia, esta base, al igual que en los SGBD procedimentales, se
encuentran en un archivo externo al núcleo del programa, la base en sí, no contiene
información sobre los datos, ésta se deriva de la posición particular de cada término
(áridad).

La programación Lógica aplicada a los SGBD, es un campo relativamente nuevo, de


hecho, la mayoría de los SGDB comerciales no utilizan motores de inferencia en su
desarrollo, en virtud de que son sistemas orientados a la obtención de “información”, no
de “conocimientos” y sus áreas de aplicación -generalmente comerciales - no precisan
de la algorítmica compleja inherente a los sistemas basados en conocimiento. Sin
embargo la penetración de las tecnologías “expertas”, en el área comercial de las
empresas, obliga un replanteamiento de esta condición.
3. Sistemas expertos 34

La programación lógica aplicada al desarrollo de SGBD, comienza a formar parte de los


nuevos desarrollos de grandes corporativos, que ven en estos sistemas la plusvalía
inherente al desplazamiento de los expertos humanos. Es un hecho que los SGBD han
evolucionado para atender las exigencias de nuevos dominios culturales, científicos,
industriales y comerciales, generando distintos tipos de SGBD (ver. Clasificación de
SGBD, Cap. ll), y no se espera que la Programación Lógica de estos sistemas desplace
a los existentes, sin embargo, representan el camino ideal para aplicaciones
específicas, en las que se precisa la inferencia para manipular eficientemente un
conjunto de datos y representar conocimientos:

• Sistemas de diagnosis. Que siguen un proceso de búsqueda de las razones del


funcionamiento incorrecto de un sistema a partir de la información disponible en la
base de datos. Aquí se podrían tener en cuenta tanto aplicaciones de diagnóstico
médico como de averías, en el primero de los casos existen antecedentes sólidos:
FLUIDEX, EACH, TROPICAID, SPHINX, y MYCIN (desarrollado a mediados de
1970) es el más representativo.

• Sistemas de pronóstico. Que deducen consecuencias posibles a partir de una


situación. Su objetivo es determinar el curso del futuro en función de información
sobre pasado y presente. Esto abarca diversos problemas, tales como predicciones
meteorológicas, predicciones demográficas, o incluso previsiones de la evolución
bursátil entre otros. Quizá la aplicación más conocida sea PROSPECTOR, un
sistema para la evaluación de emplazamientos geológicos.

• Sistemas de planificación. Que establecen una secuencia de acciones a realizar


encaminadas a la consecución de una serie de objetivos. En esta área, destaca la
simulación donde se busca representar un estado real y evaluar distintas variables
para determinar caminos óptimos. Los planes y las decisiones en la producción se
desarrollan y llevan a cabo en un mundo de representaciones simbólicas de hechos
y conjeturas, muchas de las cuales no están informatizadas y representan la
3. Sistemas expertos 35

experiencia y el conocimiento de expertos. En cada estadio de los procesos de


planificación, decisión y control para las operaciones de producción, sea ésta
automatizada o no, las personas expertas son las que asesoran, localizan los fallos
y dirigen. Ellas son las que ayudan a interpretar la multitud de datos procedentes de
los departamentos de diseño, de la planta de producción y de los representantes de
los clientes, observan modelos procesables en dichos datos, prueban mentalmente,
y con ordenadores, posibles líneas de acción, recomiendan las medidas que la
gerencia debe tomar y ayudan luego a poner en marcha sistemas pensados para
conseguir planificaciones mejores, operaciones más fluidas y una competencia más
efectiva. Los Sistemas de planificación ofrecen procedimientos informatizados para
perfeccionar la toma de decisiones de la gerencia por medio de la combinación del
conocimiento que poseen los expertos acerca del tipo de acciones que tiene que
efectuar y la forma y el tiempo en que debe llevarlas a cabo con la permanencia,
lógica, memoria y velocidad de cálculo del ordenador.

El común denominador de estos sistemas radica en la forma en que utilizan las bases
de datos, manipulando la información existente para aplicarla a soluciones que van
desde sencillas inferencias hasta complejos procesos de representación mediante el
uso de la lógica.

3.2.1 Conceptos básicos

Sistema experto como su nombre lo dice es un sistema computarizado que emula el


proceso de razonamiento de un experto humano en un área o campo especifico. Los
programas convencionales utilizan datos exactos lo que es una indudable ventaja de los
computadores. Esta clase de datos se denomina conocimiento factual o preciso.

Los humanos usamos una mezcla de ese conocimiento factual y de conocimiento


heurístico (o sea la intuición lógica), que es una indisputable ventaja de los humanos.
Los sistemas expertos tratan de emular ese conocimiento heurístico, lo que los hace
superiores a los programas convencionales ya que pueden tratar con datos “inciertos”,
3. Sistemas expertos 36

o sea no precisos. Básicamente el Sistema Experto esta compuesto por los siguientes
módulos:

1. Base de conocimientos: Consiste en las reglas, procedimientos y datos intrínsecos


al área del problema. Generalmente se construye a través de consulta con uno o
varios expertos del área, para incluir el conocimiento heurístico, manuales, etc. La
base, contiene el conocimiento del sistema con respecto a un tema específico para
el que se diseña el sistema. Este conocimiento se codifica según una notación
específica que incluye reglas, predicados, redes semánticas, frames y objetos.

2. Motor de inferencia: Es el mecanismo usado para extraer el conocimiento de la


base de conocimientos, para alcanzar una solución o conclusión determinada.
Combina los hechos y las preguntas particulares, utilizando la base de
conocimiento, seleccionando los datos y pasos apropiados para presentar los
resultados.

3. Interface con el usuario: Es el medio de comunicación entre el sistema experto y el


usuario.

3.3 Sistemas expertos y Bases de datos Inteligentes

Aunque el desarrollo de un sistema experto esta claramente influenciado por los


métodos de representación del conocimiento aplicados a SGBD no cuentan con todas
las capacidades de gestión de éstos. Para los efectos de nuestro estudio, la
arquitectura de los sistemas expertos, constituye el eje sobre el que se ha de construir
el modulo de gestión de base de conocimientos, esto es, la gestión de procesos
deductivos de la base de reglas que opera sobre la base de datos.

Técnicamente en una BDI converge la arquitectura de un SE y sistemas basados en


conocimiento por lo que para en su desarrollo se incluye como aspecto fundamental la
programación del conocimiento (figura 6), la cual hace uso de la representación
3. Sistemas expertos 37

explícita del conocimiento a utilizar por el sistema y de su interpretación y manipulación


lógica por medio de mecanismos de inferencia, que permitan deducir nuevo
conocimiento a partir del que ya se conoce.

Figura 6. Aspectos a considerar en la programación de SE.

La programación basada en lógica brinda las capacidades de responder a preguntas


que no se pueden atacar fácilmente con los lenguajes de manipulación de datos de la
programación procedimental. Aunque la creación de vistas es similar al uso de reglas
para definir bases de datos en intenso, éstas no son tan poderosas como las reglas
lógicas. En particular, los lenguajes relacionales no pueden expresar consultas
recursivas que son a menudo útiles para formular consultas complejas (las
interrelaciones transitivas tales como la jerarquía entre partes, las listas de ancestros y
las jerarquías de dirección por ejemplo).
4. Arquitectura de una BDI 38

4. Arquitectura de BDI

4.1 Fundamentos

En el presente capítulo, abordaremos en forma somera los principales indicadores


teóricos que conceptualizan la IA (Inteligencia Artificial) vinculados con los alcances de
nuestra investigación.

Una buena definición de IA es algo elusiva y controversial, fundamentalmente porque la


inteligencia humana no está completamente entendida. Cada libro de texto en IA
propone una definición que enfatiza las diferentes perspectivas que, cada autor cree,
encierra el campo. A continuación se transcriben algunas de ellas:

“La IA es una rama de la ciencia de computación que comprende el


estudio y creación de sistemas computarizados que manifiestan cierta
forma de inteligencia: sistemas que aprenden nuevos conceptos y
tareas, sistemas que pueden razonar y derivar conclusiones útiles
acerca del mundo que nos rodea, sistemas que pueden comprender un
lenguaje natural o percibir y comprender una escena visual, y sistemas
que realizan otro tipo de actividades que requieren de inteligencia
humana”.

“La IA es una ciencia que trata de la comprensión de la inteligencia y


del diseño de máquinas inteligentes, es decir, el estudio y la simulación
de las actividades intelectuales del hombre (manipulación,
razonamiento, percepción, aprendizaje, creación)”.

“La IA es el estudio de las computaciones que permiten percibir,


razonar y actuar”.

“La IA es un campo de estudio que busca explicar y emular el


comportamiento inteligente en términos de procesos computacionales”.

“La IA estudia las representaciones y procedimientos que


automáticamente resuelven problemas usualmente resueltos por
humanos”
4. Arquitectura de una BDI 39

A pesar de la diversidad de conceptos propuestos para la IA, en general todos


coinciden en que la IA trata de alcanzar inteligencia a través de la computación. Toda
computación, requiere de una representación de cierta entidad y de un proceso para su
manipulación.

Desde el punto de vista de los objetivos, la IA puede considerarse en parte como


ingeniería y en parte como ciencia:

Como ingeniería, el objetivo de la IA es resolver problemas reales, actuando como un


conjunto de ideas acerca de cómo representar y utilizar el conocimiento, y de cómo
desarrollar sistemas informáticos.

Como ciencia, el objetivo de la IA es buscar la explicación de diversas clases de


inteligencia, a través de la representación del conocimiento y de la aplicación que se da
a éste en los sistemas informáticos desarrollados.

Para usar la IA se requiere una comprensión básica de la forma en que se puede


representar el conocimiento y de los métodos que pueden utilizar o manipular ese
conocimiento.

Desde el punto de vista de ingeniería, la mayor parte del trabajo requerido para
construir sistemas de IA, está basado en el desarrollo de adecuadas representaciones
de conocimiento y sus correspondientes estrategias de manipulación.

4.2 Descripción

Las aplicaciones de mayor impacto que han surgido de la Inteligencia Artificial se


concentran en los Sistemas Basados en Conocimiento. Desafortunadamente, estos
sistemas son útiles en función de la validez de su conocimiento, además de que su
construcción es un proceso complejo y costoso. A su lado, los SGBD relacionales
4. Arquitectura de una BDI 40

han evolucionado hasta consolidar una robusta plataforma altamente funcional y


económica, con un alto grado de penetración en distintos mercados: los sistemas de
bases de datos conllevan la automatización de cada vez más actividades reduciendo
costos y mejorando la calidad de desempeño, por ello, importantes grupos de
investigadores han concentrado sus esfuerzos en el diseño y desarrollo de
herramientas informáticas que apoyen el descubrimiento de conocimiento y exploten la
experiencia, en dichos sistemas.

En muchas áreas del saber, el conocimiento se ha venido obteniendo por el clásico


método hipotético deductivo de la ciencia positiva. En él es fundamental el paso
inductivo inicial: a partir de un conjunto de observaciones y de unos conocimientos
previos, la intuición del investigador le conduce a formular la hipótesis. Esta “intuición”
resulta inoperante cuando no se trata de observaciones aisladas y casuales, sino de
millones de datos almacenados en soporte informático.

En el fondo de todas las investigaciones sobre inducción en bases de datos subyace la


idea de automatizar ese paso inductivo. Las técnicas de análisis estadístico,
desarrolladas hace tiempo, permiten obtener ciertas informaciones útiles, pero no
inducir relaciones cualitativas generales, o leyes que enuncien su comportamiento; para
esto se requieren técnicas de análisis inteligente que todavía no han sido claramente
establecidas. Por ello, se incrementa de forma continua la diferencia existente entre la
cantidad de datos disponibles y el conocimiento extraído de los mismos. Cada vez más
investigaciones dentro de la inteligencia artificial están enfocadas a la inducción de
conocimiento en bases de datos. Consecuencia de esta creciente necesidad ha
aparecido un nuevo campo de interés: la minería de datos (data mining), que incluye
nuevos métodos matemáticos y técnicas siftware ("sift", que puede traducirse como
escuadriñar, cernir, etc.) para análisis inteligente de datos.
4. Arquitectura de una BDI 41

La minería de datos surge a partir de sistemas de aprendizaje inductivo en


ordenadores, al ser aplicados a bases de datos, y su importancia crece de tal forma que
incluso es posible que, en el futuro, los sistemas de aprendizaje se usen de forma
masiva como herramientas para analizar datos a gran escala.

Se denomina descubrimiento de conocimiento en bases de datos (Knowdlege Discovery


in Database) al proceso global de búsqueda de nuevo conocimiento a partir de los
datos de una base de datos. Este proceso incluye no sólo el análisis inteligente de los
datos con técnicas de minería de datos, sino también diversos pasos previos de regular
complejidad, como el filtrado y preprocesado de los datos, y los posteriores, como la
interpretación y validación del conocimiento extraído en que se involucran técnicas de la
ingeniería del conocimiento.

En el esquema operativo de la minería de datos se distinguen -en razón directa de su


implementación sobre SGBD relacionales activos- dos arquitecturas básicas: la primera
de ellas enfocada al descubrimiento de conocimiento mediante búsquedas exhaustivas
de características “interesantes” en el total de la BDD, por ejemplo un comportamiento
irregular en un dominio particular: descenso o incremento de los valores que
habitualmente los compone; la segunda -en que sustentamos nuestra tesis- que opera
con un propósito específico atendiendo un conjunto de reglas predefinidas y operando
en un marco finito (segmentos de la BDD), para la solución de problemas particulares o
la estructuración de conocimiento en lenguaje de alto nivel, obtenida sobre dominios
finitos ( v. fig. 7).

Normalmente el término minería de datos lo usan estadísticos, analistas de datos, y la


comunidad de sistemas de gestión de información, mientras que KDD es más utilizado
en inteligencia artificial y aprendizaje en ordenadores.
4. Arquitectura de una BDI 42

Fig. 7 KDD en un dominio finito.

En las bases de datos inteligentes [BDI] se pretende capitalizar tanto la evolución e


integración de las bases de datos relacionales activas, como las técnicas avanzadas
para el almacenamiento, recuperación y procesamiento de la información en el área de
los sistemas expertos e inteligencia artificial.

Fundamentalmente, una BDI, deberá ser capaz de deducir hechos a partir de la base
de datos aplicando axiomas deductivos o reglas de inferencia a esos hechos.

La eficiente implementación de una BDI, precisa del desarrollo de un sistema que


posea la capacidad de gestionar conocimiento complejo a través del procesamiento de
datos simples, provenientes tanto de ficheros controlados de forma autónoma como de
un SGDB (v.fig.8), incorporar la capacidad de utilizar la experiencia en un dominio
particular de aplicación para resolver clases de problemas dentro del dominio.
4. Arquitectura de una BDI 43

Fig. 8 Procesamiento de datos en una BDI.

Su principal objetivo es permitir al usuario manipular el contenido de su base de datos


de manera transparente, ofreciéndole herramientas para extraer conocimientos a partir
del análisis del contenido de sus datos, interrelacionar información proveniente de
diversas fuentes usando medios diversos, usar conocimientos y hacer inferencias para
facilitar la recuperación y visualización de la información, apoyando la toma de
decisiones y ofreciendo una alternativa para representar y manipular la semántica de
las aplicaciones avanzadas.

Los principales pasos dentro del proceso interactivo e iterativo del KDD pueden verse
en la figura 8, y son los siguientes:

1. Desarrollo y entendimiento del dominio de la aplicación, el conocimiento relevante y


los objetivos del usuario final. Este paso requiere cierta dependencia usuario/analista,
pues intervienen factores como: conocer los cuellos de botella del dominio, saber qué
partes son susceptibles de un procesado automático y cuáles no, cuáles son los
objetivos, los criterios de rendimiento exigibles, para qué se usarán los resultados que
se obtengan, compromisos entre simplicidad y precisión del conocimiento extraído, etc.

2. Creación del conjunto de datos objetivo, seleccionando el subconjunto de variables o


ejemplos sobre los que se realizará el descubrimiento. Esto implica consideraciones
4. Arquitectura de una BDI 44

sobre la homogeneidad de los datos, su variación a lo largo del tiempo, estrategia de


muestreo, grados de libertad, etc.

3. Preprocesado de los datos: eliminación de ruido, estrategias para manejar valores


ausentes, normalización de los datos, etc.

4. Transformación y reducción de los datos. Incluye la búsqueda de características


útiles de los datos según sea el objetivo final, la reducción del número de variables y la
proyección de los datos sobre espacios de búsqueda en los que sea más fácil encontrar
una solución. Este es un paso crítico dentro del proceso global, que requiere un buen
conocimiento del problema y una buena intuición, y que, con frecuencia, marca la
diferencia entre el éxito o fracaso de la minería de datos (paso 7).

5. Elección del tipo de sistema para minería de datos. Esto depende de si el objetivo del
proceso de KDD es la clasificación, regresión, agrupamiento de conceptos (clustering),
detección de desviaciones, etc.

6. Elección del algoritmo de minería de datos

7. Minería de datos. En este paso se realiza la búsqueda de conocimiento con una


determinada representación del mismo.

8. Interpretación del conocimiento extraído, con posibilidad de iterar de nuevo desde el


primer paso. La obtención de resultados aceptables dependerá de factores como:
definición de medidas del interés del conocimiento (de tipo estadístico, en función de su
sencillez, etc.) que permitan filtrarlo de forma automática, existencia de técnicas de
visualización para facilitar la valoración de los resultados o búsqueda manual de
conocimiento útil entre los resultados obtenidos.
4. Arquitectura de una BDI 45

9. Consolidación del conocimiento descubierto, incorporándolo al sistema, o


simplemente documentándolo y enviándolo a la parte interesada. Este paso incluye la
revisión y resolución de posibles inconsistencias.

4.3 Arquitectura

Los SGBD Inteligentes no existen como tales, por lo que en la arquitectura de una base
de datos inteligente intervienen múltiples factores y condicionales derivadas de las
estrategias que el programador decida implementar y las necesidades del sistema a
desarrollar, sin embargo, en el grueso de los estudios enfocados al desarrollo de un
sistema inteligente de bases de datos, se distingue como objetivo de la intetfaz:
proporcionar consejo y apoyo a la toma de decisiones, ofrecer opiniones informadas y
explicación de sus razonamientos, además, deberá permitir que el directivo u operador
manipule grandes volúmenes de información entre los que encontramos ejemplos,
reglas, heurísticas, hechos e incluso modelos de predicción con probabilidades de
certeza. Los beneficios son amplios y múltiples, por ejemplo la reducción en el tiempo
de toma de decisiones, apoyo a la toma de decisiones basada en hechos, el
mejoramiento del desempeño de personal no experto, la acelerada capacitación de
personal mediante tutores, flexibilidad y apoyo a la reorganización y la reingeniería, el
mejor diagnóstico de fallas, el mejor mantenimiento, la optimización de tiempos y
movimientos, el mejor servicio, y la retención del conocimiento y experiencia
corporativa; para ello, considerando el desarrollo de una BDI sobre un motor relacional,
el sistema -regularmente- integrará:

1. Una base de datos relacional. Base principal en la que se concentra en diversas


tablas el total de datos útiles del sistema.

2. Una base de conocimiento dinámica. Base en intenso, constituida de selección


de tuplas involucradas en un proceso de inferencia particular.
4. Arquitectura de una BDI 46

3. Módulos de Preproceso. Enfocados al tratamiento de los datos inciertos en la


base persistente. (Lógica fuzzy y multivaluada)

4. Una base de reglas. Estructuran los procesos de inferencia en marcos de


operación determinados.

5. Módulos de acceso binario. Cuando intervienen procesos de selección y filtrado


para los que no se estructura un campo clave, precisamos de archivos binarios a
los que el sistema acceda en forma eficiente y rápida.

La inteligencia en una base de datos, no está necesariamente relacionada con la


estructura de la BDD, sino en la explotación que el sistema pueda hacer de éstos. Así
una BDI puede estar soportada en SGBD comerciales, siempre que cuente con un
módulo lógico o extensión lógica, desarrollada en el lenguaje anfitrión, o en un lenguaje
de programación lógica, para implementar la inteligencia del sistema. Esta extensión se
aplica fundamentalmente en el lenguaje para la manipulación (DML) de datos (en el
caso de una BDI no soportada en SGDB, su arquitectura implica la creación de DDL y
DML), esta extensión deberá crear funciones y procedimientos particulares, de las que
se espera:

• Descubrimiento de conocimiento y búsquedas inteligentes. Integrando técnicas


de inteligencia artificial para extraer conocimiento a partir del análisis de los datos,
la mayoría de los lenguajes anfitriones incorporan estructuras de control sobre las
que se pueden implementar (Computación evolutiva e IPL).

• Tratamiento de la Incertidumbre. Procesamiento lógico de condicionales: datos


inexistentes, inaplicables, desconocidos, indefinidos, etc. (Conocimiento con
incertidumbre)

Para los efectos de nuestro estudio, nos ocuparemos de la arquitectura basada en los
4. Arquitectura de una BDI 47

estudios sobre transformación de problemas ILP (Programación Lógica Inductiva) a


formato proposicional, la mecánica de transformación se basa en la idea de convertir
conjuntos de datos del formato relacional a formato proposicional, y, si es el caso,
volver a convertir el conocimiento obtenido a formato relacional.

La forma de pasar de formato relaciona1 a formato proposicional consiste en crear una


nueva relación, extendiendo cada tupla de la relación objetivo con un atributo adicional
para cada posible literal (combinando cada predicado de la base de datos en intenso
con cada variable del consecuente).

En este proceso, el sistema deberá seleccionar de la base persistente, tuplas


procedentes de una o diversas tablas, filtrar (en el caso de que exista incertidumbre,
mediante lógica fuzzy o multivaluada), ordenar y crear la base en intenso, con los
campos precisos para la sustituir con sus valores las variables en el formato
proposicional; el motor de inferencia operará sobre éstos (base en intenso, o base de
conocimiento) aplicándoles el conjunto de reglas pertinentes (base de reglas), para
determinar la solución a un problema determinado, creando una nueva relación,
informando resultados o - en su caso- modificando la base de datos persistente.

Fig. 9 Arquitectura Relacional-ILP


4. Arquitectura de una BDI 48

La base en intenso, en el sistema propuesto, puede edificarse en -por lo menos dos


formatos físicos (el formato proposicional, es persistente en ambos): un archivo plano
(dbintdb) o mediante un objeto (Table) del lenguaje anfitrión. El formato físico -en cada
caso- dependerá de la base de reglas y la naturaleza del motor de inferencia:

Formato 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
4. Arquitectura de una BDI 49

y metodologías adecuadas, poder extraer resultados útiles en diversos sentidos. El


modelado puede efectuarse apoyándose en las leyes físicas que rigen, bajo
condiciones determinadas, las interacciones entre los diversos subsistemas que
componen el proceso, e inclusive pueden obedecer a relaciones= empíricas elaboradas
como fruto de la observación y la experiencia (relaciones estadísticas, borrosas, etc.).
Las relaciones pueden poseer carácter estático cuando no interviene el tiempo como
parámetro modelador, o dinámico cuando dependen de éste. La extracción de
resultados de un modelo está asociada a la determinación de valores paramétricos de
variables conocidas como variables de estado del proceso, estos valores obedecen al
conjunto de restricciones que definen el proceso y que configuran el espacio de
soluciones viables.

En este universo, múltiples algoritmos genéticos o evolucionistas basados en la


existencia de un universo de acción (espacio finito de la base persistente), en que un
agente o entidad lógica parte de su conocimiento sobre los hechos inmediatos
(conocimiento base, existente en las relaciones persistentes) y puede, en caso de que
verifique relaciones base sobre un requerimiento particular, evolucionar ampliando
dicho conocimiento mediante un proceso de inferencia lógica fundamentalmente
heurístico. Dichos algoritmos se pueden edificar a partir de la programación lógica
inductiva (Inductive Logic Programming ILP), que describiremos brevemente.

La programación lógica inductiva se define como la intersección entre el aprendizaje


inductivo y la programación lógica. Esto es así porque utiliza técnicas de ambos
campos:

• Del aprendizaje inductivo en los ordenadores hereda su objetivo: desarrollar


herramientas y técnicas para inducir hipótesis a partir de observaciones (ejemplos) y
sintetizar nuevo conocimiento a partir de la experiencia.

• De la programación lógica hereda básicamente el formalismo de representación y su


4. Arquitectura de una BDI 50

orientación a la semántica. La ILP utiliza la programación lógica como mecanismo para


representar las hipótesis y las observaciones, superando así dos de las principales
limitaciones de las técnicas clásicas de aprendizaje en ordenadores: la rigidez en la
representación del conocimiento (v. Cap. 1) y la dificultad para expresar conocimiento
de base (background knowledge).

En los sistemas de aprendizaje de orden - 0 el conjunto de entrenamiento consta de


vectores de valores, cada uno perteneciente a una clase conocida. El conckimiento
inducido permite definir clases en función del valor de los atributos, siendo
representable con expresiones de la lógica de proposiciones. En ocasiones, se
representa en forma de árbol de decisión: ID3, C4.5, etc. y a veces en forma de reglas:
PRISM, C4.5 rules, etc. Por el contrario, en los sistemas de aprendizaje de primer
orden, el conjunto de entrenamiento lo forman relaciones definidas de forma
extensional, y el conocimiento de base lo constituyen otras relaciones, definidas
intensionalmente: El objetivo del aprendizaje es, en estos sistemas, la construcción de
un programa lógico que defina de forma intensional una relación objetivo (extensional)
del conjunto de entrenamiento. En este tipo de definiciones lógicas se permite la
recursión y algunos cuantificadores, muy útiles cuando se trabaja con objetos
estructurados, difíciles de describir en un formato objeto-atributo-valor.

Se puede considerar la programación lógica inductiva como la búsqueda de cláusulas,


consistentes con los ejemplos de entrenamiento, en lenguaje de primer orden. Dentro
del espacio de todas las posibles cláusulas, se puede definir una ordenación entre ellas,
dada por la relación de generalización (una cláusula es más general que otra cuando
cubre un superconjunto de las tuplas cubiertas por la segunda). Según sea el método
con el que se recorre el espacio de posibles cláusulas, podemos distinguir varias
técnicas: generalización relativa menos general, resolución inversa, búsqueda de grafos
refinados, modelos de reglas, transformación del problema a formato proposicional, etc.
4. Arquitectura de una BDI 51

a. Generalización relativa menos general

La generalización menos general (least general generalization) de Plotkin se basa en la


idea de que si dos cláusulas c 1 y c 2 son ciertas, la generalización más específica
común a ambas Igg(c 1 c 2) será también cierta con bastante plausibilidad. Esto permite
realizar generalizaciones de forma conservadora. A las técnicas de generalización a
partir de los datos se las denomina también técnicas de búsqueda de abajo hacia arriba
(bottom-up). La generalización menos general de dos cláusulas (que puedan
generalizarse) es el resultado de aplicar la generalización menos general a cada par de
literales de ambas, tanto en el antecedente como en el consecuente. Para cada par de
literales, esta operación se realiza comparándolos y sustituyendo por variables los
atributos que no coincidan. Por ejemplo:

c 1 = enfermo (pedro) :-
hijo-de(pedro, juan),
fumador(juan)
c 2 = enfermo (alberto) :-
hijo-de(alberto, josé),
fumador(josé)
Igg(c 1 , c 2) = enfermo(X) :-
hijo-de(X, Y),
fumador(Y).

La generalización relativa menos general (rigg) de dos cláusulas, es la generalización


menos general de ambas, relativa a cierto conocimiento de base. La rigg es la técnica
en que se basa el sistema GOLEM. Normalmente, el número de literales de una rigg
crece al menos de forma exponencial con el número de ejemplos existentes. Por ello,
GOLEM utiliza restricciones que evitan la introducción de literales redundantes, aunque
aún así el número de ellos suele ser grande. Existen sistemas que combinan técnicas
de búsqueda de abajo hacia arriba (generalización menos general, como hace GOLEM)
4. Arquitectura de una BDI 52

con técnicas de arriba hacia abajo (especialización por introducción de nuevos literales,
como FOIL).

b. Resolución inversa

La idea básica de la resolución inversa (inverse resolution) consiste en invertir la regla


de resolución, de la inferencia deductiva, obteniendo así un método de generalización.

Aplicada en lógica proposicional, la resolución establece que (silogísmo hipotético)


dadas las premisas p v q y 9 v r, se deduce que p v r. En lógica de predicados de primer
orden, la resolución requiere sustituciones de variables por valores de atributos. La
resolución inversa utiliza un operador de generalización basado en invertir la
sustitución.

Por ejemplo, dados los hechos:

b1 = enfermo(pedro)
b2 = hijo-de(pedro, juan)
b3 = fumador(juan)

tomando b1 y b2, y la sustitución inversa ql -1 = {pedro/Y} se obtiene:


cl = enfermo(Y) :- hijo-de(Y, juan)
tomando ahora cl y b3, y la sustitución inversa q2 -1 = {Juan/X} se obtiene:
c2 = enfermo(Y) :- hijo-de(Y, X), fumador(X).

c. Búsqueda en grafos refinados

La principal técnica de especialización en ILP es la búsqueda de arriba a abajo (top-


down search) en grafos refinados (refinement graphs). Los sistemas que utilizan esta
4. Arquitectura de una BDI 53

técnica, comienzan con la cláusula más general, a la que aplican especializaciones


hasta que sólo cubra tuplas positivas.

Fig. 10 Grafos refinados.

Se denominan grafos refinados porque las operaciones de especialización (refinado)


que se realizan durante la búsqueda se pueden representar en un grafo acíclico y
dirigido (fig. 10). En este grafo, cada nodo representa una cláusula (el nodo superior es
la cláusula más general) y cada arco representa una operación de especialización
(sustitución de una variable por una constante, o incremento de un nuevo literal en la
cláusula en construcción). La búsqueda dentro de éste grafo suele ser heurística,
debido a que se produce una explosión combinatoria en el conjunto de posibles
especializaciones, que hace inabordable la búsqueda exhaustiva.

d. Patrones de reglas.

Se denominan patrones de reglas a un tipo especial de reglas en las que los predicados
son variables. La búsqueda de reglas se realiza a partir de los patrones de reglas
existentes, proporcionados por el usuario. Para cada patrón de regla se prueban todas
las posibles combinaciones de predicados existentes y, cada una de las reglas así
4. Arquitectura de una BDI 54

obtenidas, se evalúa con los datos de entrenamiento. Por ejemplo, con un patrón de
reglas de la forma:
P(X) :- R(X,Y), Q(Y)
se podría obtener, por ejemplo, la regla
enfermo(X)
hijo-de(X,Y),
fumador(Y).

e. Cláusulas

Normalmente el objetivo de los sistemas de ILP es la inducción de reglas que definan


ciertos predicados. Estas reglas deberían ser lo suficientemente precisas como para
poder reemplazar a los ejemplos de la base de datos y que éstos fueran deducidos a
partir de las mismas. Pero puede considerarse un enfoque diferente, conocido como
ILP no monótono, que consiste en la búsqueda de restricciones dentro de la base de
datos.

Estas restricciones pueden tener la forma de una cláusula en lógica de predicados de


primer orden:

padre-de(X,Y) v madre-de(X,Y) :- progenitor-de(X,Y)


progenitor-de(X,Y) :- padre-de(X,Y)
falso :- padre-de(X,Y), madre-de(X,Y)

La última de ellas se interpreta como que una persona no puede ser a la vez padre y
madre de otra.

4.3.2 Conocimiento con incertidumbre

La incertidumbre está asociada, de forma inseparable, con la información. Aunque


existen diferentes formas de incertidumbre, cabe destacar la que se produce como
4. Arquitectura de una BDI 55

consecuencia de la imprecisión y subjetividad propias de la actividad humana. En


muchas ocasiones sacrificamos parte de la información precisa disponible por otra más
vaga pero más robusta, lo que permite manejar de forma eficiente la complejidad
asociada al mundo real.

Muchos de los conceptos manejados habitualmente son, en sí mismos, vagos o


borrosos, es decir, sus límites no están perfectamente determinados, y no por ello
carecen de significación. La lógica borrosa y la teoría de conjuntos borrosos ofrecen un
método natural para representar esa imprecisión y subjetividad humanas.

El tratamiento de la incertidumbre es un rasgo típico de las aplicaciones en que se


involucra la inteligencia artificial; aplicada al desarrollo de SGBD, la incertidumbre se
centra en el tratamiento de dos indicadores fundamentales:

• Datos inciertos o difusos.


• Datos desconocidos o condicionales.

Los primeros se caracterizan por formas verbales indeterminadas que representan


rangos heurísticos de valor (alto, muy alto, a menudo, etc.); los segundos, denominados
valores nulos. Ambos constituyen uno de los problemas teóricos más importantes en las
bases de datos con el consecuente impacto en la construcción de aplicaciones. Motro
propone clasificar la incertidumbre en diversos tipos:

- incertidumbre propiamente dicha: cuando no es posible determinar si una


aserción es cierta o falsa; por ejemplo, no estamos seguros de que “Juan tenga
30 años”.
- imprecisión: la información no es tan específica como debería ser: “Juan tiene
entre 30 y 40 años”, “Juan no tiene más de 40 años”.
- vaguedad: conocimiento del estilo de “Juan pertenece a la tercera edad”.
4. Arquitectura de una BDI 56

- inconsistencia: cuando el modelo tiene dos o más aserciones que no pueden


ser ciertas, por ejemplo, “Juan tiene entre 37 y 45 años” y “la edad de Juan es
34”.
- ambigüedad: si algunos elementos del modelo no poseen una semántica
completa, dando lugar a distintas interpretaciones. Esto suele producirse al
establecer magnitudes sin especificar su unidad de medida.

Este autor señala que hasta ahora se ha intentado solucionar los casos de
incertidumbre no dejando almacenar cierta información o mediante los valores nulos;
por lo que propone incluir nuevas técnicas en los SGBD como los factores de
incertidumbre que se emplean en los Sistemas de Recuperación de la Información o en
los Sistemas Expertos, y la lógica borrosa (fuzzy). En esta misma línea se encuentra
Johnston, que propone una lógica multivaluada “reglamentada” a la que se le añaden
“áreas de la lógica que van más allá de la lógica proposicional y de predicado de primer
orden”, como pueden ser: la lógica modal, la lógica no monotónica y la lógica funcional
no verdadera.

4.3.2.1 Tratamiento de los valores inciertos.

El tratamiento de los valores difusos en las BD relacionales implica la creación de un


mecanismo capaz de expresar la incertidumbre en valores numéricos, para ello existen
distintos algoritmos, la mayoría derivados de la lógica difusa (fuzzy logic), basada en la
Teoría de Conjuntos Difusos, donde un elemento no necesariamente pertenece o no
pertenece a un conjunto, sino que hay un continuo de “grados de pertenencia”. El grado
de pertenencia a un conjunto(p), y puede tomar valores entre 0 y 1.
4. Arquitectura de una BDI 57

Fig. 11 Lógica Fuzzy.

Podemos denotar esto como: µ.A(x) → [0,1]. A µ también se le conoce como el “valor
de verdad” porque representa el grado en que una proposición es verdadera. Mediante
esta herramienta podemos asignar distintos valores considerando las posibilidades
_
explícitas del atributo (Universo de discurso [Ω]), así un conjunto difuso Λ sobre un
_
universo de discurso Ω, es un conjunto de ares: Λ = {x; µA(x): x ∈ Ω; µA(x) ∈ [O,1]},
_
donde µA(x) se denomina grado de pertenencia de x a Λ. Existen múltiples
representaciones de conocimiento difuso mediante la lógica fuzzy, para los efectos de
nuestro estudio, tan sólo describiremos aquéllas posibles asignaciones de valor
operando sobre datos concretos, así las etiquetas lingüísticas aplicadas corresponden
al dominio específico (columnas) que se trate por ejemplo:

1. Escalar simple. Por ejemplo Aptitud=buena; representado mediante la distribución


de posibilidad 1 /buena.

2. Número simple. Por ejemplo Edad=28; representado mediante la distribución de


posibilidad 1128.

3. Conjunto de posibles asignaciones excluyentes de escalares. Por ejemplo Aptitud =


{buena; mala}, expresado por {1 /mala; 1 /buena}.

4. Conjunto de posibles asignaciones excluyentes de números. Por ejemplo


Edad={20;21 }; representado mediante { 1/20; 1/21}.
4. Arquitectura de una BDI 58

5. Distribución de posibilidad en el dominio de los escalares. Por ejemplo


Aptitud={0.6/mala; 0. 7/regular}.

6. Distribución de posibilidad en el dominio de los números. Por ejemplo


Edad={0.4/23;1.0124;0. 8/25}.

7. Número real ∈ [0,1] representando grados de cumplimiento. Por ejemplo


Calidad=0.9

Adicionalmente se consideran los valores desconocidos, indefinidos o nulos, sin


embargo, en nuestro estudio nos ocupamos de ellos mediante la lógica multievaluada
que se expone en forma exhaustiva en objetivos posteriores.

Evidentemente, el universo de los conjuntos difusos es amplio, nuestro estudio sólo


recupera algunas de sus formas y técnicas básicas en virtud de que en el SGBD
relacional, la implementación de un diccionario de datos en que se clasifiquen los
estados de pertenencia restringiendo su forma verbal en una relación simple(opciones
predefinidas), constituyen un modelo difusor universal, de esta forma, el usuario del
sistema expresa un estado determinado como valor, y el sistema, tanto en el motor
relaciona1 como el de inferencia, opera con el producto asociado.

Una vez que se asignen los valores asignados por lógica difusa a las tupias que
corresponda, su tratamiento dependeran -en cada caso- del proceso que las requiera y
serán operadas en forma convencional por el grado de pertenencia asociado.
4. Arquitectura de una BDI 59

Fig. 12. Restricción de formas verbales en relaciones simples.

En su forma inversa, el difusor ataca directamente el contenido de los campos con una
función de pertenencia (rango) y construye la base en intenso asignando etiquetas
lingüísticas determinadas: BAJA, ALTA, URGENTE..., Por ejemplo:

Sea R(T1,..., Tn), donde:

R(T1,T2,T3) con T1 (Id), T2(prioridad), T3 (lectura).

Dada una función de pertenencia:

Ii (0.3)
F(P)
Is (0.8)

Tenemos:

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


4. Arquitectura de una BDI 60

La estructura básica de un Sistema de Lógica Difusa se muestra en la figura 13. El


sistema recibe varias entradas numéricas y entrega varias salidas numéricas. El bloque
Difusor se encarga de convertir las entradas en conjuntos difusos, que son entregados
al bloque Máquina de Inferencia; este bloque, apoyado en un conjunto de reglas de la
forma IF... THEN... , produce varios conjuntos difusos para que el bloque Concresor los
tome y los convierta en etiquetas lingüísticas concretas.

Fig. 13 Estructura básica de un sistema de lógica difusa.

Cada una de las variables de entrada y de salida tiene una representación dentro del
Sistema de Lógica Difusa en forma de Variables Lingüísticas. Finalmente atendiendo
una de las recomendaciones generales sobre el diseño de SGBD relacionales, se
utilizará la lógica fuzzy exclusivamente en aquellos dominios que lo exijan o que
representen estados intermedios de procesos en desarrollo.

4.3.2.2 Tratamiento de la información desconocida o condicional

Si bien los valores nulos (también se le denomina “valor ausente o condicional”) no son
un concepto exclusivo del modelo relacional, ha sido en el contexto de este modelo
donde se ha abordado su estudio de manera más sistemática y donde se están
realizando más investigaciones a fin de formalizar su tratamiento. La necesidad de los
“valores nulos” o “marcas” en bases de datos es evidente por diversas razones:

- Crear tuplas con ciertos atributos desconocidos.


4. Arquitectura de una BDI 61

- Añadir un nuevo atributo (columna) a una relación (tabla) existente; atributo


que, en el momento de añadirse, no tendría ningún valor para las tuplas de la
relación.
- Atributos inaplicables a ciertas tuplas, por ejemplo, la editorial para un artículo
(ya que suponemos que un artículo no tiene editorial)

En la atención de estas necesidades se ha definido esquemas lógicos sensibemente


distintos a la lógica habitual, denominados lógica trivaluada y lógica tetravaluada.

a. Lógica trivaluada (L3V)

En las siguiente figura aparecen las tablas de verdad para la lógica trivaluada, donde
existen los valores C (cierto), F (falso) y Q (quizás). Además, se incluye un nuevo
operador denominado MAYE, que aplicado al valor de una expresión “quizás”, da como
resultado “cierto”.

AND C Q F OR C Q F NOT MAYBE


C C Q F C C C C C C C C
Q Q Q F Q C Q Q Q Q Q C
F F F F F C Q F F C F F
Tabla de verdad para la lógica trivaluada.

Adicionalmente se precisa introducir otros dos operadores especiales:

a) IS NULL, que toma el valor cierto si el operando es nulo y falso en caso contrario
b) IF NULL, que toma dos operandos y que devuelve el valor del primero, salvo que sea
nulo, en cuyo caso devuelve el valor del segundo.

En cuanto a las operaciones aritméticas- con valores- nulos, se considera nulo el


resultado de sumar, multiplicar, restar o dividir un valor nulo con cualquier otro valor.
4. Arquitectura de una BDI 62

Por lo que respecta a los operadores algebraicos, el producto cartesiano no se ve


afectado por la presencia de valores nulos, la restricción sólo devuelve aquellas tuplas
cuya condición se evalúa a “cierto” no ‘falso” ni “quizás”, y la proyección debe eliminar
tuplas duplicadas teniendo en cuenta los nulos, por lo que dos tuplas se considerarán
duplicadas si atributo a atributo son ambos iguales y no nulos, o ambos nulos.
Finalmente es muy importante considerar si los valores asignados en las tuplas van a
formar parte de operaciones de agregación con el fin de aplicar funciones estadísticas,
v.g. suma, varianza, media, etc., en cuyo caso determinar su uso o discriminar su
número.

En el lenguaje SQL las columnas admiten valores nulos a no ser que se especifique
NOT NULL, y se soporta la lógica trivaluada, cuyas tablas de verdad ya hemos
representado.

En SQL para determinar si un valor es nulo se utiliza el predicado NULL: <Nombre de


columna> IS NULL

También podemos combinar este predicado con el operador NOT:


<Valor> IS NOT NULL

Un aspecto a tener en cuenta es el comportamiento del predicado cuando opera sobre


más de una columna. En efecto: WHERE (col-x, col_y) IS NULL, será cierto si ambos
son nulos, mientras que: WHERE (col-x, col_y) IS NOT NULL, será cierto si ambos son
no nulos; existiendo otras dos variantes: WHERE NOT(col x, col-Y) IS NULL, que será
falso si ambos son nulos, pero cierto si alguno es nulo o lo son los dos, finalmente:
WHERE NOT(col x, coly) IS NOT NULL, será cierto si alguno o ambos son nulos, y
falso sólo si ninguno es nulo.

La expresión que juega el papel del operador IF NULL es la siguiente:


COALESCE(VaI1,Va12, Va13,.... Valn) que devuelve el valor1, si no es nulo, o el valor2,
o el valorn, salvo que todos sean nulos devolviendo entonces nulo.
4. Arquitectura de una BDI 63

Si en lugar de nulos se emplean valores por defecto, el lenguaje ofrece la posibilidad de


convertir el valor por defecto a nulo mediante la expresión NULLIF.

Por ejemplo: . . . WHERE NULLIF (año, -99) > 1980, que es equivalente a:

CASE WHEN año = -99


THEN NULL
ELSE año
END

Para comprobar si un predicado (o una combinación de éstos) es cierta, falsa o quizás


se utiliza:

p IS [NOT] TRAE
FALSE
UNKNOWN

este último (UNKNOWN) corresponde al operador MA YBE Así, por ejemplo, podemos
formular la siguiente consulta:

SELECT titulo
FROM libros
WHERE (año = 1996) IS UNKNOWN;

b. Lógica tetravaluada (L4V)

La lógica tetravaluada surge de la necesidad de diferenciar dos tipos importantes de


valores nulos: inaplicables, esto es, que no tienen sentido, de desconocidos aplicables,
es decir, que momentáneamente son desconocidos pero deberían existir y puede que,
4. Arquitectura de una BDI 64

en un determinado momento, lleguen a conocerse.

Esta diferencia, que puede parecer académica en exceso, es de hecho muy importante
para reflejar con más precisión la semántica del universo del discurso a tratar y para
responder de manera “más inteligente” a las consultas que se realicen sobre la base de
datos. En la lógica cuatrivaluada se distingue, por tanto, entre un valor nulo o marca
que representa información desconocida pero aplicable, que denominaremos α, de otro
que representa información inaplicable, que denominaremos β.

En este caso las operaciones aritméticas quedan modificadas como sigue, siendo ↔ un
operador aritmético y x un valor no nulo de la base de datos:

x↔α=α↔x=α
x↔β=β↔x=β
α↔β=β↔α=β
α↔α=α
β↔β=β

A continuación se muestran las tablas de verdad para la lógica cuatrivaluada, donde por
“A”(Aplicable) y por “I” (Inaplicable) se representan los valores de verdad de la lógica
cuatrivaluada, según CODD.

AND C A F I OR C A F I NOT
C C A F I C C C C C C F
A A A F I A C A A A A A
F F F F F F C A F F F C
I I I F I I C A F I I I

Lógica tetravaluada según CODD

El lenguaje SQL con que opera el motor relaciona1 Jet, no soporta aún la lógica
4. Arquitectura de una BDI 65

tetravaluada, por lo que se precisa una extensión del lenguaje de manipulación de


datos, implementada en el lenguaje anfitrión, considerando los siguientes indicadores:

1. Si el operador es AND y cualquier operando es falso el resultado es falso


2. Si el operador es OR y cualquier operando es cierto, el resultado es cierto

Si el resultado tiene definida una clase nula y uno o más operandos son nulos:

1. Si el operador es OR el resultado es el valor nulo que tiene la posición mayor, En


caso contrario, el resultado es el valor nulo que tiene la posición menor En cualquier
otro caso es resultado es el valor nulo general

Por otro lado, Gessert propone asociar a cada tabla de datos que pueda contener
valores nulos una “tabla de estados lógicos” que se corresponde fila a fila y campo a
campo a la tabla de datos y que posee las mismas claves. Mediante este esquema, la
tabla de datos no tendría valores nulos, y en la tabla de estados se almacenarían los
siguientes valores

NA inaplicable
AF que indica que es falso
AM que indica que es desconocido pero aplicable
AT que señala que es cierto

De forma que no sea necesario complicar el lenguaje de manipulación (con IS NULL, IS


UNKNOWN, etc.) sino que simplemente basta con consultar la tabla de estados.
Tampoco se requiere modificar la estructura de datos relaciona1 ni extender las
columnas para tener en cuenta la presencia del indicador de nulos. Es pues una
representación sencilla a base de metadatos.
5. Programación de una BDI 66

5. Programación de una BDI

5.1 Consideraciones generales

Como hemos citado; dada la arquitectura propuesta, el proceso de inferencia constituye


el nudo en la fase de intención del sistema, en este capítulo, abordaremos los
principales indicadores que propicien dicho inferencia, tanto si el proceso se verifica
mediante funciones del lenguaje anfitrión, como por un motor periférico. En principio,
nos ocuparemos de detallar las partes en común.

5.2 Las bases de datos persistente e intenso

La creación y manipulación de la base de datos persistente, así como la base de datos


en intenso, en el sistema propuesto, se efectúan a través de los diversos objetos
predefinidos que Visual Basic incorpora, centraremos nuestro interés en los objetos
RecordSet, Oatabase y los procedimientos para efectuar consultas a través de SQL.

5.2.1 RecordSet

Llamaremos RecordSet (DynaSets, SnapShot, Tables y Query) a un conjunto de


registros que cumplen una determinada condición y que pueden ser tratados como un
conjunto de tuplas, tenemos diferentes tipos de RecordSet con distintas propiedades,
estos se declaran como variables en el dominio del módulo o si es el caso como
variables globales:

• SnapShot es un RecordSet de sólo lectura.


• DynaSet es un tipo RecordSet que se lee al abrir y escribe en la base de datos al
ser cerrado.
• Tables es un RecordSet que contiene toda la información de la misma. El
RecordSet contiene todos los registros de la misma.
5. Programación de una BDI 67

• QueryDef es una consulta (Query) que se encuentra predefinida en la base de


datos.

1. Métodos

*Métodos asociados al Desplazamiento


MoveFirst GO TOP. Va al primer registro.
MoveNext SKIP. Avanza un registro.
MovePrevious SKIP -1. Retrocede un registro.
MoveLast GO BOTTOM. Va al último registro.

*Métodos asociados a la Búsqueda


FindFirst Localiza el primer registro que cumple una condición.
FindNext Localiza el siguiente registro que cumpla una condición.
FindPrevious Localiza el registro anterior que cumpla una condición.
FindLast Localiza el último registro que cumpla una condición.
Seek Busca un registro (en una tabla).

*Métodos para edición.


Addnew APPEND BLANK. Añade un registro.
Delete DELETE. Borra un registro.
Edit Edita un registro para ser modificado.
Update Actualiza la edición que hayamos hecho.
Close Cierra el RecordSet.
Clone Crea una copia del RecordSet.

*Métodos para obtener información del RecordSet


ListFields Lista campos. (Regresa SnapShots)
Listindexes Lista índices. (Regresa SnapShots)
5. Programación de una BDI 68

2. Objetos Contenidos

Fields Retorna un objeto con las definiciones de los campos.

3. Propiedades

BOF BOF(). Estamos al inicio del RecordSet.


EOF FOF(). Estamos al final del RecordSet.
BookMark Marca un registro .
RecordCount Número de registros en el SnapShot.
DateCreated Fecha de creación.
LastModified Fecha de última modificación.
LastUpdated Fecha de última actualización.
Filter SET FILTER TO. Para poner expresiones de filtro.
Index SET INDEX TO. Para saber o cambiar el índice activo en una
tabla.
Sort Determina la expresión por el que se ordenará el RecordSet.
NoMatch FOUND(). Regresa true si fracasa la búsqueda.
LockEdits Determina el tipo de bloqueo a usar.
Name Indica el nombre del RecordSet (tabla..).
Transactions True si la base soporta transacciones.
Updatable True si puedo modificar los datos del RecordSet.

5.2.2 Database Object

Mediante este objeto nos comunicaremos con la base de datos. Toda la jerarquía de
clases que comienza aquí, y para llamar a los métodos de los RecordSets, siempre
tendremos que pasar por un objeto database. En la inteligencia de simplificar,
agruparemos, por su funcionalidad, todos sus métodos, propiedades y funciones
relacionadas.
5. Programación de una BDI 69

1. Métodos

* Métodos Para obtener información de la estructura


ListTables Obtenemos un SnapShot con descripciones de las tablas
ListFields Obtenemos un SnapShot con información de los campos

* Métodos para crear y borrar consultas


CreateQueryDef Crea Querys (consultas) en la base de datos
DeleteQueryDef Borra Querys (consultas) de la base de datos

* Métodos para interactuar con los datos


Open Table Devuelve un objeto Table
CreateDynaset Devuelve un objeto DynaSet
CreateSnapshot Devuelve un objeto SnapShot
OpenQuerydef Devuelve un objeto QueryDef

* Método para cerrar la base de datos


Close Cierra la base de datos (elimina el objeto de memoria)

* Métodos involucrados en las transacciones


Begin Trans Inicia la transacción
CommitTrans Graba en el disco las modificaciones
RollBack Vuelve a la situación anterior

* Métodos para ejecutar comandos SQL


Execute Ejecuta un comando SQL usando VB
ExecuteSgl Ejecuta un comando SQL a través de ODBC

2. Propiedades

Collating Order Determina cómo vamos a comparar cadenas


5. Programación de una BDI 70

Connect Determina qué tipo de bases externas abriremos (dBase...)


Name Nombre de la base de datos
QueryTimeout Tiempo de espera desde tras errores en conexiones ODBC
Trañsactions Indica si el driver acepta transacciones Updatable

3. Objetos Contenidos

TableDefs Devuelve un objeto TableDef (definiciones de la base)

4. Funciones Relacionadas

OpenDatabase Devuelve un objeto database


RegisterDatabase Para conectarse vía ODBC
RepaírDatabase Arregla bases de datos dudosas
CompactDatabase PACK
CreateDatabase Crea una nueva base de datos
FreeLocks Libera los bloqueos
Begin Trans Comienza una transacción
CommítTrans Graba en el disco el resultado de una transacción
RollBack Vuelve atrás en una transacción
SetDataAccessOption Opciones para gestión de bases ACCESS
SetDefaultWorkSpace Establece usuario y clave para bases codificadas ACCESS

52.3 SQL en Visual Basic

Visual Ba-sic es un lenguaje de programación de propósito general, con una gran


potencia en toda su estructura. Su implementación en el sistema operativo Windows y
sus herramientas visuales, han hecho de este lenguaje un líder indiscutible en lo que a
desarrollo de aplicaciones se refiere. Con la versión 3.0. se implementó la gestión de
bases de datos a muy alto nivel, pudiendo gestionar bases de datos de tipo Access,
Paradox, dBASE, FoxPro, etc. Este paso de gigante ha hecho de Visual Basic uno de
5. Programación de una BDI 71

los lenguajes favoritos por los desarrolladores de aplicaciones de bases de datos.


Visual Basic incorpora esta extensión junto a nuestras bases de datos, obteniendo
potentes resultados. De hecho, las consultas que se realizan en Access, están
desarrolladas o basadas en este lenguaje, por lo que su implementación en Visual
Basic no es complicada. El objetivo principalde SQL es la realización de consultas y
cálculos con los datos de una o varias tablas.

a) Escribir mandatos en SQL

1. Un mandato en SQL se expresa en una cadena de caracteres o String.


2. Dicho mandato se puede escribir en la propiedad RecordSource de un control Data,
con el fin de crear una consulta en la interfaz.
3. Los nombres de los campos especificados (y de las tablas), que contengan más de
una palabra, han de encerrarse entre corchetes ([nombre]). Como norma general, se
suelen escribir siempre entre corchetes.
4. Para especificar un determinado campo de una determinada tabla, se ha de escribir
primero el nombre de la tabla, un punto y, a continuación, el nombre del campo
(nombre_tabla.nombre_campo).
5. Al especificar una expresión de búsqueda, si ésta se refiere a una expresión de
caracteres, éstos han de encerrarse entre comillas, normalmente simples
(‘expresión-a-buscar’).
6. Para especificar una fecha en una búsqueda, ésta debe encerrarse entre
almohadillas o pragmas (#fecha#).
7. Si se utiliza la propiedad RecordSource del control Data, para crear nuestras
consultas en SQL, tras introducir el mandato SQL (siempre como una expresión de
cadena) es necesario refrescar el control Data (control-data. Refresh).

b) La sentencia SELECT y la cláusula FROM

La sentencia SELECT “selecciona” los campos que conformarán la consulta, es decir,


que establece los campos que se visualizarán o compondrán la consulta. El parámetro
5. Programación de una BDI 72

‘lista-campo está compuesto por uno o más nombres de campos, separados por comas,
pudiéndose especificar también el nombre de la tabla a la cual pertenecen seguido de
un punto y del nombre del campo correspondiente. Si el nombre del campe o de la tabla
está compuesto de más de una palabra, este nombre ha de escribirse entre corchetes
([nombre]). Si se desea seleccionar todos los campos de una tabla, sE puede utilizar el
asterisco (*) para indicarlo.

Una sentencia SELECT no puede escribirse sin la cláusula FROM. Una cláusula es una
extensión de un mandato que complementa a una sentencia o instrucción, pudiendo
complementar también a otras sentencias. Es, por decirlo así, un accesorio
imprescindible en una determinada máquina, que puede también acoplarse a otras
máquinas. En este caso, la cláusula FROM permite indicar en qué tablas o en qué
consultas (queries) se encuentran los campos especificados en la sentencias SELECT.
Estas tablas o consultas se separan por medio de comas (,), y, si sus nombres están
compuestos por más de una palabra, éstos se escriben entre corchetes ([nombre]). He
aquí algunos ejemplos de mandatos SQL en la estructura SELECT...FROM...:

SELECT nombre, apellidos FROM clientes;


Selecciona los campos ‘nombre’ y ‘apellidos’ de la tabla ‘clientes’.
SELECT clientes. nombre, producto FROM clientes, productos;
Selecciona el campo ‘nombre’ de la tabla ‘clientes’, y el campo ‘producto’ de la tabla
productos.
SELECT pedidos. * FROM pedidos;
Selecciona todos los campos de la tabla ‘pedidos’.
SELECT * FROM pedidos;
Selecciona todos los campos de la tabla ‘pedidos’.
SELECT nombre, apellidos, telefono FROM clientes;
Selecciona los campos ‘nombre’, ‘apellidos’ y ‘telefono’ de la tabla ‘clientes’.
SELECT [codigo postal] FROM [tabla morosos];
Selecciona el campo 'codigo postal’ de la tabla ‘tabla morosos’.
5. Programación de una BDI 73

c) Claúsula WHERE

La claúsula WHERE es opcional, y permite seleccionar qué registros aparecerán en la


consulta (si no se especifica aparecerán todos los registros). Para indicar este conjunto
de registros se hace uso de criterios o condiciones, que no es más que una
comparación del contenido de un campo con un determinado valor (este valor puede
ser constante (valor predeterminado), el contenido de un campo, una variable, un
control, etc.). He aquí algunos ejemplos que ilustran el uso de esta cláusula:

SELECT * FROM clientes WHEREnombre='ALFREDO;


Selecciona todos los campos de la tabla ‘clientes’, pero los registros de todos aquellos
clientes que se llamen ‘ALFREDO’.
SELECT * FROM abonados WHERE estado ='NAYARIT' OR estado='JALISCO' OR
estado ='COLIMA';
Selecciona todos los campos de la tabla ‘abonados’, pero los registros de todos los
abonados de los estados de NAYARIT, JALISCO, COLIMA
SELECT nombre, apellidos FROM abonados WHEREedad>=18;
Selecciona los campos ‘nombre’ y ‘apellidos’ de la tabla abonados, escogiendo a
aquellos abonados que sean mayor de edad (a partir de 18 años).
SELECT * FROM abonados WHERE edad>=18 AND edad<=45;
Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 años.
SELECT * FROM abonados WHERE edad BETWEEN 18 AND 45;
Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 años.
SELECT * FROM diario WHERE fecha 471119 7#;
Selecciona los apuntes de ‘diario’ realizados el 1 de Julio de 1.997 (la fecha ha de
indicarse en inglés (mes/día/año)).
SELECT * FROM diario WHEREfeCha<=#12/31/96#;
Selecciona los apuntes de ‘diario’ realizados antes del 1 de Enero de 1.997.
SELECT * FROM diario WHERE fecha BETWEEN #7/1/97# AND#7/31/97#;
Selecciona los apuntes de ‘diario’ realizados en Julio de 1.997.
5. Programación de una BDI 74

SELECT * FROM clientes WHERE nombre LIKE'AL*,


Selecciona los clientes cuyo nombre comience con los caracteres ‘AL’.
SELECT * FROM clientes WHERE apellidos LIKE '*EZ,
Selecciona los clientes cuyos apellidos terminen con los caracteres 'E?.
SELECT * FROM clientes WHERE apellidos LIKE '*ZAMO*'
Selecciona los clientes cuyos apellidos contengan, en cualquier posición, los caracteres
‘ZAMO’.
SELECT * FROM clientes WHERE estado IN (‘JALISCO’, ‘COLIMA’, ‘NAYARIT’,
'MEXICO', ‘PUEBLA ');
Selecciona todos los clientes de los estados JALISCO, COLIMA, NAYARIT, MEXICO,
PUEBLA.

d) Cláusula ORDER BY

La cláusula ORDER BY suele escribirse al final de un mandato en SQL. Dicha cláusula


establece un criterio de ordenación de los datos de la consulta, por los campos que se
especifican en dicha cláusula. La potencia de ordenación de dicha cláusula radica en la
especificación de los campos por los que se ordena, ya que el programador puede
indicar cuál será el primer criterio de ordenación, el segundo, etc., así como el tipo de
ordenación por ese criterio: ascendiente o descendiente.

(...) ORDER B Y campo 9 [ASC/DESC][, campo2 [ASC/DESC]...]

La palabra reservada ASC es opcional e indica que el orden del campo será de tipo
ascendiente (O-9 A-Z), mientras que, si se especifica la palabra reservada DESC, se
indica que el orden del campo es descendiente (9-O Z-A). Si no se especifica ninguna
de estas palabras reservadas, la cláusula ORDER BY toma, por defecto, el tipo
ascendiente [ASC].

He aquí algunos ejemplos:


5. Programación de una BDI 75

SELECT nombre, apellidos, tele fono FRO M clientes ORDER B Y apellidos, nombre;
Crea una agenda telefónica de ‘clientes’ ordenada por ‘apellidos’ y ‘nombre’.
SELECT * FROM pedidos ORDER BY fecha DESC;
Relación de ‘pedidos’ ordenados desde el más antiguo hasta el más moderno.
SELECT * FROM abonados ORDER BY apellidos, nombre, fecha-nacimiento DESC;
Relación de ‘abonados’ por ‘apellidos’ y ‘nombre’ ascendientemente, y por ‘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
5. Programación de una BDI 76

Obviamente, dependiendo del caso, la programación se hará diferente. Pero la norma


común es crear una interfaz en concreto, con unos campos concretos y, cuando sea
necesario, establecer como valor de la propiedad 'RecordSource' el mandato en SQL, y
refrescar el control Data correspondiente. De esta manera, el coñtrol Data contendrá el
resultado de la consulta.

f) Eliminación dinámica de registros

El lenguaje SQL nos permite eliminar registros que cumplan las condiciones o criterios
indicadas a través de la sentencia DELETE, cuya sintaxis es la siguiente:

DELETE FROM tablas WHERE criterios

Donde el parámetro ‘tablas’ indica el nombre de las tablas de las cuales se desea
eliminar los registros, y, el parámetro ‘criterios’, representa las comparaciones o criterios
que deben cumplir los registros a eliminar, respetando a aquellos registros que no los
cumplan. Si - por ejemplo - quisiéramos eliminar todos los pedidos realizados por el
cliente cuyo código sea 4 en el día de hoy, utilizaríamos la siguiente sentencia:

DELETE FROM pedidos WHERE [codígo cliente]=4 AND fecha=Now();

g) Aritmética con SQL

* Sumas o totales

Para sumar las cantidades numéricas contenidas en un determinado campo, hemos de


utilizar la función SUM, cuya sintaxis es la siguiente:
SUM(expresión)
Donde ‘expresión’ puede representar un campo o una operación con algún campo.
5. Programación de una BDI 77

La función SUM retorna el resultado de la suma de la expresión indicada en todos los


registros que son afectados por la consulta. Veamos algunos ejemplos:

SELECT SUM(unidades) FROM pedidos;


Retorna el total de unidades pedidas (la suma de todos los valores almacenados en el
campo ‘unidades’ de la tabla ‘pedidos’). Este resultado se toma como un nuevo campo
en el RecordSet.
SELECT SUM(ingresos-gastos) AS saldo FROM diario;
Retorna el saldo final de una tabla llamada ‘diario’. Este resultado se toma como un
nuevo campo en el RecordSet y se le llama ‘saldo’.

SELECT SUM(unidades) AS tota/ FROM pedidos WHEREfecha =Now();


Retorna el total de unidades pedidas hoy. Este resultado se toma como un nuevo
campo en el RecordSet y se le llama ‘total’.

* Promedios o medias aritméticas

Para averiguar el promedio de unas cantidades utilizaremos la función AVG, cuya


sintaxis es la siguiente: AVG(expresión)

La función AVG retorna el promedio o media aritmética de la expresión especificada, en


todos los registros afectados por la consulta. Esto es lo mismo que realizar una suma
(SUM) y, después, dividir el resultado entre el número de registros implicados. He aquí
algunos ejemplos:

SELECT AVG(unidades) FROM PEDIDOS;


Retorna el promedio de unidades pedidas (la media de todos los valores almacenados
en el campo ‘unidades’ de la tabla ‘pedidos’). Este resultado se toma como un nuevo
campo en el RecordSet.

SELECTA VG(ingresos-gastos) AS saldo-medio FROM diario;


5. Programación de una BDI 78

Retorna el saldo medio de una tabla llamada ‘diario’. Este resultado se toma como un
nuevo campo en el RecordSet y se le llama ‘saldo-medio’.

SELECTA VG(unidades) AS media FROM pedidos WHERE fecha=Now();


Retorna el promedio de unidades pedidas hoy. Este resultado se toma como un nuevo
campo en el RecordSet y se le llama 'media'.

* Valores mínimos y máximos

También es posible conocer el valor mínimo o máximo de un campo, mediante las


funciones MIN y MAX, cuyas sintaxis son las siguientes:
MIN(expresión)
MAX(expresión)

He aquí algunos ejemplos:

SELECT MIN(unidades) AS minimo FROM pedidos;


Retorna el pedido más pequeño y lo refleja en el campo ‘minimo’.

SELECT MAX(unidades) AS maximo FROM pedidos WHERE fecha=Now();


Retorna el pedido más grande de hoy y lo refleja en el campo ‘maximo’.

SELECT MAX(gastos) AS maximo FROM diario;


Retorna el gasto más costoso reflejado en el diario contable, y lo representa en el
campo ‘maximo’.

* Conteo de registros

Para conocer cuántos registros hay utilizaremos la función COUNT, cuya sintaxis es la
siguiente: COUNT(expresión).
5. Programación de una BDI 79

La función COUNT retorna el número de registros indicados en la expresión. He aquí


algunos ejemplos:

SELECT COUNT(*) AS num_pedidos FROM pedidos WHERE fecha=Now();


Retorna el número de pedidos realizados hoy. Este resultado se toma como un nuevo
campo en el RecordSet y se le llama 'num_pedidos'.

SELECT COUNT(*) AS casados FROM clientes WHERE casado=True;


Retorna el número de clientes casados. Este resultado se toma como un nuevo campo
y se le llama ‘casados’.

SELECT COUNT(*) AS num pagos FROM diario WHERE gastos=25594;


Retorna el número de pagos por un importe equivalente a 25594. Este resultado se
toma como un nuevo campo en el RecordSet, y se le llama ‘num-pagos’.

SELECT SUM(unidades) AS total, AVG(unidades) AS media, COUNT(*) AS registros,


MAX(unidades) AS maximo, MIN(unidades) AS minimo FROM pedidos WHERE fecha
BETWEEN #111197# AND #6130/97#;
Retorna el total, la media, el máximo y el mínimo de unidades pedidas, y el número de
pedidos realizados, durante el primer semestre de 1997

h) Omisión de registros duplicados

En una consulta podría ser útil omitir registros que estén duplicados. Por ejemplo, en
nuestros pedidos hay duplicación, puesto que un cliente realiza varios pedidos en el
mismo día. Quizá necesitemos una historia para conocer los días y los clientes que
realizaron algún pedido, pero no necesitaremos toda la lista, si no que nos diga,
únicamente, mediante una línea, qué cliente realizó algún pedido y en qué día. Para
ello, utilizaremos el predicado DISTINCT, cuya sintaxis es la siguiente:
SELECT DISTINCT lista-campos . . .
5. Programación de una BDI 80

El predicado DISTINCT omite aquellos registros duplicados en los campos


especificados. En el problema expuesto, utilizaremos la siguiente sentencia:

SELECT DISTINCT [codigo cliente], fecha FROM pedidos;

Si deseamos que la consulta sea más completa y nos visualice también el nombre y los
apellidos correspondientes del cliente en cuestión (estos datos están en la tabla
‘clientes’ y no en ‘pedidos’), escribiríamos este mandato:

SELECT DISTINCT pedidos.fecha, pedidos.[codigo cliente], clientes. nombre, clientes.


apellidos FRO M pedidos, clientes WHERE clientes.[codigo cliente] = pedidos. [codigo
cliente];

i) Reemplazar datos

Es posible reemplazar el valor de un campo, para el total de la tabla al que pertenezca


mediante UPDATE, su sintaxis es la siguiente:
UPDATE lista-tablas SET campo=nuevo valor (,campo=nuevo valor] [WHERE...]

Donde lista-tablas representa el nombre de las tablas donde se realizarán las


sustituciones o reemplazos. El parámetro campo indica el campo que se va a modificar,
y el parámetro nuevo-valor respresenta una expresión (constante, valor directo, un
cálculo, etc.) cuyo resultado o valor será el nuevo valor del campo.

La sentencia UPDATE es muy versátil y potente, por lo que podemos realizar


reemplazos condicionantes, ya que permite la cláusula WHERE. De ello se deduce que
- por ejemplo -, si se desea bajar un 10% el importe del seguro a aquellos asegurados
que cumplan más de dos años de carnet de conducir, y que tengan más de 22 años de
edad, tendríamos que escribir la siguiente sentencia:
UPDATE asegurados SET importe=importe/1. 1 WHERE edad>22 AND YEAR(Now)-
YEAR(expedicion)>2;
5. Programación de una BDI 81

Adicionalmente es posible utilizar varias tablas y sustituir el valor de un campo de una


de las tablas con el valor del campo de otra tabla, o bien reemplazar el valor de unos
campos de alguna tabla si el valor de los campos de otras tablas cumple una serie de
requisitos.

j) Grupos de registros

Si se precisa mostrar un resumen de los datos que tenemos, especificando el total - por
ejemplo -, de los ingresos y de los gastos de cada día, en lugar de visualizar todos los
ingresos y gastos realizados al detalle. Para llevar a cabo esta tarea hemos de tener en
cuenta, en primer lugar, bajo qué campo se van a agrupar los datos (en lo expuesto,
sería el campo fecha), y, a continuación, realizar la consulta mediante la cláusula
GROUP BY, cuya sintaxis es la siguiente:

SELECT . . . FROM . . . [WHERE . . .] GROUP BY lista-campos

Básicamente, la cláusula GROUP BY agrupa o combina registros con idéntico valor en


los campos especificados, en un único registro. Imaginemos que queremos hacer un
resumen de nuestros pedidos, y queremos saber cuántos pedidos y unidades han
realizado cada uno de nuestros clientes. Para ello, se escribiría una sentencia como
ésta:

SELECT codigó cliente, count(codígo cliente) AS num pedidos,


SUM(unidades) AS cantidad FROM pedidos GROUP BY codigó cliente;

Para saber cuántos pedidos se realizaron cada día:


SELECT fecha, count(fecha) AS num pedidos FROM pedidos GROUP BY fecha;

Para conocer cuántas unidades se pidieron cada día, tipearíamos esta sentencia:
SELECT fecha, SUM(unidades) AS cantidad FROM pedidos GROUP BY fecha;
5. Programación de una BDI 82

En la siguiente sentencia se muestra para cada cliente aquellos días en que se realizó
un pedido, resumiéndose el número de pedidos realizados así como el total de
unidades pedidas:
SELECT fecha, codigó cliente, COUNT(codigo cliente) AS num pedidos,
SUM(unidades) AS cantidad FROM pedidos GROUP BY fecha,
codigó cliente HAVING fecha<#116197#;

Como se puede apreciar, se ha especificado una condición a través de la cláusula


HAVING, que indica los criterios o condiciones a cumplir por los registros a visualizar en
un agrupamiento. En esta ocasión, la condición era de aquellos pedidos realizados
antes del seis de enero de 1997.

Para conocer una estadística de pedidos diaria, utilizaremos la siguiente sentencia:

SELECT fecha, COUNT(fecha) AS pedidos, SUM(unidades) AS subtotal,


MIN(unidades) AS mínimo, MAX(unidades) AS maximo, A VG(unidades)
AS promedio FROM pedidos GROUP BY fecha;

k) Combinación de datos

Las consultas realizadas hasta ahora requerían de una dosis de habilidad para
conseguir crear un conjunto de datos que tuviese información combinada de dos tablas.
Pero, podemos combinar datos de una manera mucho más sencilla y eficaz: mediante
las operaciones JOIN, las cuales permiten combinar datos de dos tablas. La operación
JOIN más común es INNER JOIN, cuya sintaxis es:
tabla 1 INNER JOIN tabla2 ON tabla J .campó común=tabla2.campó común

Donde tabia1 y tabla2 representan el nombre de las tablas a combinar. Ambas tablas
han de tener un campo común o igual para poder realizar correctamente la combinación
de los datos. Por ejemplo:
5. Programación de una BDI 83

SELECT * FROM pedidos INNER JOIN clientes ON pedidos.codigo cliente =


clientes. codigo cliente;

El resultado será un conjunto de registros con los datos de las dos tablas. Este conjunto
poseerá el nombre de todos los campos de la tabla pedidos y de todos los campos de la
tabla clientes. En cada registro aparecerán los datos relacionados, es decir, que en un
pedido aparecerán los datos del mismo y los datos personales del cliente que realizó el
pedido.

La operación INNER JOIN combina los datos de las dos tablas siempre que haya
valores coincidentes en los campos comunes o enlazados.

Existen también otras dos formas de combinar: LEFT JOIN y RIGHT JOIN. Ambas
tienen la misma sintaxis que INNER JOIN, pero estas operaciones incluyen todos los
registros de una tabla y aquellos registros de la otra en que los campos comunes sean
iguales.

En la operación LEFT JOIN, incluye todos los registros de la primera tabla (parámetro
tabla1) y aquellos registros de la segunda tabla (parámetro tabla2) en que los campos
comunes sean iguales. En la operación RIGHT JOIN ocurre lo contrario: incluye todos
los registros de la segunda tabla y aquellos registros de la primera tabla en que los
campos comunes sean iguales.

Aunque la diferencia entre las tres operaciones parezca inexistente, en realidad sí


existe. La operación INNER JOIN realiza una combinación con todos aquellos registros
de las dos tablas en que el campo común de ambas tenga el mismo valor, mientras que
las operaciones LEFT JOIN y RIGHT JOIN realizan la combinación de todos los
registros de la tabla que combinan (ya sea la primera para LEFT JOIN o la segunda
para RIGHT JOIN), aunque en la otra tabla, en el campo común no haya coincidencia.
5. Programación de una BDI 84

La prueba se ve rápidamente si se introduce un código de cliente en el campo 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:


5. Programación de una BDI 85

Sean R1(T1,…, Tn), y R2 (T1,..., T,), donde:

R1 (T1,T2,T3 T5,T4) con T1 (CVE), T2(MAX1), T3(MAX2) T4(MAX3), T5(MAX4).


R2 (T1,T2,T3 T5,T4) con T1 (CVE), T2(L1), T3(l-2) T4(L3), T5(L4).

Considerando un esquema de BD persistente en que se precisa:

Tabla: Motor .
CVE String ' 5 Indice primario.
MAX1 - MAX4 Double

Tabla: Lecturas .
CVE String ' 5 Indice primario.
L1 - L4 Double

Relacionadas por el campo CVE.

Y una base en intenso compuesta por el total de registros edificada con base a la
siguiente estructura:

motor(cve, m 1, m2, m3, m4).


Iectura(cve,11,12,13,14).

Tenemos:

a) Creación de la base persistente:

' Listado 1 Creación de la base persistente:


'Código: Visual Basic
'Contenida en el CD anexo
5. Programación de una BDI 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), "
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
5. Programación de una BDI 88

Set tb = db. OpenRecordset("motor")


Set bt = db. OpenRecordset("lecturas”)
tipe = “Objeto”
btipe = “Lecturas”
While Not tb. EOF
A$ = tb!CVE
B$ = tb!MAXl
C$ = tb!MAX2
D$ = tb/MAX3
e$ = tb!MAX4
Ab$ = Chr(44) + C$ + Chr(44) + D$ + Chr(44) + e$
f$ = tipe + Chr(40) + A$ + Chr(44) + B$ + Ab + Chr(41) + Chr(46)
Listl.Addltem f$
Print #free, f$
tb. MoveNext

Wend
tb. Close
While Not bt. EOF
A$ = bt!CVE
B$ = bt!L1
C$ = bt!L2
D$ = bt!L3
e$ = bt!L4
Ab$ = Chr(44) + C$ + Chr(44) + D$ + Chr(44) + e$
f$ = btipe + Chr(40) + A$ + Chr(44) + B$ + Ab + Chr(41) + Chr(46)
Print #free, f$
bt. MoveNext
Wend
bt. Close
db. Close
Close #free

End Function

52.4 Edición de las Bases Persistentes y en Intenso.

En el desarrollo de los distintos prototipos, hemos incluido un vista global de las bases
de datos que recuperan tanto la estructura como el contenido de dicha, con el objetivo
de consolidar una aplicación totalmente transparente, el siguiente listado constituye su
base de operación ( En fragmentos de código, se hace referencia a los objetos
contenidos en el prototipo de ejemplo anexo al presente documento):
5. Programación de una BDI 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"
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
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
5. Programación de una BDI 92

5.2.4.1 Representación gráfica de los datos

La representación gráfica de los datos contenidos en la base en intenso, constituyen


una forma sencilla de visualizar los resultados de los distintos procesos de selección y
filtrado, previos al proceso de inferencia.

‘Listado 5, Representación gráfica en árbol


‘Código: Visual Basic.

Option Explicit
Dim cont_mostrados As Long
Dim mi_left As Long
Dim mi_top As Long
Dim avance_left As Long
Dim avance_top As Long
Dim media_caja As Long
Dim mínimo_ punto As Long
Dim cancelar_arbol As Boolean

Private Sub Aceptar Click()


Unload Me
End Sub
Private Sub Btn_Arbol_ClickQ
Dim i As Long
Dim X As Long
Dim cod arbo As String
Dim desc arbo As String
Dim cod padre arb() As Stting
Btn_Arbol. Visible = False
Aceptar. Visible = False
selectFileObligatory CTE_C_PRG_ARBOL, “*,db”, CTE_TIPO_ARCHIVO_TEXTO,
“Abrir Fichero de arboI" "&Abrir"
If Not cancelar_operation_fichero_gf Then
On Error Resume Next s_aut_leer_arbol_GAIH cod_arb(), desc_arb(),
cod_padre_arb()
cont-mostrados = 0
mi-top = avance-top
Screen. MousePointer = CTE_ARENA
cancelar-arboi = True
While cancelar-arbol
cancelar-arbol = False
For i = 1 To UBound(cod_arb)
5. Programación de una BDI 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
5. Programación de una BDI 94

Etiqueta(cont_mostrados). Visible = True Etiqueta(cont_mostrados). Caption =


desc_arb(nodo)
End Sub
Function f_mostrar_hijos_GAIH(nodo As Long, cod_arb() As String, desc_arb() As
String, cod_padre_arb() As String) As Long
Dim i As Long
Dim primer-hijo As Boolean
Dim cont-hijos As Long
Dim pto_x As Long
Dim pto_y As Long
Dim ha-habido-hijos As Boolean
primer-hijo = True
cont-hijos = 0
For i = 1 To UBound(cod_arb)
lf cod_padre arb(i) = cod_arb(nodo) Then
If primer-hijo Then
cont-hijos = 1
mi_left = mi_left + avance-left
Me. Line (mi_left – avance_left + 20, mi-top + media-caja)-(mi-let?, mi_top
media-caja), 0
Else
Me. Line (mi_left – avance_left / 4, mi-top + media_caja)-(mi_left, mi-top +
media-caja), 0
pto_y = mi-top + media-caja – minimo_punto
pto_x = mi_left – avance_left / 4
While Point(pto_x, pto_y) <> 0
PSet (ptc_x, pto_y), 0
Pto_y = pto_y - minimo_punto
If pto_y < 0 Then
avance-left = avance_left * 2
cancelar_arbol = True
Exit Function
End If
Wend
PSet (pto_x, pto_y), 0
cont-hijos = cont-hijos + 1
End If
ha-habido-hijos = f_expandir_nodo_GAIH(i, cod_arb(), desc_arb(),
cod_padre_arb())
If Not ha-habido-hijos Then
mi-top = mi-top + avance-top
End If
primer-hijo = False
End If
Next i
f_mostrar_hijos_GAIH = cant_hijos
End Function
5. Programación de una BDI 95

Private Sub s_aut_leer_arbol_GAIH(cod_arb() As String, desc_arb() As String,


cod_ padre_arb() As String)
On Error GoTo abrir-error
Dim linea As String
Dim indice As Long
principio:
Screen. MousePointer = CTE_ ARENA
Open nombre_fichero_gfi For Input As #CTE_NF_63_ARB
ReDim cod_arb(1 To 1) As Stnng
ReDim desc_arb(1 To 1) As String
ReDim cod_padre_arb(1 To 1) As String
indice = 0
While Not EOF(CTE_NF_63_ARB)
linea = readLinelgnoreComment(CTE_NF_63_ARB)
If Len(linea) > 0 Then
indice = indice + 1
ReDim Preserve cod_arb(1 To indice) As String
ReDim Preserve des_arb(1 To indice) As String
ReDim Preserve cod _padre_arb(1 To indice) As String
cod_arb(indice) = noQuotes(extField(linea, 1, CTE_SEP,
CTE_QUOTED_FIELDS, CTE_NO_2_SEP_AS_ONE))
desc_arb(indice) = noQuotes(extField(linea, 2, CTE_SEP,
CTE_QUOTED_FIELDS, CTE_NO_2_SEP_AS_ONE))
cod_padre_arb(indice) = noQuotes(extField(linea, 3, CTE_SEP,
CTE_QUOTED_FIELDS, CTE_NO_2_SEP_AS_ONE))
End If
Wend
Close #CTE_NF_63_ARB
DoEvents
Screen. MousePointer = CTETDEFECTO
Exit Sub
abrir_error:
s_error_ger CTE_ERROR_GRAVE,
Close #CTE_NF_63_ARB
DoEvents
Screen. MousePointer = CTETDEFECTO
If Not automatice_gcf Then
selectFiteObligatoty CTE_C_TPRG_ARBOL, “*.txt”, CTET_TIPO_ARCHIVO_TEXTO,
“Abrir Fichero de árbol”, "&Abrir"
CTE_SELECCIONAR _FICHERO_OBLIGATORIO_OP_FICH
If cancelar_operacion_fichero_gfi Then Exit Sub
End If
Go To principio
End Sub
5. Programación de una BDI 96

5.3 Archivos binarios

En el desarrollo de una base de datos inteligente, es común el uso de datos no


persistentes, tratados como archivos binarios que se crean y destruyen según sea
preciso en el desarrollo de la aplicación, generalmente concentran datos en estado
intermedio útiles para procesos particulares de inferencia pero no necesarios de forma
persistente. Aún cuando la mayoría del Hardware actual está provisto de RAM
suficiente para tratar grandes' grupos de datos mediante arreglos, éstos generan
pérdida de eficiencia en un contexto general, por ello, la mejor opción es el uso de
archivos binarios temporales, grabados en disco a cuyos datos se accede cuando es
necesario, consideremos el siguiente ejemplo, con las características básicas(buscar,
eliminar, editar, agregar):

Sean R(T1,.... Tn), donde:


R1 (T1,T2,T3,T4,T5) con:
T1 (CVE), T2(MUESTRA), T3(FECHA) T4(VALOR), T5(CONTADOR).

Obtenida por los módulos ( En fragmentos de código, se hace referencia a objetos[¡


ista_muestra, frmBinary] contenidos en el prototipo de ejemplo anexo al presente
documento):

‘Listado 6 Datos binarios


‘Código: Visual Basic.

BinaryDB1. bas

Public DatabasePath As String


Public BackupDatabasePath As String
Public IndexPath As String
Public ditty As Boolean
Public cualq_camb As Boolean
Public Const DOT = "¤"
Public Const Marca-en = "@Marca-en@"
Private Const DATABASE_RECORD_LIMIT = 65000
5. Programación de una BDI 97

Private Const COLUMN_WIDTH = 20


Private Const DATABASE_NAME = "Bintmp.tmp”
Private Const INDEX_NAME = "Bintmp.idx"
Private Const BACKUP_DATABASE_NAME = "Bintmp.mb0"
Private Const BACKUP_INDEX_NAME = "Bintmp.id0"
Private Const START_BYTE_PART = 1
Private Const LEN_BYTE_PART = 2
Private Const FROM_PART = 3
Pnvate Const SUBJECT_PART = 4
Private Const DATE_PART = 5
Private Const TO_PART = 6
Private Const INDEX_PART = 7

Public Sub AddRecord()


On Error Resume Next
cualq_camb = True
frmRec.txtDate = Now
recnext& = CLng( Val(Read/ndex("RecNext")))
frmRec. txtl ndex = recnext& & ""
frmRec.Show 1
BinaryMgmt. AddRecordFinish
Unload frmRec
On Error Go To 0
On Error Resume Next
End Sub

Private Sub AddRecordFinish()


On Error Resume Next
Dim message As String
message = Trim(frmRec. txtMessage)
Open DatabasePath For Binary As #1
byte-next = Readlndex("ByteNext”)
rec-next = Readlndex("RecNext")
Put #1, byte-next, message
Close # 1
len-bytes = Len(message)
v$ = byte-next & DOT & len-bytes & DOT & Trim(frmRec.txtFrom) & DOT &
Ttim(frmRec.txtSubject) & DOT & Trim (frmRec. txtDate) & DOT & Trim(frmRec. txtTo) &
DOT & “HECHO”
Wntelndex “R” & rec-next, v$
byte-next = byte-next + len-bytes
Write/ndex "ByteNext" byte-next
rec-next = rec-next + 1
Wntelndex "RecNext", rec-next
ReadAIlRecords
On Error GoTo 0
On Error Resume Next
5. Programación de una BDI 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


5. Programación de una BDI 99

byte-next = Readlndex("ByteNext")
rec-next = Readlndex("RecNext")
Put #1, byte-next, message
Close #1

'{ En final ( index)

len-bytes = Len(message)
v$ = byte next & DOT & len-bytes & DOT & Trim(frmRec. txtFrom) & DOT &
Trim(frmRec.txtSubject) & DOT & Trim(frmRec. txtDate) & DOT & Trim(frmRec. txtTo) &
DOT & “HECHO“
Writelndex "R" & rec-next, v$
byte-next = byte-next + len-bytes
Writelndex “Byte Next" byte-next
rec-next = rec-next + 1
Writelndex "RecNext"; rec-next

End Sub

Public Sub DeleteRecord()


On Error Resume Next
cualq_camb = True

‘{ Marca-en registro actual

lf frmBinary.Iista_muestra. Listlndex = 0 Then Exit Sub


v$ = frmBinary. lista-muestra. List(frmBinary. lista-muestra. Listlndex)
myindex = ParseTab(v$, 5): v$ = ""
readin$ = Readlndex("R" & CLng(Val(myindex)))
readin$ = Left(readin$, Len(readin$) - 2)
readin$ = readin$ & “@Marca-en@”
Writelndex "R" & CLng(Val(myindex)), readin$
End Sub

Public Sub ReadAllRecords()


On Error Resume Next
frmBinary. lista-muestra. Clear
BuildHeaderList
v$ = "dummytext"
Do
K& = k& + 1
v$ = Readlndex("R" & k&)
If v$ = "" Then Exit Do
If Right$(v$, Len(Marca en)) <> Marca-en Then
frmBinaryiista muestra. Addltem _
Pad(Parse(v$, FROM_PART)) & vbTab & _
5. Programación de una BDI 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
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
5. Programación de una BDI 102

if Right$(v$, Len(Marca_en)) <> Marca-en Then


start_byte& = CLng(Vai(Parse(v$, START_BYTE_PART)))
len_bytes& = CLng(Val(Parse(v$, LEN-BYTE-PART)))
filebuffer = String(len bytes&, 0)
Get #readin, start byte&, filebuffer
outgoing$ = Mid$(filebuffer,1, len-bytes&)
Put #readout, byte next&, outgoing$
v$ = byte-next& & DOT & Parse(v$, LEN-BYTE-PART) & DOT & Parse(v$,
FROM_PART) & DOT & Parse(v$, SUBJECT_PART) & DOT& Parse(v$, DATE-PART)
& DOT & Parse(v$, TO_PART) & DOT “HECHO”
Wnteindex "R" & k&, v$
byte next& = byte-next& + len-bytes&
Eise
WriteIndex “R” &k&, “@Marca-en@”
End If
Next
if byte_next& = 0 Then byte-next& = 1
Writeindex "ByteNext", byte-next&
Writeindex "RecNext" k&
Close #readout
Close #readin
Kiii BackupDatabasePath
On Error Go To 0
On Error Resume Next
End Sub

BinaryDB2.bas

Private Const sizer = 255 * 5


Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVai IpApplicationName As String, ByVal IpKeyName As
Any, ByVai IpDefault As String, By Val IpReturnedString As String, ByVai nSize As
Long, ByVai IpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" (ByVai IpApplicationName As String, ByVal IpKeyName As
Any, ByVai IpString As Any, ByVai IpFileName As String) As Long

Public Function Readlndex(ByVal IstrKey As String) As String


On Error Resume Next
Dim lfixedstrRetValue As String * sizer
Dim IstrRetValue As String
Dim lint Junk As integer
Dim IstrSection As String

IstrSection = "Index"
IfixedstrRet Value = String(sizer, "')
5. Programación de una BDI 103

lintJunk = GetPrivateProfileStríng(IstrSection, IstrKey, " " lfixedstrRet Value, sizer,


IndexPath)
IstrRet Value = Trim(IfixedstrRetValue)
IstrRetValue = Left(IstrRetValue, Len(IstrRetValue) - 1)
Readlndex = lstrRet Value

On Error Go To 0
On Error Resume Next
End Function

Public Sub Writelndex(ByVal IstrKey As String, ByVal IstrValue As String)


On Error Resume Next
Dim IstrSection As String
Dim lintJunk As Integer

IstrSection = “Index”
IstrValue = Trim(IstrValue)
IintJunk = WritePrivateProfleString(IstrSection, IstrKey, IstrValue, IndexPath)

On Error Go To 0
On Error Resume Next
End Sub

BinaryDB3.bas

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA "


(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, IParam As
Long) As Long

Public Sub IniciaBinary()


On Error Resume Next
BinaryMgmt. OpenDatabase
frmBinary. Show
On Error Go To 0
On Error Resume Next
End Sub

BinaryDB4. bas

Public Function Parse(ByVal T$, v%) As String


On Error Resume Next
Const LIMITE = "¤"

T$ = LIMITE + Trim(T$) + LIMITE


5. Programación de una BDI 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
5. Programación de una BDI 105

xStop% = Counter2% - xStart%


Exit For
End If
Next
if xStop % = 0 Then
ParseTab = Trim(Mid$(T$, xStart%))
if InStr(ParseTab, LIMITE) Then Parse Tab = ""
Else
Parse Tab = Trim(Mid$(T$, xStart%, xStop%))
If InStr(ParseTab, LIMITE) Then Parse Tab ""
End If
On Error GoTo 0
On Error Resume Next
End Function

5.4 Filtrado y preproceso

En los ejemplos anteriores, se han utilizado métodos simples, que no precisan de


filtrado o preproceso en la construcción de la base de datos en intenso; en los
siguientes fragmentos de código se concentran algunos ejemplos en los que interviene
el tratamiento de la incertidumbre para la clasificación y selección de los datos objetivo,
sólo presentamos los fragmentos centrales.

Ejemplos documentados de su uso pueden consultarse en el CD anexo:

• Fuzzy DBExpert.
• Fuzzy DbRelation.

5.4.1 Difusor simple

`Listado 7 Difusor simple


`Código: Visual Basic.

Private Sub fuzzy()


Dim dbDatos As Database
5. Programación de una BDI 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
5. Programación de una BDI 107

54.2 Difusor con múltiples condiciones

El siguiente listado, es el eje operativo del ejemplo Fuzzy DBExpert. su implementación


bajo la plataforma de Visual Basic se detalla en los módulos asociados al proyecto. El
proceso mediante el cual se comunican los objetos en las llamadas a funciones y los
valores que regresan están definidos en las clases asociadas al proyecto.

‘Listado 8 Difusor con múltiples condiciones


‘Código: Visual Basic

'{ Implementar métodos para calcular el grado de pertenencia


'{ de un valor determinado a los conjuntos borrosos de las reglas.

Public Function medioConservador(num As Double) As Double


if(num <= 20) Then
return 0;
else if(num > 20 && num < 40) Then
return (num/20. - 1.);
else if(num == 40) Then
return 1;
else if(num > 40 && num < 60) Then
return ((-num)120. +3.);
Else
return 0;
End If
End Function

Public Function medioModerado( num As Double)As Double


if(num <= 20) Then
return 0;
else if(num > 20 && num < 40) Then
return (num/20. - 1.);
else íf(num == 40) Then
return 1;
else if(num > 40 && num < 60) Then
return ((-num)120. +3.);
Else
return 0;
End If
End Function
5. Programación de una BDI 108

Public Function pocoArriesgado(num As Double) As Double


if(num < 10) Then
return ((-0.1) *num+ 1.);
Else
return 0;
End If
End Function

Public Function medialnversion( num, As Double) As Double


if(num <= 25) Then
return 0;
else if(num > 25 && num < 50) Then
return (num/25.- 1.);
else if(num == 50) Then
return 1;
else if(num > 50 && num < 75) Then
return ((-num)i25. +3.);
Else
return 0;
End If
End Function

5.5 Manipulación de la base de datos en intenso

Dependiendo del proceso de inferencia utilizado (Funciones del lenguaje anfitrión o un


motor de inferencia periférico), la manipulación de la bases en intenso será:

a)La base de datos en intenso esta constituida por un archivo temporal plano.

Dicha base, se crea y destruye según sea preciso en las operaciones generales del
sistema, las operaciones sobre ésta las efectúa un archivo binario (file.xpl) compilado
en Prolog. La temporalidad de este archivo obedece a que el motor debe procesar
bases de conocimiento distintas en el marco de procesos de inferencia determinados.

Las bases en intenso se manipulan conforme a un conjunto determinado de reglas y


funciones que constituyen el núcleo del motor de inferencia, en dichas se deberán
concentrar la totalidad de los procesos de inferencia posibles para el total de bases
5. Programación de una BDI 109

temporales involucradas. En las siguientes líneas definiremos las principales funciones


con que opera el motor de inferencia de Prolog sobre la base, para atender los
requerimientos del sistema, evidentemente el estudio exhaustivo del lenguaje Prolog
rebasa el propósito de ésta tesis, por lo que nos ocuparemos exclusivamente de los
temas directamente relacionados con nuestro estudio:

1. Representación del conocimiento en la base en intenso: Redes semánticas.


2. Métodos de resolución: Top Down, Bottom Up.
3. Técnicas de búsqueda: Depth First, Breadth First.
4. Modelos heurísticos: Hipotético, Deductivo.

1. Representación del conocimiento en la base en intenso: Redes semánticas.

Quizás lo más simple de los sistemas de representación proporcional es la presunción


de que los conceptos están debidamente representados como un conjunto de atributos
y rasgos semánticos. Esta forma de representación es una aplicación muy natural del
lenguaje de la teoría de conjuntos para el problema de como caracterizar la naturaleza
de los conceptos. En este punto de vista han existido variaciones en el estudio de la
memoria semántica y también sobre presunciones relacionadas con la descripción de la
representación del conocimiento. De acuerdo con estos puntos de vista, los conceptos
están representados por un aumentado conjunto de rasgos. De esta forma los
conceptos pueden permanecer en un conjunto de relaciones familiares. Dos conceptos
pueden estar:

• Desligados (no tener atributos en común);


• Sobrepuestos (tener algunos pero no todos los atributos en común);
• Anidados (todos los atributos de un concepto están incluidos en el otro);
• Ser idénticos (estar especificados en forma exacta por el mismo conjunto de rasgos).

Los rasgos pueden tener pesos asociados y relacionados con ellos que representan
5. Programación de una BDI 110

una prominencia variada y características importantes para los conceptos en cuestión.


Como una especie de revisión de todas las aplicaciones de estas ideas expuestas aquí,
elegimos para describir "la comparación del rasgo" el modelo propuesto por Smith .

2. Formas o Atributos Semánticos

La representación semántica es considerada la más natural, acreditan la relación de los


atributos con los elementos por medio de estamentos naturales. Veamos un ejemplo
que describe lo más completo posible este tipo de representación:

Un animal come alimento, respira aire, tiene masa y está formado por miembros; ahora
una persona es del tipo animal, el cual "hereda" todas las características antes descritas
del animal. Así también tenemos la posibilidad de detallar más sus cualidades como
que tiene en sus partes piernas y brazos.

La representación semántica denomina a los símbolos como "nodos" o nudos de una


malla de conceptos jerarquizados y bien establecidos con sus relaciones. La red
descrita en la figura siguiente determinada con lazos constituidos en (a,R,b), el cual "a"
y "b" son los nodos que permanecen enlazados a través de la relación "R" , las flechas
muestran el sentido de la relación, sin poseer un carácter recíproco.
5. Programación de una BDI 111

Fig. 14 Representación semántica

Para implementar la semántica expresada en la figura anterior, basta con definir la


estructura que genera la base donde se describen los hechos. Las siguientes cláusulas
proporcionan esta información:

r("ANIMAL", respira, aire),


r("ANIMAL",tiene, masa).
r("ANIMAL",esta_formado_por, miembros),
r("ANIMAL", come, alimento).

r("PAJARO",es_del_tipo, "ANIMAL").
r("PAJARO", puede, volar).
5. Programación de una BDI 112

r("PAJARO",esta_formado_Por, plumas).
r("PAJARO",esta_formado_por, alas).
r("CANARIO", es_del_tipo, "PAJARO").
r("CANARIO", color, amarillo).
r("Ave X", un_representante_de,"CANARIO").
r("PERSONA", es_del_tipo,"ANIMAL").
r("PERSONA", esta_formado_por, piernas).
r("PERSONA", esta_formado_por,brazos).
r("Persona X",un_representante_de,"PERSONA").

Podemos observar que la cláusula r( Elemento-I Lazo, Elemento-2) relaciona por medio
de "Lazo" el "elemento-I" con el "elemento _2", sólo falta un sistema que haga uso de
ella, y exprese el conocimiento que la red determina por medio de la acción. Por
ejemplo una expresión clausal que sea capaz de proporcionar en una lista las
características que hereda un elemento de la clase.

La noción básica de esto es que el conocimiento puede ser representado por un tipo de
estructura gráfica directa y nivelada en la cual el elemento estructural básico es un
conjunto de nodos interrelacionados mediante relaciones. Los nodos representan
conceptos en la memoria. Una relación es una asociación entre los conjuntos de los
nodos. Las relaciones son directas y niveladas. Desde este punto de vista el
"significado" de un concepto (representado por un nodo) está dado por el patrón de
relaciones entre el cual éste participa. Las redes semánticas se caracterizan por el
tratamiento de conceptos, representados por nodos, y relaciones entre ellos,
representadas por arcos que ligan a los nodos entre sí. Básicamente los nodos pueden
ser de dos tipos:

• Individuales, representan descripciones o afirmaciones referentes a una instancia


individual de un objeto.
• Genéricos, representan referentes de una clase o categoría de objetos.
5. Programación de una BDI 113

Los conceptos están previamente ordenados en una taxonomía, y existen los arcos
especiales “es un” y “es un tipo de”. El primero liga un nodo individual con uno genérico
y expresa que un individuo es de cierta clase, y el segundo liga dos nodos genéricos
entre sí y expresa que un concepto o tipo es un subtipo de otro. Es importante destacar
que a diferencia del formalismo de la lógica, para las redes semánticas no hay métodos
formales y generales de deducción. El significado asignado a una red lo establecen
solamente los procedimientos que manipulan la red.

3. Métodos de resolución: Top Down, Bottom Up.

Los sistemas de resolución de problemas en IA, están basados en la formulación de la


solución del problema como una búsqueda. Se comienza en un estado inicial y la meta
es llegar a un estado final u objetivo, el proceso de evaluación de las alternativas para
llegar desde el estado inicial al objetivo se designa como búsqueda y el conjunto de
pasos posibles para llegar desde un estado inicial al objetivo, es llamado el espacio de
búsqueda. Los métodos de resolución se derivan del método de resolución de Robinson
y vienen a disminuir su complejidad en la búsqueda, son métodos de inferencia que
orientan las búsquedas y las técnicas de éstas. Representan las distintas formas de
explorar la información representada por un sistema inteligente.

* Método TOP DOWN

En el método Top Down se comienza tomando la cláusula objetivo o conclusión y se


razona de tal forma de ir a través de las aserciones e implicaciones, derivando nuevos
objetivos a partir de los objetivos anteriores hasta que todos los objetivos derivados,
son resueltos por las aserciones originales.

El encadenamiento hacia atrás “Top Down”, tiene la particularidad de ir generando con


las cláusulas que va tomando, una estructura de árbol. Una refutación es un camino en
el espacio de búsqueda, en este caso una rama del árbol, que comienza con el objetivo
5. Programación de una BDI 114

y termina con la cláusula vacía.

b) Método BOTTOM UP

El encadenamiento hacia adelante “Bottom Up”, se comienza con las cláusulas que son
aserciones o hipótesis. Para ello se usan las aserciones e implicaciones que permitan
derivar nuevas aserciones, se termina cuando eventualmente la cláusula original o
hipótesis es resultado de las aserciones derivadas.

Una refutación en este método comienza con las aserciones de las cláusulas originales,
se utilizan las aserciones para obtener nuevas aserciones a partir de las ya generadas,
se termina cuando se deriva una que explícitamente contradiga el objetivo. Este método
de resolución genera una estructura más compleja que la generada por “Top Down",
por lo cual la búsqueda es más difícil.

5.4 Programación Lógica Paralela (Motor Relacional- Motor de Inferencia)

Como podemos apreciar en los ejemplos citados con anterioridad, la base en intenso
es, generalmente, una estructura simple, donde se evalúa a sus miembros en función
de su peso o áridad; resulta evidente que el repositorio de reglas constituye el eje
fundamental del proceso de inferencia. Este repositorio, para los efectos de nuestro
estudio, se concentra en funciones ad hoc desarrolladas en el lenguaje anfitrión (Visual
Basic) y en archivos binarios (.xpl) compilados por y para el motor de inferencia
huésped Amzi4 Prolog.

En el primero de los casos se utilizan bloques de sentencias IF THEN ELSE inscritos en


ciclos predefinidos (p.ej. fuzzy) y los datos en intenso provienen de objetos Recordset,
propios del programa de aplicación. En el segundo, el motor de inferencia consulta un
repositorio de reglas predefinido y opera sobre archivos temporales (Base de datos en
intenso).
5. Programación de una BDI 115

Fig. 15. Diagrama General de la Arquitectura Propuesta.

En las siguientes líneas nos ocuparemos ponderantemente de este caso; es


conveniente destacar que los “arcos” o relaciones descritas con anterioridad, serán
sustituidos por expresiones capaces de derivar relaciones semánticas complejas
(herencia de elementos de clase), no definidas explícitamente en la base en intenso por
ejemplo, dada una estructura de base simple (toda persona tiene un nombre y un sexo):

persona(nombre, sexo).
donde:
persona( Carlos, M),
persona(Sofía,F),

Aplicando la expresión:
hombre:-(persona(x,M).
mujer:-(persona(x,F).
5. Programación de una BDI 116

Tenemos:

De esta forma, en el repositorio de reglas (logic.xpl) podemos concentrar múltiples


relaciones semánticas complejas, para atacar el conjunto de necesidades del sistema,
así como integrar restricciones de integridad a la base en intenso.

El motor de inferencia opera sobre una base de datos en intenso en función de un


repositorio de reglas dado; todas las acciones del motor responden a eventos
predefinidos que se disparan desde la aplicación, en este proceso - como se ha descrito
anteriormente - interviene una secuencia ordenada de pasos, desde la selección de los
datos objetivo hasta los productos del proceso de inferencia. Así, el flujo y
procesamiento de datos está regulado por el programa de aplicación, éste genera la
base en intenso, inicializa el motor de inferencia y a través de él consulta la base citada.
5. Programación de una BDI 117

Todas los ejemplos en que interviene el motor de Proiog tienen la misma base, así que
sólo nos ocuparemos de describir el proceso de `búsqueda funcional' tomando como
referencia uno de los ejemplos clásicos de la Programación Lógica, ocupándonos de
sus aspectos principales;

a) La Base Persistente.
Compuesta por la tabla: Familia, donde

Campo Tipo Tamaño


Nombre String 50
Sexo String 9
Padre String 50
Madre String 50
Pareja | Soltero String 50

b) La base en intenso.
Compuesta por la estructura:
person(nombre,genero,padre,madre,pareja).

c) El objetivo de la inferencia.

"Descubrir relaciones genealógicas entre los miembros de la base en intenso (Madre,


Padre, Tíos, Tías, Abuelos, Abuelas, Primos, Primas, etc.)."
5. Programación de una BDI 118

d) El repositorio de reglas.

El repositorio de reglas está escrito en Lenguaje Amzi4! Prolog, compilado en el


archivo binario "arbol.xpl", el siguiente es el listado de su código:

%Listado 9 arbol.pro
%Código: Prolog
% Objetivo del proceso de inferencia:

relations([padres, esposa, esposo, ancestros, desendientes, hermanos, hermana,


hermano, tio, tía, madre, padre, hijos, hijo, hija, sobrinos, sobrina, primos, abuelas,
abuelos, nieto, nieta, nietos]).

relation(R, X, Y) :-
relations(Rs),
member(R, Rs),
Q [R, X, Y],
call(Q)

% Repositorio de reglas en sí

padres(P, C) :- (madre (P, C) ; padre(P, C)).


hijos(C, P) :- padres(P, C).
hijos (C), P) :- padres(P, C), male(C).
hija(C, P) :- padres(P, C), female(C).
esposa(W, P) :- spouse(W, P), female(W).
esposo(H, P) :- spouse(H, P), male(H).
ancestros(A, P) :- padres(A, P).
ancestros(A, P) :- padres(X, P), ancestros(A,X).
desendientes(D, P) :- padres(P,D).
desendientes(D, P) :- padres(P,X), desendiente(D,X)
hermanos@ 1, S2) :- full_hermanos(S1, S2(
hermanos(S1, S2) :- half hermanos(S 1, S2).

full_hermanos(S 1, S2) :-
madre(M, S2),
madre(M, S 1),
S 1 \= s2,
padre(F, S 1),
5. Programación de una BDI 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),
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).
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
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)
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))


5. Programación de una BDI 124

Select Case tf
Case 0
CaII StrL S = False
Case I
CalIStrLS = Trae
Case Else
Call ErrorHandler("IsCalIStr", tf)
End Select

End Function

Public Sub GetArgLS(ByVal Term As Long, ByVal ArgNum As Long, ByVal BType
As lnteger, Ptr As Variant)
Dim rc As Long, tstr As String
Dim tlong As Long, tfloat As Single, tint As Integer, tdouble As Double
Dim s As String

Select Case BType


Case bSTR, bA TOM
tstr = Space$(MaxStrLen)
rc = IsGetArg(EnginelD, Term, ArgNum, BType, ByVal tstr)
Ptr = StripStr(tstr)
Case bLONG, bADDR, bTERM
rc = IsGetArg(EnginelD, Term, ArgNum, BType, tlong)
Ptr = tlong
Case b/NT, bSHORT
rc = IsGetArg(EnginelD, Term, ArgNum, BType, tint)
Ptr = tint
Case bFLOAT
rc = IsGetArg(EnginelD, Term, ArgNum, BType, tfloat)
Ptr = tfloat
Case bDOUBLE
rc = IsGetArg(EnginelD, Term, ArgNum, BType, tdouble)
Ptr = tdouble
End Select

If (rc <> 0) Then


Call ErrorHandler(`IsGetArg rc)
End If

End Sub

Public Function PopUstLS(TermPtr As Long, ByVal BType As lnteger, Ptr As


Variant) As Long
Dim rc As Long, tstr As String, tstr2 As String
Dim tlong As Long, ffloat As Single, tint As lnteger, tdouble As Double
5. Programación de una BDI 125

Select Case BType


Case bSTR, bATOM
tstr = Space$(MaxStrLen)
rc = IsPopList(EnginelD, TermPtr, BType, ByVal tstr)
Ptr = StripStr(tstr)
Case bLONG, bADDR, bTERM
rc = IsPopList(EnginelD, TermPtr, B Type, tlong)
Ptr = tlong
Case bINT, bSHORT
rc = IsPopList(EnginelD, TermPtr, BType, tint)
Ptr = tint
Case bFLOAT
rc = IsPopList(EngineiD, TermPtr, BType, float)
Ptr = tfloat
Case bDOUBLE
rc = IsPopList(EnginelD, TermPtr, BType, tdouble)
Ptr = tdouble
End Select

Select Case rc
Case 0
PopListLS = rc
Case -1
PopListLS = rc
Case Else
Call ErrorHandler("IsPopList" rc)
End Select

End Function

Hemos seleccionado éste ejemplo por su sencillez y amplia documentación entre los
distintos grupos de programación lógica consultados, de hecho, constituye la base de
explicación a usuarios de Amzi4, sobre su operación conjunta con Visual Basic; éste y
todos los ejemplos concentrados en el prototipo (listados, base persistente, repositorio
de reglas, base en intenso), pueden ser editados en las vistas de `Edición' en los
prototipos desarrollados.

Adicionalmente, se anexa un ejemplo de la presente tecnología, aplicado al diagnóstico.


6. Estado del Arte 126

6. Estado del Arte

6.1 Análisis inteligente de Datos

Resulta difícil clasificar las herramientas (que superan ampliamente el centenar) que
pueden servir para la explotación inteligente de los almacenes de datos, pero en una
primera aproximación podríamos distinguir las siguientes categorías:

• Interfaces de consulta “ad hoc” existentes en el entorno de bases de datos (QMF,


QBE,etc.) y lenguaje SQL.
• Hojas de cálculo, que empiezan a soportar también varias dimensiones en el
• tratamiento de datos.
• Generadores de informes.
• Herramientas de visualización de datos.
• Entornos de soporte a la toma de decisiones (EIS/DSS).
• Paquetes de análisis estadístico (SAS, SPSS, ...).
• Herramientas OLAP.
• Aplicaciones de “minería” de datos sofisticadas, basadas en técnicas de Inteligencia
Artificial.

Las técnicas estadísticas, como el análisis de probabilidad, inferencia, análisis de


regresión y correlación, análisis de series temporales, etc. están conociendo un
resurgimiento con los entornos de almacenes de datos, y los paquetes que las soportan
empiezan a difundirse cada vez más, ofreciendo intetfaces con la mayoría de las
plataformas para almacenes de datos.

Las herramientas OLAP (siglas que pueden englobar todas las anteriores categorías),
se pueden definir como un tipo de tecnología software que permite a los analistas,
gestores y ejecutivos obtener una visión de los datos por medio de un acceso rápido,
consistente e interactivo a una amplia variedad de posibles vistas de la información que
ha sido transformada a partir de datos en bruto para reflejar la dimensionalidad real de
6. Estado del Arte 127

la empresa tal y como la entiende el usuario.

Estas herramientas se caracterizan, por tanto, por:

- Acceder a una gran cantidad de datos (varios años de ventas).


- Analizar las entre diferentes elementos de negocio.
- Involucrar datos agregados.
- Comparar datos agregados en periodos de tiempo jerárquicos (días, meses, años,
etc.).
Presentar datos en diferentes perspectivas
- Implicar cálculos complejos entre los elementos de datos.
Responder rápidamente a las consultas de los usuarios

Suele ser muy habitual con estas herramientas realizar el cálculo de las siguientes
métricas:

- Ratios multidimensionales.
- Comparaciones.
- Perfiles estadísticos y clasificaciones.

Este tipo de herramientas permite a los analistas del negocio verificar hipótesis, que el
propio usuario va haciendo y validando con los datos que le devuelven sus consultas,
pudiendo navegar por las distintas dimensiones de los datos.

Sin embargo, existe otro tipo de técnicas, más potentes, que permiten descubrir
información valiosa sin depender del usuario, son las que se engloban dentro de la
categoría de minería de datos (data mining) propiamente dicha, en nuestro estudio, sólo
hemos pormenorizado en los algoritmos de modelado basados en IPL, sin embargo,
existe una fuerte tendencia, en el seno de los grupos de IA, por la utilización de
modelados abstractos: Objetos y clases entre otros.
6. Estado del Arte 128

Algunas de las tareas que se llevan a cabo con las herramientas de minería de datos
son las siguientes:

- Clasificación. Categorizar objetos, es decir, examinar sus características y asignarlos a


un conjunto predefinido de clases, por ejemplo, clasificar personas que van a pedir un
préstamo según el riesgo que presentan.
- Estimación. Mientras que la clasificación obtiene una salida discreta, la estimación
consiste en obtener un valor continuo, por ejemplo, ingresos de una familia. En la
práctica se utiliza para llevar a cabo clasificaciones.
- Predicción. Los datos se clasifican de acuerdo a un comportamiento futuro.
- Agrupamiento por afinidad.
- Agrupamiento (clustering). Segmentar una base heterogénea en varios grupos
(clusters) homogéneos, sin que existan clases predefinidas.
- Descripción. Explicación de lo que sucede en la base de datos.

Estas tareas se pueden llevar a cabo mediante la aplicación de distintas técnicas que
resumimos a continuación:

- Análisis de la cesta de la compra, permite identificar grupos de elementos que ocurren


juntos en una transacción.
- Razonamiento basado en memoria, utiliza instancias conocidas como modelo para
hacer predicciones acerca de otras instancias desconocidas. Se utiliza una función de
distancia para encontrar los elementos más cercanos a otros y una función de
combinación que combina los valores de los elementos más cercanos para hacer una
predicción.
- Detección de agrupamiento, construye modelos que encuentran registros de datos
similares (mediante técnicas geométricas, estadísticas, etc.).
- Análisis de enlace, sigue las interrelaciones entre los registros con el fin de desarrollar
modelos basados en patrones en las interrelaciones (aplicando teoría de grafos).
6. Estado del Arte 129

- Árboles de decisión y reglas de inducción, dividen los registros del conjunto de


entrenamiento en subconjuntos disjuntos cada uno de los cuales se describe por medio
de una regla sobre uno o varios campos.
- Redes neuronales artificiales, son capaces de aprender de un conjunto inicial,
generalizando patrones para clasificación o predicción. Es la técnica más común.
- Algoritmos genéticos, aplican los mecanismos de la selección natural y la genética
para encontrar un conjunto óptimo de parámetros que describe una función predictiva.

Aunque, como hemos señalado, la aplicación más conocida de las herramientas de


explotación de datos se da en el marketing (ya que permiten llevar a cabo un marketing
selectivo y de precisión: promociones, ofertas individuales, etc.); existe un conjunto muy
amplio de aplicaciones:

- Agricultura: identificación dé plagas, clasificación de enfermedades,. . .


- Banca: concesión de créditos, predicción de quiebras, predicción de valores bursátiles,
detección de fraudes, segmentación de clientes (para ofrecer tarjetas de créditos según
el tipo de cliente).
- Ciencias espaciales, en concreto, astronomía, donde sirven para el análisis de los
datos procedentes de telescopios o de sondas.
- Distribución: análisis de la cesta (qué elementos tienden a comprar conjuntamente los
clientes), patrones basados en tiempo para tomar decisiones respecto a los almacenes,
modelos predictivos, . . .
- Energía eléctrica: programas de distribución, análisis de incidentes,. . .
- Ingeniería: diagnóstico de fallos, CAD,. . .
- Medicina; biomedicina, efectos de drogas, costes de los hospitales, análisis genéticos,
identificación de tratamientos eficaces,. . .
- Seguros: detección de fraudes, reclamaciones no válidas, diseño de productos,
análisis de riesgos,. . .
- Ventas: identificación de subgrupos específicos, patrones de compra, análisis de
productos, predicción de ventas.
6. Estado del Arte 130

Como podemos observar prácticamente todos los sectores empresariales pueden


beneficiarse de estas técnicas.

6.2 Desafíos en la explotación inteligente de datos

La tecnología de explotación de datos ha avanzado mucho en los últimos años, pero


todavía se enfrenta a numerosos retos por resolver, que son objeto de discusión en
numerosas conferencias y publicaciones especializadas, donde destacan los siguientes:

- Mecanismos de explicación limitados, ya que las herramientas no siempre son


capaces de explicar al usuario cómo han llegado a los datos.
- Formatos de entrada de datos limitados, por ejemplo, no ofrecen posibilidad de
manipular gráficos, textos, fórmulas matemáticas, etc.
- Técnicas de validación limitadas, incapacidad de realizar validaciones cruzadas.
- Gran consumo de recursos.
- Soporte limitado a ciertas plataformas, formatos, tamaños, etc.
- Manejo de diferentes tipos de datos; se deberían construir sistemas capaces de
explotar los datos no sólo en bases de datos relacionales, sino también espaciales
(geográficas), multimedia, etc.
- Eficiencia y escalabilidad de los algoritmos de minería de datos, los tiempos de
ejecución de estos algoritmos debe ser predecible y aceptable en bases de datos muy
grandes.
- Utilidad, certeza y expresividad de los resultados de la minería de datos, Las
imperfecciones deberían ser expresadas mediante medidas de la incertidumbre en
forma de reglas de aproximación.
- Expresión de varios tipos de peticiones y resultados de minería de datos, presentando
los resultados de diferentes formas y bajo diferentes perspectivas, mediante la
utilización de lenguajes de alto nivel, interfaces gráficas, etc.
- Minería interactiva del conocimiento a vanos niveles de abstracción, para que el
usuario pueda refinar de forma iterativa su petición.
6. Estado del Arte 131

- Minería de información de diversas fuentes.


- Protección de la seguridad y privacidad de los datos.
- Conjuntos de datos masivos y soporte de alta dimensionalidad así como de bases de
datos de millones de registros (varios Gbytes).
- Inteligibilidad de los patrones, que desde un punto de vista matemático son correctos
pero que a veces el usuario no llega a comprender.
7. Conclusiones 132

7. Conclusiones

1. La confluencia de tecnologías, y en especial de tecnologías de información, ha


abierto nuevas avenidas para el desarrollo de sistemas cuyas capacidades
conjugan la funcionalidad de tecnologías individuales en un todo cohesivo,
sinérgico, destinado al mejoramiento del desempeño del sistema dentro del contexto
en el cuál se opera.
2. Un Sistema Inteligente para la administración de bases de datos relacionales
combina las funcionalidades y facilidades típicamente encontradas en los sistemas
para el soporte de decisiones con técnicas propias de la Inteligencia Artificial y los
Sistemas Expertos para la creación de sistemas complejos que permitan la toma de
decisiones en una forma más acertada, informada e inteligente.
3. En varios dominios el uso de estructuras lógicas dinámicas aplicadas a la
manipulación e interpretación del contenido de una base de datos tiene múltiples
ventajas, la principal de ellas se centra en la búsqueda de soluciones en un dominio
particular donde el uso de SQL resulta insuficiente. Garantiza que las conclusiones
que se derivan de las premisas iniciales son correctas, en función de las reglas de
manipulación sintáctica que hayan sido definidas. Pueden ser utilizadas para
analizar el conocimiento y para aplicar el razonamiento deductivo sobre dicho
conocimiento. Es flexible, ya que permite representar, en forma sencilla, los hechos
sin importar para qué son utilizados. Es modular, nuevos hachos pueden ser
agregados a la base de conocimiento en forma independiente, sin afectar los tipos
de deducción que se pueden hacer.
4. La representación del contenido de las tablas del esquema relaciona1 mediante
estructuras simples y el uso de la lógica de primer aplicados desde el motor de
inferencia permiten una recursividad controlada en procesos de búsqueda
complejos. Representación que permite consultas con parámetros sobre relaciones
no explícitas en la definición del esquema relacional.
7. Conclusiones 133

5. El trabajo paralelo entre un motor relaciona1 y un motor de inferencia habilita al


sistema de la capacidad de representar el contenido de la base de datos en forma
simbólica, esto es, se valen de la manipulación de símbolos para la resolución de
problemas. Estos símbolos representan conocimiento acerca de objetos existentes
en el mundo real, conceptos, estrategias y heurísticas que el sistema tiene en su
poder y que emplea para la resolución del problema. La combinación y disposición
de estos símbolos representan relaciones con significado las cuales son
interpretadas durante procesos particulares de naturaleza no algorítmica.
6. La implementación de estrategias basadas en el uso de técnicas de inteligencia
artificial pueden llevar el proceso de soporte a la toma de decisiones a un nivel mas
avanzado del que incorpora el esquema relaciona¡, ya que se dota a estos de la
capacidad de usar conocimiento para resolver problemas en la presencia de
información incompleta o no estructurada y sugerir decisiones alternativas, a
problemas que no pueden ser resueltos por medios algorítmicos convencionales y
que requerían la ayuda de otras personas para resolución. Esta funcionalidad
permite incrementar la productividad y la eficiencia de aquellos individuos que usan
el sistema pero que no poseen la experiencia ni el conocimiento para enfrentar la
solución a problemas en un dominio específico. Adicionalmente pueden ayudar a
transformar información en conocimientos al proveer mecanismos automáticos para
el análisis, organización y síntesis de información en un cuerpo coherente.
7. El tratamiento de la incertidumbre mediante estrategias de lógica difusa y lógica
multivaluada permiten una representación global de los datos con una semántica
sensiblemente mayor a las representaciones convencionales, permitiendo tratar
como miembros de un subconjunto determinado grupos de registros con valores
atómicos distintos.
Referencias bibliográficas

Referencias bibliográficas

a) Textos

CODD, E.F. “The Relational Model for Database Manaaement: Version 2”.
Ed. Addison-wesley, Massachussets, USA, 1990.

CORONELL, Gray. “Visual Basic 5".


Ed. McGraw-Hill. Madrid. 1997

DATE, J. "An Introduction to Database Systems”


Ed. Addison-Wesley, Massachusetts, USA, 1986.

FERNÁNDEZ, F. “Fundamentos de Informática: Lógica, Autómatas, Algoritmos y


Lenguajes"
Ed. Anaya, Salamanca, 1995.

HANSEN, W. Gary. “Diseño y Administración de Bases de Datos”


Ed. Prentice Hall. México, 1997

KOLMAN, Bernard. “Estructuras de Matemáticas discretas para la computación”


Ed. Prentice Hall. México, 1986.

KORTH, Henry. “Fundamentos de bases de datos”


Ed. McGraw-Hill. Madrid, 1993

Microsoft. "Access 7.0 User Guide "


Microsoft. 1998

Microsoft. ‘Visual Basic 5, Enterprise Edition”


Book’s on line. 1998

Microsoft. ‘Visual Basic 5, User Guide”


Microsoft. 1998

MIRA, J. “Aspectos básicos de la Inteligencia Artificial”


Ed. Sanz y Torres, Madrid, 1995.

PIATTINI, M. “Concepción v diseña de bases de datos”


Del modelo E/R al modelo relacional.
Ed. RAMA Addsison-Wesley-Iberoamericana. 1993

ROBINSON,. Philip. 'Aflitgue Turbo Prnloq"


Ed. McGraw-Hill. México. 1987
Referencias bibliográficas

SHILDT, Herbert. "Programación Avanzada en Turbo Prolog "


Ed. McGraw-Hill, México, 1988

SHAFIELD, Rebeca. 'Winproloq 3.6 user quide"


LPA Software, 1998.

THIERAÜF. "Investigación de operaciones”


Ed. Limusa, México, 1997.

WINTER, Rick. “Microsoft Access 97, Soluciones Instantáneas”


Ed. Prentice Hall, México, 1997.

b) Artículos

BURGOS, Jorge. “Intercambio dinámico de datos con Visual Basic”


Grupo Eidos. Algoritmo. Año 5, 1997.

HOPKINS, Johns. " Knowledge-Based Query Formulation for Integrated Information


Systems”
Techincal Digest. Volumen 18, No. 2, 1997, pp. 261-270

KHOSAFIAN. “lntelligent Database Engines”


Database Programming & Design. 1990, pp. 56-65

KRIVDA, Cheryl. “Dinamita para extraer datos”


Byte. Año 9, No. 93, 1995, pp. 24-32

Mateos, Julio. “Aplicaciones profesionales en Visual Basic”


Grupo Eídos. Algoritmo. Año 5, 1997.

PIATTINI, M. “El futuro de las bases de datos (I-V)"


Grupo Eídos. Algoritmo. Año 5, 1997.

SOM, Guillermo. “Objetos en Visual Basic”


Grupo Eidos. Algoritmo. Año 5, 1997.

TRIANA, Harvey. ‘Yisuat Basic Experto”


Grupo Eidos. Algoritmo. Año 6, 1998.

WONG, H. “lntelligent Databases”


IA Expert. Volumen 5, No. 3. pp. 38-47
Referencias bibliográficas

ZIARKO, Wojciech. “Data-based acquisition and incremental 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
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

S-ar putea să vă placă și