Está en la página 1de 9

NEUROSCHEME: UN LENGUAJE PARA EL

MODELAMIENTO DE REDES NEURONALES


ARTIFICIALES

NEUROSCHEME: A MODELING LANGUAGE FOR


ARTIFICIAL NEURAL NETWORKS

JUAN DAVID VELÁSQUEZ HENAO


Grupo de Inteligencia Artificial, Facultad de Minas, Universidad Nacional de Colombia
jdvelasq@unalmed.edu.co

Recibido para revisión 5 de Agosto de 2004, aceptado 28 de Marzo de 2005, versión final 10 de Junio de 2005

RESUMEN: La construcción de modelos basados en Redes Neuronales Artificiales, no


solamente comprende la parte de creación de la red neuronal como tal y su entrenamiento,
si no también, una cantidad de labores que se realizan antes y después de esta fase. En el
mercado existen muchas herramientas para el modelamiento de Redes Neuronales
Artificiales, sin embargo, ellas no brindan la versatilidad necesaria para cumplir con estas
tareas adicionales. Para satisfacer esta necesidad, se implementó el Lenguaje Algorítmico
NeuroScheme, el cual incorpora los modelos de Redes Neuronales Artificiales como un
tipo de dato nativo dentro del lenguaje, y que es caracterizado por su capacidad expresiva,
elegancia y simplicidad.

PALABRAS CLAVE: redes neuronales artificiales, lenguajes de programación, lenguajes


declarativos.

ABSTRACT: Building of neural network-based models, is conformed not only by the


creation of the artificial neural network and its training, but other number of activities
realized before and after of this phase too. In the market exists many computational tools
for artificial time series modelling, however, they are not enough versatile for doing these
additional task. For satisfying this necessity, the Neuroscheme algorithmic language is
developed, which incorporate the artificial neural networks models as a native type of data
inside the language; it is characterized by its expression capacity, elegance and simplicity.

KEYWORDS: artificial neural networks, programming languages, declarative languages.

información de entrada, la selección de los


1 INTRODUCCIÓN
patrones para entrenamiento, preparación de
La construcción de sistemas de solución de la información para entrenar la RNA, la
problemas basados en Redes Neuronales identificación del modelo, su entrenamiento,
Artificiales (RNA), comprende un grupo de la validación de los resultados, y su
tareas que van más allá de la especificación aplicación propiamente dicha en la solución
del modelo y su posterior entrenamiento, las del problema particular en cuestión.
cuales comprenden, el análisis de la

Dyna, Año 72, Nro. 147, pp. 75 - 82. Medellín, Noviembre de 2005. ISSN 0012-7353
76 Velásquez

Estas tareas pueden llegar a involucrar 2 DESCRIPCIÓN DE LA HERRA-


