Está en la página 1de 168

FACULTAD DE INFORMÁTICA

UNIVERSIDAD POLITÉCNICA DE MADRID

Trabajo Fin de carrera

ANÁLISIS Y DESARROLLO DE UN SISTEMA DE

APRENDIZAJE EN REDESPARALELAS

Alumna: Mª del Carmen Tarrat Alcalde

Tutor: Gabriel Cristóbal Pérez

Septiembre, 1987
ÍNDICE

l. INTRODUCCIÓN 1

2. ARQUITECTURAS PARALELAS. EL CONEXIONISMO

2.1. INTRODUCCIÓN 6

2.2. CLASIFICACIÓN DE LOS SISTEMAS CONEXIONISTAS 10

2.3. REPRESENTACIONES DISTRIBUIDAS 13

2.4. EL SISTEMA NETL 15

2.5. REDES DE TRANSMISIÓN DE VALORES 21

2.6. APRENDIZAJE DE REPRESENTACIONES 25

2.6.1. RETROPROPAGACIÓN DEL GRADIENTE 26

2.6.2. PROCEDIMIENTO AR-P 28

2.7. SATISFACCIÓN DE RESTRICCIONES EN REDES PARALELAS 29

2.8. APLICACIONES DE LOS SISTEMAS CONEXIONISTAS 30

3. LA MÁQUINA DE BOLTZMANN

3.1. INTRODUCCIÓN 32

3.2. ESTRUCTURA Y COMPORTAMIENTO DE LA MÁQUINA

DE BOLTZMANN 33

3.3. REPRESENTACIÓN DEL CONOCIMIENTO EN LA MÁQUINA

DE BOLTZMANN 45
4. APRENDIZAJE

4.1. INTRODUCCIÓN 46

4.2. APRENDIZAJE EN LA MÁQUINA DE BOLTZMANN 47

4.3. ALGORITMO DE APRENDIZAJE 54

4.4. CRÍTICA DE LOS PROCEDIMIENTOS DE APRENDIZAJE 58

5. EJEMPLO DE APRENDIZAJE EN UNA MÁQUINA DE BOLTZMANN

5.1. EL PROBLEMA DEL CODIFICADOR 60

5.2. COMUNICACIÓN DE INFORMACIÓN ENTRE MÓDULOS 64

6. COMPORTAMIENTO DE LOS SISTEMAS CONEXIONISTAS

6.1. INTRODUCCIÓN 67

6.2. INTERSECCIÓN DE CONJUNTOS 68

6.3. CIERRE TRANSITIVO 69

6.4. CONTEXTOS Y PARTICIONES 70

6.5. RECONOCIMIENTO POR MEJOR APROXIMACIÓN 71

6.6. RECONOCIMIENTO GESTALT 72

7. SIMULACIÓN DE LA MÁQUINA DE BOLTZMANN EN UN COMPUTADOR

LISP

7.1. INTRODUCCIÓN 74

7.2. ESTRUCTURA DE LA RED

7 .3. ALGORITMO DE APRENDIZAJE 79

7.4. INTERFACE DE CREACIÓN DE LA RED 84


8. BIBLIOGRAFÍA 88

9. APÉNDICES 91
l. INTRODUCCIÓN

El cerebro humano tiene una estructura muy diferente a la de los

computadores digitales convencionales. Está compuesto por un gran número de

pequeñas unidades, las neuronas, capaces de actuar en paralelo, en lugar de tener un

único procesador muy rápido y potente pero poco flexible. También es diferente en el

modo de almacenar el conocimiento, ya que el cerebro lo hace modificando la

interacción entre sus elementos de proceso, mientras que los computadores lo hacen

mediante la asignación de bits en una memoria de propósito muy general, pero pasiva.

También hay que considerar la resistencia del cerebro ante pequeños daños físicos, y

su capacidad para aprender de la experiencia en lugar de ser programado

explícitamente.

A pesar de los numerosos estudios realizados sobre el comportamiento del

cerebro todavía no se ha conseguido averiguar cuál es la que utilizan las neuronas

para representar las estructuras del conocimiento, a menudo muy complejas. También

es un misterio para nosostros, quizás aún mayor, cómo el sistema de percepción

(vista, oído, tacto, etc.) es capaz de transformar el cúmulo de señales que recibe en

representaciones internas útiles y consistentes; sin mencionar la rapidez con que

realiza dicha transformación. Por supuesto, tampoco sabemos cómo aprende nuevos

esquemas sin utilización aparente de un procedimiento explícito y general. Recientes

-1-
investigaciones han presentado un gran número de teorías diversas sobre el

funcionamiento del cerebro, aunque ninguna de ellas haya sido demostrada

suficientemente para ser admitida como cierta. Para muchos investigadores, el

cerebro utiliza mecanismos de cálculo que pueden aplicarse a las arquitecturas

masivamente paralelas desarrolladas en los últimos años en el campo de la

Inteligencia Artificial. La única dificultad consiste en descubrir cuáles son estos

mecanismos.

Un objetivo muy importante de la Inteligencia Artificial ha sido, desde sus

primeros tiempos, la búsqueda de esquemas de aprendizaje aplicables a los

computadores. El aprendizaje se puede considerar como una de las capacidades más

relevantes del comportamiento inteligente, y por ello, cualquier sistema que pretenda

simular dicho comportamiento ha de ser capaz de realizar algún tipo de aprendizaje.

Las primeras investigaciones se realizaron sobre mecanismos como el Perceptron y

otros tipos de redes asociativas. Estos sistemas mostraron la posibilidad de asignar

pesos a las conexiones entre las unidades de entrada y salida, de forma que la

presentación de un vector de entrada causara la activación de las unidades de salida

adecuadas. Sin embargo, la investigación sobre las redes asociativas simples no tiene

mucho interés, ya que la mayoría de los problemas que se presentan en la realidad son

demasiado complejos para poder ser abordados por estos sistemas. Es preciso

modificar las redes asociativas, añadiéndoles niveles internos de unidades

"escondidas" (hidden units). El aprendizaje, entonces, se convierte en la tarea de

decidir cómo se deben utilizar estas unidades escondidas. Encontrar un algoritmo de

aprendizaje adecuado es un problema de enorme dificultad, porque lo que se pretende

es que la red encuentre su propio esquema de representación, y el espacio de

esquemas posibles en el que ha de buscar es demasiado grande para que pueda ser

explorado de forma exhaustiva.

-
2 -
Las investigaciones sobre algoritmos de aprendizaje h a n venido

desarrollándose desde hace muchos años, obteniéndose pocos progresos. Sin embargo,

en los últimos años se han propuesto nuevos algoritmos de aprendizaje, la mayoría de

ellos de gran interés. Algunos de ellos utilizan un mecanismo de aprendizaje basado

en la disminución del gradiente en el espacio de pesos de la red. Es decir, ajustan los

pesos de las conexiones de forma que se reduzca el error producido en el

funcionamiento global de la red. La Máquina de Boltzmann y el procedimiento de

Retropropagación del gradiente utilizan este mecanismo, y han demostrado su

utilidad en un gran número de problemas. Estos dos sistemas utilizan representación

del conocimiento distribuida, es decir, el conocimiento en lugar de estar localizado en

unidades individuales de la red, se encuentra en los diferentes patrones de activación

del conjunto de las unidades que la componen. El problema más importante de estos

sistemas es su enorme lentitud, que se ve incrementada con el aumento del número de

unidades de la red. También hay que mencionar en su contra la diferencia que parece

existir entre el verdadero funcionamiento del cerebro y el proceso de disminución

progresiva del gradiente.

Los objetivos que se plantean actualmente los investigadores en este área

se fijan en la obtención de métodos que aceleren el procedimiento de disminución del

gradiente y en encontrar la forma de organizar las redes multinivel para que sus

unidades consigan minimizar el error global mediante la consecución de objetivos

locales.

Las redes masivamente paralelas están alcanzando un gran éxito en la

resolución de problemas de reconocimiento y en las denominadas búsquedas de

relajación en las que han de satisfacerse múltiples restricciones simultáneamente. Sin

embargo, existen muchas objecciones que plantear a los esquemas masivamente

paralelos, y han de resolverse algunos problemas graves antes de que puedan ser

- 3 -
efectivamente aceptados como un nuevo estilo de computación. Entre las cuestiones más

importantes se encuentran las siguientes:

- ¿La red llegará a estabilizarse o permanecerá en una oscilación

indefinida sin ningún objetivo?.

- Admitiendo que la red llegue a estabilizarse deteniendo su

funcionamiento en algún momento, ¿cuál es el significado de tal proceso?, ¿qué

calcula la red con ello?. Es necesario poder determinar qué es lo que la red debe

calcular y comprobar que efectivamente lo hace.

- ¿Cuánto tiempo necesita la red para detenerse en una solución?. En caso

de necesitar miles de iteraciones hasta alcanzar el equilibrio difícilmente puede

admitirse el sistema como un modelo de la forma en la que el cerebro humano

resuelve los problemas de satisfacción de restricciones, ya que éste lo hace

muchísimo más rápido.

- ¿Qué cantidad de información necesita cada unidad para poder

transmitirla a las unidades de su entorno?. En muchos de los esquemas de relajación

las unidades comunican a las demás valores muy afinados en cada una de las

iteraciones del proceso. Este comportamiento no se corresponde con el que se supone

que existe entre las neuronas del cerebro, por lo que es necesario buscar uno más

adecuado.

- ¿Cómo han de ser los pesos que codifican el conocimiento adquirido por

el sistema?. Algunas tareas de bajo nivel permiten que estos pesos sean ajustados por

el programador, pero en problemas de más alto nivel es necesaria la utilización de

algún procedimiento de aprendizaje que se encargue de ajustar los pesos

automáticamente.

- 4 -
Todas estas objecciones van resolviéndose poco a poco, encontrándose

arquitecturas paralelas y procedimientos de aprendizaje cada vez más interesantes y

efectivos.

Este trabajo presenta una visión general de las arquitecturas conexionistas

más interesantes estudiadas hasta el momento, especificando sus características

principales, así como sus ventajas y sus inconvenientes. Todas ellas poseen

características similares, pero sus prestaciones son muy diferentes para cada una de

las tareas que se les proponen. Se hace especial mención de una de estas

arquitecturas, la Máquina de Boltzmann, cuya estructura y algoritmo de aprendizaje

se estudian en detalle.

La Máquina de Boltzmann puede considerarse como un tipo particular de

red paralela que es capaz de aprender las restricciones que caracterizan a un dominio

concreto mediante presentación de ejemplos extraidos del mismo. La red modifica los

pesos de sus conexiones para construir un modelo interno que produzca ejemplos con

la misma distribución de probabilidad que los que le han sido mostrados. Una vez

terminado el proceso de aprendizaje, la red es capaz de interpretar correctamente

cualquier entrada que se le presenta, obteniendo la salida correspondiente. Cuando se

le presenta un ejemplo de entrada parcial, la red puede completarlo encontrando los

valores de las variables internas que han generado el ejemplo parcial, y utilizándolos

para generar el resto del ejemplo.

Asimismo, en este trabajo se presentan los fundamentos matemáticos que

justifican el funcionamiento del sistema, así como sus posibilidades de aprendizaje.


2. ARQUITECTURAS PARALELAS. EL CONEXIONISMO

2.1. INTRODUCCIÓN

La tecnología desarrollada hasta ahora en el campo de la Inteligencia

Artificial es capaz de simular algunas de las funciones mentales de alto nivel que los

seres humanos realizan con bastante facilidad. Sin embargo, todavía un computador

no ha sido capaz de incorporar a su funcionamiento ciertos aspectos fundamentales de

lo que comúnmente se considera el "comportamiento inteligente". Entre estos

destacan especialmente el sentido común y casi todas las capacidades sensoriales

(visión y reconocimiento de lenguaje principalmente). El error parece encontrarse en

el planteamiento original, es decir, en el empeño de simular el comportamiento del

cerebro humano, una máquina de proceso paralelo, con los computadores de los que se

dispone en la actualidad, cuyo funcionamiento es eminentemente secuencial.

Algunos de los elementos que parecen faltar a la actual tecnología

utilizada en Inteligencia Artificial, y que el cerebro humano posee, son los siguientes:

- La memoria humana es capaz de almacenar una gran cantidad de

conocimiento de tipos muy diversos, y además también puede recuperarlos de forma

muy rápida y sin esfuerzo aparente. El fenómeno denominado sentido común, que

-
6 -
poseen todos los seres humanos, parece estar estrechamente relacionado con la

disponibilidad de una gran cantidad de conocimiento, pero no aislado y disperso, sino

fuertemente ligado y relacionado. Los computadores son capaces de almacenar gran

cantidad de información, pero hasta el momento no se ha descubierto la forma en que

dicha información pueda convertirse en conocimiento que se incorpore a las

actividades de la máquina de una forma efectiva.

- Las habilidades en el campo del reconocimiento que exhiben los seres

humanos superan a las de los computadores en la mayoría de los dominios. En todas las

actividades relacionadas con el reconocimiento, ya sea visión, entendimiento del

lenguaje hablado o cualquier otro tipo de tarea de alto nivel, la operación clave es la

capacidad de localizar, entre muchos candidatos, el que mejor se ajusta al elemento que

debe ser identificado. Los humanos tenemos esa capacidad, e incluso podemos

utilizarla adecuadamente con datos de entrada distorsionados o fuertemente

contaminados con ruido. Los computadores, por el contrario, todavía no son capaces de

realizar localizaciones tan rápidas como las que cualquier persona puede hacer,

aparentemente de la forma más sencilla y natural.

- Tradicionalmente la Inteligencia Artificial ha centrado sus esfuerzos en la

búsqueda de una forma de razonamiento basada en el tratamiento simbólico de la

información, que es el que se creía fundamento básico de la inteligencia humana. Sin

embargo, si bien este tipo de razonamiento es utilizado en ocasiones por el hombre,

también es cierto que en muchos casos la información es tratada de una forma mucho

más sencilla, que todavía no ha podido ser realmente identificada.

Hasta ahora, la Inteligencia Artificial ha venido utilizando estrategias

cada vez más complejas para conseguir reducir la extensión del espacio de búsqueda

en problemas complejos, disminuyendo el tiempo de computación empleado. Existe,

sin embargo, una alternativa a este planteamiento, que consiste en resolver los

problemas con métodos menos complicados, de tipo cíclico, utilizando enormes

- 7 -
cantidades (del orden de millones) de procesadores sumamente simples para conseguir la

resolución de tareas en un tiempo razonable. Este planteamiento está claramente

orientado a tratar de reproducir los esquemas cerebrales, incluyendo para ello la

utilización de estructuras parecidas a la organización del cerebro.

Algunos investigadores han comenzado a explorar la utilidad del uso de

arquitecturas masivamente paralelas para superar las limitaciones del proceso

simbólico convencional utilizado hasta ahora. Muchas de estas arquitecturas paralelas

se denominan "conexionistas", ya que el conocimiento permanente que posee el

sistema se encuentra almacenado en forma de patrones de conexión, normalmente

denominados fuerzas de conexión, entre los elementos de proceso. De esta forma, el

mismo conocimiento es el que determina de modo directo cómo deben interactuar

entre sí los elementos simples de proceso, en lugar de permanecer almacenado de

forma pasiva en una memoria esperando que la CPU acceda a consultarlo. Existen

diferentes sistemas que pueden ser denominados conexionistas, algunos utilizan

representaciones simbólicas y formales y otros, por el contrario, se basan en

aproximaciones más analógicas y simples.

El término "conexionismo" fue utilizado por primera vez por Jerry

Feldman, refiriéndose al estudio de un cierto tipo de arquitecturas masivamente

paralelas que empezaban a aparecer en las investigaciones dentro de la Inteligencia

Artificial. Los diferentes sistemas conexionistas tienen en común su estructura. Ésta

se compone de un gran número de elementos simples, denominados "unidades",

conectadas unas a otras de diferentes formas, componiendo un sistema en red con

topologías diversas. Cada una de las unidades almacena internamente muy poca

cantidad de información, normalmente unos pocos "bits de marca" o un valor

numérico o "nivel de activación". Esta información de los elementos simples es

utilizada como memoria de trabajo a corto plazo. El almacenamiento de información

a largo plazo se consigue alterando el patrón de interconexiones entre las unidades, o

-8-
modificando una cantidad asociada con cada conexión, que se conoce como su "peso" o

"fuerza". La utilización de las conexiones para almacenar la información en lugar de las

convencionales celdas de memoria, es el motivo del nombre dado en general a todas las

arquitecturas de este tipo.

Las unidades de proceso en estos sistemas no se rigen por programas

individuales. Sólo pueden realizar un pequeño conjunto de acciones, como aceptar

señales de entrada, realizar determinadas operaciones booleanas o aritméticas

simples sobre los datos, o enviar señales a las unidades del sistema a las que estén

conectadas. Estas operaciones pueden ser totalmente autónomas, incorporándose

como parte del comportamiento interno de cada unidad; o pueden controlarse

mediante el uso de comandos por parte de un controlador externo que puede ser

incluso un computador convencional.

Una arquitectura de este tipo es capaz de tener en cuenta gran cantidad

de conocimiento de forma simultánea cuando ha de tomar una decisión, y puede

también valorar muchas opciones a la vez. Esta capacidad se debe al hecho de que las

conexiones pueden llevar varias señales simultáneamente, y las unidades elementales

pueden funcionar en paralelo integrando todos los datos de entrada que reciben de

otras unidades.

En algunos sistemas conexionistas el paralelismo se utiliza para realizar

cierto tipo de búsqueda "bruta" entre todas las unidades que componen la red,

considerando cada una de ellas como un componente elemental dentro de la base de

conocimiento. Otros sistemas hacen uso del paralelismo para permitir

representaciones más ricas y menos "convencionales". Este tipo de esquemas

representan cada elemento de conocimiento mediante un patrón de actividad sobre un

determinado número (siempre una cantidad grande) de unidades elementales. Este

mismo grupo de unidades puede representar un elemento diferente sólo modificando

el patrón de actividad (los valores de las unidades o los pesos de las conexiones). La

-9-
existencia de muchas conexiones representando muchas porciones pequeñas de

conocimiento hace que éstas jueguen un importante papel en la determinación de las

mejores alternativas a la hora de tomar una decisión.

Sea cual sea la estrategia de representación del conocimiento que se

utilice dentro de la arquitectura conexionista, el interés de estas arquitecturas es

evidente. Este interés se basa en su capacidad para tener en cuenta a la vez gran

cantidad de conocimiento, cuestión bastante difícil de conseguir con las arquitecturas

secuenciales que se utilizan actualmente.

2.2. CLASIFICACIÓN DE LOS SISTEMAS CONEXIONISAS

Una característica importante de los esquemas conexionistas es el tipo de

señal que se transmite entre los diferentes elementos de proceso. Fahlman propone

una clasificación de los sistemas en base a este concepto. La división contiene tres

clases:

- Sistemas que transmiten mensajes.

- Sistemas que transmiten marcadores.

- Sistemas que transmiten valores.

Los sistemas que transmiten mensajes son los más complejos y a la vez los

más potentes. A veces su excesiva complejidad hace que no se consideren verdaderos

sistemas conexionistas, ya que las unidades de proceso han de ser bastante complejas

y tener una capacidad de almacenamiento grande para poder conservar los mensajes

recibidos y no procesados. Estos sistemas transmiten mensajes simbólicos entre las

- 10 -
unidades que los componen. Esta arquitectura no parece ser un modelo muy acertado

del comportamiento interno del cerebro, por lo que su estudio no ha suscitado mucho

interés.

Los sistemas que transmiten marcadores son los más simples y también los

más limitados. La comunicación entre las unidades de proceso se realiza en forma de

marcadores de un bit. Cada unidad tiene capacidad para almacenar unos cuantos

marcadores distintos (normalmente 16) y para realizar algún tipo de operación

booleana (típicamente la operación OR) sobre los bits de marca que recibe de otras

unidades. En un sistema de este tipo las unidades están conectadas mediante uniones

hardware que son las encargadas de transmitir los marcadores. Estas uniones actúan

de hecho como líneas dedicadas, por lo que puede existir un gran tráfico de

marcadores en paralelo.

En el tercer tipo de sistemas lo que se transmite entre las unidades son

valores continuos o cantidades numéricas. Las unidades en estos casos realizan

operaciones aritméticas sobre los valores que reciben de otras unidades de la red. Una

ventaja de estas arquitecturas es que nunca llegan a colapsarse, ya que si una unidad

recibe diferentes valores por varias conexiones, los combina aritméticamente

obteniendo un solo valor, que es el que la unidad adopta como realmente recibido.

Una diferencia importante entre el planteamiento conexionista y otro tipo de

arquitecturas paralelas desarrolladas en investigaciones al respecto, denominadas

"modestamente paralelas", es la capacidad que tienen los esquemas conexionistas de

asignar un elemento de proceso a cada pequeña subtarea extraída de la tarea original,

suponiendo siempre que existen suficientes unidades de proceso simples para poder

manejar el problema propuesto. En una arquitectura paralela convencional se utiliza un

número fijo de grandes y potentes procesadores, y se intenta fragmentar el

problema en un número de piezas igual al número de procesadores para que cada una de

ellas pueda ser ejecutada concurrentemente.

- 11 -
En un sistema secuencial el tiempo necesario para realizar tareas como

extraer un conjunto finito de elementos de la memoria o considerar un conjunto finito

de hipótesis, es directamente proporcional al tamaño del conjunto, es decir, crece

linealmente con el número de elementos del conjunto (elementos de memoria,

hipótesis consideradas, etc.). El planteamiento que se ha llamado modestamente

paralelo intenta conseguir un incremento de la velocidad de proceso con la utilización

de N procesadores funcionando en paralelo. El planteamiento conexionista se basa en

la realización de estas tareas en tiempo constante, pero sin embargo, en estos

sistemas es el hardware utilizado el que crece linealmente con el número de

elementos de memoria considerados o el número de hipótesis. Este hecho, que puede

parecer un enorme obstáculo para el desarrollo de estos sistemas, no se ve tan grave

si en lugar de considerar cada una de las unidades de proceso como una C P U

completa, se interpreta como una clase especial de celda de memoria capaz de

almacenar la información en sus conexiones, es decir, en el peso de sus conexiones

con otras unidades. De esta forma se ve bastante clara la necesidad de disponer de un

número suficiente de celdas de este tipo para poder representar el conocimiento que

se tiene sobre una tarea en particular.

Hasta el momento no hay muchos investigadores ocupados en este campo,

aunque poco a poco el interés va aumentando a medida que se obtienen resultados

prometedores. Pese a este escaso número de investigadores, son muchos los tipos

diferentes de arquitecturas conexionistas que se han estudiado y con las que se han

realizado experiencias muy interesantes.

-12-
2.3. REPRESENTACIONES DISTRIBUIDAS

La forma más simple de representar el conocimiento en una red

masivamente paralela es utilizar "representaciones locales", en las que cada concepto

se representa por una parte específica de la estructura interna de la red. Por ejemplo,

si el sistema tiene que trabajar con el concepto "elefante", le bastaría con activar la

unidad que lo representa para poder hacer uso de él. Este tipo de representación es

muy sencilla de realizar y también es fácil de entender. El problema más grave de un

sistema que represente el conocimiento de esta forma es su falta de seguridad. Si por

cualquier causa la unidad que representa un concepto resulta estropeada o deja de

funcionar, el sistema pierde todo el conocimiento que ella contenía, y, por supuesto,

todas sus conexiones dejan de tener sentido. Este hecho es la causa de muchos

problemas, especialmente de fiabilidad, ya que obviamente en un sistema con

millones de unidades, no es sencillo conseguir que todas funcionen correctamente en

todo momento. Además, con este esquema de representación, la mayoría de las

unidades estarán inactivas la mayor parte del tiempo, a no ser que se esté utilizando

continuamente la parcela de conocimiento que representan.

Muchos de los neurólogos y estudiosos del cerebro humano están en contra

de esta teoría. Consideran que el cerebro no utiliza este esquema de representación

local, sino que mantiene el conocimiento distribuido a lo largo del conjunto de las

neuronas que lo componen. El mismo concepto de elefante anteriormente descrito se

representaría de forma distribuida como un determinado patrón de activación sobre

un número bastante grande de neuronas o unidades. A menudo se utiliza la analogía de

esta interpretación del conocimiento con los hologramas, en los que, como es sabido,

cada punto de la imagen se construye tomando información sobre el resto de los

-13-
puntos que la componen. La representación distribuida del conocimiento, al igual que

el holograma, posee una alta fiabilidad, de forma que si se destruye parte de la

información la imagen aparece ligeramente degradada, pero no se pierde totalmente.

Sobre una red paralela el efecto en cuanto a fiabilidad es el mismo, si se estropean

una o varias unidades (o su funcionamiento no es el correcto), el patrón representado

es imperfecto, pero puede ser utilizado porque esencialmente continúa siendo el

mismo. Cada uno de los comportamientos macroscópicos (globales) de la red se

consigue mediante la integración del funcionamiento de un gran número de unidades

microscópicas. Por ello, cualquier subconjunto pequeño de estas unidades

elementales, incluso elegido de forma aleatoria, puede desaparecer o funcionar

incorrectamente sin que se registre ningún cambio sustancial en el comportamiento

macroscópico del sistema. Esta propiedad, que hace que estas arquitecturas sean

inherentemente tolerantes a fallos, resulta muy interesante para la construcción de

redes de alto grado de paralelismo, es decir, compuestas por millones de unidades.

Este tipo de representación distribuida tiene también sus problemas. El

más importante de ellos es su falta de claridad. La dispersión del conocimiento hace

que la estructura sea difícil o incluso imposible de entender por una persona que no

haya intervenido en su construcción. Por el mismo motivo, resulta prácticamente

imposible que cualquier persona sea capaz de modificar el conocimiento contenido en

el sistema, incluso aquellas personas que lo conocen bien han de tener cuidado, ya que

la alta integración e interrelación de los conceptos puede resultar alterada

fácilmente, destruyendo el significado que se le quería dar al conjunto del sistema.

Añadir una pequeña cantidad de conocimiento a nivel macroscópico en el sistema

requiere modificar las interacciones entre un gran número de unidades microscópicas,

de forma que el efecto global represente el nuevo conocimiento adquirido. Este

proceso de modificación es, por su complejidad, prácticamente imposible de realizar

"a mano" incluso para un problema sencillo y una red simple con un número pequeño

de unidades. Por ello es evidente la necesidad de conseguir algún tipo de esquema de

- 14 -
aprendizaje automático que evite el enorme trabajo que supone la modificación

manual de la estructura. La importancia del problema es tan grande que, de no existir tal

esquema automático, las representaciones distribuidas serían casi imposibles de

manejar y su estudio no merecería la pena, ya que su valor sería escaso.

2.4. EL SISTEMA NETL

El sistema NETL es un ejemplo de arquitectura paralela que utiliza

representación local del conocimiento. Fue diseñado para permitir el almacenamiento

y posterior recuperación de un gran número de aserciones o hechos simbólicos.

Además se pretendía que el sistema pudiera realizar algunas búsquedas y deducciones

poco complejas sobre el conocimiento que había acumulado. Un sistema NETL puede

considerarse como una realización hardware de una red semántica. Una red semántica

es una estructura en forma de grafo en la que los nodos representan conceptos y los

arcos entre ellos representan las relaciones existentes entre los conceptos. Ambos,

nodos y arcos de la red, pueden estar etiquetados con identificativos de los conceptos

y relaciones que representan. La figura l(a) representa un ejemplo de red semántica

que contiene cierto conocimiento relativo a elefantes, y la figura l(b) el sistema

hardware que constituye la representación NETL de una parte de la misma red

semántica.

En un sistema NETL cada nodo de la red semántica se representa por una

unidad de proceso simple. Estas unidades tienen capacidad para almacenar algunos

marcadores de un bit y realizar operaciones booleanas sencillas sobre ellos. Los arcos

de la red semántica también se representan por unidades de proceso simples, que

están conectadas a dos o más unidades que representan nodos. Las unidades que

representan a los arcos también pueden realizar operaciones booleanas sencillas sobre

-15-
Ser vivo

Necesita

Planta Oxígeno

Mamífero

Gris

Sam

Figura l(a). Parte de una red semántica sobre elefantes.

"Elefante" ',
\
1
I
,
/
/
. -

unidad-arco Red de
"es un" conmutación
---
'
'
'
\
1
I
I

unidad-nodo . "
/

"Sam"

Bus compartido

Computador
de
control
Figura l(b). Hardware NETL correspondiente a "Sam es un elefante"

-16-
los marcadores, pero normalmente su actividad suele limitarse a pasar o transmitir

marcadores entre las unidades que representan nodos (unidades-nodo) a las que están

conectadas. Todas las unidades del sistema NETL (unidades que representan nodos y

unidades que representan arcos) pueden funcionar simultáneamente como respuesta a

comandos enviados por un sistema controlador externo, normalmente un computador

secuencial como los que estamos acostumbrados a utilizar.

Cada vez que se añade un hecho nuevo al sistema, éste debe ser

aumentado añadiéndole nuevas unidades-nodo y nuevas unidades-arco que representen

el nuevo hecho introducido. La capacidad que tienen las conexiones entre las

unidades-nodo y las unidades-arco de transportar señales de forma simultánea obligan

a representarlas en el sistema físico como verdaderas líneas dedicadas. Estas

conexiones no pueden representarse, por ejemplo, como direcciones transmitidas por

medio de un bus compartido, porque no sería posible la transmisión de varias señales

al mismo tiempo entre distintas conexiones. En los sistemas NETL físicos construidos

hasta el momento las conexiones no son verdaderas líneas dedicadas, es decir, no

existe un cable conectando cada par de unidades que lo necesitan porque resultaría

excesivamente caro. La solución adoptada es la utilización de un sistema interno de

conmutación que sea el encargado de conectar de forma directa las unidades cuando

sea necesario para la transmisión de comandos o marcadores. Este subterfugio hace

que el sistema físico carezca de la capacidad de paralelismo total que posee el

modelo teórico, pero sin embargo posibilita su realización práctica.

Una red NETL es capaz de realizar búsquedas e inferencias simples, pero

que van más allá de las acciones que puede realizar una memoria asociativa simple.

Un ejemplo de ello puede ser la operación "herencia" comúnmente utilizada en la

mayor parte de los sistemas de Inteligencia Artificial. El mecanismo de la herencia

permite que cualquier hecho conocido sobre un elemento de la red pueda ser aplicado

a todas las subclases e individuos que se encuentran por debajo de él en la jerarquía

-
17 -
de sus arcos de tipo "es un" (estos arcos son utilizados en las redes semánticas para

representar la pertenencia de un elemento a una clase determinada de individuos). La

herencia puede extenderse y aplicarse a cualquier nivel de la red, por lo que su

utilización requiere un mecanismo que permita explorar de forma rápida y eficiente

cualquier parte de la red.

En una red NETL la herencia se consigue mediante la propagación de

marcadores entre las unidades de proceso simples. Por ejemplo, si se desea encontrar

el valor de una determinada característica de una unidad, el controlador se encargará

de asignar el valor 1 al marcador de esa unidad, ordenando a continuación que

cualquier unidad que represente un arco del tipo "es un" y tenga un nodo situado

debajo de él en la jerarquía con el marcador a 1, pase este valor al nodo que está

conectado con él por el otro lado (el situado por encima del anterior en la jerarquía).

Cuando la red haya terminado el proceso de transmisión de marcadores y quede

estabilizada, todas aquellas unidades que la componen que tengan el marcador con

valor 1 son aquellas de las que la unidad original puede heredar alguna propiedad. En

este momento el controlador debe ordenar a todas las unidades que representan la

conexión con la característica que se busca, que aumenten el marcador de sus

conexiones en una unidad, con lo que todas las unidades de la red NETL cuyo valor del

marcador sea igual a 2 son las que representan la característica buscada. En este

proceso pueden obtenerse bastantes unidades que verifiquen las condiciones en el caso

más general, o puede obtenerse una única unidad como solución o incluso ninguna. El

procedimiento seguido para obtener este valor constituye una secuencia de inferencia

de carácter completamente general. Es decir, se puede obtener cualquier información

presente en la red sin más que seguir el procedimiento descrito con asignaciones

concretas de los identificadores de las unidades-nodo y las unidades-arco.

La capacidad de los sistemas NETL para realizar en paralelo y de forma

muy eficiente intersección de conjuntos, los hace muy adecuados para ciertas tareas

- 18 -
de reconocimiento altamente específicas (aunque no excesivamente frecuentes en

problemas reales). Supóngase que se desea obtener toda la información que posee la

red sobre un elemento del que se conocen tres características determinadas. Esto es,

se buscan aquellos elementos de la red que poseen la intersección de las

características especificadas. Mediante propagación de marcadores se pueden

identificar todos los elementos con la primera característica y de igual forma otros

dos marcadores diferentes pueden identificar los elementos que poseen las

características segunda y tercera. Una vez realizada esta tarea de "marcado", el

controlador sólo ha de enviar a la red el comando adecuado para que se identifiquen

todas aquellas unidades de la red que posean los tres marcadores. De esta forma tan

simple y rápida pueden obtenerse todos los miembros de una intersección de

características. Una propiedad muy interesante de este proceso es que el tiempo

empleado en la realización de la tarea es siempre constante y resulta independiente

del número de elementos de los conjuntos de los que se desea obtener la intersección.

Esta forma de intersección puede interpretarse como una clase especial de

reconocimiento.

Si se considera el proceso anteriormente descrito como reconocimiento,

puede observarse que resulta muy sólido en algunos aspectos, pero a la vez se muestra

bastante débil en otros. En el lado positivo hay que tener en cuenta que la red NETL

puede examinar a la vez todas las descripciones que conoce, sin necesidad de utilizar

ningún tipo de criterio heurístico que pudiera desechar de antemano la respuesta

correcta. También cabe destacar en el lado positivo que la red no necesita conocer

como entrada todas las características que identifican al o a los elementos buscados,

es suficiente con un subconjunto de estos datos, con tal que se realice la

identificación concreta. Pero incluso si no se conocen las características suficientes,

la red es capaz de obtener un conjunto de posibilidades tan reducido como le sea

posible, simplificando en ocasiones tareas de identificación de características. Esta

propiedad resulta de gran ayuda en determinados tipos de problemas. En el lado

- 19 -
positivo hay que incluir además la propiedad de poder incorporar de forma inmediata

cualquier conocimiento nuevo como parte efectiva del proceso de reconocimiento que se

describió anteriormente. Por último, hay que añadir la gran sencillez de este tipo de

representación, perfectamentre inteligible para cualquier persona mínimamente

introducida en el uso de sistemas de estas características.

Como partes débiles de los sistemas NETL hay que señalar el tratamiento

atómico que confiere a cada dato, representándolo por una sola unidad sea cual sea la

complejidad inherente que éste tenga. Además sólo puede notar la existencia o

ausencia de cada dato individual, siendo incapaz de reflejar ningún tipo de situación

intermedia. En este aspecto, las redes NETL se comportan de forma similar a los

sistemas simbólicos tradicionalmente utilizados en Inteligencia Artificial, obteniendo

buenos resultados en dominios "limpios" en los que no se registre ninguna distorsión o

alteración de los datos. Por ejemplo, no son sistemas adecuados para la resolución de

problemas de percepción en los que se necesitan datos obtenidos de sensores que

captan señales de bajo nivel, a menudo muy contaminadas por el ruido.

La arquitectura de un sistema NETL ha sido hasta el momento solamente

simulada, nunca realizada físicamente. Sin embargo, no es una arquitectura

conexionista excesivamente compleja. Sus unidades, tanto las que representan nodos

como las que representan arcos, son tan simples que no resultaría muy difícil integrar

varios miles de ellas en un solo chip. La causa principal que dificulta su realización

práctica es la estructura de conmutación de conexiones anteriormente descrita. El

diseño y posterior construcción de un sistema de conmutación adecuado a esta

arquitectura parece demasiado complejo para intentar acometerlo con el estado

actual de la tecnología. No hay que olvidar, sin embrago, que un estudio realizado por

Fahlman demostró que la construcción de una máquina con estructura NETL costaría

sólo unas cuantas veces lo que cuesta la construcción de una memoria convencional

con capacidad para almacenar la misma cantidad de información. De cualquier forma,

- 20 -
el problema parece ser solamente económico, por lo que cabe esperar que pueda ser

superado en un margen de tiempo pequeño.

Los sistemas NETL son casi los más utilizados en sistemas reales, aunque

sólo son simulaciones la mayor parte de ellos. La "Máquina Conexionista", construida

por Thinking Machines, por ejemplo, fue diseñada en parte como realización de una

base de conocimiento al modo NETL, aunque el diseño hardware es todavía lo

