Sistemas Evolutivos: Nuevo Paradigma de la
Informática
Fernando Galindo Soria*
Resumen
En este trabajo se
presenta una introducción a los Sistemas Evolutivos (sistemas capaces de
construir y mantener en tiempo real una imagen del ambiente que los rodea, como
un ser que construye su propia imagen de la realidad y la utiliza para
interactuar con su entorno), incluyendo su descripción general y presentación
de algunos de los métodos y algoritmos más usados en la construcción de este
tipo de sistemas principalmente la Arquitectura del Sistema Evolutivo y su
estructura Lingüística, se describe el Mecanismo Léxico, el Mecanismo
Sintáctico, las principales herramientas de Inferencia Gramatical, el Mecanismo
Semántico y las principales herramientas de Diálogo y de asociación de
significado.
Palabras Clave: Sistemas
Evolutivos, Lingüística Matemática, Reconocimiento de Formas, Sistemas de
Información, Base de Datos, Inferencia Gramatical, Herramientas Automatizadas
Introducción
En éste trabajo se describe en forma general la arquitectura y
aplicaciones de los Sistemas Evolutivos, donde un Sistema Evolutivo es una
herramienta automatizada capaz de construir una imagen del ambiente que la
rodea y a partir de esta imagen resolver problemas, como un niño que construye
su propia imagen de la realidad y la utiliza para interactuar con su entorno.
* Fernando
Galindo Soria escribió este trabajo en 1990 siendo profesor-investigador en la
Licenciatura en Ciencias de la Informática Sección de Graduados e
investigación UPIICSA-IPN
Como primer punto se
describe en forma general, cuales son los principales problemas de la
Informática actual y la arquitectura general de los Sistemas de Información y a
partir de este punto se sigue una secuencia en espiral donde en cada vuelta de
la secuencia se replantea la arquitectura de los sistemas de información hasta
terminar en la conclusión con la arquitectura generalizada de los Sistemas
Evolutivos.
I Introducción A Los Sistemas Evolutivos
Uno de los problemas más graves de la Informática actual se presenta
por su poca capacidad para modelar en tiempo real los fenómenos que ocurren en
la realidad, ya que es común que cuando un Sistema de Información: Nómina,
Compilador, Reconocedor de Imágenes, Sistema de Inventarios, Sistema Experto de
Diagnóstico Médico, etc., se libera ya prácticamente es obsoleto, ya sea
porque:
1) El problema modelado se modificó.
2) Porque el modelo no cubrió los aspectos esenciales.
3) O simplemente la información y el conocimiento que se tiene sobre el
tema ha quedado rebasado por algún nuevo dato o hecho conocido previamente.
En general se pueden
plantear tres grandes problemas que ayudan a la rápida obsolencia de los
sistemas de información y que obligan a realizar en forma continua lo que se
conoce como mantenimiento adaptativo (aquel que se realiza para lograr que el
sistema mantenga una imagen lo más cercana al ambiente que se requiere modelar)
o por el contrario obliga a los usuarios a lidiar con una herramienta cada vez
menos poderosa y más alejada de la realidad que aparentemente está modelando.
El primer problema surge
cuando se desarrollan sistemas que modelan fenómenos altamente cambiantes, como
por ejemplo los sistemas de algo tan cotidiano como la Nómina, donde
prácticamente no se ha terminado de desarrollar cuando ya se tiene que
modificar (y no es por mal desarrollo. sino simplemente porqué se esta tratando
de modelar un problema que cambia prácticamente por decreto y en el que es
difícil, establecer los patrones de cambiado).
El segundo problema se
presenta cuando se desarrollan sistemas que modelan fenómenos para los cuales
no existe una regla o patrón ya establecido y bien manejado y del cual se pueda
tener un algoritmo en forma relativamente sencilla, tal es el caso de muchos de
los problemas actuales de la Inteligencia Artificial. por ejemplo en el
reconocimiento de patrones se ha desarrollado gran cantidad de métodos y
algoritmos pero sin embargo los problemas no resueltos son cada día mayores,
por lo que los Sistemas de Información orientados al reconocimiento de patrones
reflejan un modelo de la realidad normalmente restringido.
El tercer problema es un
cuello de botella de la Informática que se presenta cuando los sistemas
funcionando son incapaces de reflejar la realidad por que los datos y hechos de
ésta no son directamente accesibles por el sistema ya sea porque son difíciles
de obtener (por ejemplo, topografía detallada del terreno donde se construirá
una carretera) o porqué cambian tan rápidamente que los métodos tradicionales
de captura no permiten mantenerlos actualizados (por ejemplo, los datos
clínicos de un paciente de terapia intensiva).
Es por lo anterior que es
necesario replantear el enfoque utilizado para resolver problemas en
Informática (representado por áreas como el Desarrollo de Sistemas, la
Ingeniería de Software y la Ingeniería de Conocimiento) en el cual la tendencia
es a la construcción de sistemas estáticos e Incapaces de automantenerse y
buscar métodos y herramientas incapaces de recrear en forma continua su imagen
de la realidad o del problema a resolver.
Es dentro de este contexto
donde surge el concepto de Sistema Evolutivo como un sistema capaz de crear su
propia imagen de la realidad y utilizarla para resolver problemas y en su
momento mantener actualizada esta imagen mediante un proceso continuo de
actualización.
II
Del Sistema de Información al Sistema
Evolutivo
1
Rumbo al Constructor
En general se considera que un Sistema de Información o programa de
cómputo tiene la arquitectura de la figura 1.
Figura
1. Arquitectura de los sistemas de información en los 50s
Sin embargo este esquema es
muy viejo y corresponde a los años 50's y ya para la década de los 60's se
manejaban los esquemas más elaborados mostrados en la figura 2.
Figura
2. Arquitectura de los sistemas de información en los 60s
El primer esquema se
utilizaba principalmente por la gente orientada al desarrollo de aplicaciones y
el segundo por las personas dedicadas a desarrollar herramientas de cómputo
como Compiladores y Sistemas Operativos, y ya para finales de los 70's se
manejaba un modelo generalizado en el cual se considera que cualquier sistema
de información tiene la arquitectura de la figura 3.
Figura
3. Arquitectura de los sistemas de información en los 70s
Este esquema integra los
enfoques anteriores y enfatiza la necesidad de desarrollar los sistemas tomando
en cuenta las tres componentes y no solo los procesos, sin embargo, el
desconocimiento o el hecho de no tomar en cuenta este esquema cuando se
desarrollan sistemas es una de las causas principales por las que los sistemas
se vuelven altamente estáticos y difíciles de mantener ya que en los sistemas y
programas tradicionales las tres componentes se encuentran revueltas, por lo que,
un cambio "pequeño" en los datos o procesos o en el orden de atacar
un problema ocasiona que prácticamente se tenga que volver a programar todo;
por otro lado si se desarrolla el sistema de tal manera que los datos queden en
un lado, los procesos en otro y finalmente la estructura del sistema en otro,
el proceso de actualización puede ser relativamente fácil (un caso particular
de este enfoque es el del desarrollo de Bases de Datos).
Por lo que se considera que
una característica fundamental que se debe buscar cuando se desarrolla un
sistema de información es la de que exista una Independencia Relativa o sea que
los datos, procesos y estructura del sistema queden separados y únicamente
exista la relación mínima necesaria entre las tres componentes.
La Independencia Relativa
es una de las características distintiva del método de desarrollo basado en
Base de Datos y en este documento simplemente se extiende al esquema general de
Sistemas de Información.
Otra característica
presente en el método de base de datos que se puede extender al desarrollo de
sistemas es el hecho de que en el enfoque de base de datos se distinguen
explícitamente tres niveles, en el primero se encuentran los datos en sí
(nombres propios, edades concretas, direcciones especificas, etc.); en el
segundo se tiene la estructura de datos específica donde se almacenan los datos
(archivos, registros y campos de la base de datos que se esta manejando) y en
el tercer nivel se tiene un programa que se encarga de construir una estructura
de datos particular, a partir de una descripción general de la base de datos,
este programa es el constructor de la base de datos.
En realidad una base de
datos no tiene al principio datos o estructuras de datos particulares, sino que
solo cuenta con el constructor que es capaz de generar múltiples casos
particulares.
En el caso de sistemas de
información esta idea se puede generalizar, buscando que, más que tener datos,
procesos o estructuras particulares de un sistema, se cuente con mecanismos que
nos permitan construir los datos, procesos y estructuras a partir de una
descripción general del sistema. como se muestra en el esquema de la figura 4.
Figura
4.Constructores de datos, procesos y estructura
Estos tres módulos se
pueden integrar en el esquema mostrado en la figura 5.
Figura
5. Integración de los constructores en un constructor del sistema
Donde el constructor del
sistema es un programa capaz de construir la estructura general de un Sistema
de Información a partir de la descripción del sistema, de la misma forma que un
constructor de Base de Datos es capaz de construir el esquema físico de una
Base de Datos a partir de un Esquema Lógico de Base de Datos.
2 Rumbo a la Arquitectura de un Sistema Evolutivo
Si se construye el sistema de información de tal forma que los
componentes sean independientes en forma relativa entre sí y se da una
interrelación entre el constructor y el sistema de tal forma que cualquier
cambio en la descripción del sistema se refleje en tiempo real en el sistema de
información, entonces se puede considerar que la imagen de la realidad que
tiene el sistema de información es bastante cercana a la que se quiere
reflejar. Ahora bien cuando un programa sigue un conjunto de reglas o
instrucciones para resolver un problema se dice que es un Programa Deductivo, y
a los métodos que construyen programas deductivos se les conoce como métodos de
programación deductiva.
El problema de la
programación deductiva es que se orienta a desarrollar sistemas fijos difíciles
de modificar en tiempo real (ya que las modificaciones involucran reprogramar
el sistema), por lo que desde hace tiempo en el área de Sistemas Evolutivos se
ha buscado desarrollar herramientas automatizadas capaces de obtener en forma
automática el conjunto de reglas del sistema a partir de ejemplos y
descripciones generales de un programa.
A una herramienta o
programa capaz de encontrar un conjunto de reglas a partir de ejemplos la
conocemos como Mecanismo o Herramienta Inductiva; los mecanismos inductivos
fueron de las primeras herramientas utilizadas en el desarrollo de
constructores y son de las más generales, el esquema de un constructor basado
en una herramienta inductiva es el mostrado en la figura 6.
Figura
6. Herramienta inductiva
En el esquema anterior se
maneja un mecanismo inductivo para construir una Imagen de la Realidad, sin
embargo en esta imagen solo se tienen un conjunto de reglas en términos de
procesos, estructura y datos del sistema por lo que es necesario integrar una
herramienta capaz de resolver problemas siguiendo esas reglas, o sea un
mecanismo de tipo deductivo como se ve en el diagrama de la figura 7.
Para contar con un Sistema
Evolutivo lo único que hace falta es dotar a esta herramienta con la capacidad
de actualizar su imagen de la realidad en tiempo real con lo que se tiene la
arquitectura de la figura 8.
De donde la Arquitectura
General de un Sistema Evolutivo es la mostrada en la figura 9.
III
Arquitectura
En el punto anterior se vio
que con el fin de resolver problemas el sistema evolutivo construye una imagen
de la realidad, pero no se indicó como se lleva a cabo este proceso. por lo que
en este punto se describirá en forma general los principales métodos y algoritmos
utilizados por los Sistemas Evolutivos; para lo cual se partirá de que el
lenguaje de comunicación con el exterior (o sea el lenguaje con el que se
plantean los problemas al Sistema Evolutivo y con el cual éste responde a los
requerimientos) y el lenguaje con el que el Sistema Evolutivo construye su
imagen de la realidad son el mismo.
Figura
7. Integración de la componente deductiva
En la actualidad ya existen
una gran cantidad de herramientas
orientadas al manejo lingüístico de los Sistemas Evolutivos y se basan
en que es relativamente fácil encontrar los elementos de un Sistema dentro de
las oraciones, por ejemplo en la oración:
Calcula la Regresión de
X * Y + Z , A
Es relativamente fácil
detectar los datos, acciones y estructura:
Calcula |
la |
Regresión |
de |
X |
* |
Y |
+ |
Z |
, |
A |
a |
i |
a |
i |
d |
a |
d |
a |
d |
i |
d |
la estructura se indica con las líneas y representa el orden en que
se ejecutan las acciones sobre los datos, los datos tienen el tipo d, las acciones el tipo a y las palabras no relevantes llevan i (ignora).
Figura
8. Retroalimentación para actualizar la imagen de la realidad
Figura
9. Arquitectura General de un Sistema Evolutivo
Entonces un Sistema
Evolutivo debe tener la capacidad de encontrar los componentes del sistema de
información a partir del lenguaje utilizado en el área problema y para lograrlo
muchos sistemas evolutivos tienen la arquitectura de la figura 10.
Donde el
Constructor/Analizador Léxico es el encargado de encontrar cada una de las
unidades léxicas que componen una oración, de que tipo es cada unidad (por
ejemplo dato u oración) y la estructura general de la oración conocida como
oración canónica (formada por la concatenación de los tipos de las unidades
léxicas).
A partir de ahí el
Constructor/Analizador Sintáctico aplicando métodos de inferencia gramatical
(métodos orientados a encontrar la gramática de un lenguaje a partir de
ejemplos de oraciones del lenguaje) encuentra la estructura del sistema y
finalmente el Constructor/Analízador Semántico, encuentra significado de la
oración utilizando mecanismos de dialogo para encontrar el significado de los
elementos desconocidos.
Figura
10. Arquitectura de un sistema evolutivo
A continuación se describen
algunos de los principales métodos utilizados por cada uno de los
constructores/analizadores.
1
Constructor/Analizador Léxico
El Constructor/Analizador Léxico es un programa que recibe como
entrada una oración en algún lenguaje y obtiene las unidades léxicas presentes
en la oración, el tipo de cada unidad léxica y la estructura general u oración
canónica.
Por ejemplo, dada la oración
Calcula la Regresión de
X * Y , Z
se encuentran las Unidades
Léxicas mostradas en la tabla 1.
|
Calcula |
a, acción |
|
la |
i, ignora |
|
Regresión |
a |
|
de |
i |
|
X |
d,
dato |
|
* |
a |
|
Y |
d |
|
, |
i |
|
Z |
d |
Tabla
1. Unidades Léxicas
Originalmente el
Constructor/Analizador Léxico no tiene ningún conocimiento acerca del lenguaje
a utilizar y solamente cuenta con la capacidad para encontrar los diferentes
tipos de unidades léxicas de un lenguaje para lo cual utiliza entro otros los
siguientes métodos "triviales":
1) Unidades predefinidas: Es el método más usado y el más antiguo,
consiste básicamente en almacenar previamente la tabla de unidades léxicas con
las palabras que se utilizan en el sistema indicando de que tipo son. Con la
característica de que en un sistema evolutivo esta tabla es creciente (o sea
que originalmente la tabla tiene las unidades léxicas mas usadas en el sistema
y se cuenta con la capacidad de almacenar nuevas unidades conforme se van
detectando).
2) Caracteres especiales: El mecanismo anterior tiene la limitante de
que si se requiere utilizar una palabra no catalogada el sistema tiene que
preguntar y esto al principio puede ser tedioso, por lo que, cuando se
construyeron los primeros ensambladores y compiladores se utilizó el truco de
manejar ciertos caracteres o posiciones específicas dentro del programa para
que el sistema asignara las unidades léxicas. Por ejemplo en un ensamblador
dado, la instrucción:
:Etiqueta .Mem #3 ;Coloca 3 en
la etiqueta
es fácilmente analizable
si se tiene la convención de que:
: Indica Tipo de
Etiqueta
. Indica Tipo de Instrucción
# Indica tipo de Dato
; Indica Tipo de
Comentario
En general esta idea se
puede utilizar para catalogar nuevas unidades Léxicas.
3) Mecanismo de Dialogo: En un Sistema Evolutivo muchas veces se
desconoce hasta el tipo de unidades léxicas que conforman el lenguaje, por lo
que, se ha visto que un mecanismo muy general es aquel que permite catalogar en
tiempo real las nuevas unidades Léxicas. para lo cual se maneja el esquema de
la figura 11.
Figura
11. Mecanismo de diálogo
Este mecanismo
"trivial" es extremadamente fuerte y refleja el proceso que sigue un
niño cuando desconoce una palabra.
4) Manejo de Contexto: Los anteriores métodos tienen el inconveniente
de que todo se le tiene que dar al sistema y no utilizan mucha de la
información ya obtenida. En el momento que ya se han manejado varias oraciones
se pueden empezar a detectar algunos patrones que se pueden utilizar para
encontrar el tipo de nuevas unidades léxicas. Por ejemplo, si después de
catalogar 10 oraciones se encontró que la estructura:
a i a i
d
se repite 4 veces y el
sistema recibe la oración
Calcula la media de A
donde ya conoce el tipo
de las unidades
calcula (a)
la (i)
de (i)
A (d)
donde a=acción, d=dato,
i=ignora; entonces la oración canónica tiene la forma:
a i ? i
d
Por lo que el sistema
propone que el elemento desconocido
Media es de tipo a.
Los anteriores métodos
"triviales" al combinarse son extremadamente poderosos y en su
momento con una cantidad relativamente pequeña de ejemplos son capaces de
encontrar el conjunto base de palabras manejadas por un área problema.
Existen otros métodos más
poderosos pero normalmente requieren del apoyo de los mecanismos Sintáctico y
Semántico, estos últimos normalmente no se utilizan en los prototipos de
Sistemas Evolutivos.
2
Constructor/Analizador Sintáctico
A partir de los resultados del Constructor/Analizador Léxico el
Constructor/Analízador Sintáctico encuentra la estructura del sistema para lo
cual, toma como entrada el conjunto de oraciones canónicas y genera la Estructura.
Este mecanismo es tal vez
el componente mas importante de un Sistema Evolutivo ya que es el responsable
de encontrar las reglas generales o patrones de estructura del sistema y para
lograrlo utiliza normalmente métodos de la inferencia gramatical.
La Inferencia Gramatical es
una herramienta de la lingüística Matemática utilizada originalmente en el área
de reconocimiento de Patrones y que posteriormente se ha extendido y usado
masivamente en la construcción de Sistemas Evolutivos.
El problema que ataca la
Inferencia Gramatical consistir básicamente en encontrar la Gramática
(Estructura) que describe a un lenguaje dado a partir de ejemplos de oraciones
del Lenguaje, figura 12.
Figura
12. Inferencia gramatical
En sus inicios se
desarrollaron un conjunto de algoritmos orientados a resolver problemas
específicos y en la mayoría de los casos eran métodos difíciles de entender y
mas difíciles de programar, pero conforme se empezó a atacar el problema para
construir Sistemas Evolutivos se fueron encontrando nuevos métodos y
generalizando el problema, por lo que. en la actualidad se ha encontrado que
prácticamente los métodos de inferencia gramatical se basan en las operaciones
básicas de:
Factorización, Distribución
y Recursividad por lo que a continuación se explicaran estas operaciones.
3
Factorización Lingüística
En su forma mas sencilla la factorización lingüística lo que pretende
precisamente es encontrar los factores comunes en diferentes oraciones.
Por ejemplo si se tienen
las siguientes oraciones canónicas (S indica el primer nivel de factorización).
S ®
a i b i a d o f |
a i b i d o f |
a i d a d f
factorizando la cadena a i
que es común a las tres oraciones de S
S ®
a i X
X ®
b i a d o f |
b i d o f |
d a d f
Factorizando b i en las
dos primeras oraciones de X queda
S ®
a i X
X ®
b i Y |
a d o f
Y ® a d o f |
d o f
Si se observa, lo único que
hace el proceso de factorizacíón es sacar los factores comunes (que se repiten)
de las diferentes oraciones.
4
Recursividad Lingüística
El proceso de recursividad lingüística también busca un conjunto de
elementos comunes dentro de las oraciones pero con la diferencia de que se
buscan cadenas de elementos que se repiten periódicamente y en forma
consecutiva mas de cierto número mínimo de veces (normalmente tres o más veces)
y se asume que esa cadena se puede repetir tantas veces como se quiera.
Por ejemplo en la cadena
S ®
a b c b c b c b c f
Los elementos b c se
repiten consecutivamente 4 veces por lo que se asume que se pueden repetir
tantas veces como se desee y esto se expresa introduciendo un elemento auxiliar
y haciéndolo recursivo.
S ®
a X f
X ®
b c b c b c b
c
ß
S ®
a X f
X ®
b c X
Por ejemplo si se tiene
S ®
a i a d a d a d a d f
Introduciendo recursividad sobre a
d queda:
S ®
a i X f
X ® a d a d a d a d
ß
S ®
a i X f
X ® a d X
El proceso de introducir
recursividad es un mecanismo extremadamente poderoso ya que permite generalizar
una secuencia de repetición y por el otro lado es un mecanismo peligroso ya que
se puede generalizar mas de lo debido.
En general, el
Constructor/Analizador obtiene la estructura de un sistema a partir de las
oraciones del lenguaje y utilizando en forma combinada la recursividad,
distribución y factorización.
5
Constructor/Analizador Semántico
Esta componente del Sistema Evolutivo es la encargada de asociar el
significado a los elementos y estructura del sistema y se basa principalmente
en un mecanismo de dialogo y en la construcción de relaciones entre los
elementos utilizando diferentes mecanismos de captación de la realidad (en la
actualidad utiliza principalmente imágenes y lenguaje escrito).
El mecanismo de Diálogo fue
originalmente propuesto por José Luis Díaz Salas en 1987 y posteriormente ha
sido complementado por otros investigadores y consiste básicamente en un
proceso recursivo en el cual cada que el sistema Evolutivo detecta una palabra
u oración para la que no encuentra significado simplemente pregunta y espera
una respuesta en el mismo lenguaje.
Por ejemplo si se tiene la
oración:
calcula la Media de A
y la computadora no sabe lo
que significa la palabra Media, pregunta, por lo que se puede establecer un
dialogo del siguiente tipo:
Usuario: Calcula
la media de A
Computadora: ¿Cómo se obtiene la Media?
Usuario: Suma
los elementos de A y divídelos entre el número de elementos
Este mecanismo ha sido
modificado con el fin de permitir que se definan Sinónimos o unos elementos en
término de otros.
Conclusión
El área de los Sistemas Evolutivos es muy extensa y en este documento
sólo se presentó una introducción al tema ya que desde 1985 se han desarrollado
gran cantidad de sistemas de este tipo principalmente a nivel de prototipos,
pero ya en la actualidad varias empresas y entidades públicas están
construyendo sus propios Sistemas Evolutivos y al menos en un caso se está
trabajando en una herramienta de mercado, por lo que ésta es una invitación a
que más investigadores e instituciones se sumen a este esfuerzo.
Algunas
Publicaciones Relacionadas con Sistemas Evolutivos
Construcción de Sistemas Evolutivos
De la Biblioteca a la Memoria Automatizada
Representación de Conocimiento
Programación Dirigida por Sintaxis
Inferencia Gramatical
Introducción a la Lingüística Matemática
Sistema Evolutivo Constructor de Sistemas Expertos
Sistemas Evolutivos de Lenguaje de Trayectorias
Herramientas Generales Para el desarrollo de juegos y Software
Educativo
Herramientas Generales para el Desarrollo de Sistemas (Núcleo de un
Sistema Evolutivo)