procesos complejos de cálculo tales como MIENTA
pruebas estadísticas, procesos de
Para el desarrollo de la herramienta se ha
descomposición de los datos de entrada,
seleccionado como lenguaje base al dialecto
técnicas de preprocesamiento de la
Scheme (Sussman et al, 1975; Steele et al,
información de entrada, normalización de
1978; Dybig, 1987) que proviene de Lisp
datos o estimación de intervalos de confianza.
(McCarthy, 1960), el cual se encuentra
Desafortunadamente, no hay un derrotero a
fundamentado en el cálculo lambda (Church,
seguir en la forma que deben realizarse todos
1941; Curry and Feys, 1958); este lenguaje es
estos pasos, ya que ellos dependen en gran
caracterizado por su elegancia conceptual y
medida del problema particular que se esta
simplicidad, por lo que es ampliamente usado
resolviendo. Esta situación se agrava cuando
en la enseñanza de principios de
una sola RNA no es suficiente para resolver
programación y la investigación en lenguajes
el problema con la precisión adecuada, y es
de programación. A diferencia de otros
necesario combinarla con otras RNA, para
dialectos de Lisp, Scheme define el ámbito de
formar un sistema de varias RNA, o con otras
sus definiciones léxicamente, es estructurado
técnicas tales como modelos económetricos o
en bloques, soportando funciones y
estadísticos.
continuaciones como objetos de datos de
En la actualidad existen muchas
primera clase, lo que quiere decir, que ellos
herramientas comerciales para la
pueden ser pasados como parámetros a
construcción de modelos de RNA, de las
funciones, retornados como el valor de una
cuales, la gran mayoría esta orientada a un
función, y permanecer indefinidamente en
usuario final que no domina la programación
memoria.
de computadores. Por este motivo, dichas
Los programas escritos en Scheme están
herramientas se concentran en la parte de
basados en funciones y recursividad, más que
entrenamiento del modelo de RNA,
en comandos y ciclos, usando con poca
construyendo un ambiente gráfico alrededor
frecuencia asignación de variables.
de este objetivo, que le permite al usuario la
En general, y no solamente sobre el tópico de
creación de modelos y su posterior
la herramienta que se está bosquejando, la
entrenamiento. Para las demás tareas
programación funcional presenta varias
mencionadas, se dan, en algunas ocasiones,
ventajas sobre la programación imperativa,
unas pocas opciones al usuario.
que es bien ejemplificada por lenguajes de
Visto de una manera integral, esta forma de
programación como C o Pascal:
ejecutar el proceso no es deseable, ya que se
Primero, la programación funcional es mucho
desperdician esfuerzos en el aprendizaje de
más simple, ya que las expresiones son
las distintas herramientas y en el intercambio
construidas en forma natural inherentemente
de información que en la mayoría de los
recursiva, mientras que los programas
casos es manual.
imperativos son construidos con base en
Si se analiza desde la necesidad de integrar
declaraciones o comandos complejos que se
diferentes paradigmas, este proceso es
combinan con expresiones.
prácticamente inviable, ya que no se da
Segundo, la programación funcional es
ningún tipo de prestación para la construcción
mucho más fácil de entender, ya que cada
de este tipo de sistemas.
pieza de código ejecuta una tarea específica,
Puede concluirse entonces, que es necesaria
facilitando el seguimiento del código.
una herramienta que permita realizar todos
Tercero, es posible ejecutar pruebas para
los pasos descritos para la preparación de
validar el programa de una manera mucho
modelos de RNA, así como la integración de
más simple en un lenguaje declarativo que en
estos con otros paradigmas, de tal forma que
uno imperativo, debido a la misma
dicha integración sea natural, rápida y
regularidad del código.
sencilla, manteniendo unos estándares de
calidad, rapidez y eficiencia.
Dyna 147, 2005 77