suficientemente general como para permitir la realización de muy diversos tipos de

tareas. La versión actual de esta máquina está compuesta por 64000 unidades de

proceso elementales, lo que le confiere suficiente capacidad para manejar una

considerable cantidad de conocimiento. El proyecto de realización de una máquina

conexionista con un millón de unidades de proceso resulta una perspectiva excitante,

ya que con tal número de unidades sería posible manejar la cantidad de conocimiento

suficiente para poder dotar al sistema de un cierto grado de sentido común. En este

sentido cabe señalar que en el proyecto Esprit 11 sobre modelos conexionistas de la

Comunidad Europea se pretende construir una máquina conexionista compuesta por un

millón de elementos de proceso.

2.5. REDES DE TRANSMISIÓN DE VALORES

La arquitectura de las redes NETL no era la adecuada para el

planteamiento de algunos problemas de reconocimiento verdaderamente complejos

que se presentan frecuentemente en el mundo real. La mayor parte de estos

problemas, ya sean visión, entendimiento del lenguaje hablado o diagnóstico médico,

se enfrentan con datos a menudo poco precisos, inciertos y fuertemente

distorsionados por ruido, además de no ser posible un ajuste perfecto entre la

estructura real y la obtenida como solución. Es también frecuente encontrar en la

-21-
realidad problemas en los que algunos de los datos apoyan de forma evidente una

determinada hipótesis, mientras que otros datos sólo sugieren una posibilidad. En

otros problemas, por el contrario, existen datos cuya presencia es imprescindible y

otros cuya aparición es importante sólo en un cierto grado. Los problemas reales

presentan tal variedad y complejidad, que no pueden ser adecuadamente resueltos por un

sistema que presenta las restricciones de las redes NETL.

Otro tipo de arquitectura conexionista, los denominados sistemas de

transmisión de valores, parecen adaptarse mejor a las exigencias que imponen los

problemas extraidos de la realidad. Como ya ha sido comentado, en estos sistemas las

conexiones entre unidades poseen un valor numérico que se denomina "peso" de la

conexión. Cada unidad de proceso del sistema calcula la suma de los pesos que recibe

y somete el valor obtenido a la acción de una función no lineal cuyo resultado se

convierte en el valor que la unidad pasará o transmitirá a otras unidades conectadas

con ella. Este tipo de arquitectura puede realizarse sobre hardware analógico o

digital, pero a efectos de cálculo, puede considerarse como un tipo de computador

analógico.

Mediante la utilización de unidades como las descritas puede construirse un

sistema de reconocimiento estructurado en niveles y capaz de manejar

observaciones no totalmente ciertas, variando su grado de evidencia. En este sistema

pueden distinguirse dos tipos de unidades: unidades de entrada y unidades de salida.

Cada unidad de entrada representa un dato observable, y su valor puede interpretarse de

diversas formas: puede ser la probabilidad de que el dato representado esté

presente, la magnitud de una determinada cantidad continua, o la probabilidad de que una

cantidad se encuentre dentro de un intervalo fijado. La interpretación del valor de las

unidades depende de cada problema particular. Las unidades de salida representan

las hipótesis que se desea evaluar con el sistema.

- 22 -
La red más simple de este tipo contendría sólo unidades de entrada

conectadas directamente a las unidades de salida mediante un conjunto de conexiones

cuyos pesos son susceptibles de modificación. Con esta configuración no es necesario

asignar los pesos de las conexiones "a mano", esta estructura es muy semejante a una

propuesta por Rosenblatt a la que se denominó Perceptron. Como ya se demostró,

existe un algoritmo aplicable a esta red y tal que, dado un conjunto de vectores de

entrada con sus correspondientes vectores de salida, calcula de forma iterativa el

conjunto de pesos de las conexiones que hace posible que la red ajuste adecuadamente

la entrada y la salida. El algoritmo del Perceptron es siempre capaz de encontrar

dicho conjunto de pesos, si es que existe. El problema principal es que, para la

mayoría de las tareas que resultan de interés no existe un conjunto de pesos adecuado

en una red de dos niveles como la descrita.

En la mayoría de los casos el problema que se desea abordar no admite el

tratamiento que una red de dos niveles aplica a los datos de más bajo nivel,

considerando cada uno de ellos como una fuente de evidencia completamente

independiente del resto. Es necesario, para poder resolver estos problemas incorporar

a la red uno o más niveles intermedios de unidades, que suelen denominarse unidades

no visibles o escondidas. Estas unidades no visibles son las que realizan la

combinación de las observaciones primarias (los vectores de entrada) en datos de un

orden superior de correlación que contribuyan de forma más eficiente a la

determinación de los vectores de salida correctos. Una simple muestra de la

necesidad de este tipo de unidades es la resolución de un problema tan sencillo como

el reconocimiento de vectores desplazados un bit, ya sea hacia la derecha o hacia la

izquierda. Este problema no puede ser resuelto por una red de dos niveles porque cada

bit de entrada, considerado independientemente de los demás no proporciona ninguna

información útil para la determinación del desplazamiento. La información relevante

para la resolución del problema está contenida en el comportamiento conjunto de las

-23-
combinaciones de todos los bits de entrada. Para poder manejar convenientemente esta

información hay que utilizar uno o más niveles de unidades escondidas, que puedan

extraer las combinaciones de información que conducirán al sistema a la obtención

de la salida adecuada.

Una vez justificada la necesidad de la existencia de las unidades

escondidas, se presenta el problema de averiguar cuál de las muchas combinaciones

posibles de estas unidades (de orden exponencial) es la más adecuada para poder

predecir correctamente las salidas. El algoritmo de aprendizaje del Perceptron no es

aplicable a este tipo de redes, por lo que se han ideado otro tipo de procedimientos y

técnicas que sí pueden aplicarse a redes con más de dos niveles.

Minsky y Papert [Minsky, 1 969] realizaron diferentes estudios en esta

línea, tratando de descubrir un método para conseguir averiguar cuáles eran las

tareas que necesitaban el uso de unidades escondidas para su realización y cuáles no.

Sus trabajos les llevaron a demostrar que un buen criterio de clasificación de tareas

consiste en tomar como medida el número de unidades de entrada que deben

conectarse a cada una de las unidades escondidas. Esta medida, según fue demostrado

por ellos, determina el orden de los resultados estadísticos que pueden ser extraidos

del sistema. Sin embargo, sus descubrimientos se detuvieron aquí, sin haber

encontrado un procedimiento para que la red aprendiera la configuración adecuada de

los pesos de las unidades, e incluso sugiriendo la posible inexistencia de un

procedimiento general y simple capaz de realizarlo.

Las redes paralelas y sus derivaciones fueron ampliamente criticadas en

los años que siguieron a las publicaciones de Minsky y Papert. Principalmente se

argumentaba la escasa efectividad de las redes para las que sí existía algoritmo de

aprendizaje, lo que limitaba mucho el alcance de las arquitecturas neuronales. Sin

embargo, actualmente, con los avances alcanzados en el entendimiento de la

naturaleza del paralelismo y la sustancial mejora de los computadores utilizados

-24-
como herramientas de trabajo, se ha despertado de nuevo el interés por este tipo de

arquitecturas, principalmente por su especial aplicación a tareas de percepción.

2.6. APRENDIZAJE DE REPRESENTACIONES

Las redes con estructura en tres niveles estudiadas por Minsky y Papert no

tienen libertad para elegir las representaciones internas porque los pesos entre las

conexiones de las unidades de entrada y las unidades escondidas del nivel intermedio

están predeterminados y el sistema no puede aprender. Si se permite que estos pesos

"aprendan", la red podrá determinar por sí misma lo que deben representar las

unidades escondidas. Si se extiende este esquema puede conseguirse un tipo de

aprendizaje muy interesante y bastante potente. La parte negativa de este sistema de

aprendizaje sería la dificultad para encontrar un procedimiento que sea capaz de

encontrar por sí mismo las representaciones internas adecuadas. Por otra parte, el

espacio de representaciones posibles es tan grande (depende exponencialmente del

número de unidades), que el procedimiento ha de ser necesariamente muy lento,

incluso si sólo explorase aleatoriamente el espacio de representaciones.

Sin embargo, diferentes investigadores han propuesto varios

procedimientos que se presentan brevemente a continuación, de los cuales los más

interesantes son:

- Retropropagación del gradiente (Back-propagation)

-25-
2.6.1. RETROPROPAGACIÓN DEL GRADIENTE

Este procedimiento fue descubierto de forma independiente por tres

investigadores, David Rumelhart, David Parker y Yann Le Cun. El procedimiento

realiza dos pasadas para cada vector de entrada presentado a la red. El paso hacia

adelante consiste en presentar el vector correspondiente en las unidades de entrada,

dejando que la actividad discurra desde las unidades de entrada a través de los

diferentes niveles de la red hasta producir un vector de salida. En el paso hacia atrás

se propaga hacia atrás el valor de la derivada del error (se considera como error la

diferencia entre el vector de salida obtenido y el vector de salida que se debía haber

obtenido realmente). Este procedimiento permite que la red calcule, para cada uno de

sus pesos, el gradiente del error respecto a dicho peso, y modifique los valores en la

dirección adecuada para producir una disminución del valor del error. De esta forma

el aprendizaje funciona mediante la realización del gradiente descendente a lo largo

de la superficie del error sobre el espacio de pesos configurado por la red.

El procedimiento de Retropropagación del gradiente ha mostrado ser

capaz de aprender un gran número de representaciones interesantes en las unidades no

visibles. Ha sido utilizado con éxito para problemas como el paso de información a través

de canales con ancho de banda muy pequeño o la obtención de filtros óptimos para

discriminar entre señales muy similares contaminadas por ruido.

Los autores Sejnowski y Rosenberg [Sejnowski, 1986] realizaron un trabajo

muy interesante en el que se mostró cómo se podía realizar el proceso de

entrenamiento d e una red que trabaja con Retropropagación del gradiente para

transformar adecuadamente los vectores de su entrada, que representan una

-26-
secuencia de letras, en vectores de salida representando su esquema fonético. Los

vectores de salida pueden utilizarse para alimentar un dispositivo de síntesis de voz,

obteniendo la secuencia hablada correspondiente al texto presentado en la entrada.

Los ejemplos utilizados en las pruebas de este sistema demostraron que la red era

capaz de extraer tanto las regularidades presentadas en los patrones de entrada,

como determinadas excepciones específicas que se encuentran en la pronunciación de

algunas palabras inglesas.

La Retropropagación del gradiente puede utilizarse también para obtener

las restricciones semánticas presentes en un conjunto de hechos. Este aspecto ha sido

estudiado por Geoffrey Hinton. Él trabajó con una red compuesta por cinco niveles de

unidades, a la que entrenó en el reconocimiento de 100 triadas relativos al

conocimiento sobre los miembros de dos familias de diferentes nacionalidades. Las

triadas eran del tipo (Victoria tiene-padre Christopher) o (Christopher tiene-esposa

Penélope), etc. Los vectores de entrada presentados al sistema representaban los dos

primeros términos de la triada, y los de salida el tercero de ellos. En las primeras

fases del entrenamiento los vectores de entrada no tenían excesivo sentido para la

red, puede decirse que los consideraba como símbolos arbitrarios. Sin embargo, tras

un cierto tiempo de entrenamiento, las triadas comenzaban a tener sentido para el

sistema, e incluso era capaz de generalizar el conocimiento adquirido para tratar

adecuadamente triadas en las que no había sido entrenado. Hinton observó también

mediante recopilación del conjunto de triadas que activaban cada una de las unidades

escondidas que éstas habían aprendido a representar ciertas propiedades que no se

habían utilizado en ningn patrón de entrada o salida, como "italiano" o "viejo".

El proceso de aprendizaje mediante Retropropagación del gradiente puede

verse, considerado localmente, como un simple proceso de ajuste de los pesos de las

conexiones. Pero, atendiendo al comportamiento global de la red, puede decirse que

ésta realiza aprendizaje estructural, creando términos nuevos para poder representar

- 27 -
regularidades en el dominio del problema. Este ejemplo puede servir también para

ilustrar el tipo de representación distribuida que se utiliza en el sistema, ya que la

representación interna de la red sobre cada una de las personas reflejadas en los

vectores se plasma como un diferente patrón de activación de las unidades

escondidas.

El método de Retropropagación del gradiente presenta muchas similitudes

con el algoritmo de Baum-Welch, diseñado para realizar ajuste de parámetros en

autómatas de estado finito con funcionamiento estocástico. Estos autómatas se

utilizan ampliamente como modelos generativos en sistemas de reconocimiento del

lenguaje hablado. La semejanza de los dos procedimientos ha causado una gran

extensión del uso de redes conexionistas con procedimiento de aprendizaje de

Propagación Hacia Atrás para este tipo de problemas de reconocimiento. Las

posibilidades de las redes conexionistas han suscitado gran interés, ya que pueden

resolver muchas de las limitaciones que presentaban los autómatas de estado finito.

El problema más grave lo constituía el gran número de nodos que se necesitan para

poder representar en un autómata la información sobre los diferentes sonidos (2n,

siendo n el número de bits necesarios para codificar la información). Los sistemas

conexionistas resuelven perfectamente este problema, ya que permiten la activación

de varias unidades a la vez.

2.6.2. PROCRDIMIENTO AR-P

El procedimiento de aprendizaje AR-P fue descrito por Andy Barto

[Barto,1985]. Con él mostró la forma en la que redes compuestas por unidades

sencillas con funcionamiento estocástico son capaces de aprender a cooperar con

objeto de maximizar una señal crítica que depende del vector de salida y es, a su vez,

-28-
recibida por cada una de las unidades que componen la red. El método resulta mucho

más lento que el de propagación hacia atrás, principalmente por no utilizar

directamente el cálculo del gradiente para la modificación de los pesos. En lugar de

realizar este cálculo, trata de descubrir cuál es el efecto de la modificación de cada

peso de la red mediante experimentación con diferentes valores obtenidos variando el

peso original aleatoriamente. Sin embargo tiene la ventaja de no necesitar dos

pasadas diferentes para realizar el aprendizaje, por lo que parece acercarse más al

comportamiento real del cerebro humano.

2.7. SATISFACCIÓN DE RESRICCIONES EN REDES PARALELAS

La consideración asumida hasta el momento de que la interpretación

perceptual (lo que se denomina en general reconocimiento) consiste en la

transformación de un cierto vector de entrada a través de sucesivos niveles de

unidades hasta obtener su adecuada clasificación es bastante restrictiva si se

consideran las tareas que se presentan con ejemplos reales. La mayoría de los

problemas de reconocimiento requieren la asimilación simultánea de varios niveles de

datos, y un resultado estructurado, en lugar de la obtención de una única categoría de

clasificación.

Para estas tareas es necesaria un red de tipo conexionista, pero que sea

capaz de almacenar la maraña de restricciones existentes en sus diferentes niveles,

tomándolas como condiciones límite del entorno y evolucionando hasta encontrar la

mejor solución que las cumpla. Se puede permitir que el sistema no cumpla la

totalidad de las restricciones para que pueda explorar todas las posibilidades

encontrando la verdadera solución óptima. Una buena forma de garantizar que la red,

una vez puesta en funcionamiento, llegará a un estado de reposo, consiste en

-29-
demostrar que existe una determinada función de costo cuyo valor disminuye con

cada modificación de los pesos de las conexiones. Hummel y Zucker [Hummel, 1983]

demostraron la existencia de tal función para el caso de redes que transmiten valores

y cuyas conexiones son simétricas, es decir, el peso es el mismo sea cual sea la

dirección considerada. Aproximadamente al mismo tiempo, Hopfield [Hopfield, 1982]

descubrió una función de coste, que denominó energía, aplicable a redes con unidades

binarias con un valor umbral y conexiones simétricas. Este planteamiento es el

utilizado en el sistema conexionista denominado Máquina de Boltzmann, que es el

objeto principal de este trabajo y será presentada ampliamente en sucesivos

capítulos.

2.8. APLICACIONES DE LOS SISTEMAS CONEXIONISTAS

Las redes conexionistas han sido aplicadas a muchos tipos de problemas

diferentes, que van desde el área del cálculo numérico hasta las más complejas tareas

de reconocimiento de formas. En este último campo han sido utilizadas especialmente

en labores de visión computacional, campo para el que parecen especialmente

adecuadas.

Hopfield, por ejemplo, demostró el poder computacional de la red que él

mismo diseñó utilizándola para resolver el conocido "Problema del Viajante". Algunos

autores han utilizado las redes paralelas de este tipo para resolver problemas

puramente simbólicos como el aprendizaje de relaciones, mientras que otros han

resuelto problemas tan complejos como el "Problema de Hitchcock" o tan comunes

como la resolución de sistemas de ecuaciones.

- 30 -
En definitiva, las arquitecturas conexionistas han demostrado su eficacia

en dominios muy diferentes, en los que son necesarias diferentes características. Este

hecho ha provocado la enorme popularidad que han adquirido estos sistemas en los

últimos años.

-
31 -
3. LA MÁQUINA DH BOLTZMANN

3.1. INTRODUCCIÓN

La investigación sobre las redes basadas en componentes neuronales fue

abandonada por sus escasos resultados a finales de los años sesenta. La publicación del

libro de Minsky y Papert [Minsky, 1969] sobre el Perceptron fue la última registrada

sobre este tema. Sin embargo, no se han abandonado los estudios de la estructura del

cerebro humano, con los que se intenta descubrir cuál es el mecanismo que hace de él un

perfecto reconocedor de patrones.

Siguiendo las ideas primitivas de las redes neuronales, y teniendo en

cuenta los avances realizados tanto en el campo de la neurofisiología como en el de la

microelectrónica, se ha "resucitado" de nuevo la investigación sobre redes de estas

características. En la universidad estadounidense Carnegie-Mellon, un equipo de

investigadores, con Geoffrey Hinton a la cabeza, ha desarrollado un sistema basado

en los principios de las redes conexionistas, pero cuya eficiencia supera grandemente

la de otros sistemas del mismo tipo presentados hasta el momento. Ellos han llamado

a su sistema Máquina de Boltzmann, en honor de Ludwing Boltzmann, fundador de la

-32-
mecánica estadística. Más tarde podrá comprobarse que el nombre elegido se debe a la

fundamentación probabilística del funcionamiento del sistema.

La Máquina de Boltzmann trata de modelizar el funcionamiento del

cerebro humano, si bien es necesario tener en cuenta que algunas de sus

características difieren sustancialmente de la estructura real del mismo. Sin

embargo, el comportamiento global puede considerarse bastante semejante, ya que se

trata de una red neuronal capaz de realizar aprendizaje tras una fase de

entrenamiento.

Los autores definen el sistema como "una organización comptacional

paralela, adecuada para la realización de tareas en las que es necesaria la

satisfacción de restricciones, interviniendo un gran número de restricciones

denominadas "débiles' (cuya stisfacción contribuye al éxito en la realización de la

tarea, y cuyo fallo no es excesivamente importante)".

3.2. ESRUCTURA Y COMPORTAMIENTO DE LA MÁQUINA

DE BOLTZMANN

La Máquina de Boltzmann se compone de elementos de computación

primitivos denominados "unidades". Éstas se encuentran conectadas entre sí sin reglas

específicas mediante "uniones" bidireccionales. Todas las unidades de una red son

exactamente iguales, y el funcionamiento también es idéntico para todas ellas. Las

unidades se comportan como elementos binarios en cuanto a su estado. Es decir, en

cada instante, una unidad puede encontrarse en uno de sus dos posibles estados,

"activa" (on) o "inactiva" (off). El estado de una unidad cualquiera dentro de la red se

-33-
determina en función de los estados de las otras unidades conectadas a ella y del

"peso" de las respectivas uniones.

Cada unión tiene asociado un valor numérico, que es llamado su "peso".

Este valor es el mismo en las dos direcciones de la conexión, es decir, las uniones

entre las unidades de la red son simétricas (esta restricción, no cumplida por las

conexiones neuronales del cerebro humano, es bastante fuerte). Los pesos de las

uniones pueden tomar valores numéricos de cualquier signo.

Figura 2. Representación de una posible topología de una Máquina de

Boltzmann.

Según esta descripción, la Máquina de Boltzmann puede clasificarse como

un sistema conexionista que transmite valores, ya que las conexiones entre las

uniones no transmiten ni marcadores que puedan ser almacenados en las unidades, ni,

por supuesto ningún tipo de mensajes, ya sean simples o complejos. Las unidades que

componen una Máquina de Boltzmann sólo son capaces de realizar la suma aritmética

-34-
de los valores que reciben de otras unidades por medio de las conexiones, por lo que se

pueden considerar unidades de proceso muy simples.

Una red cuya topología se ajusta a la descrita para la Máquina de

Boltzmann puede ser la que muestra la figura 2. Como puede apreciarse en la figura, no

existe ningún tipo de restricción en cuanto al número o configuración de las

uniones entre las distintas unidades.

El cálculo del estado de una unidad dentro de la red se realiza mediante el

procedimiento que se expone a continuación. Se considera que cada unidad posee un

valor umbral para pasar del estado inactivo al estado activo. Es decir, la unidad

estará en estado activo si la suma de los pesos de sus uniones con otras unidades

activas supera el valor umbral. En caso de que la suma no supere dicho valor, la

unidad se encontrará inactiva. Sin embargo, el comportamiento no es tan simple, ya

que los resultados obtenidos de esta forma no eran excesivamente satisfactorios. En

realidad, las unidades se comportan de forma probabilística. Este comportamiento

produce el mismo efecto que produciría un umbral no fijo, sino oscilante. La

oscilación del umbral vendría dada por el valor de la suma de los pesos; cuanto mayor

es el valor, mayor es la probabilidad de que la unidad pase al estado activo, que es lo

mismo que decir que ha disminuido el valor del umbral. De esta forma no puede

asegurarse que la misma entrada (los mismos pesos y las mismas unidades vecinas

activas) produzca la misma respuesta de forma determinista. Aunque no se conoce

con certeza el comportamiento de las neuronas del cerebro humano, sí parece estar

comprobado que no es determinista, por lo que cualquier mecanismo que pretenda

reproducir los patrones de funcionamiento del cerebro ha de tratar de evitar el

determinismo en la medida de lo posible.

Para modelizar el mundo real con este sistema, el significado que toma

cada uno de sus componentes es el siguiente:

-35-
- Una unidad en estado activo o inactivo significa que el sistema

acepta o rechaza, respectivamente, una hipótesis elemental (representada por

la unidad) sobre el conjunto del sistema.

- El peso de la unión entre dos unidades representa una restricción

débil entre dos hipótesis. Si el valor del peso es positivo significa que las

dos hipótesis representadas por las unidades conectadas "tienden a

soportar" o a reforzar alguna otra hipótesis. Es decir, que si las dos

hipótesis son aceptadas (las dos unidades están activas), la probabilidad de

que la tercera sea aceptada aumenta. Por el contrario, si el valor del peso

es negativo, significa que las dos hipótesis no deben ser aceptadas

simultáneamente.

Normalmente en el tratamiento de este tipo de redes se utiliza la

convención de considerar los estados de las unidades como cifras binarias. Es decir, el

estado activo se representa con el valor 1, y el estado inactivo con el valor O. De esta

forma, las combinaciones de los estados de las unidades de la red pueden codificarse

como números binarios o incluso como vectores del mismo tipo, permitiendo un

manejo más sencillo de las configuraciones globales de la red en cada instante.

En cuanto al tratamiento de la red como entidad global, algunos autores la

consideran incluida en el grupo de mecanismos de "caja negra" [Forsyth, 1 986]. Estos

mecanismos presentan una pequeña parte visible, pero su estructura interna

permanece oculta, de forma que sólo es posible apreciar su comportamiento en

cuanto a los resultados obtenidos, pero no muestra cómo llega a obtenerlos. La

Máquina de Boltzmann se ajusta a esta estructura considerando parte de sus unidades

como unidades de entrada, otras como unidades de salida, y manteniendo el resto

como unidades escondidas, pertenecientes a la "caja negra". Todas esta unidades, sin

embargo, son del mismo tipo y se comportan de la misma forma. Con este

-36-
planteamiento la máquina se parece más a un mecanismo con el que se puede t rabajar y

realizar modelizaciones mediante asignación explícita de los valores adecuados a las

unidades de entrada y salida.

La estructura de la Máquina de Boltzmann está muy relacionada con un

sistema descrito en el año 1982 por J.J. Hopfield [Hopfield, 1982]. En este sistema

Hopfield asignaba a cada estado global de la red un valor numérico único, al que

denominó su "energía". La semejanza entre el sistema descrito por Hopfield y la red

ideada por Hinton, permite también asignar a los estados globales de la Máquina de

Boltzmann un valor de energía. Este valor depende de los estados de las unidades y de los

pesos de las uniones de acuerdo con la siguiente fórmula:

E= - ..s. s. +
I I J ¡ ¡
i i

siendo:

Wi : peso de la unión entre las unidades i y j.

s¡ : valor binario correspondiente al estado de la unidad i; 1 si es

activa, O si es inactiva.

0¡ : umbral de la unidad i.

El significado de este valor global de una configuración de la red dada es

la medida en la que esa asignación de hipótesis (representadas por las unidades) no

cumple las restricciones implícitas en el dominio del problema (las restricciones están

representadas por la topología de la red y los pesos de las uniones que se hayan

establecido).

- 37 -
Así pues, el funcionamiento de la red ante una determinada asignación de

valores a las unidades consideradas de entrada, ha de ir encaminado a modificar su

estructura interna (estados de las unidades y pesos de las conexiones), de forma que la

energía global de la red se minimice. Para ello, cada unidad elemental debe ser capaz

de comportarse de forma que contribuya a la minimización de la energía global de la

red.

Hopfield demostró en su trabajo que si se cumplen determinadas

condiciones, el sistema siempre evoluciona hasta alcanzar una situación de reposo en

la que el valor de la energía de la red es mínimo. Este mínimo no tiene por qué ser

necesariamente el mínimo global de la red, de hecho en la mayoría de los casos es

simplemente un mínimo local. Hopfield propuso un sencillo procedimiento para

encontrar una combinación de valores que constituyan un mínimo local del valor de la

energía. El procedimiento consiste en asignar a cada hipótesis (cada unidad), de sus

dos estados posibles, aquél que produzca el menor valor de la energía global, dado el

valor del resto de las hipótesis (el resto de las unidades de la red) en ese momento. Si

este proceso de decisión de estado es realizado por las unidades de la red de forma

asíncrona y se considera despreciable el tiempo de transmisión de los estados a través

de las conexiones, se alcanza un mínimo local de energía con toda seguridad.

Dado que las conexiones entre las unidades son simétricas, puede decirse

que la diferencia de energía global del sistema aceptando la hipótesis k (unidad k

activa) y rechazándola (unidad k inactiva), viene determinada de forma local por la

unidad k, independientemente del resto de las unidades de la red. El valor de esta

diferencia, denominado "hueco de energía" de la unidad k, se expresa mediante la

siguiente relación:

/Ek = 2 wki8i - 8k
i

- 38 -
donde los símbolos tienen el mismo significado que en la fórmula de la

energía escrita anteriormente.

Así pues, del estudio de esta expresión puede concluirse la sencilla regla

de funcionamiento para las unidades que ya se había presentado. Además queda

también demostrado que el uso de esta regla consigue minimizar la energía global de

la red. La regla de decisión es, pues, la siguiente: para minimizar la contribución de

una unidad a la energía global, ésta debe adoptar el estado activo si la entrada que

recibe del resto de las unidades (suma de los pesos de sus uniones con otras unidades

activas) supera el valor de su umbral; de lo contrario, debe adoptar el estado inactivo.

En este momento puede hacerse una consideración sobre los valores 8¡,

correspondientes a los umbrales de las unidades, que han aparecido en las ecuaciones

anteriores. Estos valores pueden ser eliminados debido al hecho de que el efecto

producido por 8¡ en la enegía global del sistema es idéntico y de sentido contrario al

efecto de una unión con peso -8¡ entre la unidad i y una unidad especial que, por

definición, se encuentre siempre en estado activo. Esta unidad especial, que puede

denominarse "unidad cierta", no es necesario que exista de forma real en la

composición de la red, sin embargo, es conveniente suponer su existencia a efectos de

simplificación de los cálculos. Esta simplificación se deriva del hecho de que la

existencia de la "unidad cierta" permite tratar el umbral de una unidad de la misma

forma que se tratan las uniones entre nodos, evitando así añadir un término al

sumatorio en las fórmulas. El valor -8¡ que se introduce como el peso de la unión

entre la unidad i y la unidad cierta se denomina "sesgo" de la unidad i.

Si se supone la existencia de la unidad cierta en cualquier Máquina de

Boltzmann, las ecuaciones que rigen la energía global de la red y el hueco de energía de

una unidad pueden expresarse de la siguiente forma:

-39-
E= - . . S. S .
IJ 1 J
i

Sin embargo, la seguridad de que el sistema alcanza siempre un mínimo

local no es suficiente para conseguir un mecanismo que pueda considerarse

modelizador del cerebro humano, y capaz de cierto tipo de aprendizaje. Las tareas en

las que es necesario satisfacer restricciones (aunque éstas sean en su mayoría débiles)

necesitan escapar de alguna manera de los mínimos locales, que significan soluciones

parciale , para poder encontrar la configuración que es el verdadero mínimo global,

es decir, la solución total.

U na forma de conseguir que el funcionamiento del sistema no lo conduzca

a detenerse en un mínimo local, permitiéndole encontrar diferentes estados de

equilibrio que constituyen mínimos locales hasta encontrar el mínimo global, es hacer

posible que la red pueda modificar su estado hacia una configuración de mayor

energía que la de partida. Con la regla de activación de las unidades que se ha

presentado anteriormente, la red pasaba siempre de estados de mayor energía a

estados de menor energía, pero nunca podía ocurrir lo contrario. De esta forma, si se

llega a un estado que es un mínimo local, la red no es capaz de salir de él porque para

ello necesitaría poder aumentar su energía en lugar de disminuirla.

Para conseguir este comportamiento se han revisado conceptos de los

sistemas termodinámicos, cuyo comportamiento en algunos aspectos es semejante al

de este tipo de redes. El algoritmo elegido se basa en el presentado por N. Metropolis

[Metropolis, 1953] concebido para estudiar las propiedades de los sistemas

termodinámicos. Según este algoritmo, puede asegurarse que la probabilidad de que el

estado de la unidad k sea activo, independientemente de su estado anterior es:

- 40 -
1
pk

=
( 1 +e -r)
siendo:

óEk : hueco de energía correspondiente a la unidad k.

T : parámetro que en los sistemas termodinámicos es la temperatura. En

este caso es un parámetro que se comporta de la misma forma que la

temperatura en un sistema físico.