Cuarto, las variables locales se declaran Por otro lado, la comunidad científica ha
directamente como parámetros de las utilizado ampliamente Lisp y sus dialectos en
funciones, inicializándose siempre al ser aplicaciones de Inteligencia Artificial, y es
invocada una función, y representa más el normal encontrar dentro de sus ejemplos
nombre para un valor que una localización en típicos de programación, la implementación
memoria, tal como ocurre en C o Pascal. de algoritmos de búsqueda, sistemas de
Quinto, es posible alternar el orden de razonamiento similares a Prolog, o Sistemas
evaluación de las expresiones en los de Producción. Y aunque se argumenta que
lenguajes funcionales, un aspecto que es Scheme es un lenguaje orientado a la
imposible modificar en un lenguaje enseñanza de principios de programación, y
imperativo, que para aplicaciones reales debería utilizarse
Y sexto, es posible modificar el orden de Common Lisp, Scheme contiene todas las
ejecución de las funciones, de tal forma que características deseables para realizar la
pueden construirse complejas instrucciones construcción de sistemas para solución de
con retornos no locales, lo que facilita problemas. Esto se ejemplifica en el proyecto
complejas estructuras de control, capacidad Guile de la GNU [véase por ejemplo los
que no está presente en ningún lenguaje siguientes sitios WEB www.schemers.org,
imperativo. www.swiss.ai.mit.edu/projects/scheme/ ], el
Una prueba de la simplicidad de la cual es una librería escrita en Lenguaje C que
herramienta, se puede evidenciar en la implementa Scheme que se usa embebido
especificación de la misma, la cual consta de dentro de la aplicación principal.
unas cincuenta páginas aproximadamente. Estos hechos son la base para afirmar que la
Sin embargo, y a través del uso de herramienta que se plantea para la integración
características tales como la manipulación de de paradigmas es precisamente Scheme.
la ejecución, es posible crear estructuras
3 ARQUITECTURA DE LA HERRA-
complejas de control, tales como los bloques
MIENTA IMPLEMENTADA
try...catch de C++.
Scheme es un lenguaje declarativo 3.1 NÚCLEO DE LA HERRAMIENTA
débilmente tipado, es decir, el tipo de la El núcleo de la herramienta es un interprete
variable se determina durante la fase de de Scheme basado en un montículo de
ejecución y no de compilación como ocurre memoria, similar a las primeras
en C o Pascal. Scheme permite usar funciones implementaciones de la herramienta, descrita
como argumentos en la llamada a otros por Sussman (1975) y que ha sido usada por
funciones, e inclusive permite devolver otros autores (Dybig, 1983).
funciones como resultado de la aplicación de La herramienta se divide en cuatro grandes
funciones. partes: un módulo de interfaz con el usuario,
Estas características le dan una capacidad de encargado de administrar las entradas del
expresión aún más potente que la del lenguaje usuario, los mensajes del sistema, y utilitarios
C, pero dejando a un lado temas como el como la historia de comandos; un
manejo de punteros, que hacen de C un preprocesador de código fuente, capaz de
lenguaje difícil de aprender. Es por esta razón manipular el código ingresado por el usuario
que los programas escritos en Scheme son para expandir las macros de forma higiénica,
más cortos que sus equivalentes en C o que es un mecanismo mucho más potente que
Pascal. los preprocesadores normalmente
Así mismo, y debido a su simplicidad y encontrados en lenguajes de alto nivel; un
elegancia conceptual, el lenguaje promueve la compilador que convierte el código fuente
construcción de abstracciones complejas a expandido a bytecodes o instrucciones de la
través del uso de barreras de abstracción, máquina virtual del interprete; este
facilitando la construcción de sistemas compilador esta formado por un analizador
complejos. léxico y un analizador sintáctico que
78 Velásquez

interactúan con el administrador del de la barra de menús, y en las cuales el


montículo de memoria, para generar el usuario proporciona la información necesaria
bytecode; y finalmente, una máquina virtual para ejecutar los distintos comandos, tal
que ejecuta las instrucciones de bajo nivel como aparece en la Figura 2.
representadas por los bytecodes, tal como De igual forma, puede interactuar con el
puede observarse en la Figura 1. interprete a través de interfases de usuario
La herramienta está completamente escrita en mucho más elaboradas, tales como editores
Lenguaje C (Kernigan & Richie, 1978), y de texto o simuladores gráficos; sin embargo,
hace uso intensivo de manejo de punteros, cualquier sistema anexo, tales como los
estructuras de datos, y administración de descritos, no manipulará ninguno de los
memoria dinámica. Las funciones primitivas componentes claves del interprete, debiendo
proporcionadas por el intérprete, son también interactuar con el a través del envío de
codificadas en Lenguaje C, permitiendo comandos, usando cadenas de texto con
optimizar funciones críticas tales como comandos Scheme, las cuales serán
algoritmos para el entrenamiento de RNAs. interpretadas usando un minicompilador que
posee el interprete dentro de su máquina
3.2 FUNCIONES INCORPORADAS
virtual. De esta forma se garantiza un
El interprete soporta todas las funciones adecuado intercambio de información entre
descritas en el Reporte del Lenguaje las distintas partes del sistema.
Algorítmico Scheme, así como otras Como una prestación adicional, se han
funciones definidas en Common Lisp y agregado diálogos como una alternativa para
Emacs Lisp, y otras extraídas de las invocar funciones, en los cuales el usuario
bibliotecas de funciones del Lenguaje C. llena los parámetros requeridos, y tiene la
Dichas funciones son soportadas dentro del opción de ejecutar directamente la función, o
interprete a través de su codificación directa pegarla en la línea de órdenes como parte de
en Lenguaje C, o como macros que se un comando más complejo.
expanden en secuencias de funciones
codificadas como primitivas en C. Así
mismo, se han implementado otras primitivas Interfaz de
presentes en MIT Scheme y Dr Scheme, que Comandos
no aparecen en los reportes, pero que son
consideradas como necesarias para que la Código fuente
herramienta funcione de una manera
adecuada. Preprocesador

3.3 INTERFAZ CON EL SISTEMA Código fuente expandido


El intérprete implementado puede cargar, Máquina Virtual
compilar y ejecutar programas en código Analizador
Acumulador
Compilador

fuente almacenados en el disco duro del Léxico Bytecodes


computador, posibilitando que otras Argumentos
aplicaciones puedan ejecutar programas Analizador Ambiente
dentro del interprete. Igualmente puede dejar Sintáctico
registro escrito de la interacción con el
usuario.
Montículo de
3.4 INTERFAZ CON EL USUARIO Memoria

El usuario interactúa con el sistema a través


de una ventana de comandos donde digita las Figura 1. Esquema del Intérprete
ordenes que el sistema debe ejecutar, o a Figure 1. Interpreter scheme
través de la interfaz gráfica que presenta cajas
de diálogo, que pueden ser accesadas a través
Dyna 147, 2005 79

3.5 MODELOS DE REDES NEURO- gradiente descendente, estrategias de


NALES ARTIFICIALES evolución, temple simulado, así como
versiones de algunas de ellas combinadas con
Los modelos de RNAs son manejados por el
mínimos cuadrados.
interprete como tipos primitivos de datos, de
igual forma a como se manejan enteros, 4 FUNCIONES SOPORTADAS
símbolos o cadenas de caracteres; y no como
NeuroScheme soporta las siguientes
abstracciones codificadas directamente en
funciones, las cuales aparecen referenciadas
Scheme. Esto hace de los modelos de RNA
dentro de la especificación del Lenguaje.
objetos de primer nivel que pueden ser
almacenados en variables, pasados dentro de ƒ Condicionales y lógicas: If, cond, case,
los argumentos de las funciones, e inclusive and, or, when, unless.
ser devueltos como resultado de ellas. ƒ Enlazado de variables: Let, let*, letrec.
Las funciones para la creación y ƒ Secuenciamiento: begin
manipulación de los modelos de RNAs, son ƒ Iteración: do, let, repeat, while, until,
también codificados como primitivas, dotimes, dolist, loop
directamente en Lenguaje C, lo que permite
tener código ejecutable altamente optimizado, ƒ Quasiquotation: quasiquote
debido a la criticidad que la velocidad de ƒ Asignación: set!, incr, decr, pset!, rotate!
ejecución de estas funciones tiene dentro del ƒ Equivalencia: eqv?, eq?, equal?
desempeño de la aplicación. ƒ Números: number?, real?, Rational?
La mezcla de código interpretado con código Integer?, exact?, inexact?, >, >=, <, <=,
ejecutable, tiene un efecto muy importante en =, <>, even?, odd?, negative?, positive?,
el desempeño de la herramienta, ya que todos zero?, max, min, +, -, *, /, abs, quotient,
los procesos críticos se ejecutan directamente remainder, modulo, gcd, lcm, numerator,
en binario, mientras que el cascaron que esta denominator, floor, ceiling, truncate,
encima de ellos, el cual permite codificar round, exp, log, sin, cos, tan, cot, sec, csc,
algoritmos complejos, y dar la funcionalidad asin, acos, atan, acot, asec, acsc, sqrt,
requerida, se ejecuta más lentamente al ser expt, exact->inexact, inexact->exact
interpretado, pero esto requiere un porcentaje
muy pequeño del tiempo total de la ƒ Números aleatorios: get-seed, rand-max,
aplicación. rand-uniform, rand-normal, inversa-
El modelo interno para las RNAs permite normal
construir cualquier tipo de arquitectura, y ƒ Entrada y salida numérica: number-
adicionalmente, el usuario puede crear nuevas >string, string->number
arquitecturas eliminando conexiones o ƒ Boléanos: not, bolean?
adicionando capas. En la actualidad, ya que el ƒ Pares y listas: pair?, cons, car, cdr, set-
uso primordial dado hasta ahora para el car!, set-cdr!, caar, cadr, … cddddr, first,
entorno, ha sido la construcción de modelos second, third, fourth, fifth, sixth, seventh,
de series de tiempo basados en RNAs, se han eighth, ninth, tenth, null?, list?, list,
implementado tres modelos de propagación append, reverse, list-tail, list-ref, last-pair,
hacia delante: feedforward, cascada- list-copy, push, pop, push-new, memq,
correlación y cascada hacia delante; los memv, member, assq, assv, assoc
algoritmos de entrenamiento implementados
ƒ Símbolos: symbol?, string->symbol,
incluyen: montecarlo, regla delta
symbol->string.
generalizada, regla delta con momento,
80 Velásquez