{\ (( ·
1

(
··

f I

Figura 3. Representación de una superficie ondulada con mínimos locales

y un único mínimo global.

Por lo tanto, para mejorar el funcionamiento del sistema se disminuye su

determinismo haciendo que las unidades se comporten de forma probabilística. Para

entender el por qué de este comportamiento, puede utilizarse una analogía con un

sistema físico muy sencillo. Supóngase una bola, por ejemplo metálica, situada sobre

-
41 -
una superficie ondulada como la de la figura 3. En ella existen diferentes lugares con

altura pequeña (mínimos), pero sólo uno de ellos es el que se encuentra más bajo que los

demás, es el mínimo global del sistema.

Si se deja caer la bola desde uno de los extremos, ésta recorrerá la

superficie cayendo en un mínimo local si éste se encuentra antes en su camino que el

mínimo global. Una vez situada en este punto, la bola no puede salir de él por sí

misma, por lo que nunca será capaz de alcanzar el mínimo global. Sin embargo, si se

agita fuertemente el conjunto, la bola comenzará a moverse aleatoriamente y tendrá

más probabilidad de conseguir saltar las barreras que se interponen entre su posición

y la del m íni m o global. Si este proceso de agitación del sist e m a se realiza

convenientemente y con continuidad, el sistema alcanzará una situación denominada

"equilibrio térmico", en la cual la bola continuará desplazándose de un lugar a otro,

pero la probabilidad de que se encuentre en un lugar determinado de la superficie se

m antiene estable y sólo depende de la altura de la superficie en ese punto.

Además, en el equilibrio térmico también se cumple que el logaritmo de la

probabilidad de encontrar la bola en dos posiciones diferentes de la superficie es

proporcional a la diferencia entre la energía de las dos posiciones. Esta propiedad fue

utilizada por Scott Kirpatrick [Kirpatrick, 1983] de IBM, con el nombre de "ruido

térmico" para conseguir evitar los mínimos locales en redes del tipo de las que se está

tratando.

Para introducir esta idea del "ruido térmico" en la Máquina de Boltzmann

sólo es necesario modificar la regla de decisión del estado de las unidades. Éstas

deben calcular la suma de los pesos de sus conexiones con otras unidades activas de la

misma forma que antes, pero en vez de activarse siempre que este valor es mayor que

su umbral y desactivarse si es menor, deben utilizar la regla probabilística presentada

anteriormente. Esta regla de decisión es aplicable a una partícula con dos estados de

energía posibles. Si se tuviera un sistema compuesto por este tipo de partículas

-42-
conectadas entre sí y se sometiera a alta temperatura dejándolo enfriar

progresivamente, llegaría a alcanzar el equilibrio térmico y durante el proceso de

enfriado, la probabilidad de que el sistema se encontrase en un determinado estado

seguiría la distribución de Boltzmann. Aplicando de nuevo esta analogía física a la red

conexionista presentada, se puede suponer que si las unidades individuales funcionan

de acuerdo con la fórmula de probabilidad vista, partiendo de un estado global

arbitrario de alta energía, la red llegará a alcanzar el estado de "equilibrio térmico",

y la probabilidad relativa de dos estados seguirá la distribución de Bolt z m ann, cuya

expresión es:

siendo:

P0 : probabilidad de que el sistema se encuentre en el estado global

a.

E0 : energía del estado global a de la red.

La utilización de esta fórmula en el desarrollo del sistema es la causa del

nombre de Máquina de Boltzmann asignado a la red.

La distribución de Boltzmann posee ciertas propiedades bastante

interesantes como las siguientes:

- Es una relación muy sencilla y fácil de manejar.

- 43 -
- La diferencia de los logaritmos de las probabilidades de dos

estados es igual a la diferencia entre las energías de dichos estados

(fijada la temperatura al valor 1).

- La distribución de equilibrio es independiente del camino seguido

hasta alcanzar el estado de equilibrio.

- Está íntimamente relacionada con la Teoría de la Información.

A bajas te mperaturas el sist e ma tiene una fuerte tendencia a situarse en

estados de baja energía, mientras que con valores de T altos la tendencia es bastante

m ás pequeña. Sin e mbargo, si la te mperatura es alta, el equilibrio se alcanza con

mayor rapidez que si es baja, situación en la que se puede tardar mucho tie mpo en

llegar a la situación de equilibrio. Para aprovechar esta circunstancia, se comienza

con un valor de temperatura alto, y se reduce progresivamente, observando los

diferentes estados por los que va pasando la red hasta estabilizarse. Este proceso se

corresponde con el templado de un sistema físico real (simulated annealing).

A altas te mperaturas la red tiende a ignorar las diferencias de energía

pequeñas y alcanza rápidamente la situación de equilibrio. La situación obtenida

puede considerarse un buen mínimo para el nivel más general y tosco de la estructura

global del sistema. Es decir, en este primer momento la configuración de la red

refleja la estructura del entorno, pero de forma muy general y poco afinada. A

medida que disminuye la temperatura, la red se hace más sensible a las diferencias de

energía y evolucionará hasta encontrar un mínimo mejor dentro de la escala de

afinado que había conseguido con el mínimo anteriormente encontrado. Este

procedimiento de búsqueda de la estructura tosca antes de depurar el resultado para

conseguir una mayor aproximación a la estructura real es muy útil en problemas en

los que han de satisfacerse una gran cantidad de restricciones débiles. Sin embargo, el

- 44 -
procedimiento fracasa en los casos en los que la solución se encuentra en un mínimo

muy profundo y aislado.

3.3. REPRESENTACIÓN DEL CONOCIMIENTO EN LA MÁQUNA

DE BOLTZMANN

Hasta el mom ento se ha hablado de la Máquina de Bolt z mann en cuanto a

su estructura y funcionamiento, pero no hay que olvidar que es un mecanismo que se

ha de utilizar para resolver problemas. Este hecho plantea una importante cuestión

¿cómo se representan en una Máquina de Boltzmann los conceptos para los que

usualmente utilizamos palabras?. Ya se han estudiado en capítulos anteriores las dos

principales formas de representación, local o distribuida. Ambas presentan ventajas e

inconvenientes, y ambas son válidas para cualquier arquitectura conexionista como la

M áquina de Boltzmann.

En una Máquina de Boltzmann una representación distribuida corresponde

a un m ínimo de la energía de la red. Por ello, el proble m a de crear un conjunto de

representaciones distribuidas es equivalente al problema de crear una "arquitectura

de energías". El algoritmo de aprendizaje que se ha diseñado para esta arquitectura es

capaz de resolver este problema, por lo que se considera más adecuada la

representación distribuida para la Máquina de Boltzmann. El carácter difuso que

confiere a cada pieza de conocimiento este tipo de representación no es un problema

serio, ya que la simplicidad matemática de la distribución de probabilidad sobre la

que se fundamenta el algoritmo hace posible manejar todos los pesos de las

conexiones distribuidos a lo largo de la red de forma coherente, basándose sólo en

información puramente local.

-45-
4. APRENDIZAJE

4.1. INTRODUCCIÓN

La capacidad de aprender las consecuencias de las propias acciones es

fundamental para el comportamiento adapatativo de todos los organismos. La mayor

parte del estudio del comportamiento inteligente puede ser caracterizado como el

estudio de la capacidad para aprender acerca de las contingencias del mundo.

Hay poca distinción formal entre aprendizaje y memoria. Los estudios del

aprendizaje tienden a subrayar primariamente la adquisición de conocimiento.

Claramente ambos están tan interrelacionados que el estudio de uno debe estar ligado

necesariamente al estudio del otro. Es necesario analizar cómo se adquiere el

conocimiento en el interior del sistema de la memoria, es decir, cómo se establecen

las relaciones existentes entre las situaciones del entorno, las acciones del ser

hu mano y los efectos resultantes.

Algunos estudios han demostrado que cuando una persona aprende algo se

establecen nuevas vías en la red nerviosa del cerebro. Entre las ramificaciones

adyacentes de las c élulas nerviosas se produc e la sinapsis, que trans m it e la

información. Es decir, en principio existen pocas conexiones dendríticas, pero a

- 46 -
medida que se aprenden cosas se forman otras conexiones, permitiendo la sinapsis y

creando así vías para la transmisión de información. Por lo tanto, puede decirse que el

aprendizaje transforma la configuración y estructura del cerebro.

Las arquitecturas conexionistas pretenden simular este comportamiento

del cerebro, realizando aprendizaje mediante modificación de su estructura. La

mayoría de estas arquitecturas hacen uso de algoritmos que conducen la red a

situaciones en las que su estructura modeliza la del entorno que se les presenta.

4.2. APRENDIZAJE EN LA MÁQUINA DE BOLTZMANN

Uno de los principales aspectos de la Máquina de Boltzmann es que su

formulación permite la construcción de un algoritmo de aprendizaje independiente del

dominio de aplicación. Si se retoma la idea de la máquina como una caja negra entre

unas unidades externas de entrada y salida, es fácil imaginar cómo este mecanismo

puede utilizarse en tareas como las que se denominan de "aprendizaje" en máquinas

convencionales.

Las unidades de entrada se fijan con valores determinados, a la vez que se

fijan también los correspondientes valores de las unidades de salida. Una vez hecho

esto se deja que el sistema evolucione hasta llegar a la situación de equilibrio. Si se

repite este proceso con diferentes patrones de entrada y sus respectivos valores de

salida, finalmente la máquina habrá modificado sus valores internos capturando las

regularidades existentes en los sucesivos patrones presentados. De esta forma, si se le

presenta un nuevo patrón en las unidades de entrada y se deja que se estabilice, las

unidades de salida quedarán con los valores correspondientes. Es decir, la red es

-47-
"entrenada" para "aprender" a obtener las salidas adecuadas para los patrones que se le

presentan en las unidades de entrada.

Este aprendizaje es realizado por la red mediante la modificación de los

valores de los pesos que tienen asignadas las uniones entre unidades. La dificultad se

reduce a la búsqueda de un algoritmo que consiga realizar tales modificaciones

automáticamente, haciendo posible la adaptación del sistema a la estructura del

entorno que le es presentado.

La búsqueda de algoritmos de este tipo comenzó con el estudio de las

redes conexionistas, y no puede decirse que tuviera mucho éxito. En la literatura

aparecen varios de ellos, pero su eficacia como verdaderos algoritmos de aprendizaje

es bastante cuestionable. Normalmente consistían en meras generalizaciones de

algorit mos d e éxito probado con redes simples. E l argu mento m ás utilizado e n contra

de esta generalización de algortimos de aprendizaje para estructuras simples a redes

m ás complejas es precisamente esta complej idad. Es decir, se argumenta que para

que una red sea capaz de realizar tareas interesantes debe contener elementos no

lineales y cuyo comportamiento no esté directamente determinado por la entrada. El

problema principal entonces en este tipo de redes es que cuando funcionan

incorrectamente, es prácticamente imposible encontrar cuál de los pesos de las

conexiones es el que no es correcto. Este problema fue llamado de "asignación de

confianza", y causó duras críticas hacia las arquitecturas conexionistas.

El problema de asignación de confianza fue la causa de la desacreditación

del Perceptron, ya que, pese a la sólida fundamentación matemática de su teorema de

convergencia, tampoco pudo ser generalizado para redes en las que la tarea no

especificase directamente la forma en la que deben ser utilizadas cada una de las

unidades.

- 48 -
La formulación de la Máquina de Boltzmann resuelve el problema de

asignación de confianza. Utilizando la regla de decisión probabilística que ya se ha

presentado, y dejando que la red evolucione hasta alcanzar el equilibrio térmico a una

determinada temperatura, se obtiene, como ya se ha visto, una relación muy simple

entre la probabilidad de un estado y su energía. Si se supone una red que evoluciona

libremente sin ningún valor fijado en sus unidades de entrada y salida, la relación

puede expresarse de la siguiente forma:

SLnP

sW..
ª
= .
T
[ sª - p
'

!
!J

donde:
! J

S¡ª : estado de la unidad i en el estado global a de la red.

p iJ : probabilidad de que las unidades y j estén activas cuando el

sistema se encuentre en equilibrio.

Esta fórmula permite manejar los logaritmos de las probabilidades de los

estados globales de la red. Por lo tanto, si se especifican directamente las

probabilidades Pa requeridas para cada estado global a, existe un modo directo de que

el sistema converja a un conjunto de pesos de sus uniones que consiga esas

probabilidades. Si bien es cierto que existe este método, también es cierto que no es

posible asegurar que tal conjunto de pesos exista, contrariedad que es necesario tener

en cuenta. Sin embargo, esta forma de aprendizaje no es excesivamente interesante,

ya que han de darse de antemano las probabilidades necesarias para los estados

globales completos. Es decir, que el entorno exterior al sistema es el que decide qué

representación interna debe ser utilizada. Evidentemente, los problemas interesantes

no aparecen en estos casos sino en los casos en los que el entorno cont i e n e

49 -
restricciones implícitas de alto nivel. En tales casos, la red ha de elegir las

representaciones internas adecuadas para poder expresar las restricciones del entorno

de forma eficiente. Este es el tipo de aprendizaje que resulta verdaderamente

interesante.

Una vez constatada la posibilidad de que un sistema como la Máquina de

Boltzmann aprenda, es necesario encontrar la forma de representar la estructura

externa que se desea modelizar, cuestión no trivial en una red conexionista. Ya se ha

presentado la división de las unidades de la máquina en tipos según su situación,

entrada, salida o intermedias. La división puede expresarse también en dos tipos de

unidades, un conjunto no vacío de unidades visibles, y un conjunto, que puede estar

vacío, de unidades "escondidas" o no visibles. Las unidades visibles son las que actúan

como interface entre el sistema y su entorno; por ejemplo, durante la fase de

entrenamiento, los estados de estas unidades son fijados desde el exterior. Las

unidades no visibles no son accesibles desde el exterior. Su existencia se justifica para

representar o modelizar restricciones inherentes a los patrones de entrada que no

pueden representarse directamente conectando las unidades de entrada y las de

salida. Es decir, si existen restricciones de alto nivel en la estructura del entorno que

se quiere modelizar, la utilización de unidades no visibles para representar estas

hipótesis reduce el nivel de complejidad de todo el conjunto de unidades del sistema,

simplificando su funcionamiento y, sobre todo su inteligibilidad.

Considerando los dos posibles estados de cada unidad con los valores

binarios O y 1, se puede denominar "vector" a la recopilación de los estados de cada una

de las unidades de entrada o salida. Esta notación es la que se va a utilizar a partir de

este momento.

Durante el proceso de aprendizaje de la máquina se asume que cada uno

de los vectores de entrada que se asigna desde el exterior se mantiene fijo por el

tiempo necesario para permitir que la red alcance la situación de equilibrio térmico.

- 50 -
Además, cualquier estructura que exista en las secuencia de vectores de entrada que

se presentan sucesivamente a sistema será ignorada por éste. De esta forma, la

estructura de un entorno concreto puede especificarse mediante la distribución de


n
probabilidad sobre los 2 posibles estados diferentes de las n unidades visibles de la

red. Si la red consigue ajustar su estructura interna de manera que consiga la misma
n
distribución de probabilidad sobre los 2 estados posibles cuando se la deja

evolucionar libremente hasta la situación de equilibrio térmico con todas las unidades

visibles no fijadas (sin vector de entrada del exterior), entonces puede decirse que la

red ha conseguido modelizar perfectamente el entorno, que es un modelo perfecto de

su estructura.

La obtención de un modelo perfecto que se comporte exactamente igual

que el entorno en el que ha sido entrenado es prácticamente imposible. Esto es debido

a la insuficiencia del número de pesos y de sesgos entre las unidades visibles y las no
n
visibles para poder representar las 2 probabilidades de los estados de las unidades

visibles. Sin embargo, aunque no se alcance la perfección, si las unidades no visibles

de la red son capaces de capturar las regularidades que existen en el entorno, puede

conseguirse una buena aproximación del sistema a las probabilidades reales del

entorno.

Para poder cuantificar la diferencia existente entre el modelo interno

conseguido por la red y el modelo real presentado, puede utilizarse la siguiente

fórmula, basada en conceptos de la Teoría de la Información:

P(V )
G= ) P(V ) Ln -ª
- ª P' (V )
a a

donde:

- 51 -
P(V0) : probabilidad de que las unidades visibles de la red se

encuentren configurando el estado a de la red, cuando sus estados

están determinados por el entorno.

P' (V0) : probabilidad de que las unidades visibles de la red se

encuentren configurando el estado a de la red, cuando ésta

evoluciona libremente sin entrada fijada por el entorno.

Esta medida G, suele denominarse en algunas ocasiones divergencia

asi m étrica de la ganancia de información. G m ide en realidad la distancia existente

entre la distribución dada por P' (V0) y la dada por P(V0). G vale cero cuando las

distribuciones son idénticas. Si no los son, su valor es un número real positivo.

Estudiando un poco la expresión de G se puede observar que el término

P '(V 0) depende de los pesos de las uniones entre las unidades, por lo tanto, el valor de

G puede variarse modificando los valores de los pesos dentro de la red. Para obtener

el valor del gradiente descendente en G, es necesario conocer la expresión de la

derivada parcial de G respecto a cada uno de los pesos. Esta expresión, que es muy

complicada en la mayoría de las redes de este tipo, resulta muy sencilla de calcular

en una Máquina de Boltzmann. La sencillez se debe principalmente a la simplicidad de

las relaciones existentes entre los pesos y las probabilidades de los estados en la

situación de equilibrio térmico. Como las probabilidades de los estados globales

vienen determinadas por las energías de los estados, y éstas a su vez vienen

determinadas por los pesos de las uniones, se puede obtener fácilmente la expresión

de la derivada parcial de G respecto a los pesos. Ésta es:

oG
-
= -

ow . .
IJ

-52-
donde:

PiJ : probabilidad media de que las unidades i y j estén activas cuando las

unidades visibles están fijadas por el entorno.

p 'iJ : probabilidad media de que las unidades i y j estén activas

cuando la red evoluciona libremente sin asignación de estados del

entorno.

Ambos valores de probabilidad han de ser medidos en estado de equilibrio

de la red. Es interesante apreciar la semejanza entre esta ecuación y la ecuación que

representa la derivada parcial del logaritmo de la probabilidad de un estado global de

la red.

De la observación de esta ecuación es fácil deducir lo que hay que hacer

para minimizar G. Como puede verse, G depende de los valores PiJ y PiJ cuando la red

está en equilibrio. Para conseguir disminuir el valor de G es suficiente con modificar

cada peso en una cantidad proporcional a la diferencia entre los valores de las dos

probabilidades. Es decir, de la forma que se indica en la siguiente expresión:

6wiJ = B ( P¡J - p'iJ )

donde B es un factor de escala.

Esta es, pues, la modificación que debe realizarse en los pesos de las

uniones para conseguir minimizar el valor de G, es decir, para reducir al mínimo la

diferencia entre el modelo conseguido por la red y el modelo real del entorno. Pese a

lo que pueda pensarse, hay que observar que la modificación de los pesos, según esta

expresión, depende exclusivamente de información local de cada unión, no de

información global de la red. El peso de una unión se modifica dependiendo sólo de los

- 53 -
valores de las dos unidades que conecta, y sin embargo, la modificación produce una

mejora en la medida global de adecuación, G.

Incluso con esta regla, sigue estando presente el problema de los mínimos

locales. Si la red estuviera compuesta solamente por unidades visibles conectadas

directamente entre sí (sin unidades no visibles), el espacio de valores de G sería

cóncavo, por lo que el gradiente no podría verse atrapado en mínimos locales. Si la

red contiene unidades escondidas, las diferentes formas de utilizar estas unidades

para representar las restricciones de alto nivel implícitas en la distribución de

probabilidad de los vectores del entorno pueden producir mínimos locales, con lo que

no se ha resuelto el problema.

El significado del proceso de minimización de G es el siguiente. Cuando se

haya conseguido el valor mínimo de G, la red habrá captado, tanto como le haya sido

posible, las regularidades presentes en el entorno. Sin embargo, también puede

interpretarse de otra forma; minimizando G, la red consigue encontrar el conjunto de

pesos de las uniones que puede ser capaz de generar el conjunto de vectores del

entorno. Se ha demostrado la equivalencia matemática entre la maximización de esta

relación de pesos y la minimización del valor de G .

4.3. ALGORITMO DE APRENDIZAJE

El presente proceso constituye la justificación matemática del algortimo

de aprendizaje utilizado en la Máquina de Boltzmann, cuya expresión es la siguiente:

Fase 1

- 54 -
la. Asignar el patrón de entrenamiento a las unidades de

entrada, y el patrón de la respuesta a las unidades de salida.

lb. Dejar que la red evolucione hasta alcanzar la situación de

equilibrio.

le. Aumentar en una cantidad pequeña, o, el peso de la

conexión entre todos los pares de unidades que se encuentren

simultáneamente activas en la situación de equilibrio.

Fase 2

2a. Quitar el patrón de las unidades de salida, es decir,

liberarlas, pero dejar el patrón en las unidades de entrada.

2b. Dejar que la red funcione y llegue al equilibrio de nuevo.

2c. Decrementar en la misma pequeña cantidad o el peso de la

conexión entre todos los pares de unidades que se

encuentren simultáneamente activas.

Estas dos fases deben repetirse tantas veces como sea necesario hasta que se

consiga que la red obtenga los valores adecuados de las unidades de salida en la fase 2.

Es decir, las fases se repiten hasta que la red es capaz de dar la respuesta correcta

cuando funciona con las salidas libres.

Este algoritmo de aprendizaje tiene una clara relación con un proceso

estudiado por los investigadores Crick y Mitchison [Crick, 1983] sobre el

funcionamiento del cerebro de los mamíferos. Su teoría presenta lo que ellos

denominan "desaprendizaje", un proceso de aprendizaje inverso que se produce en la

fase REM del sueño de los mamíferos. En esta fase se registra un estado de

-55-
excitación aleatoria en el cerebro, que le permite funcionar libremente,

produciéndose modificaciones e n las sinapsis que dism inuyen l a probabilidad d e los

estados ilegítimos. Cada fase del algortimo de aprendizaje simula un procedimiento

diferente, la fase 1 sería el procedi m iento de aprend i z aj e , y la fase 2 el

procedimiento de "desaprendizaje" anteriormente descrito.

El comportamiento y la eficacia del algoritmo están determinadas por los

valores de los parámetros que intervienen en su formulación. Entre ellos hay que

destacar la importancia de 8 , que determina el tamaño de cada paso seguido en la

minimización de G. También tiene gran importancia el valor de los tiempos en los que

se estiman los valores de las probabilidades Pij y p 'i· La elección adecuada de estos

valores no es fácil de realizar, y no existen prácticamente bases matemáticas que

permitan determinarlos. Por este motivo, los valores son elegidos en base a resultados

experimentales obtenidos mediante ensayo de diferentes valores concretos.

También existen problemas relacionados con la estimación de los valores de

Pij y p ii, ya que puede introducirse algún tipo de ruido en estas estimaciones,

llevando a pasos erróneos en la minimización del valor de G. Este efecto causado por el

ruido puede, sin embargo, disminuirse utilizando un valor pequeño de 8 o también


y ediante la recopilación de datos estadísticos
obteniendo las estimaciones de Pi p ij m durante un

tiempo suficientemente grande.

Una forma de asegurar que la red se acerque siempre al estado de

equilibrio consiste en mantener los pesos de las uniones en valores pequeños.

Pearlmutter ha demostrado que el aprendizaje funciona mucho mejor si se hacen

disminuir constantemente los pesos, además de modificarlos mediante el algoritmo de

aprendizaje. Debe hacerse disminuir cada peso de forma continua hacia cero con una

velocidad proporcional al valor absoluto del peso. Este proceso hace que los pesos

tengan valores pequefos y conduce a la red a una situación relativamente estable en

la que la velocidad de decrecimiento del valor de los pesos se equilibra con el valor de

-56-
la derivada parcial de G respecto a los pesos. De esta forma, el valor absoluto de cada

peso mide la importancia de éste en la modelización de la estructura del entorno.

Sin embargo, el procedimiento de decrecimiento de pesos presenta ciertas

características no deseables. La obligación de mantener los pesos en valores pequeños

imposibilita a la red para conseguir mínimos de energía muy profundos. Esto significa

que la red comete una gran cantidad de errores graves en los casos en los que el·

entorno consta de vectores bastante parecidos, pero con probabilidades de aparición

muy diferentes. Además, en tales casos los errores son imposibles de evitar. Si no se

desea eliminar este proceso de disminución de los pesos, puede conseguirse que la red

funcione con un rendimiento mejor dejándola evolucionar con valores de temperatura

(T) más bajos. Si bien con ello se consiguen menos errores en la modelización, el

aprendizaje empeora significativamente debido a la dificultad para alcanzar el

equilibrio con valores pequeños del parámetro T.

En la experimentación con la Máquina de Boltzmann se encontró además

otro problema; el caso en que sólo son válidas cierto nú mero de combinaciones de las

unidades visibles, no teniendo vector de salida correspondiente el resto de ellas. En

este caso hay que suponer que los vectores que no se van a presentar tienen

probabilidad de ocurrencia cero. Con la formulación dada para la Máquina de

Boltzmann es fácil comprobar que la única forma de que se asegure que ciertos

estados nunca van a darse, es que dichos estados tengan una energía infinitamente

grande. También es fácil darse cuenta de que para que un estado tenga energía

infinitamente grande, necesita que los valores de los pesos de las uniones sean

también infinitamente grandes.

La utilización de valores infinitamente grandes plantea bastantes

problemas, por lo que hay que tratar de evitar que aparezcan. Esto se ha conseguido

con los denominados vectores de entrada "ruidosos". Estos vectores de entrada se

obtienen sometiendo los vectores correctos a un proceso en el que se modifica el

- 57 -
valor de alguno de sus elementos, pero la probabilidad de que esto ocurra es pequeña.

Si se mantiene el ruido en ciertos límites, los vectores serán los correctos la mayoría

de las veces, pero sin embargo, es posible que aparezca cualquier combinación de

estados de las unidades de entrada, con lo que no es necesario el uso de valores

infinitamente grandes de los pesos de las uniones. Este método se ha utilizado en la

mayor parte de los ejemplos realizados por el equipo de Carnegie-Mellon, dando

buenos resultados. Sin embargo, parecen no estar totalmente satisfechos con su

funcionamiento, y continúan buscando otros métodos más adecuados.

4.4. CRÍTICA DE LOS PROCEDIMIENTOS DE APRENDIZAJE

El problema principal de todos los procedimientos de aprendizaje

utilizados hasta el momento para redes multinivel, incluido el que se ha presentado

para la Máquina de Boltzmann, es su extrema lentitud. Esta lentitud no se produce

sólo en problemas complejos, sino que ya existe con problemas sumamente sencillos.

El inconveniente de tender a estacionarse en un mínimo local que presentan todos los

procedimientos de disminución del gradiente, es en la práctica un problema menor,

comparado con el de la velocidad de proceso. La lentitud se debe a que en cada

momento sólo se tiene información sobre un punto concreto, y no puede averiguarse

en qué forma se curvará la superficie de error para poder adelantar el cálculo. En

espacios multidimensionales la superficie de error contiene gargantas con una gran

curvatura. Cada pequeño paso del algoritmo hace interminable la llegada al mínimo

situado en una garganta, pero si se utilizan pasos muy grandes la divergencia con la

superficie real es demasiado grande para que el proceso pueda considerarse válido.

Sólo cabe esperar una sustancial mejora en la tecnología hardware que

permita aumentar la velocidad del aprendizaje. Sin embargo, parece que sólo una

- 58 -
mejora no sería suficiente, siendo necesario modificar de alguna forma los algoritmos

en sí mismos. Una solución puede ser la obtención de procedimientos que se

encarguen de dividir las redes conexionistas en módulos de tamaño reducido que

puedan aprender de forma independiente. Con ello, cada módulo resultaría más rápido

en su aprendizaje debido a la reducción de tamaño, y el conjunto funcionaría con

mayor velocidad, resolviéndose en parte el problema y permitiendo la aplicación de

estos sistemas a tareas hasta el momento inasequibles por su gran tamaño.

-59-
5. EJEMPLO DE APRENDIZAJE EN UNA MÁQUINA DE BOLTZMANN

5.1. EL PROBLEMA DEL CODIFICADOR

El problema del codificador fue presentado por primera vez por el

investigador Sanjaya Addanki. Constituye una simple abstracción de la tarea

recursiva de comunicación de información entre los componentes de una red paralela. Los

creadores de la Máquina de Boltzmann consideraron útil e interesante probar la eficacia

de su algoritmo de aprendizaje con este problema, ya que se conoce cuál es la solución,

pero no es un trabajo trivial encontrarla.

La formulación explícita del problema es la que se muestra a

continuación. Dos grupos de unidades visibles representan dos sistemas separados que

desean comunicarse sus estados. Llamemos a los dos conjuntos V 1 y V2. Cada uno de

los conjuntos contiene v unidades. Los conjuntos no están conectados directamente,

sino por medio de un conjunto de h unidades no visibles, este conjuto se llamará H. Se

da la circunstancia de que el número de unidades no visibles, h, es menor que el

número de unidades de los conjuntos Vi. De esta forma, las unidades no visibles

pueden representar un cuello de botella a través del cual ha de transmitirse la

información.

-60-
Para simplificar el problema se considera que en cada instante sólo puede

estar activa una de las unidades de las v de cada grupo. Con esta restricción se
v
reduce el número de estados posibles para cada conjunto, de 2 a v. Esta reducción es

conveniente dada la limitación en la velocidad del algoritmo debido al uso de una

máquina secuencial (un computador convencional) para modelizar el comportamiento

de una máquina de proceso paralelo en la que los cambios se producen de forma

asíncrona y simultánea.

Para permitir la comunicación entre los dos grupos de unidades visibles,

debe cumplirse la relación h 2 log2 v (relación evidente según la Teoría de la

Información). El grupo de trabajo realizó simulaciones para el caso extremo (h =

log2v) y para otros casos en los que la relación se satisfacía. En todos ellos se utilizó

como entorno para la máquina un conjunto de v vectores de longitud 2v cuya

aparición era equiprobable. Cada uno de los vectores especificaba un estado en el que

estaban activas una unidad de V 1 y la correspondiente de V2, manteniéndose todas las

demás inactivas.

La topología interna de la red se realizó de forma que todas las unidades

visibles estuvieran completamente conectadas entre sí y con las unidades de H, pero las

unidades no visibles no estaban completamente conectadas entre ellas.

Para comenzar las simulaciones se utilizaron pequeños ejemplos del

codificador, como el 4-2-4 (esta notación ha de entenderse de la siguiente forma: el

primer número identifica el número de unidades visibles de uno de los grupos, es

decir, v; el segundo número identifica el número de unidades no visibles, es decir, h.

El tercer número es reiterativo, ya que los dos grupos de unidades visibles tienen el

mismo número de unidades por definición del problema, pero se incluye por la

simetría que confiere a la expresión). Posteriormente, tras la experiencia con estos

-61 -
casos se simularon codificadores de mayor magnitud, hasta el codificador de 40-10-

40.

La estructura de la red para el codificador 4-2-4 podría ser la que se

muestra en la figura 4.

Figura 4. Posible estructura de la red para el codificador 4-2-4.

P ara la si mulación del codificador 4-2-4 se utilizó el siguiente ciclo de

funcionamiento:

l. Estimación de Pii : cada uno de los vectores patrón se asigna a las

unidades visibles. Se dejaba funcionar la red hasta llegar a la

situación de equilibrio dos veces. Una vez alcanzada esta situación

se tomaban datos estadísticos sobre la frecuencia en la que los pares

de unidades se activaban al mismo tiempo. Se utilizó la técnica de

los vectores "ruidosos" para evitar valores muy grandes de los pesos,
v
ya que no se utilizan los 2 posibles estados de entrada. Los

resultados de las estadísticas fueron: cada bit activo de un vector

asignado era convertido en un bit inactivo con una probabilidad de

-62-
0.15, y cada bit inactivo era convertido en activo con una

probabilidad de 0.05.

2. Estimación de p i : la red se dejó funcionar sin asignación de

vectores de entrada a un valor del parámetro T igual a 1 O hasta que

alcanzó la situación de equilibrio. El proceso se repitió varias veces,

obteniéndose al final estimaciones de la misma forma que se hizo

con Pij•

3. Actualización de los pess todos los pesos de las uniones se

incrementaron o decrementaron en una cantidad fija de 2,

determinándose el signo del incremento utilizando el signo de la

diferencia (i
-
p i ).

Para cada proceso de evolución de la red hacia el estado de equilibrio

todas las unidades no visibles tomaban sus estados de forma aleatoria con igual

probabilidad para el estado activo e inactivo. Esta situación se corresponde con la

subida de temperatura del sistema (puede considerarse análogo a aumentar la

temperatura hasta el valor infinito). Después se dejó evolucionar el sistema dos veces

con T=20, dos veces con T=15, dos veces con T=12 y cuatro veces con T=lO. Tras este

proceso de "enfriado", se consideró que el sistema había alcanzado el equilibrio, y se

tomaron valores estadísticos durante 10 unidades de tiempo con T=lO.

En el comportamiento del codificador se observaron tres fases diferentes

en la búsqueda del mínimo global de G. La ocurrencia de estas fases se mostró

relativamente insensible a los valores de los parámetros utilizados. La primera fase

comienza con todos los valores de los pesos iguales a cero (situación inicial de la red),

y se caracteriza por el desarrollo de pesos negativos en la m ayor parte de las uniones

de la red. En la segunda fase, las unidades no visibles comienzan a tomar valores

positivos en los pesos de sus conexiones con algunas de las unidades visibles,

-63-
observándose una clara tendencia a mantener simetría entre los signos y las

magnitudes de una conexión con una unidad de V 1 y con la correspondiente de V2. Esta

fase term ina cuando todas las unidades no visibles tienen pesos significativos en sus

conexiones con cada una de las unidades de V1, y pesos análogos en cada una de sus

conexiones con las unidades de V2.

La tercera fase es la más larga de todas. En ella el algori t m o de

aprendizaje resuelve los conflictos planteados y consigue llegar al valor del mínimo

global.

En los diferentes ejemplos de codificadores utilizados después, el

comportamiento del sistema era exactamente el mismo, variando sólo la velocidad

con la que se alcanzaba la solución y el número de iteraciones necesarias para ello.

5.2. COMUNICACIÓN DE INFORMACIÓN ENTRE MÓDULOS

El problema del codificador y su resolución mediante una Máquina de

Boltzmann sugiere un método para realizar la comunicación de símbolos entre los

componentes de una red computacional paralela. En 1982 Feldman y Ballard

[Feldman, 1982] se ocuparon de este problema y propusieron dos métodos posibles

para la realización de esta tarea. Ellos trabajaban sobre un sistema de percepción

compuesto por dos módulos principales, el sistema de percepción de imágenes y el

sistema de generación de lenguaje hablado. Para describir los métodos utilizaron el

ej emplo de la transmisión del concepto "manzana agusanada" desde el lugar en el que

es reconocido en el sistema de percepción hasta el lugar en el que puede ser generada

la frase en el sistema de habla.

- 64 -
El primer método de comunicación parte de la codificación de la

información perceptual en un conjunto de símbolos. Luego estos símbolos son enviados

en forma de mensajes al sistema de habla, que se encarga de decodificarlos de una

forma adecuada para obtener la pronunciación de las palabras que componen la frase.

Para poder utilizar este método la red debe disponer de un conjunto de líneas de

comunicación de propósito general, análogas al bus de un computador convencional,

que sirvan de medio de transmisión de los mensajes desde el sistema de visión al

sistema de habla. Este método presenta los siguientes problemas, que fueron descritos

también por Feldman y Ballard:

- Los mensajes complejos no pueden ser transmitidos de una vez,

sino que deben transmitirse de forma secuencial por medio de las

líneas de comunicación.

- Cada vez que se introduce un concepto nuevo en el sistema global, los

sistemas de visión y habla deben aprender un nuevo código común que lo

represente.

- El método no parece plausible como modelizac ión del

funcionamiento real del cerebro.

El segundo método utiliza un camino hardware individual y dedicado para

cada uno de los conceptos que han de ser comunicados entre los dos sistemas. El

método se basa en la idea de que la activación simultánea de "manzana" y

"agusanada" en el sistema de visión puede transm itirse a los lugares correspondientes

del sistema de habla por medio de conexiones únicas y dedicadas para estos

conceptos. En este caso, el problema principal reside en tener las conexiones

necesarias entre los conceptos y poder establecer nuevas conexiones a medida que se

adquieren nuevos conceptos. Estas conexiones no necesitan ser muy complejas, ya que

-65-
sólo han de transportar información muy simple de carácter no simbólico, como por

ejemplo un nivel de activación.

El comportamiento de la Máquina de Boltzmann con el problema del

codificador muestra un método de comunicación de conceptos que posee lo mejor de

los dos métodos anteriores. Sus unidades de proceso son pequeñas y sus conexiones

transmiten un valor numérico, como en el segundo método. Además su proceso de

aprendizaje bien puede ser el utilizado por el cerebro humano. También permite, sin

embargo, que se transmitan distintos conceptos por las mismas líneas de

comunicación como requiere el primer método. Puede decirse incluso que la Máquina

de Boltzmann supera a estos dos métodos, ya que el aprendizaje de nuevos códigos

surge automáticamente como un proceso cooperativo a partir del algoritmo de

aprendizaje que minimiza el valor de G.

- 66 -
6. COMPORTAMIENTO DE LOS SISTEMAS CONEXIONISTAS

6.1. INTRODUCCIÓN

Tras largos años de esfuerzos tratando de modelizar el comportamiento

inteligente sobre las mismas arquitecturas de computadores utilizadas para realizar

cálculo numérico, se comenzó a pensar en la conveniencia del uso de arquitecturas

diferentes, más cercanas a la estructura del cerebro humano. Así es como se llegó al

estudio de los sistemas masivamente paralelos. Estos sistemas, con su gran potencia

computacional permitirían abordar ciertos problemas que en las máquinas

convencionales resultaban terriblemente lentos y pesados. La mayor parte de ellos

están fuertemente relacionados con el reconocimiento y la búsqueda en un espacio de

descripciones de gran tamaño. En general estos problemas deben su importancia a su

relación con procesos como la planificación y la inferencia, básicos en los sistemas de

Inteligencia Artificial. A continuación se detallan algunos de estos problemas,

analizando el comportamiento de los diferentes sistemas conexionistas en cada uno de

ellos.

-67-
6.2. INTERSECCIÓN DE CONJUNTOS

El reconocimiento puede considerarse como un problema de intersección de

conjuntos, ya que consiste en encontrar, dentro de un conjunto de descripciones, la que se

ajusta de forma más adecuada a la descripción de la observación realizada. Esta

operación de intersección de conjuntos aparece con mucha frecuencia en las bases de

conocimiento de los sistemas de Inteligencia Artificial. En una máquina secuencial la

realización de una intersección de conjuntos requiere un tiempo proporcional al

número de elementos que componen el más pequeño de los conjuntos considerados.

Normalmente estos conjuntos son bastante grandes y el costo de la operación resulta

muy elevado, principalmente en tiempo.

En las redes paralelas que transmiten marcadores, como las redes NETL,

las intersecciones de conjuntos se realizan en una sola operación de identificación,

una vez que se han identificado con marcadores diferentes los miembros de cada

conjunto. En las redes que transmiten valores la operación es también muy simple y

rápida. En estos sistemas se marcan los elementos de cada conjunto con una unidad de

activación y luego se buscan todas aquellas unidades cuyo valor de activación se

encuentre por encima del umbral determinado por la suma de las activaciones

correspondientes a cada conjunto.

En una Máquina de Boltzmann la mayoría de los casos de intersección de

conjuntos pueden realizarse con un único proceso de funcionamiento de la red hasta

alcanzar la situación de equilibrio. En este sistema cada conjunto se representa por

una combinación de unidades activas, y la intersección resulta ser la unión de todas

esas combinaciones. La unión de la unidades activas funciona como una

representación en términos de intensidad de la intersección de los conjuntos.

- 68 -
6.3. CIERRE TRANSITIVO

En los sistemas basados en el conoci m iento es frecuente el cálculo del

cierre de las relaciones transitivas que contienen. Este es el caso, por ejemplo, de las

relaciones del tipo "es un" de las redes semánticas, que son relaciones transitivas y cuyo

cierre es necesario a menudo para el mecanismo de la herencia.

Las máquinas secuenciales invierten en el cálculo de un cierre transitivo

un tiempo proporcional al tamaño del conjunto resultante. Cuanto mayor es el

resultado del cierre mayor es el tiempo que se tarda en calcularlo. En las redes que

transmiten marcadores, sin embargo, el tiempo es proporcional a la longitud de la

cadena más larga de relaciones que sea necesario seguir. Es decir, el tiempo es el

mismo que en un sistema secuencial si las relaciones forman una única y larga

cadena. En el caso en que las relaciones estén organizadas en forma de árbol con

muchas ramas, pero cortas, el tiempo invertido por la red paralela es mucho menor.

Las redes que transmiten valores obtienen un rendimiento similar al de las redes de

transmisión de marcadores.

La arquitectura de la Máquina de Boltzmann resulta menos adecuada para

esta operación, y la realiza de una forma bastante oscura. El cierre de la relación "es

un", por ejemplo, puede realizarse haciendo que el patrón de actividad de un elemento

incluya los patrones de todos los elementos situados por encima de él en la jerarquía.

Si se pone en funcionamiento la red con una parte de ese patrón y se deja que lo

complete por sí misma llegando a la situación de equilibrio, el estado resultante será

el cierre transitivo. Desgraciadamente, no se puede asegurar todavía que este

esque m a funcione adecuadamente en bases d e datos con gran cant idad de

-69-
conocimiento altamente interrelacionado. Además, el procedimiento descrito no

puede extenderse directamente a otras relaciones transitivas como "parte de" o

"mayor que".

6.4. CONTEXTOS Y PARTICIONES

Las bases de conocimiento almacenan cierta información que puede

considerarse de carácter universal, pero la mayor parte de su contenido se refiere a

conocimiento válido sólo en determinados contextos. La información sobre lugares,

intervalos de tiempo, etc. puede variar su sentido según el contexto en el que se

utilice. El sistema que maneja la base de conocimiento ha de ser capaz de acceder a

la información de cada contexto en el momento y circunstancia adecuados, evitando

mezclar los datos correspondientes a diferentes contextos. De la misma forma ha de

distinguir los datos contextuales de la información universal, que puede utilizar en

cualquier momento. En este esquema de funcionamiento cada contexto actúa como un

añadido al conocimiento universal de la base, incorporando nuevos conocimientos de

carácter particular.

Así, la base de conocimiento puede considerarse constituida por diferentes

particiones de conocimiento de las cuales una o varias pueden ser activas en un

momento determinado. Una máquina secuencial que utilice una base de conocimiento

de este tipo debe contrastar la pertenencia de cada hecho con todas las particiones

activas antes de poder considerarlo válido y utilizarlo. El proceso de búsqueda en

cada una de las particiones consume una gran cantidad de tiempo, siendo proporcional

al tamaño de las m ismas. Los sistemas que transm iten marcadores facilitan este

trabajo de forma considerable, ya que pueden identificar el árbol de contextos activos

rápidamente mediante la utilización de la operación de cierre transitivo. De esta

- 70 -
forma todas las aserciones asociadas con tales contextos se encuentran activas,

evitándose la utilización errónea de aserciones pertenecientes a otros contextos no

activos. Este comportamiento es prácticamente idéntico en la redes de transmisión

de valores y en las Máquinas de Boltzmann, siendo posible, además, activar contextos

de forma gradual.

6.5. RECONOCIMIENTO POR MEJOR APROXIMACIÓN

Algunos problemas de reconocimiento pueden ser resueltos mediante la

intersección de conjuntos, como ya se ha mencionado. Esta operación es muy útil para

problemas en los que los datos son discretos, no presentan distorsión causada por el

ruido y todos los miembros de una clase poseen todas las características necesarias

para su identificación. Estos problemas pueden considerarse prácticamente ideales,

ya que no se presentan en la realidad. A menudo es suficiente con encontrar la

descripción que mejor se ajusta al conjunto de características observadas, sin

pretender que este ajuste sea perfecto. Tampoco todas las características observadas

son de la misma naturaleza, algunas tienen un alto nivel de confianza, mientras que

otras son bastante débiles.

Las redes que transmiten marcadores funcionan bastante mal en ajustes

imperfectos de este tipo, al contrario que las que transmiten valores, que resultan

ideales para esta tarea. Su buena disposición se debe a la posibilidad de que cada

observación transmita una cierta cantidad de "activación" a un número no fijado de

hipótesis. La intensidad o fuerza de cada activación depende del grado de confianza

atribuido a la observación y del peso de la conexión entre característica e hipótesis.

El elemento de la red que mejor se ajusta a las características deseadas es el que

posee el valor de activación mayor entre todos los que componen la red.

-
71 -
Evidentemente, que su valor sea el mayor no asegura que sea el que se ajusta

perfectamente, pero sí que es el que reúne más semejanzas de todos los de la red. La

Máquina de Boltzmann tiene un comportamiento parecido, siendo también un

mecanismo muy adecuado para este tipo de tareas.

6.6. RECONOCIMIENTO GESTALT

Hasta el momento se ha presentado un tipo de procesos de reconocimiento

que discurrían desde abajo hacia arriba; se tomaban los datos y se trataba de

identificar mediante búsqueda el elemento que los posee todos o al menos una buena

parte de ellos. En el reconocimiento real, como el que realizamos los seres humanos,

el esquema no es tan sencillo. Un objeto puede identificarse en base a sus

características, pero éstas, a su vez, sólo pueden determinarse en relación a otras y

en relación a la imagen perceptual obtenida hasta el momento. Es decir, cada

característica debe ser considerada dentro de su contexto, ya que de no hacerse así

resultará ambigua. Para conseguir este tipo de integración y a la vez distinción de

cada característica es necesario utilizar un conjunto de identidades para la totalidad

y para cada una de ellas. Ni el enfoque de arriba-abajo ni el de abaj o-arriba

aisladamente pueden conseguirlo. Son necesarios varios niveles diferentes de

características y subcaracterísticas combinados en una compleja red de restricciones

relativas entre los niveles.

Esta descripción se ajusta casi perfectamente a la de la Máquina de

Boltzmann, por lo que ésta parece ser el mecanismo más adecuado para tareas de

reconocimiento de carácter complejo. Sin embargo, para que una Máquina de

Boltzmann pueda utilizarse en problemas reales, todavía es necesario probar

exhaustivamente su funcionamiento con sistemas verdaderamente grandes.

-72-
La l i s t a de t areas c o m pu t a c ionales ese nc i al e s p a r a u n s i st e m a

"inteligente" es todavía más larga, pero las presentadas son las más relevantes de

ellas. Como se ha mostrado, ninguna de las arquitecturas mencionadas es la adecuada

para la totalidad de las tareas, pero cada una por separado funciona muy bien en

alguna de ellas. Del análisis realizado es posible deducir algunos de los objetivos que

han de alcanzarse en un futuro más o menos inmediato. Uno de ellos concierne

directamente a la Máquina de Boltzmann, cuyas propiedades han de ser exploradas

m ás profunda m e nte, ya que parece la organizac ión m ás pro m et edora para el

tratamiento de problemas reales. En segundo lugar ha de intentarse combinar en un

solo sistema las características más relevantes de cada una de las redes

individualmente.

-73-
7. SIMULACIÓN DE LA MÁQUINA DE BOLTZMANN EN UN COMPUTADOR LISP

7 l INTRODUCCIÓN
. .

El proyecto ha consistido en la construcción de un programa que si mula el

comportamiento de una red neuronal con las características conexionistas. Se ha

elegido como ejemplo el de la Máquina de Boltzmann, aunque el prototipo construido

no contiene la totalidad de las características de este mecanismo. La idea principal

es la de construir una herramienta que permita experimentar con sistemas del tipo

conexionista, facilitando la construcción de la estructura de la red mediante un

interface adecuado y permitiendo seguir la evolución de los valores del conjunto

mediante marcadores en pantalla que se actualizan automáticamente.

Entre todas las aproximaciones conexionistas que ya se han presentado en

este trabajo, se eligió la Máquina de Boltzmann por ser la arquitectura más

prometedora de todas ellas. Las investigaciones sobre su funciona miento son muy

recientes, pero los resultados obtenidos en su faceta de mecanismo de aprendizaje

han sido excepcionalmente esperanzadores, lo que ha motivado la realización de este

trabajo. El programa recoge la mayor parte de las características de un Máquina de

Boltzmann, especialmente todas las referentes a su arquitectura, pero su

-74-
funcionamiento probabilístico no ha sido programado. Sin embargo, el programa es lo

suficientemente flexible para permitir modificar este comportamiento de forma muy

sencilla.

Debido a que las arquitecturas conexionistas han nacido dentro de la

Inteligencia Artificial, y por su especial importancia en la labor de aprendizaje, se ha

tratado de dar al programa un enfoque en esta línea. Por ello se ha utilizado, tanto en

las labores de documentación como de construcción, material de este área de la

Informática. Así pues se ha usado para la construcción del programa una máquina de

Inteligencia Artificial (máquina Lisp) y una de las herramientas de las que se dispone.

Estas herramientas se utilizan para la construcción de sistemas expertos, y aunque no

se pretendía exactamente construir un sistema experto, la estructura que se puede

desarrollar con estas herramientas resultaba bastante adecuada para la realización

del programa.

Ante el problema de la herramienta que debía ser utilizada para la

programación, la elegida fue el sistema de construcción de sistemas expertos KEE, de la

empresa IntelliCorp. Esta herramienta es de tipo híbrido, y se basa

fundamentalmente en la utilización de marcos, reglas y métodos como representación del

conocimiento y utilización del mismo. A medida que se detalle la estructura del

programa se presentará parte de la composición de la herramienta. KEE funciona

sobre la mayor parte de las máquinas Lisp construidas hasta el momento. Este trabajo en

particular se ha realizado sobre un Explorer de Sperry.

- 75 -
'.2. ESRUCTURA DE LA RED

La herramienta KEE permite realizar representación del conocimiento en

forma de marcos, que reciben el nombre de "unidades", con campos denominados

"slots", que poseen características propias llamadas "facetas". La estructura de la red

conexionista se ha realizado haciendo uso de estos componentes, aprovechando,

además el mecanismo de herencia que también proporciona la herramienta.

Una Máquina de Boltzmann está formada básicamente por unidades y

conexiones entre ellas. En el programa se han representado ambos mediante unidades

dentro de una base de conocimiento de KEE. Es decir, los elementos principales son dos

tipos de unidades: la unidad denominada NODOS representa la estructura de las

unidades de proceso de la red, y la unidad denominada UNIONES representa la

estructura de las conexiones entre las unidades de proceso. Los elementos principales de

cada una de estas unidades son los siguientes:

NODOS

- ESTADO: Contiene el valor del estado en que se encuentra la

unidad en cada momento. Tiene dos valores posibles, ACTIVO e

INACTIVO. No tiene un valor por omisión.

- IDENTIFICACIÓN: Contiene el tipo de unidad de que se trata. Su

valor puede ser ENTRADA, SALIDA o INTERMEDIO. El valor

INTERMEDIO corresponde a las unidades escondidas de la red. Este valor

es importante a la hora de la ejecución del algoritmo, ya que las unidades

-76-
intermedias no pueden ser modificadas más que por el funcionamiento

interno de la red. No tiene valor por omisión.

- CONEXIONES: Contiene las unidades del tipo UNIONES que tienen

como uno de sus componentes ese nodo. No tiene valor por omisión.

- UMBRAL: Es el valor real del umbral de activación de la unidad. Su

valor por omisión es O.

- VALOR: Representa el valor que almacena la unidad, es decir, el

obtenido tras la suma de los valores de las unidades activas a las que está

conectada. Es un numero real. Su valor por omisión es


- 01
. .

UNONES

- PESO: Contiene el valor del peso de la conexión representada por la

unidad. Es un número real cuyo valor por omisión es O.

- PUNTOl: Representa una de las unidades que intervienen en la

conexión.

- PUNT02: Representa la segunda unidad que interviene en la

conexión.

Además existe una unidad denominada RED, que contiene las

características generales de la red, y de la cual dependen jerárquicamente los NODOS

y las UNIONES. Esta unidad contiene un slot básico, que se deno m ina DELTA y

contiene el valor corrector utilizado en el algoritmo de aprendizaje. Su valor es un

nú mero real con valor 0.1 por omisión. El resto de los slots que componen la unidad

RED se utilizan para diferentes misiones dentro del sistema, y serán presentados más

adelante.

- 77 -
UNIONES

RED
<
NODOS

Figura 5. Estructura jerárquica de las clases

principales.

Estas unidades básicas se organizan de forma jerárquica según el esquema de

la figura 5, en el que cada unidad se comporta a la vez como un clase en KEE.

A partir d e esta estructura han de crearse los diferentes elementos de

cada red concreta. Es decir, las unidades que compongan la red se instalan como

miembros de la unidad NODOS, que está definida como una clase KEE. De la misma

forma se instalan como miembros de la clase UNIONES las que existan entre cada par

de unidades de la red. Esta tarea se puede realizar de una forma muy simple mediante

la utilización de los menús que se han programado en el interface que se presentará

más adelante.

Existe otra unidad dentro de la base de conocimiento que no se encuentra

incluida en la estructura jerárquica. Esta unidad se llama CORRECCION y contiene un

valor activo. Se utiliza para resolver un problema de redondeo en las sumas que

presenta la aritmética de KEE. Este problema causaba pequeños errores en los slots

VALOR de los nodos, por lo que se incluyó dentro de la base de conocimiento. Es un

método que se encarga de obtener la cifra correcta cada vez que se actualiza el valor de

cualquiera de los nodos de la red.

Además de la estructura ya mencionada, cada una de las unidades posee

otros slots cuyo contenido tiene que ver con la ejecución del algoritmo o con el

interface de creación de la red. La mayor parte de estos slots son métodos, y algunos de

ellos se verán a lo largo de la presentación del trabajo. El resto puede ser

entendido fácilmente a partir de la documentación propia del programa.

- 78 -
7 3 ALGORITMO DB APRBNDIZAJB
. .

El algoritmo de aprendizaje que se utiliza en el programa se corresponde

exactamente con el descrito en el apartado 3.1. ALGORITMO DE APRENDIZAJE.

Como ya se ha explicado es un algoritmo iterativo que consta de dos fases distintas que

se repiten tantas veces como sea necesario hasta que la red consigue por sí misma

los vectores deseados.

Para la realización del algoritmo se utilizó el mecanismo de reglas que

proporciona KEE. Esta herramienta posee su propio lenguaje de reglas con el que se

puede hacer referencia a cualquier unidad, y dentro de ella al valor de cualquiera de

sus slots o de sus facetas. Con este lenguaje, que se llama TellAndAsk pueden

expresarse cualquier tipo de relaciones o condiciones entre los componentes de una

base de conocimiento de KEE. Las reglas tienen la estructura típica, con una parte

izquierda y una parte derecha, con la particularidad de que KEE distingue dos tipos de

partes derechas de las reglas. Uno de ellos está encabezado por la partícula THEN, y

debe contener una expresión del lenguaje TellAndAsk; el segundo tipo va encabezado

por la partícula DO y puede contener cualquier expresión de Lisp o de las funciones

que utiliza KEE para manejar sus estructuras. El primer tipo de parte derecha,

encabezado por THEN, se utiliza para realizar aserciones sobre hechos de la base de

conocimiento. El segundo tipo se utiliza para realizar acciones más complejas, que

normalmente involucran métodos escritos al efecto.

Una de las reglas que se utilizan en el programa puede servir de ejemplo

para ver la estructura general de las reglas:

( IF (( THE ESTADO OF ? NODO IS ACTIVO ) AND

-79-
( THE CONEXIONES OF ? NODO IS ? CON ) ANO

( THE ACTUALIZACION OF ?CON IS NO ) ANO

( THE PUNT02 0F ? CON IS ? NODO ) ANO

( THE ESTADO OF ( THE PUNTO l OF ? CON ) IS ACTIVO )

THEN (THE ACTUALIZACION OF ? CON IS SI )

DO ( PUT.VALUE ?CON 'PESO ( + ( G ET.VALUE ? CON 'PESO )

( G ET.VALUE 'RED 'DELTA ))))

Como puede verse las reglas presentan un formato muy similar al lenguaje

natural inglés. En este ejemplo puede verse cómo se pueden utilizar variables no

asignadas dentro de las reglas. Todas las palabras que comienzan por "?" son variables

que no tienen ningún valor cuando se empieza a ejecutar la regla. El sistema busca en

la base de conocimiento los valores que hacen cierta la expresión y ejecuta la regla

para todos ellos.

Las reglas pueden organizarse en forma jerárquica igual que las unidades, lo

que confiere al sistema una gran facilidad para estructurar el conocimiento que posee.

La estructura que se ha utilizado para organizar las reglas correspondientes al algoritmo

de aprendizaje de la red es la que se muestra en la figura 6.

Además de las reglas utilizadas, el algoritmo es guiado por un método de

nom bre ALGORITMO contenido en un slot de la unidad RED. Este método se encarga

de disparar el razonamiento sobre las reglas adecuadas para la realización de cada

una de las fases del algoritmo. La secuencialidad inherente al algoritmo hace que su

realización mediante reglas no sea excesivamente elegante. El método realiza las

- 80-
-
/ R Q 1 0 J J . A T -----R . A T
A l A . A T - ---R . A T
I
lIA CO - ---

I
/ R A
J J dt ' -
- - -R J S A 1.1

ROA O M \ / A IAS.AR 1 l TA•: __ -A


• " ·
· R J J A1.2
\

/
-
·R TO
\

R O A J JAS t .
\l. A ( R G A . V A .AE 1 - - - - - R . V A A1

-
,
-R - . R J J.A2• 1
,: ' \
AJ l G A C J A 2. { -

• • ·R.VA C / ,
-
• ·RJ J J A K Z.2

\
\

·A G A S . A 2 - . f J M
R Q AJ J A KZ • : -
• • •1 A
' ' · A GA.V A A2 - --- -A.VA A 2

Figura 6. Estructura jerárquica de las reglas.

siguientes aserciones, que como podrá comprobarse es una ejecución de las diferentes

partes del algoritmo:

( ASSERT NIL REGLA.INICIO. FASE I )

( ASSERT NIL REGLA. ESTADO )

( ASSERT NIL REGLA.VARIABLE. FASE ! )

( ASSERT NIL REG LA.CALCULO )

( ASSERT NIL REGLA. CAMBIO. PESO.FASE l )

( ASSERT NIL REGLA.INICIO. FASE2 )

( ASSERT NIL REG LA.VARIABLE.FASE2 )

( ASSERT NIL REGLA. CALCULO )

( ASSERT NIL REG LA.CAMBIO. PESO.FASE ! )

Como se ve, el método sólo realiza un recorrido sobre las dos fases del

algoritmo, pero no se ocupa de tratar los resultados obtenidos y comprobar si es

-81 -
necesario volver a ejecutar las dos fases de nuevo porque el vector de salida no era el

deseado. Para hacer esto es neceario un método que, esquemáticamente, debe hacer:

MIENTRAS NO FIN DE PATRONES HACER:

- Asignar patrón de entrada

- Ejecutar las dos fases del algoritmo

- Comprobar la salida y decidir.

El método que realiza estas operaciones es el que se llama ITERACION

dentro de RED. Utiliza tres reglas para realizar su función:

- REGLA.ASIGNACION.PATRON: Pide que se escriban en la

pantalla los valores de los nodos que componen el patrón de entrada.

También los instala como los verdaderos valores de las unidades del

tipo NODOS correspondientes (las que no tienen identificación

INTERMEDIO).

- REGLA.ALGORITMO: Dispara la ejecución de las dos fases del

algoritmo sobre la red con los valores asignados anteriormente.

- REGLA.COMPROBAR.SALIDA: Dispara un método que actúa

sobre todos los nodos de la red cuya identificación es SALIDA. Este

método comprueba si el estado obtenido es igual al esperado y actúa en

consecuencia según sea el resultado de la comprobación.

M ediante estos métodos se puede entrenar a la red para que aprenda a

obtener las salidas adecuadas. El comportamiento de las unidades y los pesos de las

conexiones de la red puede verse en cada momento, ya que se ha incorporado a la

base de conocimiento un panel de imágenes. Este panel contiene los estados de todos

los elementos de la red representados en pequeñas ventanas, una para cada elemento,

-82-
ya sea peso o unidad. Cada una de estas pequeñas ventanas se actualiza de forma

automática cuando se modifica el valor del elemento que representa. De esta forma se

puede seguir fácilmente l a evolución d e l a estructura d e l a red.

El panel y los marcadores son elementos integrantes de la herramienta

KEE, y se incorporan a cualquier base de conocimiento de forma muy sencilla,

realizando selecciones sobre diferentes menús que también proporciona el sistema.

También se han incorporado actuadores para disparar los métodos de

forma inmediata. Estos son pequeñas ventanas situadas en la pantalla, que fuerzan la

ejecución del método asociado a ellas cuando son seleccionadas mediante el botón

izquierdo del ratón. Se utilizan para evitar la tediosa labor de escribir en el ejecutivo

de Lisp el comando necesario para que se produzca la ejecución de un método. Los

actuadores que se han utilizado son tres; el primero dispara la ejecución del algoritmo

de aprendizaje, el segundo fuerza la ejecución de un método denominado ORIGEN que

se encuentra en uno de los slots de la unidad RED y sirve para inicializar todos los

elementos de la red. Este método es necesario para poder regresar al estado inicial de

forma sencilla y rápida, sin tener que modificar los valores de las unidades y de los

pesos de las conexiones uno por uno. El tercero de los actuadores se utiliza para

comenzar la ejecución del interface que facilita la creación de los elementos de una

red concreta.

La herramienta KEE permite una programación totalmente interactiva, por

lo que es posible modificar la estructura de cada una de las imágenes que

aparecen en la pantalla mediante los botones del ratón y los menús que para ello

proporciona el sistema. Puede accederse además a la definición y edición de cada una de

las partes que componen el programa siguiendo el mismo método.

No se realiza la descripción exhaustiva y detallada de cada una de las

partes, unidades, slots, métodos, reglas y demás componentes del programa por

-83-
considerar que se encuentra suficientemente documentado (facilidad que está

incorporada en la herramienta), y su exposición exhaustiva podría resultar demasiado

tediosa para el lector.

1.4. INTERFACE DE CREACIÓN DE LA RED

Hasta el momento se ha descrito la estructura y funcionamiento del

programa en cuanto a la modelización de la red y del algoritmo de aprendizaje de la

misma. Ya se ha mencionado anteriormente que las arquitecturas conexionistas han

de contener gran cantidad de unidades de proceso para que puedan ser utilizadas en

problemas verdaderamente útiles e interesantes. Por lo tanto, con el programa

realizado, la tarea de realizar ejemplos puede resultar bastante pesada, ya que es

necesario crear uno a uno todos los elementos de la red (nodos y uniones) y asignarles

los valores que han de tener (pesos, umbrales, estados, etc.). Si se desea construir una

red con gran cantidad de unidades de proceso, el trabajo de creación de la red puede

ser muy largo y tedioso. Aunque la herramienta utilizada para la realización del

programa es altamente interactiva y sencilla de utilizar, sería necesario conocer

bastante más a fondo el funcionamiento del sistema y la estructura del programa para

poder crear la red a partir de los menús de uso de las bases de conocimiento de KEE.

Por este motivo se ha pensado en la gran utilidad que puede tener la

realización de un módulo del programa que pudiera evitar a un potencial usuario la

necesidad de aprender a fondo las características del programa y las de la

herramienta de construcción de sistemas expertos KEE. Este módulo no puede

considerarse como tal estrictamente hablando, ya que, al igual que el resto de las

partes integrantes del programa, está incluido en la estructura global, sin que pueda

- 84 -
ser extraido como una porción independiente. Su función es la de perm itir la creación de

los componentes de la red de forma sencilla y rápida.

Para crear una red con la estructura de la Máquina de Boltzmann, hay que

especificar todas las unidades que van a formar parte de ella, y para éstas los valores

concretos de sus slots principales. De igual forma hay que hacer con las uniones entre

las diferentes unidades, que también necesitan que se especifiquen algunos de los

valores de sus slots. El interface se llama mediante un actuador, como ya se ha

explicado anteriormente. Cuando se pulsa el botón izquierdo del ratón sobre la

ventana que ocupa el actuador comienza la ejecución del interface. En principio

aparece un menú de operaciones que pueden realizarse. Las operaciones posibles son

las siguientes:

- CREAR NODOS

- CREAR UNIONES

- SUPRIMIR NODOS

- SUPRIMIR UNIONES

El menú posee una tercera opción, FIN, que se utiliza para terminar la

sesión con el interface. Abandonar el inteface no significa necesariamente que se

haya completado la red, puede abandonarse en cualquier momento y volver a

utilizarse posteriormente, volviendo a trabajar sobre lo ya realizado. Cuando se ha

abandonado el interface y se desea volver a utilizarlo sólo es necesario volver a

pulsar el botón izquierdo del ratón sobre la ventana del actuador.

Una vez hecha una selección en el menú general de operaciones el

programa solicita información sobre los valores de los slots principales de las

unidades que se desee crear, o pide el nombre de la unidad que se desea suprimir de la

base de conocimiento. Algunos de estos valores se solicitan mediante la aparición de

un menú en la pantalla. Otros, por el contrario, deben ser escritos por el usuario por

-85-
medio del teclado. El programa está construido de tal forma que si se crea una

unidad, ya sea nodo o unión, sus slots principales toman valores por omisión, que son

los que tienen dichos slots en la estructura general de la clase, es decir, en las

unidades NODOS y UNIONES. Cuando se pide que se escriba el valor de un slot, se

proporciona la posibilidad de escoger el valor por omisión (llamado valor por defecto

en el interface) mediante la escritura de la letra "D" en lugar de un valor concreto

para el slot.

No es necesario seguir ningún orden en la creación de las diferentes

unidades, pero hay que tener en cuenta que si el valor de alguno de los slots de una

unidad depende de otra u otras unidades, como es el caso de los slots PUNTO! y

PUNT02 de las unidades UNIONES, que son de tipo NODOS, es necesario que los

nodos que vayan a escribirse como sus valores hayan sido creados con anterioridad.

Esto sucede por la propia construcción de la herramienta KEE, que realiza la

verificación de cada valor que se instala en los slots de una unidad, y no permite que

se haga referencia a unidades que no pertenezcan realmente a la base de

conocimiento. Esta característica ha facilitado mucho la labor de construcción del

interface, ya que no es necesario realizar comprobaciones exhaustivas sobre cada

dato que se escribe, es el propio sistema KEE el que se encarga de hacerlo.

Las funciones que gobiernan el interface se encuentran distribuidas entre

las tres unidades principales que componen el programa: RED, NODOS y UNIONES.

La función principal es la que se denomina OPERACIONES y se encuentra en un slot

de la unidad RED. Esta función es un método que se encarga de hacer aparecer el

menú principal y llamar a los métodos correspondientes a cada opción elegida. Los

métodos que crean o suprimen unidades de la base de conocimiento se encuentran

situados cada uno en la unidad sobre la que actúa, es decir, el método que crea nodos

se encuentra en un slot de la unidad NODOS, y el que crea uniones en un slot de la

unidad UNIONES. Esta organizacipón permite que se puedan realizar muy fácilmente

-86-
modificaciones de cualquiera de los elementos que componen el interface. Los menús que

aparecen durante la ejecución del interface también están dentro de cada una de las

unidades en forma de slots de un tipo especial, y no constituyen una parte

independiente del programa.

-
87 -
8. BIBLIOGRAFÍA

- Ackley, D.H., Hinton, G.E. y Sejnowski, T.J. : "A Learning Algorithm for

Boltzmann Machines", Cognitive Science 9, 147-169, 1985.

- Barto, A.G. : "Learning by Statistical Cooperation of Self-Interested N

euron-Like Compting Elements", Hu man Neurobiology Vol. 4, NQ 4, Springer Verlag,

Nueva York, 1985

- Carpenter, G.A. y Grossberg, S. : "A Massively Parallel Architecture for a

Self-Organizing Neural Pattern Recognition Machine", Computer Vision, G raphics and

Image Processing 37, 54-115, 1986.

- Crick, F. y Mitchison, G. : "The Function of Dream Sleep", Nature, 304,

111-114, 1983.

- Fahlman, S.E., Hinton, G.E. y Sejnowski, T.J. : "Massively Parallel

Architectures for A.I.: NETL, Thistle and Boltzmann Machines", Proceedings de la

AAAI Conference of Artificial lntelligence, Washington DC. 109-1 13, Kaufmann, Los

Altos, 1983.

- Fahlman, S.E. y Hinton, G.E. : "Connectionist Architectures for

Artificial Intelligence", Computer, 100-109, Enero 1987.

- 88 -
- Feldman, J.A. y Ballard, D.H. : "Connectionist Models and their

Properties", Cognitive Science, 6, 1982.

- Feldman, J.A. : "Conectionist Models and Parallelism in High Level

Vision", Computer Vision, Graphics and Image Processing 31, 178-200, 1985.

- Forsyth, R. y Rada, R. : "Machine Learning: Applications in E:pert

Systems and Information Retrieval", Ellis Horwood, 1 986.

- Hinton, G.E. : "Learning in Massively Parallel Nets".

- Hinton, G.E. : "Parallel Models of Asociative Memory", Erlbaum,

Hillsdale, N.J., 1981.

- Hinton, G.E., Sejnowski, T.J. y Ackley, D.H. : "Boltzmann Machine:

Constraint Satisfaction N etworks that Learn", Technical Report C M U -CS-84- 1 1 9,

Carnegie-Mellon University, 1984.

- Hinton, G.E. y Sejnowski, T.J. : "Learning and Relearning in Boltzmann

Machines", de "Parallel Distribted Processing: E:plorations in the Structure of

Cognition", Bradford Books, CAmbridge, MA, Vol 1, 1 986.

- Hinton, G.E. : "Learning in Parallel Networks. Simulating Learning in a

Probabilistic System", Byte, Abril 1985.

- Hopfield, J.J. : "Neural Networks and Physical Systems with Emergent

Collective Comptational Abilities", Proc. National Academy of Sciences USA, Vol. 79,

NQ 8, Abril 1982.

- Hummel, R.A. y Zucker, S.W. : "On the Foundations of Rela:ation

Labeling Processes", IEEE Trans. Pattern Analysis and Machine Intelligence, Vol.

PAMI-5, NQ 3, Mayo 1 983.

- 89 -
- Kienker, P.K., Sejnowski, T.J., Hinton, G.E. y Schumacher, L.E. :

"Separating Figure from Ground with a Parallel Network", Perception Vol. 15 NQ 2,

1986.

- Kirpatrick, S., Gelatt, C.D. y Vecchi, M.P. : "Optimization by Simulated

Annealing", Science 220, 1983.

- Metropolis, N., Rosenbluth, A., Rosenbluth, M., Teller, A. y Teller, E. :

"Equation of State Calculations for Fast Compting Machines", Journal of Che m ical

Physics 6, 1087, 1953.

- Minsky, M. y Papert, S. : "Perceptrons", MIT Press, Cambridge, 1969.

- Rosenblatt, F. : "Principles of Neurodynamics: Perceptrons and the

Theory of Brain Mechanisms'', Spartan, Washington, D.C., 1961.

- Rumelhart, D.E., Hinton, G.E. y Williams, R.J. : "Learning

Rpesentations by Backpropagating Errors", Nature Vol. 323, Octubre 1986.

- Sejnowski, T.J. y Rosenberg, C.R. : "NETTalk: A Parallel Network that

Learns to R ead Aloud", Technical Report, JHU/EECS-86, John Hopkins University,

1986.

- Takeda, M. y Goodman, J. : "Neural Networks far Comptation: Number

Representations and Programming Complexity", Applied Optics Vol. 25 NQ 18,

Septiembre 1986.

-90-
9. APÉNDICE S

- 91 -
APÉNDICE 1
l
1RC T . A T

/
1R.C-----R A A 1.1

A.OT\\
-- -

I
-

/ RJA 1
R Q TA ·----A T
- ·H
l..A1 .
• •

Rl -A f . A / A . V A ,1 - - - - -A.VA A 1
:-- .A2. 1
k

A - - JR
• • ·A.AO . 2 •
{
• -R J A

\
Z.Z
\
• R..FAZ
AG.
-
V A A2-----R . V AA 2
APÉNDICE 2
;; ; - * - Mode:LISP; Package:KEE; Base: lO. - * -

( BOLTZMANN
( "proyectos " " 14-Nov-1 986 1 3 : 30 : 3 1 " "PROYECTOS" " 26-Aug-1 987 10:58:58")
NIL
(KNOWLEDGEBASES)
NIL
()
( (KBCOPY NIL METHOD METHOD NIL NIL)
( KBDELETE NIL METHOD METHOD NIL NIL)
(KBLOAD NIL METHOD METHOD NIL NIL)
( KBMETHODFILE ( BOLTZMANN ) )
( KBSAVE NIL METHOD METHOD NIL NIL )
( KBSI ZE 37)
( KEE. DEVELOPMENT . VERSION . NUMBER O)
( KEE . MAJOR . VERSION . NUMBER 2)
(KEE.MINOB.VERSION.NUMBER 1)
{KEE.PATCH.VERSION.NUMBER 64 .1 )
(KEEVERSION KEE2. l ) ) )

( CORRECC ION
( "PROYECTOS" "1-Dec-1986 1 8 : 00 : 08" "PROYECTOS" " 1 1-Dec-1 986 1 5 : 35 : 38" )
NIL
( (ACTIVEVALUE ACTIVEVALUES) )
"Valor activo que expresa los numeras obtenidos para los valores de los nodos y para los pesos
de las conexiones de forma coriecta "
( )
( (AVPUT ( GLOBAL : LAMBDA ( SELF SLOT NUEVO VIEJO UNIDAD TIPO)
(PROG NIL
( RETURN {LIST ( GLOBAL : / ( FIXR (* 10 ( CAR NUEVO ) ) ) 10.0) ) ) ) ) ) ) )

(NODOS
( "proyectos" " 14-Nov-1 986 1 3 : 32 :51 " "PROYECTOS" " 26-ArJg-1 987 9:22:53")
(RED)
( (CLASSES GENERICUNITS) )
"Unidades < "
( ( COMPROBAI . SALIDA
,,
( GLOBAL : LAMBDA ( SELF)
( CONO ( ( EQUAL ( GET . VALUE SELF ESTADO ) ( GET. VALUE SELF sALIDA . PATRON ) )
(PUT.VALUE /RED / CORRECTO /SI ) )
( T (PUT.VALUE /RED /CORRECTO NO ) ) ) )
METHOD
(METHOD)
NIL
( ( COMMENT
"Comprueba si el estado del nodo despues de la segunda fase del algoritmo es igual al que :
r, d i caba e l pat r on de entr nar i en i o '' '1 ) i
1 ;:,:HEXI ONES NIL
NIL
NIL
NIL
( ( COMMENT ( "Lista de las conexiones en las que interviene el nodo" ) ) ) )
( ESTADO (INACTIVO)
NIL
( ( ONE. OF ACTIVO INACTIVO) )
IUL
( (COMMENT ( 11E .tadc a:"7 --: ".] r! 0 d o 11 \ i ::;. ,Bf.I . I.IiY . i,iA (l)} )
( I f EN'!' I F I CP.C I ON
( (OHE.CF ENTaADA S LIDA i TERMEDIO) )
NIL
( ( COMMENT
( " Func i on del nodo en la L ed , ya sea e l emento de ENTRADA , I NTERMED I O , o de SAL I DA " ) )
( CARDINALITY . MAX ( 1) ) ) )
{Sl.LIDA. PATRON
NIL
NIL
( ( ONE . OF ACTIVO INACTIVO) )
NIL
( (CARDINALITY.MAX ( 1 ) )
( COMMENT
"Contiene el estado del nodo para el patron de entrada . Solo es relevante si la identificac ion
del nodo es SALIDA") ) )
(UMBR.6L
(0)
NIL '
(REAL )
NIL
( (COMMENT ( "Valor umbral para calcular el estado de activacion o inactivacion del nodo" ) )
( CARDINALITY . MAX ( 1 ) ) ) )
(VALOR
( -0 . l )
NIL
(REAL)
NIL
( (AVUNITS ( #Unit ( CORRECCION BOLTZMANN ) ) )
( COMMENT
( "Valor numerico que tiene el nodo, a part ir del cual se determina su estado de activacion
o inact i va c i on " ) )
( CARDINALITY . MAX (1))))
( VARIABLE
{T)
NIL
( ( ONE . OF T N IL ) )
NIL
( { COMMENT
( " Variable booleana (T,NIL) que indica si el estado del nodo puede ser cambiado por el fun
.
cionamiento interno de la red . Su valor es NIL cuando el nodo es de ENTRADA o de SALIDA" ) )
( CARD I N A L I TY . MAX ( 1 ) ) ) )
( VER . SI . AC T I VA . A
( GLOBAL : LAMBDA ( SELF CONEX I ON )
(PROG ( (NODO ( CONO ( (EQUAL SELF ( GET . VALUE CONEXION ' PUNTO ! ) )
( GET. VALUE CONEXION 'PUNT0 2 ) )
(T ( GET. VALUE CONEXION 'PUNTOl ) ) ) )
(PESO . ARCO ( GET. VALUE CONEXION 'PESO ) ) )
(CONO ( ( GET . VALUE NODO 'VARIABLE)
(PUT.VALUE NODO 'VALOR (+ ( 6ET . VALUE NODO ' VALOR ) P ESO . ARCO ) )
( COND ( ( >= ( 6ET . VALUE NODO ' VALOR ) ( GET . VALUE NODO .. UMBRAL ) )
( PUT . VALUE NODO 'ESTADO "ACTIVO ) )
(T ( P UT . V. LUE NODO ··· EST .DO I HACT I UG ) :i ! )
··

(NIL))))
METHOD
( METHOD )
NIL
( ( COMMENT
("Metodo que calcula el estado de los nodos conectados con el nodo propietario del metodo.
Toma como atgumentos el nndo pIopietar io y una tm i d ad de U N I ONES" \ l \ ) )
\ ¡,s:= E B T NIL E \ LA . CAl_CULü ) ,

METHOD
(METHOD)
NIL
( ( COMMENT
( '' Metodo que di spara el funci onamiento interno de la red a par t i r de una d e t e r m i nada s i t u a
cion utilizando REGLA.CALCULO") ) ) )
(CREAR.NODOS (GLOBAL:LAMBDA ( SELF )
(PROG ( DATO )
( TERPRI )
(PRINTOUT T "NOMBRE DEL NUEVO NODO : ) 11

(SETQ DATO ( CREATE . UNIT ( READ ) N I L N I L ' (NODOS) ) )


(TERPRI)
(PUT.VALUE DATO
'ESTADO
(MENU (GET.SLOT.MENU 'NODOS 'MENUESTADO 'OWN ) )
-· owN >
(PUT. VALUE DATO
'IDENTIFICACION
(MENU (GET.SLOT.MENU 'NODOS 'MENUIDENTIF 'OWN) )
··· owN ) ¡ ¡
METHOD
(METHOD)
NIL
.
( ( CCMMENT "Cont iene la funcion que crea nuevos nodos " ) ) )
( MENUESTADO
( ("ACTIVO" 'ACTIVO) ( " INACTIVO " 'INACTIVO ) )
NIL
( MENUITEM)
NIL
( (TITLE ( "ESTADO DESEADO") )
(COMMENT "Menu para elegir el esta o de un nodo en el momento de. su creacion'' ) ) ) (
MENUIDENTIF
( ( " ENTARDA " ·' ENTRADA ) ( "SALIDA" ·' SALIDA ) ( "INTERMEDIO" 'INTERMEDIO) )
NIL
( MENUITEM )
NIL
( (TITLE ( "IDENTIFICACION DEL NODO" ) )
(COMMENT "Menu para eleg ', r la identificacion del nodo en el momento de su creacion" ) ) )
( SUPRIMI R . NODOS ( GLOBAL : L F
, BDA ( SEU )
( TERPRI ) 1
(PlUNTOUT T "NOMBRE DEL NODO: " )
( UN I TDELETE C READ ) ) )
METHOD
(METHOD)
NIL
( \ COMMENT "Contiene el retodo que supt ime un nodo de la re•i" ) ) ) ) )

(E •. 6 CTIVO
\ u proyect os tl 11 -No·v- 1 986 l 2. : 33 : 2 4 u ºPHOYEC OS!I •: : c- c\ - l S"26 10: 57 :55ª )
NIL

( )
( ( .SSERTION ( lWff {AN ESTADO OF ?NODO IS ACTIVO) ) )
( EXTERNAL . FORM ( !F ( ( TE V.tLOR OF ?NODO IS ?X) AND
( TR! UMBRAL OF ?NODO IS ?Y )
-
._ =
.
-
- •
,-·.
-. , .-.
'- ·'
,
-
.. l" .· - -
. :_: : :·.; .' ;).

2J:asz ( /i W f f ( ,6 V.6 LOR OF ' ! WDO IS n i #Wff ( A UMBR.6L OF ?HODO IS 'Y ) /F W - i (>= 'X 'Y) ) ) ) )

( R . ACTUALIZACION
("PROYECTOS" "27-Nov-1986 1 5 : 46 : 26" "PROYECTOS" " 10-Dec-1986 15:14:00" )
NIL
( REGLA. INICIO. FASE! REGLA . IHICIO.FASE2 )
NIL - -- -·. - -

( (ASSERTIOH ( #Wff ( AH ACTUALI ZACION OF ?CON IS NO ) ) )


( EXTERNAL . FORM ( IF (?CON IS IN UNIONES) THEN ( THE ACTUALI Z AC ION OF ?CON IS NO ) ) )
(PREMISE (#Wff ( ?CON IS IN CLASS UNIONES ) ) ) ) )

(R.ASIGNACION.PATRON
( "PROYECTOS" "ll-0ec-1986 1 6 : 27 :52" "PROYECTOS" " 12-Dec-1986 11:56:08")
NIL
(REGLAS.ASIGNACION.PATRON)
"Pide al usuario los valores correspondientes para los nodos de un patron"
(}
( (ACTION ( (PRINTOUT T ( UNIT . NAME ?NODO ) " • • • • ") (PUT.VALUE ?NODO ·' VALOR (GLOBAL:READ) ) ) )
( EXTERNAL . FORM
(IF ( (?NODO IS IN NODOS) AND
( (THE IDENTIFICACION OF ?NODO IS ENTRADA ) OR
( THE I DENTIFICACION
OF
?NODO
IS
SALIDA) ) )
DO
(PRINTOUT T ( UNIT. NAME ?NODO ) " " ) ••••

(PUT.VALUE ?NODO / VALOR ( GLOBAL : RE AD ) ) ) )


(PREMISE
(#Wff (?NODO IS IN CLASS NODOS)
#W ff ( (AN IDENTIFICACIOH OF ?NODO IS ENTRADA ) OR ( AN IDENTIFICACION OF ?NODO IS SALIDA) ) ) ) )

( R . CALCULO
("proyectos" "14-Nov-1986 1 3 : 34 : 32 " "PROYECTOS" " l l-Dec-1 986 1 5 : 44 : 16" )
NIL
( REGLA .CALCULO )
NIL
()
( ( f.CT ION ( ( P R I NT ?NODO ) ( P R I NT ?DESTINO) ( UNI TMSG ?NODO /VER . SI . ACTIVA . A ?DESTINO ) ) )
( A:3SERT I ON )
(EXTERNAL.FORM (IF ( AND ( THE ESTADO OF ?NODO IS ACTIVO )
( THE CONEXIONES OF ?NODO IS ?DESTINO) )
DO
{PRINT ?NODO )
(PHINT ?DESTINO)
(UHITMSG ?NODO 'VER.SI.ACTIVA.A ?DESTINO ) ) )
( P REMISE ( # W f f ( A N ESTADO OF ?HODO IS ACTIVO ) ##W f f .< A CONEXIONES OF ?NODO IS ?DESTINO ) ) ) ) )

(R.CAMBIO.PESO.FASEl . l
! .! •

(REGLA.CAMBIO.PESO.FASEi )
NIL
()
((ACTION ( (PUT.VALUE ?CON 'PESO (+ (GET.VALUE ?CON 'PESO ) (GET.VALUE 'RED 'DELTA) ) ) ) )
( ASSERTION ( #Wff C AN ACTUALIZACION OF ?CON IS SI ) ) )
(EXTERNAL.FORM (IF ( (THE ESTADO OF ?NODO IS ACTIVO ) AND
(THE CONEXIONES OF ?NODO IS ?CON )
AND
(THE ACTUALIZACION OF ?CON IS NO)
AND
( THE PUNTO! OF ?CON IS ?NODO)
ANO
(THE ESTADO
OF
( THE PUNT02 OF ?CON)
-
IS
ACt VO ) )
TREN
(THE ACTUALIZACION OF ?CON IS SI )
DO
(PUT. VALUE ?CON
·· P ESO
(+ ( GET .VALUE ?CON ,. P ESO ) ( GE T . VALUE ' RE D ,. DELTA ) ) ) ) )
( P REMISE ( l/Wff ( AN E!:TADO OF ?NODO IS ACTIVO ) #Wff (A CONEXIONES OF ?NODO IS ?CON)
#Wff (AN ACTUALIZACION OF ?CON IS NO )
#Wff (A PUNTOl OF ? CON IS ?NODO)
#Wff (A PUNT02 OF ?CON IS ?VAR2)
#Wff C AN ESTADO OF ?VAR2 IS ACTIVO ) ) )
( WEIGHT ( 2 ) ) ) )

(R.CAMBIO. PESO. FASEI . 2


("PROYECTOS" "27-Nov-1986 1 5 : 09 : 53 " "PROYECTOS" " 10-Dec-1986 14:16:40" )
NIL
(REGLA.CAMBIO.PESO.FASE! )
NIL
()
( (ACTION ( (PUT.VALUE ?CON 'PESO (+ ( GET . VALUE ?CON 'PÉSO) (GET.VALUE 'RED 'DELTA) ) ) ) )
( ASSERTION (#Wff ( AN ACTUALIZACION OF ?CON IS SI ) ) )
( EXTERNAL . FORM (IF ( (THE ESTADO OF ?NODO IS ACTIVO ) AND l\

( THE CONEXIONES OF ?NODO IS ?CON)


ANO
( THE ACTUALIZ ACION OF ?CON IS NO )
ANO
( THE PUNT02 OF ?CON IS ?NODO )
ANO
( THE EST.o.Do
OF
( THE PUNTO l OF ?CON)
IS

THEN
( THE ACTUALI ZACION OF ?CON IS SI )
DO
(PUT.VALUE ?CON
,. P ESO
(+ (GET.VALUE ?CON ,. P ESO ) (GET . VALUE ''ED .. DELTA ) ) ) ) )
(PHEMISE (#Wff ( AN ESTADO OF ? !ODC I 3 :. c ' I V O ) t W f f ( f. CONEXI.HES •:; ; · •; IS oCOH)
#Wff ( A PUNTO ! OF ?GQH IS ?VAR3)
#Wff ( AN ESTADO OF ?VAB3 IS ACTIVO ) ) ) ) )

(R.CAMBIO.PESO.FASE2. l
( "PROYECTOS" "27-Nov-1986 16: 16:45" "PROYECTOS" "10-Dec-1986 14: 18:26" )
NIL
(REGLA.CAMBIO.PESO.FASE2)
NIL

((ACTION ( ( P UT . VALUE ?CON -PESO ( - ( GET . VALUE ?CON -PESO) ( GET . VALUE ''RED ·' DELTA ) ) ) ) )
( ASSERTION l #Wff ( AN ACTUALIZACION OF ?CON IS SI ) ) )
( EXTERNAL . FORM (IF ( ( THE ESTADO OF ?NODO IS ACTIVO ) AND
(!HE CONEXIONES OF ?NODO IS ?CON)
ANO
( THE ACTUALIZACIO.H OF ?·:OH IS NO )
ANO .
(THE PUNTOl OF ?CON IS ?NODO)
AF
(THE ESTADO
OF
(THE PUNT02 OF ?CON)
IS
ACTIVO) )
THEN
(THE ACTUALIZACION OF ?CON IS SI )
DO
(PUT.VALUE ?CON
,. P ESO
(- (GET.VALUE ?CON -PESO) ( GET . VALUE -' RE D -' DELTA ) ) ) ) )
(PREMISE ( #W f f ( AH ESTADO OF ?NODO IS ACTIVO ) #Wff (A CONEXIONES OF ?NODO IS ?CON)
#Wff ( t.N ACTUAL I ZACION OF ?CON IS NO)
#Wff (A P:NTOl OF ?CON IS ?NODO)
#Wff ( A PUNT02 OF ?CON IS ?VAR4)
#Wff ( AH ESTADO OF ?VAR4 IS ACTIVO ) ) ) ) )

(R.CAMBIO.PESO.FASE2.2
( "PROYECTOS" " 27-Nov- ;_ 986 1 6 : 16 : 50" "PROYECTOS" " 10-Dec-1 986 14: 18:23")
NIL ti
( REGLA . CAMBIO . PESO . FASE2 )
NIL
()
((ACTION ( (PUT.VALUE ?CON -PESO ( - ( GET . VALUE ?CON -' P ESO ) ( GET . VALUE -RED -DELTA ) ) ) ) )
( ASSERTION ( #Wff ( AN ACTUAL I Z ACION OF ?CON IS SI ) ) )
(EXTERNAL.FORM (IF ( (!HE ESTADO OF ?NODO IS ACTIVO) AND
(THE CONEXIONES OF ?NODO IS ?CON )
AND
( THE ACTUALIZACION OF ?CON IS NO )
AND
- • T T Y , . ,

tUf 1V1 OF ?CON I S ?NODO )


AND
(THE ESTADO
OF
(THE PUNT02 OF ?CON)
IS
ACTIVO) )
THEN
DO
(PUT. V. LUE ?CON
,. P E SO
(- (GET.VALUE ?CON .. PESO) (GET.VALUE ·' 1ED .. DELTA ) ) ) ) )
(PREMISE (#Wff ( AN ESTADO OF ?NODO IS ACTIVO ) #Wff (A CONEXIONES OF ?NODO IS ?CON )
#Wff \ AN ACTUALI ZACION OF ?CON IS NO )
#Wff (A PUNTOl OF ?CON IS ?NODO)
#Wff (A PUNT02 OF ?CON IS ?VAR5 )
#Wff ( AN ESTADO OF ?VAR5 IS ACTIVO ) ) ) ) )

(R.COMPROBAR.SALIDA
( "PROYECTOS" " l l-Dec-1986 !7:56:36" "PROYECTOS" "ll-Dec-1986 17:58:38" )
NIL
(REGLA.COMPROBAR.SALIDA)
NIL

( (ACiJON ( (UNITMSG ?NODO .. COMPROBAR . SALIDA ) ) )


( EXTERNAL . FORM (IF ( ( ?NODO IS IN NODOS ) AND ( THE IDENTIFICACION OF ?NODO IS SALIDA ) )
DO
(UNITMSG ?NODO 'COMPROBAR.SALIDA) ) )
(PBEMISE (#Wff (?NODO IS IN CLASS NODOS) #Wff ( AN IDENTIFICACION OF ?NODO IS SALIDA ) ) ) ) )

(R.FIJAR.SALIDA.PATRON
("PROYECTOS" "ll-Dec-1986 17:45:25" "PROYECTOS" "11-Dec-1986 1 7 : 48 : 09" )
NIL
( REGLA . FIJAR . SALIDA . PATRON )
- -···- --- - ............................................................................ ·· - - -- - - - ·

NIL
()
((ACTION ( ( PUT . VALUE ?NODO .. SALIDA . PATRON ( GET . VALUE ?NODO . ESTADO ) ) ) )
( E, :ERNAL . FORM ( I F ( (?NODO IS IN NODOS) ANO ( THE I DENT I F I CA C I ON OF ?NODO IS SALIDA ) )
DO
(PUT.VALUE ?NODO . SALIDA.PATRON (GET.VALUE ?NODO . ESTADO) ) ) )
(PREMISE ( #Wff (?NODO IS IN CLASS NODOS) #Wff ( AH IDENTIFICACION OF ?NODO IS SALIDA) ) ) ) )

(R. INACTIVO
("p oyectos" "14-Nov-1986 13:33:24" "PROYECTOS" " 19-Nov-1986 10:58: 17" )
NIL
(REGLA . ESTADO)
NIL
()
((ASSERTION (#Wff ( AN ESTADO OF ?NODO IS INACTIVO ) ) )
(EXTERNAL . FORM ( IF ( (THE VALOR OF ?NODO IS ?X) AHD
(THE UMBRAL OF ?NODO IS ?Y)
ANO
( < ?X ?Y))

17 E E3TADO OF ?NODO IS IMACTIVOI J )


(PREMISE (#Wff (A VALOR OF ?NODO IS ?X) #Wff (A UMBRAL OF ?NODO IS ?Y) #Wff (< ?X ?Y) J ) ) )

(R. IHICIO.FASE2
( "PROYECTOS" " 1 9-Nov-1 986 11 :09:05" "PROYECTOS" "ll-Dec-1986 15:25:44" )
NIL
( REGLA . INICIO. FASE2 )
NIL
( (PUT.VALUE ?NODO 'VALOR (- (GET.VALUE ?NODO 'UMBRAL) (GET.VALUE 'RED 'DELTA) ) )
(ASSEBT NIL 'REGLA.ESTADO) ) )
(ASSERTION NIL)
(EXTERNAL . FORM (IF ( THE IDENTIFICACION OF ?NODO IS SALIDA)
DO
(PUT.VALUE ?NODO
' VALOR
(- ( GET . VALUE ?NODO 'UMBRAL) (GET. VALUE -RED -DELTA ) ) )
( ASSERT NIL ' REGLA . ESTADO ) ) )
(PREMISE ( ll W f f (. N IDENTIFICACION OF ?NODO IS SALIDA) ) )
( WEIGHT (0) ) ) )

(R.PESOS
( "PROYECTOS" " 1 0-Dec-1986 1 5 : 32 : 4 1 " "PROYECTOS" " 10-Dec-1 986 15:32:41")
NIL
(REGLAS.ORIGEN)
NIL
()
((ASSERTION ( #Wff (A PESO OF ?CON IS 0 . 1 ) ) )
( EXTERM L . FORM (IF (?CON IS IN UNIONES) THEN ( THE PESO OF ?CON IS 0.1 ) ) )
( P REMISE ( l/ W f f ( ?CON IS IN CLASS UNIONES ) ) ) ) )

(R.VALORES
( "PROYECTOS" "10-Dec-1986 15:32:39" "PROYECTOS" "10-Dec-1986 15:32:39" )
NIL
( REGLAS. ORIGEN )
NIL
()
( (ASSERTION (#Wff (A VALOR OF ?NODO IS -0. 1 ) ) )
(EXTERNAL.FORM (IF ( ?NODO IS IN NODOS) THEN ( THE VALOR OF ?NODO IS -0 . 1 ) ) )
(PREMISE ( #Wff ( ?NODO IS IN CLASS NODOS ) ) ) ) )

(R.VARIABLE.FASEl
( "proyectos" "14-Nov-1986 1 3 : 35 : 20 " "PROYECTOS" " 26-Nov-1986 15:25:33")
NIL
(REGLA.VARIABLE.FASE! )
NIL
()
( (ASSERTION ( #Wff ( A VARIABLE OF ?NODO IS NIL) ) )
( EXTERNAL . FORM (IF ( OR ( THE IDENTIFICACION OF ?NODO IS ENTRADA)
( THE IDENTIFICACION OF ?NODO IS SALIDA ) )
THEN
(THE VARIABLE OF ?NODO IS NIL) ) )
(PREMISE
( #Wff ( ( AN IDENTIFICACION OF ?NODO IS ENTRADA ) OR (AN IDENTIFICACION OF ?NODO IS SALIDA ) ) ) )
( WEIGHT ( l ) ) ) )

(R.VARIABLE.FASE2
( "PROYECTOS" " 1 7-Nov-1 986 1 6 : 30 : 00 " "PROYECTOS" " 26-Nov-1 986 15:31 :55")
NIL
(REGLA.VARIABLE.FASE2 ( CLASSES GENERICUNITS ) )
NIL
()
( (ASSERTION (#Wff (A VARIABLE OF ?NODO IS NIL } ) }
( EXTERNAt . FOUM r r r f THE ICE TIFICACION OF ?NODO IS ENTRADAl
_ n c .h

( THE VARIABLE OF ?NODO IS NIL) ) )


(PREMISE (#Wff (AN IDENTIFICACION OF ?NODO IS ENTRADA) ) ) ) )

(RED
("PROYECTOS" "25-Nov-1986 1 7 : 00 : 24 " "PROYECTOS" " 26-Aug-1 987 10:52:22")
NIL
( ( CLASSES GENERICUN ITS ) )
"Estructura basica de la red compuesta por NODOS y UNIONES"
()
( (ALGORITMO ( GLOBAL : LAMBDA ( SELF )
( ASSERT NIL ,REGLA . INICIO . FASE l )
(ASSERT NIL 'REGLA . ESTADO )
( ASSERT NIL ·' REGLA . VARI/.BLE . FASE l )
(ASSERT NIL ,. REGLA . CALCULO )
( ASSERT N I L ,REGLA . CAMBIO . PESO . FASE i ;
( ASSERT NIL ,REGLA . INICIO. FASE2 )
( ASSERT NIL ·' REGLA . VA R I ABLE . FASE 2 )
( ASSERT NIL ,REGLA.CALCULO)
( ASSERT NIL ' REGLA . CAMBIO . PESO . FASE2 ) )
METHOD
(METHOD)
NIL
,
( (COMMENT ( ( " Algo1 itmo que realiza el apren•:zaje utilizando REGLAS. ALGORITMO" ) ) } )
ASIGNAR . PATRON
( GLOBAL : LAMBDA ( SELF )
(PRINTOUT T "ESCRIBA LOS VALORES CORRESPONDIENTES A CADA NODO : " ) (
ASSERT NIL , REGLAS . AS I GNACION . P ATRON ) )
METHOD
( METHOD)
NIL
( ( COMMENT .
"Pide al usuario los valores de los nodos de la red ( un patron de entrenamient o ) " ) ) )
( COMPROBACION
( GLOBAL : LAMBDA ( SELF )
( ASSERT NIL ,REGLA . COMPROBAR . SALIDA ) )
METHOD
( METHOD )
NIL
( ( COMMENT
''Ianza_ e_l_razona m i ent o que comprieba l a s s a l i d a s d e s pues n un •ie una ej ecuc i on d e l a l go r i t mo co
patron" ) ) )
( CORRECTO
( NO )
NIL
( ( ONE . OF S I NO ) )
NIL
( ( CARD I N A L I TY . MAX ( l ))
(COMMENT
11 Valor· 'bo{lear.O ! CT
,
Jn \
" -; todos l os patrones de entra a 1
. f
- ·• .
O LJ

la salid a adecuada tras la segunda fa s e del a lg oritmo de aprendizajeª ) ) )


( DELTA
(0 .1 )
NIL
(REAL)
NIL
( ( COMMENT
("Valor corrector d e lo s p es o s d e las c one xio n es e n : : itmo de ap en d izaje'' ) )
( CARDINALITY . MAX f l ) ) l l
- -. ·. . ,

. . . .'-·, :. "' '; ."

(GLOBAL:LAMBDA ISELF)
(UNITMSG 'RED 'ASIGNAR.PATRON)
(UNITMSG 'RED 'ALGORITMO)
(UNITMSG 'RED 'COMPROBACION))
METHOD
( METHOD)
NIL
( (COMMENT "Metodo que realiza una iteracion completa con todos los patrones de entrada" ) ) )
( MENUOPERACIONES
( ("CREAR NODOS" ,N) ( "CREAR UNIONES" 'U)
( "SUPRIMIR NODOS" 'SN)
( "SUPRIMIR UNIONES" ·' S U )
( "FIN" 'F) )
NIL
( MENUITEM )
NIL ;1
( (TITLE ( "OPERACIONES BASICAS" ) ) ( FONT ( KEE. TITLE . FONT ) )
( COMMENT " Menu pr incipal de creacion de
la red" ) ) )
( OP ERi CIONES
(GLOBAL:LAMBDA ( SELF )
(PROG ( ( OPERACION NIL ) )
(DO NIL
( ( EQ O P !RACION 'F))
,
(SETQ OPERACION ( MENU (GET .SLOT .MENO ·' RE D ,. MENUOPERACI ONES . OWN ) ) )
( COND ( ( EQ OPERACION ' N )
( UNITMSG ' NODOS 'CREAR . NODOS ) )
( ( EQ OPERACION ' U )
( UNITMSG ' UNIONES ,. CREAR . UN IONES ) )
( ( EQ O P ERACION ' S N )
( UN I TMSG ' NODOS ' S U P R I MI R . NODOS ) )
( ( EQ OPERACIO 'SU)
( UNITMSG ' UNIONES 'SUPRIM . UNIONES ) ) ) ) ) )
METHOD
(METHOD)
NIL
( ( COMMENT "Contiene la funcion que se ocupa del menu pr incipal de operaciones " ) ) )
( ORIGEN ( GLOBAL : LAMBDA (SELF)
( ASSERT N I L ' R EGLAS ORIGEN))
,
METHOD
(METHOD)
NIL
( ( COMMENT " Inicializa l a red" ) ) )
(\\IMAGE.PANEL HIL) ) )

(REGLA. C.lLCULO
( " pr· oyeet o s " 11 14-ficv-1986 13:34:32" "PROYECTOS" "5-Dec-1986 13:44:52")
( REGLAS . FASE2 REGLF.S . FASE l ( RULES RULESYSTEM2 i )
( (RULE.CLASSES RULESY57EM2))

( ( ,6,SSERTI O N }
(PREMISE) )
( ( AHD . TRACE )
( FC. TRACE)
(IMMEDIATE.RULE.APPLICATION.MODE ( ON ) }
C OR . TRACE)
(PANEL.TRACE)
(STEPPER.MODE)
(BEGLA.CAMBIO.PESO.FASEl
( "PROYECTOS" "26-Nov-1986 1 5 : 23 : 38" "PROYECTOS" " 10-Dec-1 986 14: 17:19") (
REGLAS . FASEl )
( ( CLASSES GENE R I CUN I TS ) ( RULE. CL.SSES RULESYSTEM2 ) )
"Clase de i·eglas que se ocupan de la modifieaeion •ie los pesos de las eonexiones segun la pr im
er a fase del a l gor i t m o de aprendizaj e "
( ( ASSERT ION )
( PREMISE) )
( (AND. TRACE)
( FC . TRACE )
(IMMEDIATE.RULE.APPLICATION.MODE ( ON ) )
C OR . TRACE (OFF) )
(PANEL.TRACE)
(STEPPER.MODE)
(TEXT. TRACE) ) )

( REGLA . Cl.!·1BIO . PESO . F..SE2


( "PBOYECTOS" " 26-Nov-1986 15: 28 : 26" "PROYECTOS" " 10-Dec-1986 14: 18:45")
( REGLAS . FASE2 )
( ( CU:SSE:S GENERICUN I TS ) ( RULE . CLASSES RULESYSTEM2 ) )
"Clase de reglas que se ocupan de la modificacion de los pesos de las conexiones segun la segu
nda fase del algor itmo de aprendizaj e"
( ( ASSERTI O N )
( PREMISE ) )
( ( AND . TRACE )
( FC . TRACE )
( I MMEDIATE. RULE. APPLICATION . MODE) C
OR . TRACE)
( P ANEL.TRACE )
( STEPPER . MODE)
( TEXT . TRACE ) ) )

( REGLA . COMPROBAR . SALI DA


( "PROYECTOS" " l l-Dec-1986 17:56:12" "PROYECTOS" " 12-D c-1 986 1 1 : 45 : 47 ")
( REGLAS . CONTROL ( RULES RULESYSTEM2 ) )
( ( RULE . C[ ASSES RULESYSTEM2 ) )
NIL
( ( ASSERT . M O D E ( REPLACE ) )
( ASSERT ION )
(PREMISE) )
( (ANO. TRACE)
( FC . TRACE )
( IMMEDIATE. RULE .APPLICATION . MODE) C
OR . TRACE )
(PANEL .TRACE )
( STEP PER . MODE)
( TEXT . TRACE ) ) )

(REA . ESTADO -
( "proyectos" " 14-Nov-1986 1 3 : 33 : 24" " PROYECTOS" "5-Dec-1986 13:44:13")
( REGLAS . FASE2 REGLAS . FASE! ( RULES RULESYSTEM2 ) )
{ { RULE . CLASSES RULESYSTEM 2 ) )
"Regla comun a las dos fases . Determina los estados de todos los nodos de la red a part i r de 1
es valores de cada uno de e l los "
( ( . .SSERT . MODE ( REPL.CE ) )
(ASSERTIOH)
(PREMISE ) )
( (ANO.TRACE)
( FC . TRACE )
( I MMEDIATE. RULE. APPLICATION . MODE) C
OR . TRACE )
(PANEL. TRACE)
( STEPPER . MODE)
(TEXT. TRACE) ) )

( REGLA . F IJAR . SAL I DA . PATRON


( "PROYECTOS" "ll-Dec-1986 1 7 : 44 : 50" "PROYECTOS" " 1 2-Dec-1986 11 :45:52")
( REGLAS . CONTROL ( RULES RULESYSTEM2 ) )
( ( RULE. CLASSES RULESYSTEM2 ) )
"Una vez leido el patron de entrada,asigna al slot SALIDA.FA 10N de las 1m i dades de sali•ia l o s
v alores correspondientes"
( ( ASSERT . MODE ( REPLACE ) )
( ASSERT ION )
(PREMISE) )
( ( AND . TRAC E )
( FC . TR:.CE )
( IMMEDIATE. RULE . APPLICATION . MODE) C
OR . TRACE )
(PANEL.TRACE)
(STEPPER.MODE)
(TEXT . TRACE) ) )

(REGLA.INICIO.FASE!
( "PROYECTOS" "27-Nov-1986 1 5 : 47 : 15" "PROYECTOS" "5-Dec-1986 13:46:49") (
REGLAS. FASE! )
( ( RULE . CLASSES RULESYSTEM2 ) ( CLASSES GENERI CUN I TS ) )
"Regla que se uti liza para preparar todos los nodos para la primera fase del algoritmo. Contie
ne una unica regla R . ACTUALI Z AC I ON , que tamb i e n es ut i l i zada e n l a s egunda f a s e del algoritmo de
aprendizaje"
( )
() )

( REGLA. INICI O . FASE2


( "PROYECTOS" " 26-Nov-1986 15: 28 : 27 " "PROYECTOS" "5-Dec-1986 13:50:46") (
REGLAS . FASE2 )
( ( RULE . CLASSES RULESYSTEM2 ) ( CLASSES GENERICUNITS ) )
"Regla que se utiliza para preparar todos los nodos para la segunda fase del algoritmo"
()
() )

( REGLA . VARIABLE . FASEl

( REGLAS . FASE ! )
( ( RULE . CLASSES RULESYSTEM2 ) ( CLASSES GENERICUNITS ) )
"Regla que asigna los valores del s lot VARIABLE de tÓdos los nodos de la red en funcion de su
identi ficacion y de las restricciones de la primera fase"

( ))
( REGL.<S . FP. S E 2 )
( ( BULE . CLASSES BULESYSTEM2 ) ( CLASSES GENEBICUNITS ) )
"Regla que as igna los valores del slot VARIABLE de todos los nodos de la red en funcion de su
ident i ficacion y de las restr icciones de la segunda fase "
()
() )

(REGLAS.ALGORITMO
("PROYECTOS" "26-Nov-1986 1 4 : 43 : 18" "PROYECTOS" "5-Dec-1986 13:38:46")
( ( RULES RULESYSTEM2 ) )
( ( RULE .CLASSES RULESYSTEM2 ) )
" C la s e de re g la s que c o n tie n e to d a s las re g l a s n e c e s a ria s en el a l g o r i tm o de aprendizaje de l a
re d "
( ( ASSERT[ 10DE ( REPLACE ) ) )
·

( ( RESOLVP CONFLICT LEAST . PREMISE . COMPLEXITY)


( RETRACT NIL NIL NIL NIL NIL ) ) )

( REGLAS . ASIGNACION. PATRON


( "PROYECTOS" l l-Dec-1986" 16:26: 18" "PROYECTOS" "12-Dec-lc,:6 11 :56:33" )
( REGLAS . CONTROL ( RULES RULESYSTEM2 ) )
( ( RULE. CLASSES RULESYSTEM2 ) )
"P id e al u su a r io lo s v alo re s c o rre s po n d ie n te s pa ra lo s no d o s de un patron "
( ( ASSERT . MODE ( REPLACE ) )
( ASSERTION )
( PREMISE ) )
( ( AND . TRACE )
( FC . TRACE )
( IMMEDIATE.RULE. APPLICATION. MODE)
( OR . TRACE )
(PANEL.TRACE)
(STEPPER.MODE)
( TEXT . TRACE ) ) )

(REGLAS.CONTROL
( ''PROYECTOS" " 1 2-Dec-19 '
6 11 : 43 : 36 " " P ROYECTOS " " 1 2-Dec- 1 986 1 1 : 45 : 1 7 " )
( REGLAS . ALGORITMO ) t1
( ( RULE .CLASSES RULESYSTEM2 ) ( CLASSES GENERICUNITS ) )
NIL
( ( ASSERT . MODE ( REPLACE ) ) )
())

(REGLAS.FASEl
( "PROYECTOS" " 26-Nov-1986 14:44:09" PROYECTOS" "12-Dec-1986
" 11 :42:56" )
( REGLAS . FASES )
( ( RULE . CLA33iS iLESYSTEM2 ) ( CLASSES GENE R I C UIHTS ) )
"Clase e e¿las que contiene todas la ceglas ceferidas a la pcimeca fase del a lg o c it m o de ap
lendizaj e "
( ( WEIGHT (O) ) )
( ( RESOLVE. CONFLICT LEAST. PREMISE . COMPLEXITY ) ) )

( REGLAS . FASE2
( "PROYECTOS" " 2.,-- .. : ·.-- : 36 14:44: 10" "PROYECTOS" "12-Dec-1986 11 :43:10" )
( REGLAS . F. .SES )
1 -. .-
". -. - . ·: :

rndizaje"
( ( WEIGHT (l) ))
( (RESOLVE.CONFLICT LEAST.PREMISE.COMPLEXITY) ) )

( REGLAS . FASES
( "PROYECTOS" "12-Dec-1986 1 1 : 39 : 20" "PROYECTOS" " 1 2-Dec-1986 1 1 : 41 : 46" )
(REGLAS.ALGORITMO ( RULES RULESYSTEM2 ) )
( ( RULE. CLASSES RULESYSTEM2 ) )
"Reglas que ejecutan las dos fases del algoritmo"
( )
() )

(REGLAS. ORIGEN
( "PROYECTOS" " 1 0-Dec-1986 15: 28:51" "PROYECTOS" "ll-Dec-1986 17 :04:50")
( ( RULES RULESYSTEM2 ) )
( ( RULE . CLASSES BULESYSTEM2 ) )
"Coloca los valores de todos los nodos y los de todas las conexiones"
( ( ASSERT . MODE ( REP LACE ) )
( ASSERTION )
(PRElüSE) )
( (ANO. TRACE)
( FC . THACE )
(IMMEDIATE.RULE.APPLICATION.MODE) C
OR . TRACE )
(PANEL.TRACE)
(STEPPER.MODE)
(TEXT . TRACE ) ) )

( UNIONES
( "pt'oyect o s " " 1 4-Nov- 1 986 13 : 30 : 41 " "PROYECTOS" " 26-Aug-1 987 9 : 48 : 1 2 " )
( RED )
( (CLASSES GENERICUNITS) )
"Conexiones o arcos entre los nodos de la red"
( ( ACTUAL I ZACION
( NO )
NIL
( ( ONE . OF SI NO ) )
NIL
( ( COMMENT
("Valor booleano (SI,NO) que determina si el peso de la conexion ha si d o a ct u a l i za d o en l a
fase correspondiente del algoritmo de aprendizaje ( sumandole o restandole DELTA ) " ) )
( CARDINALITY . MAX ( 1 ) ) ) )
(PESO
(0)
NIL
( :AL )
:-: ! L
( ( Cüi'lMEi
· ( " Va l or numet' i c o a s i gn a d o a l : c o n e:: i on e n t r· e dos :i odo s " ) )
(AVUNITS ( llUn i t ( CORRECCION BOLTZMANJ ) ) ) )
(PUNTOl NIL
NIL
( NODOS )
NIL
( ( COMMENT ( "Uno de los dos nodos asociados a la conexion") ) (CARDINALITY.MAX ( 1 ) ) ) )
(PUNT02 HIL
FIL
( NODOS )
NIL
( ( COMMENT ( "Uno de los dos nodos asociados a la conexion") ) .ARDINALITY . MAX ( l ) ) } }}

( ( CREAR . UNIONES ( GLOBAL : LAMBDA ( SELF)
(PROG ( DATO VALOR N )
( TERPRI )
( PRINTOUT T "NOMBRE DE LA NUEVA UNION : " )
( SETQ DATO (CREATE.UNIT ( READ) NIL NIL ' ( UNIONES ) ) )
(TERPRI }
(PRINTOUT T "PESO ( D para el valor por defecto) : " )
( SETQ VALOR ( READ ) )
(PUT.VALUE DATO
'PESO
( CONO ( (EQ VALOR 'D) 0)
(T VALOR) )

C TERPRI )
(PRINTOUT T "PRIMER NODO CONECTADO: ")
(SETQ N CREAD) )
(PUT. VALUE DATO 'PUNTO! N )
(PUT.VALUE N
'CONEXIONES
(CAR ( AP PEND (GET.VALUE N 'CONEXIONES) (LIST DATO) ) ) )
( TERPRI )
( PRINTOUT T "SEGUNDO NOD CONECTADO: " )
( SETQ N ( READ ) )
il

(PUT.VALUE DATO 'PUNT02 N)


(PUT.VALUE N
'CONEXIONES
(CAR ( AP P END ( GET . VALUE N 'CONEXIONES ) (LIST DATO) ) ) ) ) )
METHOD
(METHOD)
NIL
( ( COMMENT " Cont i ene la fun c i on que cr· ea 1.m i ones entr·e nedo s " ) ) )
( SUPRIMIR . UNIONES (GLOBAL:LAMBDA (SELF)
('l l T \
' . - - · - - · - I

(PR!ATOUT T "NOMP F DE LA UPI0f : "l


(UNITDELE7E
METHOD
( METHOD)
NIL
( ( COMMENT "Contiene la funcion que suprime uniones " ) ) ) ) )

KBEnd
APÉNDICE 3
-- -r - - - - -
\

- ·.---·-
- - - . --. f...
"·\·1. - -
:

'
.
·-. _

'
: .
·-----. . _._

;
·· G
HE LP . ..
·-

; ¡: , iETHUO .. CTU.;. TOH U 3g Z 7


;
/:< ETHDD,AGTüATüR u 4 4 : 9
i . ---
: _.:.•· .·-L ·_YJtJJ L !_
· - - - · - · - · . -

L- __ __ _ __ .
·
.l.r t; -- = t !_ü : _____ -·--

i
i

¡: .
. VE . T.LAL . . RA. f n .uuH U,L 9
1 . .
r
·
. 1

. . ¡ VFHT!f':AI TRAFF i:-: _ ! !fHT f: : :: fi :

:
. _

:
- -
' ..
·
·.
·:
,.
-: : :
=: : ;
: ::: ;;
.. . .

··:'
: .::: . ·:;. > ·: , ; .
: :: :
::· :
· •.·· .-· o;G;;:TUATUR ( 3 2 4

: . - . OiGifiiETEH O 3 2 9 7
.. f · . _ -
::
:
- · . -· .-· ..-· --
!! ' . - ! ! " l ! 1 L 1 I ' " "- _ 1

:,:.· ·> .
.. . ...........

: _
-- - -- - -· :

:
.-=:.c::
::=:: • -· .
n
-u .
' " : a

-
__

. .'- :-
-

--
. . .

- -
- _ _
-ni:1iMFTFPf::i:ifi7
·
=:=: =_= =:=
-
-- -
-
_- 11

:
-
_ 1 ne . 1n 1a111-

'· -- -- - !; ;:· ;! ' - l l ' l l - 1 ! - !",


: ' ! '

·- -LiGif.iETEH U 3 3 6 6
.
-: ··: . : _-. .:· .
·
-

-..._ ,:: •. ·-.


,'
'· ·- . . u;u; ETER o 3 3 6 8
¡
! ..:... ..· L!t:!r?"! ! ! H U i ! U
· '· -· -· · · -- -
- -

..._
! i/:' :: .: .. ··.
ü!füMETER \

::.: :·. ·
{f·.:··:·:,
; 337 4
0
a a a J • n -r-
, \

,\
.
· .
\•\'· \ .
• !
' L !t m ! ! t • - u E u

.,
\· ·:·.:·-. ·. .·· OU]!:ETEH 0 3 3 8 0
. .x

'· \ \\ <fiG fi1ETER0 3 3 8 2


• _ \ •\
\
,
'
! • :: .;." ¡¡ - · · · · .
-
. .
-.--· .
.
¡ •1, ·. ' '•
•-: n:um - ---- · - r 1 r - - 1 1 .- - n !- -
" -
,
;
. .
.
\'•. [irETHs u 3 3 B f
',

··,; ·. ; MALE =PAfEL [ 3 2 5

- - -


·

·.>..:

\¡:• .
Ntll lllt'" t . , .,f lf l

; - -; t _ . ; . ..• •

Nnnn7' rsrinn
L -r !:;:: I


- - - - - - - -

1 ;1 1r·J , ; ·-. ft "º _

Nnnn · rsr 1nn


. ' - - - . -
¡ • ·· - ! • n ' •

JUUU!': t l !,LU

¡
-- ·

Nir G > rsTM1fl

C t : l " l
1 ·

!!lt1L/S . / Lbl 1tt 1 Ml ' : !ti 1 l!P.t: 1 Ht1 1'. l lHlhtN


- - - -
Ht 1 1 "•: -I hllHl l Mf l -
- - - - - -- - - - - -- - - - - - - - -- - - -- -- -- - ---- - - - -- - - - - - - - -
APÉNDICE 4
-
(Outpu1) The REO Uni1.
-- - - - - - - - -- - - --- - " ' _ _ __ _ _ _ _ _
Knowledge Base
- --
-
: . . ' , '. .

Unit: RED in lmowledge base BOLTZMANN


Crea.ted by PROYECTOS on 25- Nov- 1936 17:00:24
Ivlodified by PROYECTOS on 26 - Aug- 1 9 8 ' 9 : 3 3 : 0 5
S1.bcl.:sses: NODOS , UNIONES
Iv!ember Of (GLASSES in tb OE NEPIGUlJITS)

Estrucura basica. de la red compuesta por N"ODC•S y UNIONES

O T slc-:
ALGORITMO from RED
Inherita.nce:METHOD
ValueClass: (METHOD in kb KEEDATATYPES) "
Comment,: "Algoritnio que rea.liza el .:.prendiza.je uliza .ndo REGLAS.ALGO
RITMO"

I "a.lues: 1 BOLTZivIANN> RE:D:: .6.UCRITMO!methocI

10\Tl slot: ASIGfvAR.PATRmv f i1 RED


I r 1 h e r i 11ce: METHOD
Va.lueCla.ss: (METHO! in l: KEE!ATATYPES)
Comment: " Pide al u.suario los valores de los nodos de la red (un patron de e
ntrenamieno)"
Values: !BOLTZMANN> RED::ASIGNAR. PATRON!nethodl

Own slo: COMPROBACION from RED


METHOD
Inheritance:
ValueClass: (METHOD in kb KEEDATATYPES)
Comment: " La.nz.:. el ra.zona.miento que comprueba la.s sa.lidas despu.es d.e u.
na ejecucion del algoritmo con un p.;.tron"
Valu.es: !BOLTZivANN>RED::COMPROBACION!methodl

Ovm slot.: CORRECTO from RED


Inheritance: OVERRIDE.VALUES
ValueClass: (ONE.OF SI NO)
Ca rd ina lity.Iax : 1 ,·

Comment: "Valor boolea.no ( SI,NO) que sirve para c.veriguar si todos los pa.t
rones de entrada han da.do la salida adecuada tras la segunda fase del algori tr!
Lo de a.prendizaje"
Values: NO

Own slo: DEGOMPOSiTiON.GOMPLETE fom CLASSES


Inherita.nce: UNION
ValueClass: ( LIST.oF· (GLASSES in kb GENERICUNITS))
Comment: "
A coiplete dec0Ipoz.it.ii1r is - h.: .:1

jcdnty
subclasses of this clas. which
-.
' -
· - · - - - - - - - - - --- -

O'wn slot: OECOMPOSITION .DISJOINT from CLASSES


Inherita.nce: IN!ON
VaiueC1a.ss: (LifT.OF (CLASSES í kb GENERiCUNITS ) )
C o n úent: "
A disjoint decomposition is a list of
subcla.sses of this class which sha.re no
members. More th.3n one disjoint
decorúposition nay be specifie•:.

O v slo: DELTA fon1 REO


Inheritance: OVE.R!DE.VALUES
\la.luec1.:.ss: (REAL in k !.EEOATATYPES )
Comment: "Valor corrector de los pesos de 1-:.s conexiones en el .:.lg·c·rit;·no de
aprendizaje"
Ca.rdinality. Ivíax:
Va.lues: O . 1

Own slot: ITERAGION from REO


Inheríta.nce: METHOD
\l.lu.eClass: (METHOD in kb KEEOATATYPES)
Comment: "l-.-ietodo que rea.liza. u.na iteracion completa con todos los pa.trone s
de entracla"
Values: IBOLTZMANN"RED::ITERACIOr:r' ·aethodl

Ü»\n slot: MEMBERS .DATATYPE fom GLASSES


Inheritance: OVERRIDE
ValueCla.ss: (OATATYPE in kb KEEOATATYPES)
Va.lues: (UNIT in kb KEEOATATYPES)

Own slot: MEMBERSHlr fom CL ,SSES


'
Inheritance: METHOO
Valu.eCla.ss: (METHOD in kb KEEOATATYPES)
Cardinality.Max: 1
Ca.rdinality.1in: 1
Va.lu.es: IvIEivIBER- DISJOINTP!IETHOD

Own slot: MENUOPERACIONES from REO


LE

1 :: { EEOATATYPES)
i '1 tle º ()PE::.(:ICJrre:f E:.t. IC. S11
;
; F";::n: KE:E:. Trr:. :. F"CJIJT .
Cüff1i11ent; " I,!eriu principal ee creacion ee la red"
-
- -
- - - - - - - - • - _ - - - ---- - " - - -- -- - - - '_

- d' -

Own slot : OPERACIOlJES


Inherita.nce: METHOO
ftom REO

ValueClass: (METHOO in l:b KEEDATATYPES )


Comment: " i::ontiene la f1J.ncion que se ocupa. del rüenu principa.l ele opera.ci
or1es11
Va-11_.es: I BOLTZiviiNN> RED: : OPER.l.CIClI··E;'! methodl

( o· n slot: ORIGEl, from RED


1 Inheritance: METHOD
1 \l.:.ueCla.ss: (METHOD in l KEEDATATYPES)
Comi·nent: "Inicializa la_ recl"
I
Va.lues: IBOLTZivIANN> RED:: ORIGEN! n1ethodl

0-wn slc.t:SUBGLASSP fror GLASSES


METHOD
Inherit.:.nce:
ValueCla.ss: (METHOD in k KEEIATATYPES)
Card inality.Iv lin : 1
c.:.rd.ina.lity. Ma.x: 1
Va.lues: SUBCLASS-DISJOIHTP!J/IETHOD

Own slo: \!MAGE.PANEL from PED


OVERRIOE.VALUES
Inherita.nce:
Values: lMAGE.PANEl 03254

1
L
Unit: UNIONES in knowledge base BOLTZMANlJ
Gre.:.tet by proyecos on 1 4- Nov- 1 9 8 6 1 3 : 3 0 : 4 1
1
Iviodified b y PROYECTOS on 26 - Aug- i % ·/ 9 : 43 : i 2
Su.percla.sses: RED
Ivlember Of: (CLASSES in lf GEl.ERICUNITS )
Members: CON 6 7 , CON 5 7 , GON 5 6 , GON 4 6 , C ON 4 5 , GON 3 6 , GON 3 5 ,
GON26, GON25, GON 1 6, GON 1 5

Conexiones o arcos entre los nodos de la red

I\·1ember slot: ACTUAUZACION from UNIONES


Inheritance: OVERRIOE.VALUES
Va.lueClass: ( OI'.E.OF· SI NCi)
C o r ent: "Va.lor boolea.no (SI,NO) que determina. si el peso de la. conexion
1ha. sido .:.ctualiz.:do en ia. fo.se correspondiente del algoritmo de a.prendiza.je ( s
l.......
1· - - 1 -- rPe 1· - - ' - ¡·,-·T
· ' •
-· - L-1 ,\ ,
'
.
1
H
!l.U t U -· .-·:. 1 l U l
· .} .
.

Ca.rdinality.Ivlax:1
U.H.l•:

Valu.es: NO
Member slot: PESO fom UNIONES
Inheritance: OVERRIDE.VALUES
Va.lueClass: (REAL in kb KEEDATATVPES)
Comment: "Va.or numerico a.signado a la conexion entre d.os nodos"
Avunits: CORRECCtor,
Values: O.O

Ivlember slot: PUNTO 1 from UNIONES


Inheritance:OVERRIOE.VALUES
ValueClass: NODOS
C o n nent.: "Uno de los dos nodos asociados a. la. conexion"
Cardina.lity.Ia.x: 1
Va.lues: Unknown

Ivlember slot: PUNT02 from UNIONES


Inheritance: OVERRIOE.VALUES
Va.lueClass: NODOS
Comment: "Uno de los dos nodos asociados a la conexion"
Ca.rdinality.1' .1 ax: 1
\a.11J.es: Unknown

i Ov n slo: CPEAP- from UfJiüfJES


1 r1 n F. ·r 1 r.,= r1 1": P r 1

lf \;.; l e'- ' i.:. 5 :: (f!T


1-1.1:1)
i_i

PL:..r! . . ,-, ·

·
Ovm OECOMPOSITION .COMPLETE from CLASSES
slot:
UNION
Inherita.nce:
Va.lueCla.ss: (LIST.OF (CLASSES in kb GENERICUNITS))
CoJmYtent: 11

A complete decomposition is a list of


subcla.sses of this cla.ss which jointly
subsume all the members of this cla.ss.
l"tore t.ba.n one complete decomposition
may be specified.

Vaiues: Unknown

O• slot: DECOMPOSITION .OIS.OllJT from CLASSES


Inheritance: UNION
V a.llJ.eCla.ss: (LIST.C)F' (CLASSES in kb GENERICUNíTS))
Comment: 11

A disjoint deconq:osition is a list of


;ubcla.sses of t,his cla.ss ''<hich sha.re no
merbers. Iore than one disjoint
decomposition ma.y be specified.

· a.11_.es: Unkno.11n

Own slot: MEMBERS .DATATVPE fom CLASSES


Inheritance: OVERRIOE
'.la.lueCla.ss: (OATATVPE in kb KEEOATATVPES )
Values: (UNIT in kb KEEDATATVPES)

Own MEMBERSHIP
slo :
, fom CLASSES
Inheritance: METHOD
Valu.eClass: (METHOD in kb KEEDATATVPES)
Cardinality.Max: 1
Cardin.:lity.Min: 1
Values: MEMBER-DISJOINTP!.ETHOD

Own slo: SUBGLASSP fror GLASSES


Inherita.nce: METHOD
./.:.lueCI.:ss: (METHOD in kb KEEDATATVPES)
C.:din.:.lity.Ivlin: 1
Ca.rchna.lít.y..la.x: 1
Val1 e:: :UBCl _A_ SS-DISJ1rNTP!.'iT ! ( [

j c•wn slüt. su ¡ m . U l \ OiES üe;m UNiüNES


lnherita:nce: METHOD
l
Unit: fODOS in knmledge b.:se BOLTZMANlJ
crea.ted by proyect,os on 1 4-Nov- 1986 13:32:.5 1
¡r,· -i: ; _b_s=- - · ECTOf; o
n 26-Aug-i98' 9:22:53

1 .UfJtr•-=10. ·:.i:.: ncu

Iviember Of (CLASSES in kb GENERfGUNfTS )


Members: N0007, N000 6 , NOD0 5 , NOD0 4 , N0003 , N0002 , NOD0 1

Unid.:c.es o

Iviember slo: COMPROBAR .SALIDA forn NODOS


Inheritance:METHOD
Va.lu.eCla.ss: (METHOD in kb KEEOATATYPES)
Comment: "Comprueba si el estado del nodo despues de l.:. segunda fase del 1
algoritmo es igua.l a.l que ind.icaJ..:. el pa.tron de entrena.miento"
1 \7.:.l1J.e;: !B(LTZlvANN>N(DOS:COlv1Pf:.OB..R.SALIDA!methodl
1

1 Iviember zlot: GONEXIOlJES from NODOS


Inherita.nce: OVERRIDE.VALUES
Comment: "Lista. de las conexiones en las que interviene el nodo"
Va.lues: Unl:no>•.Tn

Ivlember slot: ESTADO from NODOS


Inheritance: OVERRIOE.VALUES
Va.lueCla.ss: ( ONE.OF iCTIVO INACTIVO)
Cor.ment: "Estado actual del nodo"
c.:.rdina.lit,y. Ivlax: 1
Values: INiCTIVO

Iiember slo: IDENTIFIGACION from NODOS


Inheritance: OVERRIDE.VALUES
ValueClass: ( ONE.OF ENTRADA SALIDA INTERMEDIO)
Co n w er1t: " Funcion del nodo en la red, ya sea elemento de EI'ITRADA,INT
ERivlEDIO,o de SALIDA"
Ca.rdina.lity.:a.x: 1
Values: I E R i l E D I O

Ivlember slot: SAUDA .PATRON from NODOS


Inherita.nce: OVERRIDE.VALUES
.lalueClass: ( C)NE.OF ACTI\l( INACTI\7C))
c.:.rcl.in..lity. Ivl.:.x: 1
1 Ivien1ber slot: UMBRAL
Inherita.nce:OVERRIOE.VALUES
Va.lueC'.la.ss: (REAL in kb KEEOATATYPES)
C o r ent: "Va.lor umbra.l pa.ra calcu.la.r el esta.do ele a.ctiva.cion o ina.ctiva.ci en
del nodo"
Ca.rdinality. Ma . x:
V a.lu.es: O . O

Member slo: VALOR from NOOOS


OVERR!DE,VALUES
Inherit..nce:
ValueClass: (REAL in kb KEEDATATYPES) .t.
vunits: GORREGGION
Comment: " \la.lor numerico que tiene el nodo, .1 p a. ri r del cu.a.l se determin .:.
su est.:.do de ac.i,.a.cion o in.:.ctiva.cion"
1:a.rdina.lity.r .. 1.1x:
Va.lues: -0.1

slo: VARIABLE from NOOOS


Inheritance: OVERRIDE.VALUES
Va.lueCla.ss: ( ONE.OF T NIL)
Comment: " Variable boole:na. (T,NIL) que indica si el esta.do del nodo pu.ed e
ser ca.mbiado por el funciona.miento interno de l.:. r e d . Su va.lor es :IL c u a . nd o el
nodo es de ENTRADA o de SALIDA"
Ca.rdin.1lity.Ivlax: 1
Values: T

Ilember VER.SI.ACTIVA.A from NODOS


slot:
METHOO
Inherita.nce:
Va.lueClass: (METHOD in k KEEDATATYPES)
Com ment: "1vletodo que calcu la el estado de los nodos con ectados con el nod o
propieta. io del merodo. Toma. como : r gum e ntos el nodo p ro p ie a r i o y una un idad
.

de UdIONES"
Values: IBOLTZMANN> NODOS: VER.SI. ACTIVA. A!mehodI

1 Own slot: CALCULO from NODOS


Inherita nce:METHOO
I
Va.lu.eClass: (METHOO in kb KEEOATATYPES)
C o n : ent: " Ivietodo que dispa.r.1 el funciona.miento interno e.e l a . red a parir
\
1 d e u n a d e e r m i n a . d a s i tu a c io n u tiii z a n d o R EC .A.C'.e.u:UL/)"
\lalues: IfLTZMANN> NODOS: : C."'.LC'ULO! J.ehodl
t
slo: CREAR.NODOS f'oT NODOS

k c< !
1

i Irheritance: METHOO
Va.lueCla.ss: (METHOO in k KEEOATATYPES)
·

-(Output-) "he ·NODOS Kowletge Base


O>m slot: OEGOMPOSITION .COMPLETE from GLASSES
Inherita.nce: UNION
VaiueClass: (LIST.OF (CLASSES in kb GENERICUNITS))
Comment: "
A complete decomposition is a list, of
subcl.:.sses of this cl.:.ss which joinly
subsume a.11 t.he members of this class.
Io re than on e comple te dec ompos ition
may be specified.

Values: Unlmown

0 ' ! m slot: OECOMPOSITIO N .D!SJOlfJT frm GLASSES

f I n h e r i t c:e:

ValueClass:
UN!ON
(LIST.OF
·
(CLASSES in kb GENERICUNITS))
Comment: "
A disjoin decomposition is ,: list of
subcla.sses of this c lo.ss which sha.re no
members. Iviore than one disjoint
decomposition may be specified.
Vo.lues: Unkno'11n

Own slot: MEMBERS .OATATYPE fom CLASSES


Inherit 0 nce:•• OVERRIOE
Va.lué ..:.ss: (OATATYPE in k KEEOATATYPES)
Values: (UNIT in kb KEEDATATYPES)

Own slo: MEMBERSHIP fom CLASSES


Inheritance: METHOD
ValueClass: (METHOD in l:b KEEDATATYPES)
Ca.rdir· :lity.Ivlax: 1
Cardinality.Min: 1
Valu.es: : E i ER- DISJOINTP! IvIETHOD

Ovm MENUESTAOO from NODOS


slot:
Inheritance: OVERRIOE.VALUES
Va.lueCla.ss: (MENUITEM in kb KEEOATATYPES)

1 Titie: " E:ST.e.D( DE:SEADO"


Comrilent: "Ivlenu p.:.ra. elegir el estado de un nodo en el mmnento de su ere
acio11"
- 111 -
• • " • (''fl
-·, ..-;" ' OTJr-;.E· ' \."'II«r -TI rr1" • • •
V <. Ji, l • "
__ ,, '- _ l. l .'. l ''
· . '' ·

·
J
( C:_H)'E It·IACTI\1C:))
i
O>•ln slot: MENUIOENTIF from NODOS
OVERRllE.VALUES
Inherit.a.nce:
ValueClass: (MENUITEM in kb KEEDATATYPES)
Title: " IDENTIFICACION DEL NODO"
Comment: "1enu para elegir la identificacion del nodo en el :mento de s
u crea.cion"
V.:.lues: ("ENTiRDA" (QUOTE ENTR.".D.".)) ("SALIDA"
(QUOTE SALIDA))
("INTERMEDIO" (QUOTE INTERiIEDIO))

Own slot: SUBGLASSP from GLASSES


Inherita.nce: METHOO
ValueClass: (METHOO in kb KEEOATATYPES)
Cardina.ity.Iir: 1
Ca rd in a . li ty .l ax: 1
Values: SUBCLASS-[m;JOINTP! Iv1ETHOD

Own slot:SIPRIMIR.NOOOS from NODOS


METHOD
Inherít.a.nce:
Va.lueClass: (METHOO in kb KEEOATATYPES)
Comment: " Contiene el metodo que suprime un nodo de la red"
.la.lues: IBOLTZ1ANN> NODOS: : SUPRI1·:IR.NODOS!me.hodl
APÉNDICE 5
; ; ; -*- Mode : L ISP ; P a ckag e : KEE ; Ba s e : l O . - * -

( BOLTZM.6NN
( " pr· oyect o s " " 1 4-Nov- 1 986 13:30:31 " "PROYECTOS" "26-Aug-1987 9:49:01" )
NIL
( KNOWLEDGEBASES )
NIL

( ( KBCOPY ( (BEFORE (BEFOREKBCOPYIMAGE SELF KB NEWKB ) ) ( AFTER ( AFTERKBCOPYIMAGE SELF


KB
NEWKB ) ) )
METHOD
METHOD
NIL
HIL)
(KBDELETE ( ( BEFORE (BEFOREKBDELETEIMAGE SELF KB.OR.REF NOASKP RELOADP) ) )
METHOD
METHOD
NIL
NIL)
(KBLOAD ( (AFTER ( AFTERKBLOADIMAGE SELF KBSTBEAM QUIETP NORELINKP KB ) ) )
METHOD
METHOD
NIL
NIL)
( KBMETHODFILE ( BOLTZMANN ) )
(KBSAVE ( (BEFORE ( BEFOREKBSAVEIMAGE SELF KB QUIETP MAKEMODE NEWDIRECTORY) ) )
METHOD
METHOD
NIL
NIL)
( KBSIZE 86)
(KEE.DEVELOPMENT.VERSION.NUMBER O )
( KEE . MAJOR . VERSION . NUMBER 2)
(KEE.MINOR.VERSION.NUMBER 1)
( KEE . PATCH . VERSION . NUMBER 64 .1 )
(KEEVERS JN KEE2. l ' ) )
l.1

( CON 15
( "proyectos" " 14-Nov-1986 1 3 : 40 : 33 " "PROYECTOS" " 1 2-Dec-1986 1 1 : 32 : 56" )
NIL
(UNIONES)
rL
()
! ( ACTUALIZACION (NO) )
IP!SO N!!
: p;:NTOl (NODOl ) )
( P i T02 { ilOD05 ) ) } )

(CON1 6
( " pr· oyec t o s " " 1 4-Nov- 1 986 1 3 : 40 : 33 " "PROYECTOS" " 1 2-Dec-1 986 11:32 :57")
NIL
\ u1; r ;Es )
Nll
(CON25
( "pr·oyectos " " 1 4-Nov-1 986 13:40:35" "PROYECTOS" "12-Dec-1986 11 :32:57")
NIL
(UNIONES)
NIL
()
( (ACTUALIZACION (NO) )
( P ESO ( O . 1 ) )
(PUNTO! ( NOD02 ) )
(PUNT02 ( NODOS ) ) ) )

(CON26
( "pr·oyectos" " l •¡-Nov-1 986 1 3. : 40 : 34 " "PROYECTOS" " 1 2-Dec-1986 1 1 :32:58")
NIL
(UNIONES)
NIL
()
( (ACTUALIZACION ( NO ) )
(PESO (0.1))
(PUNTOl (NOD02) )
( PUNT02 (NOD06) ) ) )

(CON35
("proyectos" "14-Nov-1986 13:40:35" "PROYECTOS" "12-Dec-1986 1 1 :32:58")
NIL
(UNIONES)
NIL
()
( ( ACTUALIZACION ( NO ) )
(PESO (0.1 ) )
(PUNTOl ( NOD03 ) )
(PUNT02 ( NODOS ) ) ) )

(CON36
("proyectos" "14-Nov-1986 1 3 : 40 : 36" "PROYECTOS" " 12-Dec-1986 1 1 : 32 : 58" )
NIL
(UNIONES)
NIL
()
( (ACTUALIZACION ( NO ) )
( PESO (0.1 ) )
(PUNTOl ( NOD03 ) )
(PUNT02 (NOD06) ) ) )

f .-."\ l Y 1, r
\ ' \ l ! f-1

( " pr· oyect o s " " 1 4-Nov- 1 986 13:40:35" "PROYECTOS" " 12-Dec-1986 11 :32 :59" )
NIL
(UNIONES)
NIL
()
( (ACTUALIZACION ( NO ) )
( P ESO (O l))

(PUHTOl (NODOLt) l
\ ) J JI

(CON46
("proyectos" "14-Nov-1986 1 3 : 40 : 35" "PROYECTOS" "12-Dec-1986 11 :32:59")
NIL
(UNIONES)
NIL
()
( (ACTUALIZACION ( NO ) )
(PESO (O. l ))
(PUNTOl (NOD04) )
(PUNT02 ( ff0D06 ) ) ) )

(CON56
("PROYECTOS" "25-Nov-1986 16:49: 11" "PROYECTOS" "12-Dec-1986 11 :33:21" )
NIL
(UNIONES)
NIL
()
( (ACTUALIZACION (SI ) )
( PESO ( O l ) )

(PUNTOl ( NODOS ) )
(PUNT02 ( NOD06 ) ) ) )

(CON57
("proyectos" "14-Nov-1986 13:40:36" "PROYECTOS" "12-Dec-1986 11 : 33 : 02 " )
NIL
(UNIONES)
NIL

( (ACTUALIZACION (NO) )
( PESO ( 0 . 2999999996 ) )
(PUNTOl ( NODOS ) )
(PUNT02 (NOD07) ) ) )

(CON67
("proyectos" "14-Nov-1986 13:40:36" "PROYECTOS" "12-Dec-1986 11 : 33 : 0 2 " )
NIL
(UNIONES)
NIL

( (ACTUALIZACION ( NO ) )
(PESO (0.2999999996) )
(PUNTOl ( NOD06 ) ) !
PUNT02 (HOD07) ) ))

(• iHREC( I ON
!"PROYECTOS" "l-Dec-1986 1 8:00 : 08" "PROYECTOS" " l l-Dec-1986 15:35:38")
NIL
( (ACTIVEVALUE ACTIVEVALUES) )
"Valor· activo que expresa los numeros obtenidos para los valor·es de los nodos y : a r a los P•
de las conexiones de forma correcta"
()
l lAVPUT i LAMBDA ( SELF SLOT HUEVO V IEJO UNIDAD TIPO l
{ _
\ ,' / u ( AR HUEVO) ) ) 10.0¡ ) ) ) ¡ ¡ ¡ ¡

(DIGIACTUATOR03294
( "PROYECTOS" "25-Nov-1986 17:34:09" "PROYECTOS" "26-Aug-1987 9:48:48" )
NIL
( (DIGIACTUATOR ACTIVEIMAGES) IMAGES)
NIL

( ( BORDER 4)
( FONT FONTS : CPTFONT )
( HE IGHT 37)
( IMAGE . WAS. PAINTED NIL ) -
(OBJECT. DISPLAYED #Slot (VALOR NODOl BOLTZMANN OWN) )
( REGION ( 99 310 78 37 )
NIL
NIL
NIL
( ( ICON . REGION (99 310 125 48 ) ) (EXPAND.BEGION (99 310 78 37) ) ) )
( SAVED . VALUES -0 . 1 )
(SUPER.IMAGE #Unit ( IMAGE . PANEL03254 BOLTZMANN) )
( TITLE "NODOl / s VALOR" )
( TITLEFONT FONTS : HL l OB )
( TOPUNIT (NIL) )
(VALUE.WAS.SAVED T)
(WIDTH 78)
( WINDOW "A Flavor Instance"
NIL
NIL
NIL
( ( ICON . WINDOW NIL ) ( EXPAND . WINDOW NIL) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(DIGIMETER03297
( "PROYECTOS" "25-Nov-1986 1 7 : 35 : 04" "PROYECTOS" " 26-A1.g-1 987 9:48:49" )
NIL
( (DIGIMETER ACTIVEIMAGES) IMAGES)
NIL

( ( BORDER 4 )
( FONT FONTS : CP TFON T )
( HEIGHT 37)
( IMAGE . WAS. PAINTED NIL)
( OBJECT . DISPLAYED #Slot ( VALOR NOD02 BOLTZMANN OWN ) )
( REGION ( 101 265 77 37)
NIL
NIL
NIL
( ( ICON .REGIOH ( 101 265 125 48 ) ) C EXPAND . REGION ( 101 265 77 37 ¡ \ \ \
( SAVED . VALUES -0. l l
¡SUPER.IMAGE #Unit (IMAGE.PA L032 OLTZMANH) J
( TITLE " NOD02's VALOR" )
( TITLEFONT FONTS: HL l OB )
( TOPUNIT (NIL) )
(VALUE.WAS. SAVED T )
(WIDTH 77)
(WINDOW "A Flavor Instance"
NIL
NIL
( ( ICON.WINDOW NIL) ( EXPAND . WINDOW MIL ) (CURRENT.WINDOW (EXPAND) ) ) ) ) )

(DIGIMETER03301
( "PROYECTOS" "25-Nov-1986 1 7 : 36 : 08" "PROYECTOS" " 26-Aug- 1987 9:48:49" )
NIL
( ( DIGIMETER ACTIVEIMAGES ) IMAGES)
NIL
()
( ( BORDER 4)
(FONT FONTS : MEDFNB)
( HEIGHT 39)
( IMAGE . WAS. PAINTED NIL)
(OBJECT. DISPLAYED #Slot ( VALOR NOD03 BOLTZMANN OWN ) )
( REGION ( 102 216 73 39)
NIL
NIL
NIL
(( IBON,·REGION (102 216 125 48 ) ) ( EXPAND . REGION ( 102 216 73 39 ) ) ) )
{ SAVED . VALUES -0 .1 )
(SUPER.IMAGE #Unit ( IMAGE . PANEL03254 BOLTZMANN J )
( TITLE "NOD03,.s VALOR" )
(TITLEFONT FONTS:HLlOB)
( TOPUNIT (NIL) )
( VALUE . WAS. SAVED T )
(WIDTH 73)
(WINDOW "A Flavo Instance"
NIL
NIL
NIL
( (ICON.WINDOW NIL) CEXPAND.WINDOW NIL) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(DIGIMETER03304
( "PROYECTOS" "25-Nov-1986 1 7 : 37 : 00" "PROYECTOS" " 26-Atg-1 987 9:48:50")
NIL
( ( DI G I METER ACT I V E I MAGES ) I MAGES )
NIL
()
( ( BORDER 4)
( FONT FONTS : MEDFNB )
( HEIGHT 39)
( IMAGE .WAS. PAINTED NIL)
( OBJECT. DISPLAYED #Slot ( VALOR NOD04 BOLTZMANN OWN ) )
( REGION ( 105 168 69 39 )
NIL
NIL
NIL
( ( ICON.REGION ( 103 171 125 48) ) ( EXP AND . REGION ( 105 168 69 39) ) ) )
ISAVED. VALUES -0 . l )
(SUPER.IMAGE #Unit (IMAGE.PANEL03254 BOLTZMANN) )
( TITLE "NOD04, s VALOR" )
(TITLEFONT FONTS: HL l OB )
( TOPUNIT (NIL) )
(VALUE.WAS.SAVED T)
( 'H DTH 69 )
rn now " /. F l avor· In st.nce"
NIL
( ( ICOH.WINDOW NIL) ( EXPAND . WINDOW NIL ) (CURRENT.WINDOW (EXPAND¡ J ; ) ; )

(DIGIMETER03307
( "PROYECTOS" "25-Nov-1986 17:38: 11" "PROYECTOS" "26-Aug-1987 9:48:50" )
NIL
( ( DIG IMETER ACT I V E IMAGES ) I MAGES )
NIL
()
( ( BORDER 4)
(FONT FONTS : CPTFONT)
( HEIGHT 37)
(IMAGE.WAS.PAINTED NIL)
( OBJECT . DISPLAYED #Slot ( VALOR NODOS BOLTZMANN OWN ) )
(REGION ( 109 121 65 37 )
NIL
NIL
NIL
( (ICON.REGION ( 109 121 125 48 ) ) ( EXPAND . REGION ( 109 121 65 37 ) ) ) )
( SAVED . VALUES 1 .1 )
(SUPER. IMAGE #Unit ( ItAGE . PANEL03254 BOLTZMANN ) )
( TITLE "NODOS' s VALOR" )
(TITLEFONT FONTS:HLlOB)
( TOPUNIT (NIL) )
(VALUE.WAS.SAVE T)
(WIDTH 65 )
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
( ( ICON. WINDOW NIL ) ( EXPAND . WINDOW NIL ) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(DIGIMETER03310
( "PROYECTOS" "25-Nov-1986 1 7 :38 : 55" "PROYECTOS" " 26-Aug-1 987 9:48:51" )
NIL
( ( D IGIMETER ACTIVEI MAGES ) I MAGES )
NIL
()
( ( BORDER 4)
( FONT FONTS : MEDFNB )
( HE I GHT 39 )
( IMAGE. WAS. PAINTED NIL)
( OBJECT . DISPLAYED #Slot ( VALOR NOD06 BOLT ZMANN O WN ) )
( REGION ( 107 71 65 39 )
NIL
NIL
NIL
{ { ICCN.RES!C ( !07 71 125 4! ) ) ( EXPAND . REGION c : o7 71 65 37 ) ) ) )

(SUPER.IMAGE #Unit (IMAGE.FANEL03254 BOLTZMANN))


(TITLE "NOD06' s VALOR" )
(TITLEFONT FONl'S:HLlOB)
( TOPUNIT ( N I L ) )
(VALUE.WAS.SAVED T)
(WIDTH 65)
(WINDOW "A Flavor Instance"
NIL
NI
._ i_ I < O H . \" : ·D(".. I I ) ( EXP,t-,f D . : :: 1·: L O W HIL) (CUHRENT.WINDOW ·' E X :· r.I r , )

( DIGIMETER033 l 3
( "PBOYECTOS" "25-Nov-1986 17:39:39" "PROYECTOS" "26-Aug-1987 9:48:51" )
NIL
( ( D I G IMETER ACT I V E I MAGES ) I MAGES )
NIL
()
( ( BORDER 4)
( FONT FONTS : MEDFNB )
( HEIGHT 40)
( I MAGE. WAS. PAINTED MIL)
(OBJECT.DISPLAYED lSlot ( VALOR NODO? BOLT Z MANN OWN ) )
( REGION ( 105 18 68 40 )
NIL ,i
NIL
NIL
( ( ICON . REGION ( 106 20 125 48) ) ( EXPAND . REGION ( 105 18 68 40) ) ) )
( SAVED . VALUES -0 . 1 )
(SUPER.IMAGE lUnit (IMAGE.PANEL03254 BOLTZMANN) )
(TITLE "NOD07/s VALOR" )
( TITLEFONT FONTS: HLlOB )
(TOPUNIT (NIL) )
(VALUE . WAS . SAVED T )
('HDTH 68 )
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
( ( ICON . WINDOW NIL ( EXPAND . WIMDOW NIL t ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(DIGIMETER03366
( "PROYECTOS" "25-Nov-1 986 1 7 : 40 : 39 " "PROYECTOS" "26-Aug-1 987 9:48:52")
NIL
( ( DIGIMETER ACTIVEIMAGES) IMAGES)
NIL
()
;1
( ( BORDER 4)
( FONT FONTS : MEDFNB )
( HEIGHT 41)
(IMAGE.WAS.PAINTED NIL)
( OBJECT . DISPLAYED lSlot (PESO CON15 BOLTZMANN OWN) )
( REGION (217 303 85 41 )
NIL
NIL
N!L
((!C0 !nN (217 303 1!5 48 ) ) ( EXPAND . RF@TON (217 303 85 41 ) ) ) )
(SUPEB. IMAGE #U· '· f IMtGE.PANEL03254 BOLTZMANN) )

ITITLEFONT FONTS:HLlOB)
( TOPUNIT (NIL) )
( VALUE . WA S . SAVED T )
(WIDTH 85)
(WINDOW "A Flavor Instance"
NIL
NIL
PT '
,...L

'
-- ,- .
' .........................................................
, ., . · ,
, _,_
-
. 1 .
-
• i1 . . l* (', i• ,
·.· ·.· -.....................
__ . . ,- ,, ¡ ¡ I
'
J 1 J
-
J
( "PROYECTOS" "25-Nov-1986 17 :41 :06" "PROYECTOS" "26-Aig-1987 9:48:52 " )
NIL
( (DIGIMETER ACTIVEIMAGES) IMAGES)
NIL
()
( ( BORDER 4)
(FONT FONTS : MEDFNB )
( HEIGHT 42)
(IMAGE.WAS.PAINTED NIL)
(OBJECT. DISPLAYED #Slot (PESO CON16 BOLTZMANN OWN) )
( REGION ( 220 253 85 42 )
NIL
NIL
NIL
( (ICON.REGION (219 259 115 48 ) ) ( EXPAND . RE G I O N (220 253 85 42) ) ) )
( SAVED . VALUES 0 . 1 )
(SUPER.IMAGE #Unit (IMAGE.PANEL03254 BOLTZMANN) )
( TITLE "CON16's PESO" )
(TITLEFONT FONTS:HLIOB)
( TOPUNIT (NIL) )
(VALUE.WAS.SAVED T)
(WIDTH 85)
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
( (ICON.WINDOW NIL) ( EXPAND . WI NDOW N I L ) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(DIGIMETER03370
( "PROYECTOS" "25-Nov-1986 1 7 : 4 1 :42" "PROYECTOS" " 26-Aug-1987 9:48:53" )
NIL
( (DIGIMETER ACTIVEIMAGES) IMAGES)
- - NIL - - -
()
( ( BORDER 4)
(FONT FONTS: MEDFNB )
( HEIGHT 41)
( IMAGE. WAS. PAINTED NIL)
( OBJECT . DISPLAYED #Slot (PESO CON26 BOLTZMANN OWN) )
( REGION (219 1 48 84 41 )
NIL
NIL
NIL
( (ICON.BEGION (222 203 115 48 ) ) (EXPAND.REGION (219 148 84 41 ) ) ) )
( SAVED . VALUES 0 . 1 )
(SUPEB . IMAGE #Unit (IMAGE.PANEL03254 BOLTZMANN) )
(TJTLE "CON26's ?ESO" )
(TITLEFONT FON S:HLlOB)
{ TQ P U N I T {NIL))
(VALUE.WAS.SAVED T)
( WIDTH 84)
(WINDOW "A Flavor Instance"
NIL
NIL
N IL
( ( ICON.WIHDOW N:L) ( EXPAND . WINDOW ( CUBBENT . WINDOW (EXPAND ) ) ) ; ; ;
(DIGIMETEB03372
( "PROYECTOS" "25-Nov-1'86 17 : 42:04" "PROYECTOS" "26-Aug-1987 9 :4 8 : 5 3 " )
NIL
( ( D I G I METER ACT I V E I MAGES ) IMAGES )
NIL
()
( ( BORDER 4)
(FONT FONTS:BIGFNT)
( HEIGHT 44)
( IMAGE . WAS. PAINTED NIL )
( OBJECT . DISPLAYED #Slot ( PESO CON25 BOLTZMANN OWN ) )
( REGION ( 220 201 83 44 )
NIL
NIL
NIL
{ 1
( ( ICON . REGION 225 155 115 48 ) ) ( EXPAND . REGION ( 220 201 83 44 ) ) ) )
( SAVED . VALUES 0 . 1 )
(SUPER. IMAGE # U n i t ( IMAGE . PANEL03254 BOLTZMANN ) )
(TITLE "CON25's PESO" )
(TITLEFONT FONTS:HLlOB)
(TOPUNIT (EIL))
(VALUE.WAS.SAVED T)
(WIDTH 83 )
(WINDOW "A Fl.voi Instanee"
NIL
NIL
NIL
( ( ICON . WINDOW NIL ) ( EXPAND . WINDOW NIL ) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(OIGIMETER03374
'
( "PROYECTOS" "25-Nov-1986 17:42:40" "PROYECTOS" 26-Aug-1987 9:48:54")
NIL
( ( DIGIMETER ACTIVEIMAGES) IMAGES)
NIL
( ( BORDER 4 )
(FONT FONTS:BIGFNT)
( HEIGHT 44)
(IMAGE.WAS.PAINTED NIL)
-{ OBJECT .DISPL-AYED- #Slot - H tSSO CON35 BOLTZMANN OWN ) )
(REGION ( 221 93 82 44)
NIL
NIL
NIL
( (ICON.REGION ( 228 99 115 48 ) ) ( EXPAND . REGION (221 93 82 44 ) ) ) )
(SAVED. VALUES 0. 1 )
(SUPER.IMAGE #Unit (IMAGE.PAMEL03254 BOLTZMANN) )

, '1· ... , r' t,· r , ,P1· H'n "J"PC· . ur , n· L· •


\ - -. _ · .

(TOPUNIT OIIL) )
( VALUE . WAS . SAVED T )
(WIDTH 82)
('HNDOW "A Flavor Instanee"
HIL
NIL
NIL
( ( I C0N . W ! NDOW 1!!: ( Y . ' . \·' I
'' ' o NIL) (CURREN!. ?! !DOW ( EXP.. !D ) ) ) ) ) )
•. " '" é ( ·:rCTOS" " 25-lv- 1 c·s6 1 7 : L¡ 3 : 1 3 " " PBOYECTOS" " 26-..ug- 1 987 c· : 48 : .S4 " )
NIL
( (DIGIMETER ACTIVEIMAGES) IMAGES)
NIL
( )
( ( BORDER 4)
(FONT FONTS : MEDFNB )
( HEIGHT 42)
(IMAGE.WAS.PAINTED NIL)
(OBJECT. DISPLAYED #Slot (PESO CON45 BOLTZMANN OWN) )
(REGION (328 304 81 42)
NIL
NIL
NIL
( ( ICON. REGION ( 230 43 115 48 ) ) ( EXPAND . REGION (328 304 81 42) ) ) )
( SAVED . VALUES 0 . 1 )
( SUPER . IMAGE llUnit ( I t1AG E . P A NEL03254 BOL T Z MANN ) )
(TITLE "CON45's PESO")
(TITLEFONT FONTS: HL l OB )
( TOP UN IT ( N I L ) )
(VALUE.WAS.SAVED T)
(WIDTH 81 )
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
( (ICON.WINDOW NIL) ( EXPAND . WI NDOW N I L ) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(DIGIMETER03378
( "PROYECTOS" " 25-Nov-1 986 1 7 : 43 : 46" "PROYECTOS" " 26-Aug-1987 9:48:54")
NIL
( (DIGit1ETER ACTIVEIMAGES) IMAGES)
NIL
()
( ( BORDER 4)
(FONT FONTS : MEDFNB )
( HEIGHT 41)
(IMAGE.WAS.PAINTED NIL)
(OBJECT . DISPLAYED lSlot ( PESO CON46 BOLTZMANN OWN ) )
( REGION (324 254 93 41 )
NIL
NIL
IHL
( ( ICON. REGION ( 330 305 115 48 ) ) ( EXPAND . REG I O N ( 324 254 93 41 ) ) ))
( SAVED . ALUES - Orl )
(SUPER.IMAGE #Unit ( IMAGE . PANEL03254 BOLTZMANN ) )
( TITLE "COM46·' s PESO" )
( T TTLEror T FONTS : rrr 1 0[ )
(TOPUNIT (M:L) )

(WIDTH 93 )
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
( ( ICON . WINDOW NIL) ( EXPAND . WINDOW N I L ) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )
NIL
( (DIGIMETER ACTIVEIMAGES) IMAGES)
NIL

( ( BORDER 4)
( FONT FONTS : MEDFNB )
( HEIGHT 43 )
( IMAGE . WAS. PAINTED NIL)
(OBJECT.DISPLAYED #Slot ( PESO CON36 BOLTZMANN OWN ) )
( BEGION (224 40 84 43 )
NIL
NIL
NIL
( (ICON.REGION (322 2: 115 48) ) ( EXPAND . REGION ( 224 40 84 43 ) ) ) )
( SAVED . VALUES 0 . 1 }
( SUPER . IMAGE #Unít ( I MAGE . PANEL03 2 54 BOLTZ M.1NN ) )
(TITLE "CON36/s PESO")
(TITLEFONT FONTS:HLlOB)
( TOP U N I T ( N I L ) )
(VALUE.WAS.SAVED Tl
(WIDTH 84 )
( WINDOW "A Flavor· Instance"
NIL
NIL
NIL
( (ICON.WINDOW NIL) ( EXPAND . WI NDOW NIL} ( CURBENT . WINDOW ( EXPAND ) ) ) ) ) )

(DIGIMETEB03382
( "PROYECTOS" "25-Nov-1986 1 7 : 45: 10" " PROYECTOS" " 26-Au -1987 9:48:55" )
NIL
( ( DIGIMETER ACTIVEIMAGES) IMAGES)
NIL

( ( BORDER 4}
( FONT FONTS : MEDFNB )
( HEIGHT 42)
(IMAGE.WAS.PAINTED NIL)
(OBJECT . DISPLAYED l/Slot (PESO CON57 BOLTZMANN OWN) )
( REGION (325 147 99 42 )
NIL
NIL
NIL
( (ICON.REGION (324 205 115 48 ) ) ( EX P AND . RE G I O N (325 147 99 42 ) ) ) )
( SAVED . VALUES 0 . 3 )
(SUPER.IMAGE #Unit ( IMAGE . PANEL03254 BOLTZMANN ) )
(TITLE "CON57/s PESO" )
tTITLEFONI FONTS:HLlOB)

(VALDE.WAS.SAVED T)
(WIDTH 99 )
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
( fICON.WINDOW NIL) ( EXPAND . r unnw !L) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) }
\ L . i: .: · -- --·· - - --

-
( "PRC-::;:Tos · ' _ 5-fcv- l S\:.6 1 7 : 45 : 42 " '1PROYECTOS 11 " 26-P.ug- i 987 9:4E:561l j
!H L
l (DIGIMETER ACTIVEIMAGES) IMAGES)
NIL

( ( BORDER 4)
( FONT FONTS: MEDFNB)
( HEIGHT 43 )
(IMAGE.WAS.PAINTED NIL)
(OBJECT.DISPLAYED #Slot (PESO CON67 BOLTZMANN OWN) }
( REGION (327 92 95 43 )
NIL
NIL
NIL
( ( ICON . REGION (324 147 115 48 ) ) ( EXPAND . REGION (327 92 95 43 ) ) ) )
(SAVED . VALUES 0 . 3 )
( SUPER. IMAGE #Unit ( IMAGE.PANEL03254 BOLTZMANN) )
(TITLE "CON67"s PESO")
(TITLEFONT FONTS:HLlOB)
( TOPUNIT (NIL) )
(VALUE.WAS.SAVED T)
( W I D' 95 )
(WINDOW "A Flavor Instance"
NIL
NIL
N IL
( (ICON.WINDOW NIL) ( EXPAND . WI NDOW N I L ) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(DIGIMETER03386
( "PROYECTOS" "25-Nov-1986 1 7 : 46 : 03" "PROYECTOS" " 26-Aug-1 987 9:48:56" )
NIL
( ( DIGI METER ACT I V E I MAGES ) IMAGES )
NIL
()
( ( BORDER 4)
(FONT FONTS : MEDFNB )
( HEIGHT 41)
( IMAGC. WAS. PAINTED NIL )
(OBJECT . DISPLAYED lSlot (PESO CONS6 BOLTZMANN OWN) )
( REGION (324 200 94 4 1 )
NIL
NIL
NIL
( ( ICON . REGION (326 94 115 48 ) ) ( EXPAND . REGION (324 2 00 94 41 ) ) ) )
( SAVED . VALUES 0 . 1 )
(SUPER.IMAGE #Unit (IMAGE.PANEL03254 BOLTZMANN) )
( TITLE "CON56 ' s PESO" )
(TITLEFCNT FONTS:HL!0P)
( T1)lUNIT (!HL) )
VALUE . WAS . SMVED T j
(WIDTH 94)
( WINDOW "A Flavol Instance"
NIL
NIL
NIL
( (ICON.WINDOW NIL) ( EXPAND . WINDOW NIL ) ( CURRENT . WI NDOW ( EXPAND ) ) ) ) ) )
HIL
( ( IMAGE.PANEL ACTIVEIMAGES) IMAGES)
NIL
()
((BORDER 12)
( HEIGHT 377)
(IMAGE.WAS.PAINTED (NIL) )
(IMAGES
( #Unit ( METHOD . ACTUATOR03927 BOLTZMANN ) #Unit ( METHOD . ACTUATOR04439 BOLTZMANN )
#Unit ( METHOD . ACTUATOR03346 BOLTZMANN )
#Unit ( DIGIMETER03386 BOLTZMANN )
#Unit (DIGIMETER03384 BOLTZMANN)
#Unit (DIGIMETER03382 BOLTZMANN)
ltun i t (DIGIMETER03380 BOLTZMANN)
ur· -·it ( DIGIMETER0337B BOLTZMANN)
l t ( DIGIMETER03376 BOLTZMANN)
#Unit (DIGIMETER03374 BOLTZMANN)
#Unit (DIGIMETER03372 BOLTZMANN)
#Unit ( DIGIMETER03370 BOLTZMANN J
#Unit (DIGIMETER03368 BOLTZMANN)
#Unit (DIGIMETER03366 BOLTZMANN)
#Unit (DIGIMETER03313 BOLTZMANN)
#Unit ( ERTICAL.TRAFFIC.LIGHT03312 BOLTZMANN)
llU n i t (0IGIMETER03310 BOLTZMANN)
#Unit (VERTICAL.TRAFFIC.LIGHT03309 BOLTZMANN)
ltunit (DIGIMETER03307 BOLTZMANN )
#Unit (VERTICAL.TRAFFIC.LIGHT03306 BOLTZMANN)
#Unit (DIGIMETER03304 BOLTZMANN)
#Unit ( VERTICAL . TRAFFIC . LIGHT03303 BOLTZMANN )
#Unit (DIGIMETER03301 BOLTZMANN)
t/U n i t ( VERTICAL . TRAFFIC. LI HT03299 BOLTZMANN )
llU n i t ( DIGIMETER03297 BOL1 1ANN )
#Unit (VERTICAL.TRAFFIC.LIGHT03296 BOLTZMANN)
#Unit (DIGIACTUATOR03294 BOLTZMANN)
#Unit ( VERTICAL . TRAFFIC . LIGHT03293 BOLTZ MAHN ) )
( OBJECT . DISPLAYED #KB ( BOLTZMANN ) )
(REGION ( 3 4 459 377 )
NIL
HIL
NIL
( (ICON.REGION ( 2 6 242 48 ) ) ( EXPAND . RE G I O N ( 3 4 459 377 ) ) ) )
(TITLE "Image Panel for RED in KB VERSION")
(TITLEFONT FONTS : HL I OB )
( TOPUNIT #Unit (RED BOLTZMANN))
(WIDTH 459)
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
T1 ·1 r •

,, . . : :U 2E T.WIHDOW ( :CON) ) ) ) ) )

(IMAGES
( "PROYECTOS" "25-Nov-1986 1 7 : 30 : 10" "PROYECTOS" " 25-Nov-1 986 1 7 :30 : 13" )
NIL
( ( CLASSES GENERI CUJ : T S ) )
¡ ( DELETE DELETE . ALL . IMAGES METHOD MET OD )
( DELETE . ALL . IMAGES DELETE . ALL . IMAGES METHOD METHOD)
( DONT . RECREATE . IMAGES . AFTER . KBLOAD ASKUSER MIL {OME.OF T NIL ASKUSER) )
( RECREATE . ALL . IMAGES RECREATE . ALL. IMAGES METHOD METHOD)
(SAVE.ALL.IMAGES SAVE.ALL.IMAGES METHOD METHOD)
( USER . DELETE . ALL . IMAGES USER. DELETE . ALL . IMAGES METHOD METHOD)
(USER . BECREATE . ALL . IMAGES USER . RECREATE . ALL . IMAGES METHOD METHOD ) ) )

( METHOD . ACTUATOB03346
( "PROYECTOS" "26-Nov-1986 1 5 : 07 : 04" "PROYECTOS" " 26-Aug-1987 9:48:44" )
NIL
( {METHOD.ACTUATOR ACTIVEIMAGES) IMAGES)
NIL
()
( { BORDER 4)
( FONT FONTS : HL6)
(HEIGHT 133)
(IMAGE.WAS.PAINTED NIL)
(OBJECT . DISPLAYED #Slot ( RETRACT REGLAS . ALGORITMO BOLTZMANN OWN ) )
( REGION ( 177 122 40 1 33 )
NIL
MIL
NIL
( (ICON.REGION ( 181 95 210 48) ) ( EXPAND . REGION ( 177 122 40 133) ) ) )
( SAVED . VALUES j RULESYSTEM2>RULE . CLASSES : RETRACT ! method f )
(SUPER. IMAGE l/Unit ( I M AG E . P ANEL03254 BOLTZMANN ) )
( TITLE " REGLAS. ALGORITMO's RETRACT" )
(TITLEFONT FONTS:HLlOB)
( TOPUNIT (NIL))
(VALUE.WAS.SAVED T)
(' DTH 40 )
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
( (ICON.WINDOW NIL) ( EXPAND . WINDOW NIL ) (CURRENT.WINDOW ( EXPAND J ) ) ) ) )

( METHOD . ACTUATOR03927
( "PROYECTOS" "10-Dec-1986 1 5 : 35 : 52 " "PROYECTOS" " 26-Aug-1987 9:48:44")
NIL
( (METHOD.ACTUATOR ACTIVEIMAGESJ IMAGES)
NIL
()
( ( BORDER 4)
( FONT FONTS : HL6)
(HEIGHT 71)
(IMAGE.WAS.PAI TED NILJ
( 0BJEC! . DISPL Y 0 r510 :O !GEN RED BOLIZMAMN unn ¡ ¡
( REGION (176 35 41 71)
NIL
NIL
NIL
( (ICON.REGION ( 181 237 109 48 ) ) { EXPAND . REGION (176 35 41 71 ) ) ) )
( SAVED . VALUES I BOLTZMANN>RED : : ORI GEN ! method l )
(SUPER.IMA6E #U it (IMAGE.PANEL03254 BOLTZMAHH) )
(TITLE "BED'! OBIGEN" l
-, J
·.-' ., ; . ._ - :. " ;--
(TOPUiHT (HlL) )
(VALUE.WAS.SAVED T)
(WIDTH 41 )
(WINDOW ºA F l avor I n stance º
NIL

NIL
( (ICON.WINDOW NIL) ( EXPAND . W I NDOW N I L ) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(METHOD.ACTUATOR04439
( "PROYECTOS" "26-Nov-1986 1 5 : 35 : 00" " PROYECTOS" " 26-Aug-1 987 9:48:45")
NIL
( ( METHOD. ACTUATOR ACTIVEit1AGES ) ItAGES )
NIL
()
( ( BORDER 4)
( FONT FONTS : HL6)
(HEIGHT 62)
( IMAGE . WAS. PAINTED NIL)
(OBJECT.DISPLAYED #Slot ( ALGORITMO RED BOLT Z MANN O WN ) )
( REGION (328 21 117 62)
NIL
NIL
NIL
( (ICON.REGION (328 21 133 48 ) ) ( EXPAND . REGION (328 21 117 62) ) ) )
( SAVED . VALUES I BOLTZMANN>RED : : ALGORITMO ! method J )
( SUPER . IMAGE #Unit ( IMAGE . PANEL03254 BOLTZMANN ) )
( TITLE " RED' s ALGORITMO" )
( TITLEFONT FONTS : HL l OB )
( TOPUNIT ( NIL ) )
( VALUE . WAS . SAVED T )
(WIDTH 117)
(WINDOW "A Flavor Instance"
NIL
NIL
NIL
( ( !CON . WINDOW NIL) ( EXPAND . W IHDOW N I L ) ( CURRENT . WINDOW ( EXPAHD ) ) ) ) ) )

( NODO!
( "proyectos " " 14-Nov-1 986 1 3 : 32 :51 " " PROYECTOS" "12-Dec-1986 1 1 : 33 : 1 3 " }
NIL
(NODOS)
NIL
()
( (CONEXIONES ( CON1 5 CON 16 ) )
( E ST..DO ( I N. CTIVO ) )
(IDFNTI TCACION (ENTRADA) )
( VALOH (-0. 1 ) )
(VAEIAPLE ( f? ! L ) ) ) J

( NOD02
( ":royectos" "14-Nov-1986 13:32:51" "PROYECTOS" "12-Dec-1986 1 1 : 33 : 13" )
NIL
( NODO S )
NIL
{)
\ _ ._ _ , , _ -. \ - ; ·-· - - - · .,, I

(lDENTIFICACION (ENTRADA) )
( VP.LOH (-0. l ) )
(VARIABLE (NIL) ) ) )

(NOD03
( "proyectos" "14-Nov-1986 13:32 :51" "PROYECTOS" " 12-Dec-1986 1 1 : 33 : 14" )
NIL
( NODOS)
NIL

( (CONEXIONES (CON35 CON36) )


( ESTADO ( INACTIVO) )
( IDENTIFICACION ( ENTRADA ) )
( VALOR ( -0 . 1 ) )
( VARIABLE (NIL) ) ) )

(N0004
( "proyectos" "14-Nov-1986 13:32 :51" "PROYECTOS" " 12-Dec-1986 1 1 : 33 : 1 4 " )
NIL
(NODOS)
NIL
()
( (CONEXIONES (CON45 CON46) )
( ESTADO (INACTIVO) )
(IDENTIFICACION ( ENTRADA ) )
( VALOR ( -0 . 1 ) )
(VARIABLE (NIL) ) ) )

( NODOS
( "proyectos" "14-Nov-1986 13:32:51" "PROYECTOS" " J .:-Dec-1986 1 1 : 33 : 1 8
" )
NIL
( NODOS )
NIL
()
( ( CONEXIONES ( CON1 5 CON25 CON35 CON45 CONS6 CONS7 ) )
( ESTADO ( AC T I VO ) )
(VALOR ( l . l ) ) ) )

( NOD06
( "proyectos" " 14-Nov-1986 1 3 : 32 :52 " "PROYECTOS" " 1 2-Dec-1986 1 1 : 33 : 1 6 " )
NIL
( NODOS )
NIL
()
( ( CONEXIONES (SON!6 C0N2 rnu? CON 6 CON56 CON67 ) )
( ES ADO ( AC!!VO ) )
( IDEl TIFICACION ( IHTERf:: . : = . .. ::
( VALOR ( l . l ) )
(VARIABLE (T) ) l)

{!ODO?
( ":royectos" "14-Nov-1986 1 3 : 32 : :, : ;• '' ?EOYECTOS" " 1 2-Dec-1986 11 :33:10")
¡IL
(NODOS )
NIL
()
( (CONEXIONES (CON57 CON67) )
( ESTADO (INACTIVO) )
(IDENTIFICACION ( SALIDA ) )
( VALOR ( -0 . 1 ) )
(VARIABLE (NIL) ) ) )

(NODOS
( "proyectos" "14-Nov-1986 1 3 : 32 : 51 " "PROYECTOS" " 26-Aug-1987 9:22:53")
( RED)
( (CLASSES GENERICUNITS) )
"Unidades o "
( ( COMP ROBAR . SAL I DA
( LAMBDA ( SELF )
(COND ( (EQUAL ( G:I . VALUE SELF '"ESTADO) (GET.VALUE SELF ··· sAL IDA . P ATRON ) )
- -}---- --- --
· ( P U' . VALU E ,· RED - ,. CORRECTO ¿ S I-)
(T ( PUT. VALUE '"RED '"CORRECTO '"NO ) ) ) )
METHOD
(METHOD)
NIL
( ( COMMENT
"Comprueba si el estado del nodo despues de la segunda fase del algoritmo es igual al q
indicaba el patron de entrenamiento" ) ) )
( CONEXIONES NIL
NIL
NIL
NIL
( (COMMENT ( "Lista de las conexiones en las que interviene el nodo") ) ) )
( ESTADO (INACTIVO)
NIL
( (ONE.OF ACTIVO INACTIVO) )
NIL
( (COMMENT ( "Estado actual del nodo") ) ( CARDI NALITY . MAX ( 1 ) ) ) )
(IDENTIFICACION
( INTERMEDIO)
NIL
( ( ONE . OF ENTRADA S A L I DA INTERMED I O ) )
NIL
( ( COMMENT
( "Funcion del nodo en la red , ya sea elemento de ENTRADA , INTERMEDIO, o de SALIDA " ) )
( CARDI N.<LI T Y . MAX ( l ) ) ) )
(SALIDA. PATRON
NIL
NIL
f ( ONE . OF ACTIVO INACTIVO) )
NIL
: \C RDINALITY.M X (lJ)
(COMMENT
''Contiene el estado del nodo para el patron de ent ada.Solo es relevante si la identifi
ion del nodo es SALIDA" ) ) )
( UMBRAL
( -0 . 1 )
NIL
( REAL )
NIL
( (AVUNITS (#Unit ( CORRECCION BOLTZMANN ) ) )
( COMMENT
( "Valor numerico que tiene el nodo, a partir del cual se determina su estado de activacj
o inact i vacion " ) )
( CARDINALITY . MAX ( 1 ) ) ) )
( VARIABLE
(T)
NIL
( ( ONE . OF T N IL ) )
NIL
( ( COMMENT
("Variable booleana ( T , NIL ) que indica si el e,_'ado del nodo puede ser cambiado por el j
cionamiento interno de la red. Su valor es NIL cuando el nodo es de ENTRADA o de SALIDA" ) )
( CARDINALITY . MAX ( 1 ) ) ) )
( VER . SI . ACTIVA . A
( LAMBDA (SELF CONEXION)
(PROG ( (NODO ( COND ( ( EQUAL SELF ( GET . VALUE CONEXION 'PUNTOl ) )
( GET . VALUE CONEXION ' PUNT02 ) )
(T (GET . VALUE CONEXION 'PUNTOl ) ) ) )
( P ESO . ARCO ( GET. VALUE CONEXION .. PESO ) ) J- -
(COND ( ( GET . VALUE NODO ,. VARI ABLE )
(PUT.VALUE NODO ,. VALOR (+ ( GET . VALUE NODO -' VALOR ) P ES O . ARCO ) )
( CONO ( (>= ( GET . VALUE NODO 'VALOR ) (GET.VALUE NODO -UMBRAL ) )
( PUT . VALUE NODO 'ESTADO 'ACTIVO ) )
(T ( PUT . VALUE NODO ' ESTADO ' INACTIVO) ) ) ) (T
HIL)) ) )
METHOD
(METHOD)
NIL
( ( COMMENT
("Metodo que calcula el estado de los nodos conectados con el nodo propietario del met
Toma como argumentos el nodo propietario y una unidad de UNIONES" ) ) ) ) )
( ( CALCULO
(LAMBDA ( SELF )
( ASSERT NIL ' REGLA . CALCULO ) )
METHOD
( METHOD )
NIL
( ( COMMENT
( "Metodo que dispara el funcionamiento interno de la red a partir de una determinada si
cion utilizando REGLA.CALCULO") ) ) )
( CREAR . NODOS ( LAMBDA ( SELF )
( P B OG ( DA T O )
( CLI : TERPRI )

(S TQ DATO (CBEATE.URIT ,· ..................- - - - NIL '(NODOS)))


'· l_. ! .!
; .'" . :. ' ¡
L

(SLI : TERPRI )
( PUT . VALUE DATO
'ESTADO
( MENO ( GET . SLOT . MENU --- NODOS . MENUESTADO ' OWN ) )
' OWN )
(PUT.VALUE DATO
'IDENTIF!CACION
(ME:HU ( GET.SLOT .HENU · t o;,;._:_, , , ii üIDENTIF ·· OWN ) )
( f·1E"i HOD )
!H L
( ( COMMENT " Cont iene la funcion que crea nuevos nodos " ) } }
( MENUESTADO
( ( '' .t C T I VO " ··· ,tC T I VO ) ( " INACTIVO" ... INACTIVO ) }
NIL
(MENUITEM}
NIL
( (TITLE ( "ESTADO DESEADO" } )
(COMMENT " Menu :ara elegir el estado de un nodo en el momento de su creacion" ) ) )
( MENU I DENT I F
( ( "ENTARDA" 'ENTRADA) ( "SALIDA" 'SALIDA) ( "INTERMEDIO" 'INTERMEDIO} )
NIL
(MENUITEM)
NIL
( (TITLE ( "IDENTIFICACION DEL NODO" ) )
( COMMENT " Menu para elegir la ident i ficacion del nodo en el momento de su creacion" ) ) )
(SUPRIMIR.NODOS ( LAMBDA ( SELF )
( CLI : TERPRI )
( PlUNTOUT T "NOMBRE DEL NODO : " )
(UNITDELETE ( CLI : REA! ) ) )
METHOD
( METHOD)
NIL
( ( COMMENT " Contiene el metodo que suprime un nodo de la red" ) ) ) ) )

(PRUEBA
( "PROYECTOS" "12-Dec-1986 11 :50: 16")
NIL
( ( ENT I T I ES GENERICUNITS ) )
NIL
()
() }

(R.ACTIVO
("proyectos" "14-Nov-1986 13:33:24" "PROYECTOS" "19-Nov-1986 1 0 : 57 : 55 " )
NIL
( REGLA . ESTADO )
NIL
()
( ( ASSERTION ( llWff C AN ESTADO OF ?NODO IS ACTIVO ) ) )
( EXTERNAL . FORM (IF ( ( THE VALOR OF ?NODO. IS ?X) AND
(THE UMBRAL OF ?NODO IS ?Y)
AND
(>= ? X ? Y ) )
THEN

• P?EMISE (# ff (A VAL0S { .>=

(R.ACTUALIZACION
( " PROYECTOS" " 27-Nov- 1986 15:46:26" "PROYECTOS" "10-Dec-1986 15:14:00" )
NIL
(REGLA. INICIO.FASE! REGLA.INIC10.FASE2)
( R . ASIGNACION .PATRON
( "PROYECTOS" " l l-Dec-1 986 16 : 27 :52" "PROYECTOS" " 1 2-Dec-1986 11 :56:08" )
NIL
( REGLAS . ASIGNACION . PATRON )
"Pide al usuario los valores correspondientes para los nodos de un patron"
()
( ( ACTION ( (PRINTOUT T ( UN I T . NAME ?NODO ) " " ) (PUT.VALUE ?NODO 'VALOR (READ) ) ) )
••••

(EXTERNAL.FORM
( IF ( (?NODO IS IN NODOS) ANO
( ( THE IDENTIFICACION OF ?NODO IS ENTRADA) OR
(THE IDENTIFICACION
OF
?NODO
IS
SALIDA) ) )
DO
(PRINTOUT T (UNIT.NAME ?NODO ) " )
••• •"

( PUT . VALUE ?NODO 'VALOR (READ) ) ) )


(PREMISE
(#Wff ( ?NODO IS IN CLASS NODOS )
#Wff ( (AN IDENTIFICACION OF ?NODO IS ENTRADA ) OR ( AN IDENTIFICACION OF ?NODO IS SALIDA ) ]

(R.CALCULO
( "proyectos" " 14-Nov-1986 13:34:32" "PROYECTOS" "ll-Dec-1986 15:44: 16" )
NIL
( REGL.A . CALCULO )
NIL
()
( (ACTION ( (PRINT ?NODO) (PRINT ?DESTINO ) ( UNITMSG ?NODO 'VER . SI . ACTIVA . A ?DESTINO) ) )
(ASSERTION)
(EXTERNAL.FORM (IF ( AN D (THE ESTADO OF ?NODO IS ACTIVO)
( THE CONEXIONES OF ?NODO IS ?DESTINO ) )
DO
(PRINT ?NODO )
(PRINT ?DESTINO)
( UNITMSG ?NODO 'VER . SI . ACTIVA . A ? DE S T I NO ) ) )
(PREMISE ( #Wff ( AN ESTADO OF ?NODO IS ACTIVO ) #Wff (A CONEXIONES OF ?NODO IS ?DESTINO) ) ) ))

(R.CAMBIO.PESO.FASEl . l
("PROYECTOS" "17-Nov-1986 16:29:00" "PROYECTOS" "10-Dec-1986 14: 16:45" )
NIL
(REGLA.CAMBIO.PESO.FASE! )

, ,

1 r 7 : ., r TT T .· -· . -· - . -·· ' · . ' ·.

! '-.J l' J . '-' . C-U f- f. r, 1 -• ' : .: ' . _! .' ·' ·'

1 A3Si6TI0N (#Wff ( AH ACTUALI ZACIUN UF CON l SI J J )


(EXTERNAL.FORM (IF ( (THE ESTADO OF ?NODO IS ACTIVO ) ANO
(THE CONEXIONES OF ?NODO IS ?CON )
ANO
(THE ACTUALIZACION OF 'CON IS HO)
ANO
f THE PUNTO I OF ?CON IS ?ROP0'
1i;D
OF
(THE PUNT02 OF ?CON )
IS
IKTIVO) )
THEN
(THE ACTUALIZACION OF ?CON IS SI )
DO
(PUT.VALUE ?CON
'PESO
(+ (GET.VALUE ?CON ,. P ESO ) ( GET. VALUE 'RED ,. DELTA ) ) ) ) )
(PREMISE (#Wff ( AN ESTADO OF ?NODO IS ACTIVO ) #Wff (A CONEXIONES OF ?NODO IS ?CON )
#Wff ( AN ACTUALIZACION OF ?CON IS NO)
/Wff ( A PUNTOl OF ? CON IS ?NODO)
#Wff (A PUNT02 OF ?CON IS ? VA R 2 )
í. #Wff ( AN ESTADO OF ?VAS2 IS ACTIVO ) ) )
( WEIGHT (2) ) ) )

( R . CAMBIO . PESO. FASEl . 2


("PROYECTOS" "27-Nov-1986 15:09:53" "PROYECTOS" " 10-Dec-1986 14: 16:40" )
NIL
(REGLA.CAMBIO.PESO.FASE! )
NIL •
()
((ACTION ( (PUT.VALUE ?CON 'PESO (+ (GET.VALUE ?CON ,PESO) (GET.VALUE ,. RED ' DELTA ) ) ) ) )
( ASSERT ION ( #Wff ( .lN ACTUAL I ZAC I ON OF ?CON IS SI ) ) )
( EXTERNAL . FORM (IF ( (THE ESTADO OF ?NODO IS ACTIVO ) AND
(THE CONEXIONES OF ?NODO IS ? CON )
ANO
( THE ACTUALIZACION OF ?CON IS NO)
ANO
(THE PUNT02 OF ?CON IS ?NODO)
ANO
(THE ESTADO
OF
(THE PUNTOl OF ?CON)
IS
ACTIVO) )
l THEN
( THE ACTUALIZACION OF ?CON IS SI )
DO
( PUT . VALUE ?CON - -- · -

'' P ESO
(+ (GET.VALUE ?CON ,. P ESO ) (GET.VALUE ,. RED ' DELTA ) ) ) ) )
(PBEMISE ( #Wff ( AN ESTADO OF ?NODO IS ACTIVO) #Wff (A CONEXIONES OF ?NODO IS ?CON)
#Wff ( AN ACTUALI ZACION OF ?CON IS NO )
#Wff ( A PUHT02 OF ?CON IS ?ffODO )
#Wff (A PUNTO! OF ?CON IR ?UAF )
#Wff AN ESTADO OF ?VAR3 IS ACTIVO) l ) l )

(R.CAMBIO.PESO.FASE2. l
( "PROYECTOS" "27-Nov-1986 16:16:45" "PROYECTOS" "lO Dec-1986 14:18:26")
NIL
( REGLA . c.<.MBI O . PESO . FASE2 )
NIL
' '
l .

, l ...........r=· ·:
(THE CONEXiONES OF ?NODO IS ?GO )
.ó,HD
( THE ACTUALIZACION OF ?CON IS NO )
AND
( THE PUNTO! OF ?CON IS ?NODO )
AND
(THE ESTADO
OF
( THE PUNT02 OF ?CON )
IS
ACTIVO ) )
THEN
( THE ACTUALIZACION OF ?CON IS SI)
DO
(PUT.VALUE ?CON
'' P ESO
(- (GET.VALUE ?CON /PESO) ( GET . VALUE /RED /DELTA ) ) ) ) )
(PREMISE ( #W f C AN ESTADO OF ?NODO IS ACTIVO ) #Wff ( A CONEXIONES OF ?NODO IS ?CON )
#Wf f ( AN ACTUALIZACION OF ?CON IS NO )
#Wff (A PUNTOl OF ? CON IS ?NODO )
#Wff (A PUNT02 OF ?CON IS ?VAR4)
#Wff ( AN ESTADO OF ?VAR4 IS ACTIVO ) ) ) ) )

(R.CAMBIO.PESO.FASE2.2
( "PROYECTOS" " 27-Nov- 1 986 16 : 16 : 50" "PROYECTOS" " 10-Dec-1986 14: 18:23" )
NIL
(REGLA.CAMBIO.PESO.FASE2)
NIL
()
((ACTION ( (PUT.VALUE ?CON /PESO (- ( GET . VALUE ?CON ·' P ESO ) (GET.VALUE /RED / DELTA ) ) ) ) )
( ASSERTION ( llW : f C AN ACTUAL I Z AC I ON OF ?CON IS SI ) ) )
(EXTERNAL.FORM (IF ( (THE ESTADO OF ?NODO IS ACTIVO ) AND
( THE CONEXIONES OF ?NODO IS ?CON )
AND
(THE ACTUALIZACION OF ?CON IS NO )
AND
(THE PUNTO! OF ?CON IS ?NODO )
AND
(THE ESTADO
OF
(THE PUNT02 OF ?CON)
IS
ACTIVO) )
THEN
(THE ACTUALI ZACION OF ?CON IS SI)
DO
(PUT.VALUE ?CON
·· l' ESO

(PREM:SE (#Wff ( Aíl ESTADO OF ?NODO IS ACTIVO ) #Wff ( A CONEXIONES OF ?NODO IS ?CON)
#Wff (AN ACTUALIZACION OF ?CON I S NO )
·#Wff ( A PUNTO! OF ? CON IS ?NODO)
#Wff (A PUNT02 OF ?CON IS ?VAR5)
#Wf f C AN ESTADO OF ?VAR5 IS ACTIVO ) ) ) ) )

10. coM ROBAR.SALIDA


,, ,. r · -
. . , .. !l ,, · . . - -
;; - . _ ; , - { - ¡ !.'. '·-' : ::. . _ . ·:·
. ,_; _ - l •"''' - -, ,-, --
.'
HIL
(REGLA.COMPROBAR.SALIDA)
NIL
()
((ACTION ( (UNITMSG ?NODO /COMPROBAR . SALIDA ) ) )
( EXTERNAL . FORM (IF ( (?NODO IS IN NODOS) ANO ( THE IDENTIFICACION OF ?NODO IS SALIDA} )
DO
( UNITMSG ?NODO ' COMPROBAR . SALIDA ) } }
(PREMISE ( #Wff ( ?NODO IS IN CLASS NODOS ) lWff ( AN IDENTIFICACION OF ?NODO IS SALIDA ) ) ) ) )

(R.FIJAR.SALIDA.PATRON
( "PROYECTOS" " l l-Dec-1 986 17:45:25" "PROYECTOS" "ll-Dec-1986 17:48:09" )
NIL
( REGLA .FIJAR . SALIDA. PATRON )
NIL

( (ACTION ( (PUT.VALUE ?NODO ' SALIDA . PATRON (GET.VALUE ?NODO ··· ESTADO ) ) ) )
( EXTERNAL . FORM ( IF ( ( ?NODO IS IN NODOS ) AND (THE IDENTIFICACION OF ?NODO IS SALIDA ) )
DO
(PUT.VALUE ?NODO ..S.tLIDA . PATRON (GET.VALUE ?NODO ·' ESTADO ) J ) )
(PREMISE (#Wff ( ?NODO IS IN CLASS NODOS) l/Wff ( AN I DENT I F I CA C I ON OF ?NODO IS SALIDA ) ) ) ) )

(R. INACTIVO
(":royectos" "14-Nov-1986 1 3 : 33 : 24" "PROYECTOS" " 19-Nov-1 986 10:58: 17")
NIL
( REGLA . ESTADO }
NIL
()
( (ASSERTION (lWff ( AN ESTADO OF ?NODO IS INACTIVO ) } )
(EXTERNAL.FORM (IF ( (THE VALOR OF ?NODO IS ?X) ANO
( TH E UMBRAL OF ?NODO IS ?Y)
ANO
(< ?X ?Y) )
THEN
(THE ESTADO OF ?NODO IS INACTIVO ) ) )
( PREMISE ( ltWff ( A VALOR OF ?NODO IS ?X) lWff ( A UMBRAL OF ?NODO IS ?Y) #tW f f (< ?X ?Y) ) ) )J

(R. INICIO.FASE2
("PROYECTOS" "19-Nov-1986 1 1 : 09 : 05 " "PROYECTOS" " l l-Dec-1 986 15:25:44")
NIL
(REGLA.INICIO.FASE2}
NIL
()
( ( ACTION
( (FUT.VALUE ?NODO .. V{.LOR (- ( GET . VALUE ?NODO "UMBRAL} ( GET . VALUE "RED 'DELTA ) ) )

IEXTERMAL.FORM tlf (THE IDENTIFICACION OF ?NODO IS SALIDA )


DO
(PUT.VALUE ?NODO
' VALOR
· ( - ( SET. VALUE · ?NODO 'UMBRAL )- ( 6ET . V.4LUE
· ·' RED ·' DELTA ) } )
( ASSERT N I L
/REGLA . ESTADO } } )
(PREMISE ( #Wff (AN IDENTIFICACION OF ?NOOO IS SALIDA) ) )
(WEIGHT (0) ) i)
- ·- ,J - t : . ¡¡ )
HIL
(REGLAS.ORIGEN)
NIL
()
((ASSERTION ( #Wff (A PESO OF ?CON IS 0 . 1 ) ) )
(EXTERNAL.FORM CIF ( ?CON IS IN UNIONES ) THEN ( THE PESO OF ?CON IS 0 . 1 ) ) )
(PREMISE (#Wff (?CON IS IN CLASS UNIONES) ) ) ) )

(R.VALORES
( "PROYECTOS" " 10-Dec-1986 1 5 : 32 : 39" "PROYECTOS" " 10-Dec-1 986 15:32:39")
NIL
(REGLAS.ORIGEN)
NIL
()
'

((ASSERTION ( #Wff (A VALOR OF ?NODO IS -0 . ) ))


( EXTERNAL . FORM (IF ( ?NODO IS IN NODOS) THEN ( THE VALOR OF ?NODO IS -0 . 1 ) ) )
(PREMISE (#Wff ( ?NODO IS IR CLASS NODOS ) ) ) ) )

(B.VABIABLE.FASEl
( "pr·oyectos" " 14-Nov-1 986 13:35:20" "PROYECTOS" "26-Nov-1986 15:25:33" )
NIL
( REGLA . VARIABLE . FASEl )
NIL

((ASSERTION ( #W f f ( A VARIABLE OF ?NODO IS NIL ) ) )


( EXTERNAL . FORM (IF ( OR ( THE IDENTIFICACION OF ?NODO IS ENTRADA)
( THE IDENTIFICACION OF ?NODO IS SALIDA ) )
THEN
(THE VARIABLE OF ?NODO IS NIL) ) )
(PREMISE
( #Wff ( (AN IDENTIFICACION OF ?NODO IS ENTRADA) OR C AN IDENTIFICACION OF ?NODO IS SALIDA ) )
( WEIGHT ( 1 ) ) ) )

(R.VARIABLE.FASE2
( "PROYECTOS" " 1 7-Nov-1 986 1 6 : 30 : 00" "PROYECTOS" " 26-Nov-1· 36 15:31 :55")
NIL 1<

(REGLA .VARIABLE. FASE2 ( CLASSES GENERICUNITS ) )


NIL

((ASSERTION ( #Wff ( A VARIABLE OF ?NODO IS NIL) ) )


( EXTERNAL . FORM (IF ( THE IDENTIFICACION OF ?NODO IS ENTRADA)
THEN
(THE VARIABLE OF ?NODO IS NIL) ) )
(PREMISE (#Wff ( AN IDENTIFICACION OF ?NODO IS ENTRADA) ) ) ) )

("PROYECTOS" "25-Nov-l9.6 1 7 : 00 : 24" "PROYECTCt· '' " ;6-A1.g-1 987 9 : 33 : 05" )


NIL
( (CLASSES GENERICUNITS) )
"Estructura basica de la red compuesta por NODOS y UNIONES"
()
( (ALGORITMO ( LAMBDA ( SELF )
CA SE T FIL 'REGLA.INICIO.FASE! )
( ASSERT IL /R GLA.ESTADO)
(ASSERT NIL 'REGLA.VARIABLE.FASEl )
( ASSERT NIL .. REGLA . CALCULO )
(ASSERT NIL 'REGLA . CAMBIO. PESO . FASEl )
(ASSERT NIL 'REGLA.INICIO.FASE2)
(ASSERT NIL 'REGLA.VARIABLE.FASE2)
( ASSERT NIL 'REGLA . CALCULO )
(ASSERT NIL 'REGLA .CAMBIO . PESO . FASE2 ) )
METHOD
(METHOD)
NIL
( ( COMMENT ( "Algoritmo que realiza el aprendizaje utilizando REGLAS.ALGORITMO") ) ) )
( ASIGNAR . PATRON
( LAMBDA ( SELF )
(PRINTOUT T " ESCRIBA LOS VALORES CORRESPONDIENTES A CADA NODO : " )
( ASSERT N I L ' REGLAS . ASIGNAC ION . PATRO!; )
"
METHOD
( METHO D )
NIL
( ( COMMENT
"Pide al usuario los valores de los nodos de la red ( un patron de entrenamiento ) " ) ) )
(COMPROBACION
( L.CMBDA ( SELF )
( ASSERT N I L ' REGLA . COMPROBAR . SALIDA ) )
METHOD
(METHOD)
NIL
( ( COMMENT
"Lanza el razonamiento que comprueba las sal idas despues de una ejecucion del algoritmo co
n un patron " ) ) )
( CORRECTO
( NO )
NIL
( ( ON E . OF S I NO ) )
NIL
( (CARDINALITY.MAX ( 1 ) )
( COMMENT
" Valor booleano ( SI , NO ) que sirve pat'a averiguar si todos los patrones de entrada han dado ·.
la salida adecuada tras la segunda fase del algoritmo de aprendizaje" ) ) )
( DELTA
(Q, 1) ¡I

NIL
( REAL )
NIL
( ( COMMENT
( "Valor corrector de los pesos de las conexiones en el algoritmo de aprendizaje") )
( CARDINALI TY . MAX ( 1 ) ) ) )
(ITERACION
( LAMBDA ( SELF)
(U ITMSG 'RED 'ASIGNAR.PATRON)
! UNIT Se ' RED ' A 0 ITMO )
( UNITMSG 'RED ' C M?RDBACI0H ) )

(METHOD )
NIL
( ( COMMENT "Metodo que real iza una iteracion completa con todos los patrones de entrada " ) ) )
( MENUOPERACIONES
( ( "CREAR NODOS" 'N) ( "CREAR UNIONES" ,· u )
( "SUPRIMIR NODOS" 'SN)
( " SUPRIMIR UNIONES" 'ST
( "FIN" ,· F ) )
( ME!W I T E M )
NIL
( (TITLE ( "OPERACIONES BASICAS" ) ) (FONT ( KEE . TITLE . FONT ) )
( COMMENT " M enu pr i nc i pal d e crea c i on •ie l a t ed " ) ) )
(OPERACIONES
( LAMBDA ( SELF )
(PROG ( (OPERACIOH NIL) )
( DO NIL
( (EQ OPERACION /F) )
(SETQ OPERACION ( MENU (GET .SLOT .MENU ·' RED .. MENUOPERACIOHES .. OWN ) ) )
( COND ( I EQ O P E RAC I ON .. N )
( UNITMSG .. NODOS /CREAR . NODOS ) )
( ( EQ OPERACION ' U )
( UNITMSG 'UNIONES .. CREAR . UNIONES ) ) f
(EQ OPERACION /SN )
( UNITMSG 'NODOS 'SUPRIMIR . NODOS ) )
( EQ CPERACION 'SU )
( UNI TMSG ' UNI ONES ' SUP R I M I R . UNIONES ) ) ) ) ) )
METHOD
(METHOD)
HIL
( ( COMMENT " Cont iene la funcion que se o apa del menu pr incirel d operaciones " ) ) )
( ORIGEN ( LAMBDA ( SELF )
( ASSERT •H I L ' REGLAS . OR I GEN ) )
METHOD
( METHOD )
NIL
( (COMMENT "Inicializa la red") ) )
(\IMAGE.PANEL ( #U n i t (IMAGE.PAHEL03254 BOLTZMAHN) ) ) ) )

{REGLA .CALCULO
("proyectos" "14-Nov-1986 1 3 : 34 : 32 " "Pf IECTOS" " 5-Dec-1 986 13:44: 2" )
( REGLAS . FASE2 REGLAS . FASE! ( RULES RULESYSTEM2 ) )
( (RULE.CLASSES RULESYSTEM2) )
"Regla comun a las dos fases que se ocupa del funcionamiento interno de l a re d " (
( ASSERTIOH)
(PREMISE) )
( ( ANO . TRACE)
( FC . TRACE )
(IMMEOIATE. RULE. APPLICATION i :·10DE ( ON ) )
( OR . TRACE)
(PANEL .TRACE)
( STEPPER . MO D E )
( TEXT . TRACE ) ) )

(REGLA.CAMBIO.PESO.FASE!
( "PROYECTOS" "26-Nov-1986 15:23:38" "PROYECTOS" "10-Dec-1986 14: 17 : 19" )
( REGLAS . FASE l j
( ( 1::Lt.SSES •E!;Ei : '. ,7i I: ) ( RULE . CLASSES RULESYS!Et,l2 ) )
,1Cl ;e dE r ocupan de la modific c ioD i0 p sos de las conexiones s gun la nr irfi
e a fase del al gor 1T1110 ae aprendizaje 1i
( ( ASSERTION >
(PREMISE) )
( ( ANO . TRACE)
( FC . TRACE )
! IMMEDIATE . RULE . APPLIC.!.TION . MODE ( ON ) )
C OR . TRACE ( OFF ) )
( P .6 NEL . TRACE )
(STEPPER.MODEJ
(TEXT.TRACE) ) )

( REGLA . CAMBIO . PESO .FASE2


( "PROYECTOS" " 26-Nov- 1 986 15:28:26" "PROYECTOS" "10-Dec-1986 14: 18:45")
( REGLAS . FASE2 )
( ( CLASSES GENERICUNITS ) ( RULE . CLASSES RULESYSTEM2 ) )
"Clase de reglas q•le se ocupan de la rodificacion de los pesos de las conexiones segun la segu
nda fase del algoritro de aprendizaje "
( ( ASSERTION )
(PREMISE) )
( ( AND . TRACE )
( FC . TRACE )
(IMMEDIATE.RULE.APPLICATION.MODE)
( OR . TRACE )
(PANEL.TRACE)
( STEPPER . MODE)
(TEXT.TRACE) ) )

(REGLA.COMPROBAR.SALIDA
( "PROYECTOS" "ll-Dec-1986 17:56:12" "PROYECTOS" "12-Dec-1986 11:45:47" )
( REGLAS . CONTROL ( RULES RULESYSTEM2 ) )
( ( RULE . CLASSES RULESYSTEM2 ) )
NIL
( ( ASSERT . MODE ( REPLACE ) )
( ASSERTION )
(PREMISE) )
( ( ANO . TRACE )
( FC . TRACE )
(' MEDIATE . RULE . APPLICATION . t·:JDE )
( OR . TRACE )
(PANEL. TRACE)
( STEPPER . MODE)
(TEXT. TRACE) ) )

( REGL\ . ESTADO
( " pl' oyect o s " " 1 4-Nov- 1 986 13 : 33 : 2 4" "PROYECTOS" " 5-Dec-1 986 13:44: 13")
C REGLAS . FASE2 REGLAS . FASE! ( RULES RULESYSTEM2 ) )
( ( RULE . CLASSES RULESYSTEM2 ) )
"Regla comun a las dos fases. Determina los estados de todos los nodos de l a red a par t i r de 1
os va l or e s de cada uno de e l l o s "
( ( ASSER T . MODE ( REPLACE ) )
(ASSERTIOH)
(PREMISE) )
( (AND. TRACE)
( FC . TRACE )
( IMMEDIATE . BULE . APPLICATION . MODE l
( OR . TP.". <: }
( PANEL . T. .CE )
( STEPPER . MODE J
( TEXT . TRACE ) ) )

( REGLA . FIJAR . SALIDA . PATRON


( "PROYECTOS" "ll-Dec-1986 17:44:50" "PROYECTOS" "12-Dec-1986 11 :45:52")
( REGLAS . GONTROL ( r :ES RULESYSn! M 2 ) )
, G E.CLASSES RULESYSTEM2) )
"Uc.a vez leido el patron de entrada , asigna al slot SALIDA . P..TRON de las unida•ies •ie s al id a lo s
valores correspondientes"
( ( ASSERT . MODE ( REPLACE ) )
( ASSERTION )
(PREMISE) )
( (ANO. TRACE)
( FC . TRACE )
(IMMEDIATE.RULE.APPLICATION.MODE)
( OR . TRACE )
(PANEL.TRACE)
( STEPPER . MODE)
( TEXT . TRACE ) ) )

( REGLA . INICIO . F SEl


( "PROYECTOS" "27-Nov-1986 15:47: 15" "PROYECTOS" "5-Dec-1986 13:46:49" ) (
REGLAS . FASE! )
( ( RULE . CLASSES RULESYSTEM2 ) ( CLASSES GENERICUNITS) )
"Regla que se utiliza para preparar todos los nodos para la primera fase del algoritmo. Contie
ne una un i ca r e g l a R . ACTUAL I ZACION , que tambien e s ut i l i zada e n la segunda f a s e d e l a lgo r i t mo de
apt' endi zaj e "
()
() )

(REGLA.INICIO.FASE2
("PROYECTOS" "26-Nov-1986 15 : 28 : 27 " "PROYECTOS" "5-Dec-1 986 1 3 : 50 : 46 " )
( REGLAS . FASE2 )
( (RULE.CLASSES RULESYSTEM2) ( CLASSES GENERICUNITS ) )
" Regla que se utiliza par·a preparar todos los nodos para la segunda fase d e l alg o ritmo"
()
()

(REGLA.VARIABLE.FASE!
( "PROYECTOS" " 2 6-Nov-1 986 15 : 23 : 35" "PROYECTOS" "5-Dec-1 986 13:48:22" )
(REGLAS.FASE! )
( (RULE.CLASSES RULESYSTEM2) ( CLASSES GENERICUNITS ) )
" Regla que asigna los valores del slot VARIABLE de todos los nodos de la red en funcion de su
identi ficacion y de las restricciones de la primera fase"

()

( REGLA . VARIABLE . FASE2


("PROYECTOS" "26-Nov-1986 15:28:25" "PROYECTOS" "5-Dec-1986 13:52:30")
(REGLAS.FASE2)
( (RULE.CLASSES RULESYSTEM2) ( CLASSES GENER ICUN I TS ) )
"Regla que asigna los valor·es del s lot VARIABLE de todos los nod o s de la r· e·i en fun-ion de su
i de nt i f i c a c i o n y d e la s re s tric c io ne s de la s e gu nd a fa s e "
()

(REGLAS.ALGORITMO
( "PROYECTOS" "26-Nov-1 986 14:43: 18" "PROYECTOS" "5-Dec-1986 1 3 : 38 : 46" )
( ( RULES RULESYSTEM2 ) )
( ( RULE . CLASSES RULESYSTEM2 ) )
"Clase de reglas que contiene todas las reelas necesarias en el algoritmo de aprendiz je de l
r- e d "
( ( ASSERT . MODE ( REPLACE ) ) )
( ( RESOLVE . CONFLICT LEAST . P REM I SE . COMP LEXI TY l
( RETRACT NIL NIL NIL NIL NIL ) ) )

(REGLAS.ASIGNACION.PATRON
( "PROYECTOS" " l l-Dec-1 986 16: 26 : 18" "PROYECTOS" " 1 2-Dec-1 986 1 1 : 56 : 33 " )
( REGLAS . CONTROL ( RULES RULESYSTEM2 ) )
( ( RULE . CLASSES RULESYSTEM2 ) )
"P ide al usuar io los valores correspondientes para los nodos de un patron" (
( ASSERT . MODE ( REPLACE ) )
( ASSERTION )
(PREMISE ) }
( ( AND . TRACE )
( FC . TRACE )
( IMMEDIATE . RULE . APPLICATION . MODE)
( OR . TRACE )
(PANEL. TROCE)
( STEPPEI L MODE)
( TEXT . TRACE ) ) )

(REGLAS.CONTROL
( "PROYECTOS" " 1 2-Dec-1 986 1 1 : 43 : 36" " PROYECTOS" " 1 2-Dec-1 986 1 1 : 45 : 1 7 " )
( REGLAS . ALGORI TMO )
( ( RULE . CLASSES RULESYSTEM2 ) ( CLASSES GENE R I C U N I TS ) )
NIL
( ( ASSERT . MODE ( REPLACE ) ) )

(REGLAS . FASE!
( "PROYECTOS" " 26-Nov-1 986 1 4 : 44 : 09" "PROYECTOS" " 1 2-Dec-1 986 11 :42:56" )
( REGLAS . FASES )
( ( RULE .CLASSES RULESYSTEM2 ) ( CLASSES GENER ICUNITS ) )
"Clase de reglas que contiene todas las reglas referidas a la primera fase del algoritmo de ap
rendizaje "
( ( WEI GHT (0) ) )
( ( RESOLVE . CONFLICT LEAST . PREMISE . COMPLEXITY ) ) )

( REGLAS . FASE2
( "PROYECTOS" "26-Nov-1986 1 4 : 44 : 10" "PROYECTOS" " 1 2-Dec-1 986 11 :43: 10")
( REGLAS . FASES )
( ( RULE. CLASSES RULESYSTEM2 ) ( CLASSES GENERICUNITS ) )
"Clase de reglas que contiene todas las reglas referidas a la segunda fase del algoritmo de ap
rend izaje"
( ( WEI GHT ( 1 ) l )
( ( RESOLVE . CONFLICT LEAST . PREMISE . COMPLEXITY ) ) J

'· DrGLAS . FASES


( "PROYECTOS" "12-Dec-1986 11:39:20" "PROYECTOS"" "12-Dec-1986 11 :41 :46" )
( REGLAS . ALGORITMO ( RULES RULESYSTEM2 ) )
( (RULE.CLASSES RULESYSTEM2) )
" Reglas que ejecutan las dos fases del algor itmo"
()
() )
(REGLAS.ORIGEN
("PROYECTOS" "10-Dec-1986 15:28:51 " "PROYECTOS" "ll-Dec-1986 17:04:50")
( ( RULES RULESYSTEM2 ) )
( ( RULE . CLASSES RULESYSTE11 2 ) )
"Coloca los valores de todos los nodos y los de todas las conexiones " (
( ASSER T . MODE { REPLACE ) )
( ASSERT ION )
(PREMISE ) )
( ( ANO . TRACE )
(FC.TRACE)
( I MMEDIATE. RULE. APPLICATION . MODE)
C OR . TRACE )
(PANEL. TRACE )
( STEPPER . MODE )
(TEXT. TRACE) ) )

( UNIONES
( "ployectos" ''14-Hov-1986 1 3 : 30 : 41 " "PROYECTOS" " 26-Aug-1 987 9:48: 12" )
(RED)
( ( CLASSES GENER ICUN I TS ) )
"Conexiores o ai:cos entre los nodos de la red"; ( (
ACTUALIZACION
( NO )
NIL
( ( ONE .OF SI NO ) )
NIL
( ( COMMENT
( "ValoI booleano ( SI , NO ) que •:etermina si el p e s o de la conexion ha s i d o a c t ua l i za d o en l a
fase coirespondiente del algoritmo de aprendizaje ( sumandole o i:estandole DELTA ) " ) )
( CARDINALITY . MAX ( 1 ) ) ) )
(PESO
(0 )
NIL
( REAL )
NIL
( ( COMMENT ( "Valoi numerico asignado a la conexion entie dos nodos " ) )
( AVUNITS (#Unit ( CORRECCION BOLTZMANN ) ) ) ) )
(PUNTOl NIL
NIL
(NODOS)
NIL
( ( COMMENT ( "Uno de los dos nodos asociados a la conexion" ) ) ( CARDINALITY . MAX (1 ) ) ) )
CPUNT02 NIL
HIL
(NODOS )
NIL
( (COMMENT ( "Uno de los dos nodo 2s iados a la cone ion" ) ) !CARDINALITY.MAX (1)))))

rp:os (D TO VALOF F)

(PRINTOUT T "HO1BPE DE LA HUEVA UNIOH: ")


( SETQ DATO (CREATE.UNIT ( CLI : READ ) NIL NIL ' ( UNIONES ) ) )
( CLI : TERPRI )
(PRINTOUT T "PESO ( D par· a el valor por defect o ) : " )
( SETQ VALOR (CLI:READ) )
(PUT.VALUE DATO
(T VALOR) )
·owNJ
( CLI : TERPI )
( PRINTOUT T "PRIMER NODO CONECTADO : ")
( SETQ N (CLI:READ) )
(PUT.VALUE DATO 'PUNTO! N)
(PUT.VALUE N
' CONEXIONES
(CAR ( AP P EN D ( GE T . VALUE N ' CONEXI ONES ) ( LIST DATO ) ) } )
( CLI : TERPRI J
( PRINTOUT T "SEGUNDO NOD CONECTADO : " )
( SETQ N ( CLI : READ ) )
( PUT . VALUE DATO 'PUNT02 N )
( P U T . VALUE N
'CONEXIONES
(CAR ( AP P EN D (GET.VALUE N 'CONEXIONES) ( t.IST DATO ) ) ) ) ) )
METHOD
(t1ETHOD)
NIL
( ( COMMENT "Cont iene la funcion que cr-ea uniones entre nodos " ) ) )
( SUPRIMIR . UNIONES ( LAMBDA ( SELF )
(CLI:TERPRI)
( P R I NTOUT T " NOMBRE DE LA U I H ON : ;, )
( UNITDELETE ( CLI : READ ) ) )
METHOD
( METHOD)
NIL
( ( COMMENT " Cont i en e l a fun c i on q•J e s up r i m e un i one s " ) ) ) ) )

( VERTICAL . TRAFFIC . LIGHT03293


( "PROYECTOS" " 25-Nov-1 986 1 7 : 33 : 28" "PROYECTOS" "26-Aug-1 987 9:48:45")
NIL
( ( VERTICAL . TRA FIC . LIGHT AC: JEIMAGES ) IMAGES )
NIL
()
( ( BORDER 4)
( FONT FONTS : HL6)
( HEIGHT 39 )
( IMAGE . WAS . PAIHTED HIL)
( LAST . V.lLUE . D ISPr . YED ( I NAC7IVO ) )
'
(OBJECT.DISPLAYED #Slot ( ESTADO NODOl BOLTZMANN OWN ) )
( REGION ( 19 309 75 39)
NIL
NIL
NIL
( (ICON.REGIOR ( 19 309 131 48 ) ) ( EXPAND . REGIOR ( 19 309 75 39) ) ) )
( RELAY . BEGIONS . ALIST ( ( ( ACTIVO O O 65 7) (INACTIVO O 7 65 7 ) ) ) )
( SAVED. VALUES INACTIVO )
( SUFER . IMAGE #Unit (IMAGE.PANEL03254 BOLTZMANN) )
(TITLE "NODOl's ESTADO" )
(T!1_ 0NT FONTS : HL l OB J

(VP E.WAS.SAVED T)
(WIDTH 75)
( WINDOW "A Flavo Instance"
NIL
NIL
HH.
1 • lC0 .iINDOW NIL) ( EXPAND . WINDOW N I L J I CURRENT . W I
NDOW ( EXPAND ) ) ) ) ) )
(VEBTICAL.TBAFFIC.LIGHT03296
( "PROYECTOS" "25-Nov-1986 17:34:43" "PROYECTOS" "26-Aug-1987 9:48:46")
NIL
( ( VERTICAL . TRAFFIC . LIGHT ACTIVEIMAGES ) IMAGES )
NIL
()
( ( BORDER 4)
( FONT FONTS : HL6)
( HEIGHT 39)
(IMAGE.WAS.PAINTED NIL)
( LAST . VALUE . DISPLAYED ( INACTIVO ) )
( OBJECT . DISPLWED #Slot ( ESTADO NOD02 BOLTZMANN OWN ) )
( REGION (21 264 74 39)
NIL
NIL
NIL
( ( !CON.REGION (21 264 131 48 ) ) ( EXPAND . REGION {21 264 74 39) ) ) )
( REU..Y . REGIONS . ALIST ( { (ACTIVO O O 64 7) (INACTIVO O 7 64 7) ) ) )
( SAVED VALUES INACTIVO )
.

(SUPER . IMAGE ttuni t ( IMAGE . PANEL03254 BOLTZMANN ) )


(T:rr: "NOD02's ESTADO" )
(TITLEFONT FONTS : HLlOB )
( TO P U N I T { NI L ) )
·

(VALUE.WAS.SAVED T)
(WIDTH 74)
(WINDOW "A Flavo Instance"
NIL
NIL
NIL
( (ICON.WINDOW NIL) { EXPAND . WINDOW NIL ) ( CURRENT . W INDOW ( EXPAND ) ) ) ) ) )

( VERTICAL . TRAFFIC.LIGHT03299
( "PROYECTOS" " 25-Nov-1 986 1 7 : 35:42" "PROYECTOS" " 26-Aug-1 987 9 : 48 : 46 " }
NIL
( ( VERTICAL . TRAFFIC . LIGHT ACTIVEIMAGES ) IMAGES)
NIL
()
( ( BORDFR 4)
( FONT FONTS : HL6)
(HEIGHT 40)
( IMAGE.WAS. PAINTED NIL)
( LAST . VALUE . DISPLAYED ( INACTIVO} }
( OBJECT . DISPLAYED # Slo t ( ESTADO NOD03 BOLTZMANN OWN ) )
( REGION ( 23 216 73 40)
NIL
NIL
!H L
( ( ICON.REGION ( 23 216 131 48) ) ( EXPAND . REGION (23 216 73 40) ) ) )
( UtLAY . UTG IONS . ALIS' { ( t.CTIV0 0 ( 63 ? )
' ! "T!VO O 7 6 7) ) )
SAVED.VALUES IHACT!VJ)
{SUFEB.IMA E #Unit (It1AG .PANE 02254 BOLTZr1AN?: ) )
( T!TLE "NOD0.·' s ESTADO" )
(TITLEFONT FONTS:HLlOB)
( TOPUNIT (NIL) )
( VALUE . WA S . SAVED T )
(WIDTH 73)
(WINDOW "A Flavo Instance"
!E L
NIL
( ( ICON . WINDOW NIL) ( EXPAND . WINDOW NIL) (CURRENT.WINDOW ( EXPAND ) ) ) ) ) )

(VERTICAL.TRAFFIC.LIGHT03303
( "PROYECTOS" " 25-Nov-1 986 17:36:38" "PROYECTOS" "26-Aug-1987 9:48:47" )
NIL
( ( VERTICAL . TRAFFIC. LIGHT ACTIVEIMAGES) IMAGES )
NIL
()
( ( BORDER 4)
(FONT FONTS:HL6)
( HEIGHT 40)
( IMAGE . WAS . PAINTED NIL)
( LAST . VALUE . DISPLAYED ( INACTIVO) )
( OBJECT . DISPLAYED lSlot ( ESTADO NOD04 BOLTZMANN OWN ) )
( REGION (22 1 69 73 40}
NIL
NIL
HIL
( ( ICON . REGION (22 1 69 131 48) ) ( EXPAND . REGION (22 169 73 40) ) ) )
( RELAY . REGIONS . ALIST ( ( ( ACTIVO O O 63 7 ) (INACTIVO O 7 63 7) ) i )
( SAVED . VALUES INACTIVO )
(SUPER.IMAGE lUnit ( IMAGE . PANEI.03254 BOLTZMANN ) )
(TITLE "NOD04,s ESTADO")
( TITLEFONT FONTS : HLlOB )
( TOPUHIT (NIL) )
(VALUE.WAS.SAVED T)
(WIDTH 73 )
(WINDOW "A Flavor Instance"
NIL
HIL
NIL
( ( ICON . W I NDOW N I L ) ( EXPAND . W INDOW N I L ) ( CURRENT . W I NDOW ( EXPAN D ) ) ) ) ) )

(VERTICAL.TRAFFIC .LIGHT03306
( "PROYECTOS" "25-Nov-1986 1 7 :37 : 54" "PROYECTOS" ' 26-Aug-1987 9 :4 8 :4 7 " )
NIL
( ( VERTICAL . TRAFFIC. LIGHT ACTIVEIMAGES ) IMAGES )
NIL
()
( ( BORDER 4)
( FONT FONTS : HL6)
( HEIGHT 40)
( IMAGE . WAS. PAINTED NIL)
( LAST . VALUE . D ISPLAYED ( ACTIVO ) )
(OBJECT.DISPLAYED lSlot ( ESTADO NODOS BOLTZMANN OWN ) )
(REGION (24 120 71 40)
NIL
NIL
NIL
( (ICON RE6!0N (24 1 0 !21 48) ) ! XP ND RE510 ! (24 !20 71 0) ) )
( RELAY . REGIONS . ALIST ( ( ( ACT I V O O O 61 7 ) ( INACTIVO O 7 61 7) ) ) )
( SAVED . VALUES ACTIVO)
( SUPER . IMAGE lUnit (IMAGE.PANEL03254 BOLTZMANN) l
(TITLE "NODOS,s ESTADO" )
(TITLEFONT FONTS:HLIOB)
( TOPUNIT (NIL) )
(VALUE.WAS.SAVED T)
(WIDTH 71 )
(WINDOW "A Flavo Instance"
NIL
NIL
NIL
( (ICON.WINDOW NIL) ( EXPAND . W I NDOW N I L ) ( CURREN T . W I NDOW ( EXPAND ) ) ) ) ) )

( VERTICAL . TRAFFIC . LIGHT03309


( "PROYECTOS" " 25-Nov-1 986 1 7 : 38 : 38" "PROYECTOS" "26-Aug-1 987 9:48:48" )
NIL
( ( VER T I 1, ·. L . TRAFF I C . L IGHT ACTIVEI MAGES ) IMAGES )
NIL 1·

( ( BORDER 4)
( FONT FONTS : HL6)
( HEIGHT 39 )
(IMAGE.WAS.PAINTED NIL)
( LAST . VALUE . D ISPLAYED ( ACTIVO ) )
(OBJECT. DISPI AYED lSlot ( ESTADO NOD06 BOLTZMANN OWN ) )
(REGION (24 }3 69 39)
NIL
NIL
NIL
( (ICON.REGION (24 73 131 48 ) ) ( EXPAND . REGION (24 73 69 39) ) ) )
( RELAY . REGIONS . ALIST ( ( ( ACTIVO O O 59 7 ) (INACTIVO O 7 59 7 ) ) ) )
( SAVED . VALUES ACTIVO )
(SUPER . IMAGE t/Unit (IMAGE.PANEL03254 BOLTZMANN) )
( TITLE " NOD06' s ESTADO" )
( TITLEFONT FONTS : HL lOB )
( TOP UNIT ( N I L ) )
(VALUE.WAS.SAVED T)
(WIDTH 69)
(WINDOW "A Flavo Instance"
NIL
NIL
NIL
1,
( (ICON.WINDOW NIL) ( EXPAND . WINDOW N I L ) ( CURRENT . WINDOW ( EXPAND ) ) ) ) ) )

(VERTICAL . TRAFFIC . LIGHT03312


( "PROYECTOS" " 25-Nov-1 986 1 7 : 39 : 23" "PROYECTOS" "26-Aug-1 987 9:48:48" )
NIL
( ( VERTICAL . TRAFFIC . LIGHT ACTIVEIMAGES J IMAGES )
NIL
()
{ ( BORDER 4 i

(CE:( ;7 -,
(IMAGE. AS.EAIRTED NIL)
(LAST.VALUE.DISPLAYED (INACTIVO))
(OBJECT . DISPLAYED #Slot ( ESTADO NOD07 BOLTZMANN OWN ) )
( REGION (26 18 65 40 )
NIL
NIL
HIL
( ( ICC:; . : :_ :::. , 2ó 1 3 131 48) ) ( EXP.lr1D . iEG : r; \26 lS 65 ..O) ) ) )
( SAVED . VALUES INACTIVO )
( SUPER . IMAGE #Unit (IMAGE.PANEL03254 BOLTZMANN) )
(TITLE "NOD07/s ESTADO" )
(TITLEFONT FONTS:HLlOB)
( TOPUNIT (NIL) )
( VALUE . WAS . SAVED T )
(IHDTH 65)
(WINDOW "A Flavo Instance"
NIL
NIL
NIL
( ( ICON. WINDOW NIL ) ( EXPAND . W I NDOW N I L ) ( CURRENT . WINDOW C EXPAND ) ) ) ) ) )

KBEnd

También podría gustarte