Figura 2. Interfaz de NeuroScheme


Figure 2. NeuroScheme user interface

ƒ Caracteres: char?, char=?, char >?, case?, substring-lower-case?, string-


char=>?, char<?, char<=?, Char-ci=?, replace, string-replace!
char-ci>?, char-ci>=?, char-ci<?, char- ƒ Vectores: vector?, make-vector, vector,
ci=<?, char-alphabetic?, char-numeric?, vector-length, vector-ref, vector-set!,
char-whitespace?, char-upper-case?, vector->list, list->vector, vector-fill!,
char-lower-case?, char->integer char, vector-first, vector-second, vector-third,
integer->char, char-upcase, char- vector-fourth, vector-fifth, vector-sixth,
downcase vector-seventh, vector-eighth, vector-
ƒ Cadenas de Caracteres: string?, make- ninth, vector-tenth, subvector, vector-
string, string-char, string-length, string- head, vector-tail
append, string-ref, string-set!, string=?, ƒ Control: procedure?, map, for-each,
string-ci=?, string<?, string>?, string<=?, call/cc
string>=?, string-ci<?, string-ci>?, string- ƒ Evaluación: eval
ci<=?, string-ci>=?, substring, string-
ƒ Puertos: input-port?, output-port?, open-
>list, list->string, string-copy, string-fill!,
input-filename, open-output-filename,
string-downcase, string-upcase, string-
open-append-filename, close-input-port,
downcase!, string-upcase!, substring-
close-output-port.
downcase!, substring-upcase!, reverse-
string, reverse-string!, reverse-substring, ƒ Entrada: read, read-char, eof-object?,
reverse-substring!, string-head, string- char-ready?.
tail, string-capitalize, string-capitalize!, ƒ Salida: write, display, newline, write-
substring-capitalize, substring-capitalize!, char.
string-capitalized?, substring- ƒ Interface: load, transcript-on, transcript-
capitalized,? string-upper-case?, off, ed.
substring-upper-case?, string-lower-
Dyna 147, 2005 81

ƒ Redes Neuronales Artificiales: nn-create- respecto al contenido de la caja de diálogo,


ffn, nn-create-ccn, nn-create-cfn, nn- esta no interactúa directamente con el núcleo
propagate-signal, nn-display-input- de la herramienta, si no que convierte la
weights, nn-display-neurons-by-layer, entrada del usuario en un comando de
nn-display-bias-weights, nn-display- Scheme equivalente el cual es enviado al
layer-weights, nn-display-output-neurons, interprete para que sea procesado, haciendo
nn-generate-random-weights, nn- eco en la pantalla, de tal forma que el
calculate-error, nn-train-montecarlo, nn- comando es visualizado para ser ejecutado
train-backpropagation, nn-train- posteriormente.
backpropagation-mom, nn-train- La existencia de una línea de comandos,
graddesc, nn-train-simanneal, nn-train-sa, donde el usuario de la herramienta puede
nn-train-es, nn-calculate-mc, nn-get- digitar directamente las instrucciones de
input-weight, nn-get-bias-weight, nn-get- forma interactiva, permite no solamente la
layer-weight, nn-set-input-weight!, nn- creación o el entrenamiento de la red
set-bias-weight!, nn-set-layer-weight!, neuronal, sino también el uso de comandos
nn-load-network, nn-save-network más complejos como instrucciones para
ejecutar instrucciones cíclicamente,
5 RESULTADOS OBTENIDOS
automatizando diferentes procesos. En
En la actualidad, el primer prototipo es consecuencia, es posible por ejemplo, crear
operable e incorpora el paradigma de las algoritmos complejos de entrenamiento
redes neuronales artificiales. Como ya se donde, de acuerdo con los resultados
indicó, la red neuronal se modela como un obtenidos, se pueden alternar entre distintas
tipo de dato propio del lenguaje, lo que técnicas de aprendizaje.
implica que se encuentra codificada en Adicionalmente, al contar con dicha línea de
Lenguaje C, haciendo que la velocidad de los comandos, es posible construir modelos
algoritmos de entrenamiento sea tan alta complejos de redes neuronales, donde las
como en las aplicaciones de usuario final entradas de una red neuronal pueden estar
disponibles hoy en día. formadas por las salidas de otros modelos,
Como un ejemplo de la funcionalidad del tales como otras redes neuronales, modelos
entorno, se presenta en la Figura 3, un de programación lineal, o modelos
programa en NeuroScheme cuyo objetivo es econométricos. Dentro de las primitivas
entrenar una RNA para que aprenda la implementadas en nuestra herramienta, se
función gaussiana, a partir de valores (x, y) encuentra la función load, que recibe como
simétricos alrededor de cero. En el se ilustra parámetro el nombre de un archivo en disco,
un algoritmo complejo en el cual se ejecuta el cual contiene en formato de texto un grupo
un proceso cíclico de generación de un nuevo de comandos que se ejecutarán con dicha
punto de arranque y posterior entrenamiento función.
de la RNA usando la Regla Delta
6 CONCLUSIONES Y TRABAJO
Generalizada, así como la selección del mejor
FUTURO
modelo encontrado.
La utilización de diálogos como mecanismo Las distintas fases que deben realizarse para
primario de comunicación con el usuario de la correcta construcción de modelos basados
la aplicación, permite que este con unas pocas en RNAs, hace que se requiera seguir un
horas de entrenamiento, y aún sin tener un proceso laborioso para llegar a un resultado
conocimiento previo del lenguaje Scheme, adecuado. Es por ello, que en el desarrollo de
pueda estar entrenando modelos de redes estos modelos, es necesario contar con
neuronales artificiales. Los diálogos, en ambientes que vayan mucho más allá de las
nuestra aplicación, son una forma alterna de prestaciones normalmente encontradas para
proporcionar comandos al interprete, ya que su entrenamiento.
cuando el usuario indica su aceptación con
82 Velásquez

(define normal-pattern ; almacena en la variable normal-pattern


'((( 0.00000 ) ( 1.0000 )) ; 11 parejas (x, y)
(( 0.54546 ) ( 0.7427 ))
(( 1.09090 ) ( 0.3042 ))
(( 1.63640 ) ( 0.0687 ))
(( 2.18180 ) ( 0.0086 ))
(( 2.72730 ) ( 0.0006 ))
(( -0.54546 ) ( 0.7427 ))
(( -1.09090 ) ( 0.3042 ))
(( -1.63640 ) ( 0.0687 ))
(( -2.18180 ) ( 0.0086 ))
(( -2.72730 ) ( 0.0006 ))))

(seed 101) ; cambia la semilla del generador de números aleatorios

; crea la variable nn y almacena en ella una RNA feedforward con 1


; neurona de entrada, 2 ocultas y una de salida. La capa oculta tiene
; como función de activación la Sigmoidea y la de salida, transferencia
; lineal
(define nn (nn-create-ffn 1 2 1 'sg 'tl))

; salva la RNA en un archivo en disco


(nn-save-network nn "normal-best-bp.nn")

; define la variable best-error y almacena en ella el error cuadrático


; medio de la aproximación producida por la RNA
(define best-error (nn-calculate-error nn normal-pattern 'cm))

(repeat 20 ; repite el siguiente ciclo 20 veces


; genera pesos aleatorios para la RNA entre –0.5 y 0.5
(nn-generate-random-weights nn 0.5)

; entrena la RNA usando Regla Delta Generalizada


(nn-train-backpropagation nn normal-pattern
'cm 0.05 10000 0.0000001 5 )

; verifica si el error obtenido es menor que el mejor


; encontrado hasta ahora
(if (> best-error (nn-calculate-error nn normal-pattern 'cm ) )
; si es menor, salva la nueva RNA y actualiza el valor
;de best-error
(begin
(nn-save-network nn "normal-best-bp.nn")
(set! best-error
(nn-calculate-error nn normal-pattern 'cm ) ))))

Figura 3. Programa en NeuroScheme que crea una red feedforward y la entrena para que aprenda la campana
de Gauss
Figure 3. Neuroscheme program for creating a feerforward network, and training it for learning the Gauss
bell.

Por esto, es necesario entonces, contar con automatizar procesos, y construir modelos
una herramienta mucho más versátil que complejos de RNAs. Estas facilidades no
permita realizar este proceso. Se escogió están presentes en las herramientas
como base del desarrollo, el dialecto Scheme, comerciales para el desarrollo de modelos de
debido a sus características de elegancia, RNAs.
simplicidad conceptual, facilidad de uso y La incorporación de cajas de diálogo a la
capacidad de abstracción, incorporando los interfaz, las cuales envían comandos
modelos de RNAs como tipos de datos directamente al intérprete, ha permitido que
propios del lenguaje. el usuario final pueda utilizar la herramienta
El interprete implementado es altamente con pocas horas de entrenamiento, aún sin
versátil, permitiendo construir algoritmos necesidad de aprender el lenguaje de
para la manipulación y entrenamiento de programación.
RNAs, de tal forma, que es posible
Dyna 147, 2005 83

Los resultados obtenidos hasta ahora, [6] CURRY H.B. and FEYS T. 1958.
permiten concluir que debe continuarse con el Combinatory Logic. North-Holland
desarrollo de la herramienta, e incorporarse Publishing Company. Amsterdam.
otros paradigmas como Redes Neurodifusas, [7] DYBVIG R. K.1987a. The Scheme
y Sistemas Borrosos, para habilitar la Programming Language. Prentice Hall
herramienta para construir sistemas híbridos
[8] DYBVIG R. K.1987b. Three
para solución de problemas.
Implementation Models for Scheme.
7 REFERENCIAS PhD Disertation.
[1] ABELSON H and SUSSMAN G. 1984. [9] KERNIGHAN B.W. and RITCHIE
Structure and interpretatión of D.M. 1978. The C Programming
Computer Programs. MIT Press. Language. Prentice-Hall, 1978.
[2] AHO A.V. and ULLMAN J.D. 1979. [10] MCCARTHY J. 1960. Recursive
Principles of Compiler Design. Functions of Symbolic Expressions and
Addison-Wesley Publishing Company. Their Computation by Machine. CACM
3 (april 1960). Pp 184-195.
[3] BACKER H.G. and HEWITT C. 1977.
The Incremental Garbage Collection of [11] PETZOLD C. 1996. Programming
Processes. Procedings of the Windows 95. Microsoft Press. McGraw
Symposium on Artificial Intelligence. Hill
Published as SIGPLAN Notices 12, 8 [12] STEELE G.L and SUSSMAN G.J.
(August 1977), pp 55-59 1978. The Revised Report on Scheme.
[4] BARTLEY D.H. and JENSEN J.C. Massachusetts Institute of Technology
1986. The implementation of PC Artificial Intelligencel. Memo 452.
Scheme. Proceedings of the 1986 ACM [13] SUSSMAN GJ and STEELE GL. 1975.
Conference on Lisp and Functional Scheme: an Interpreter for Extended
Programming. Pp 86-93. Lambda Calculus. Massachusetts
[5] CHURCH A. 1941. The Calculi of Institute of Technology Artificial
Lambda Convension. Annals of Intelligence Memo 349.
Mathematics Studies 6, Princenton [14] STEELE G.L. Common Lisp The
University Press. Language. Second Edition.