SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
EL MANUSCRITO VOYNICH
INTRODUCCION
En la Librería Beinecke, perteneciente a la Universidad de Yale, podemos encontrar uno de los más
misteriosos e interesantes desafíos que la Historia nos ha dejado. Se trata de un manuscrito, donado en
1969 por H.P Kraus, que en 1912 había sido adquirido por Wilfrid M. Voynich, librero anticuario
norteamericano, en un seminario jesuita en Frascati, en Villa Mondragone, cerca de Roma. Sus orígenes
y autor son inciertos, aunque junto al texto se halló una carta fechada el 19 de agosto de 1666, de
Johannes Marcus Marci, rector de la Universidad de Praga, dirigida a Athanasius Kircher, un erudito
jesuita. Según dicha carta el manuscrito era obra del científico Roger Bacon, uno de los personajes del
S.XIII con un pensamiento científico más avanzado.
El manuscrito es un libro de 15 por 23 centímetros en octavo, consta de 204 páginas, aunque se
perdieron 28. Cada una de ellas tiene coloridos dibujos y anotaciones manuscritas en una clave secreta.
A pesar de los esfuerzos que han llevado a cabo eruditos en la materia a lo largo de los siglos (incluso en
nuestros días), no se sabe en qué idioma está escrito o cifrado, ni cuál fue la intención original del autor,
constituye en sí mismo todo un enigma y hasta la fecha nadie ha logrado descifrarlo.
EL MISTERIO
La primera noticia fiable que se tiene de él data de principios del siglo XVII. Sabemos que el emperador
Rodolfo II de Bohemia (1552-1612) lo compró por una cifra desorbitada para la época (600 ducados), y
que luego pasó por varias manos hasta llegar en 1666 a las de Atanasio Kircher, un sacerdote jesuíta.
Desde ese momento hasta 1912, nadie sabe a ciencia cierta qué le ocurrió al libro.
Para cualquier criptógrafo y estudioso de los lenguajes este libro constituye un estimulante reto, ya que ni
siquiera sabemos a ciencia cierta cuál es el tema que trata Sus numerosas ilustraciones parecen indicar
que es un tratado de alquimia cuyo auténtico contenido se quiso mantener en secreto, pero esto no son
más que especulaciones. Posee diferentes secciones, que parecen tratar los siguientes temas: Botánica
(la mayoría de los dibujos representa plantas no identificadas), Astronomía (aparecen casi todos los
símbolos zodiacales), Biología (con algunos dibujos sobre anatomía), Cosmología y Farmacia. Al final se
incluye lo que parece un recetario.
Además, el libro posee numeración de páginas, algunas anotaciones en alemán, otras en algún alfabeto
desconocido, y una anotación en la última página en caracteres tradicionales que parece representar una
clave para descifrar el texto. No obstante, ni siquiera sabemos a ciencia cierta si el texto está cifrado o no.
Como puede verse, tenemos todos los ingredientes para poner a prueba nuestras habilidades.
A partir de las vestimentas de los personajes dibujados, podría decirse que el manuscrito fue escrito en
Europa durante el siglo XIII, aunque una de las ilustraciones se parece a un girasol, lo cual sugiere que en
parte fue escrito después del descubrimiento de América. De todas formas, tampoco está descartado que
el libro sea un simple engaño hecho para estafar a alguno de sus poseedores, ya que sabemos que en
ocasiones se han pagado incribles sumas de dinero por él.
ESTUDIOS REALIZADOS
Hasta la fecha se han llevado a cabo multitud de estudios sobre el Manuscrito Voynich, e incluso en más
de una ocasión ha habido personas que aseguran haberlo traducido, pero todavía ninguna de las
traducciones ha sido reconocida por la comunidad.
El problema principal es que no sabemos apenas nada sobre el posible significado real del libro (aunque a
estas alturas casi nadie niega que cuando se descifre, sólo contenga un compendio de los conocimientos
de la época). De hecho, ¡ni siquiera sabemos si está cifrado!, por lo que decidir cómo dar por válida una
posible solución constituye un problema en sí mismo. Parece evidente que la traducción debería cumplir
una serie de condiciones mínimas: ser criptológicamente coherente, no permitir soluciones alternativas,
cubrir todo el manuscrito, ser factible con los medios de la época, dar un significado coherente al libro,
etc.
A pesar de este complicado entramado de dificultades, hay una serie de hechos cuando menos
estimulantes:
- Existen dos grandes bloques con tipos de escritura claramente diferenciados en el libro. Esto se ha
logrado analizando estadísticamente el contenido. La causa de esto puede ser múltiple: diferentes
autores, mismo autor pero diferente estilo, o simplemente temas diferentes.
- El texto del manuscrito cumple con las propiedades estadísticas principales de los lenguajes
naturales, aunque presenta alguna peculiaridad, que puede deberse a la presencia de abreviaturas.
- Apenas hay correcciones en el texto.
PERSPECTIVAS
Todavía quedan muchas cuestiones abiertas, pero sin duda el Manuscrito Voynich ha de constituir un
perfecto banco de pruebas para nuestras teorías sobre el lenguaje y los códigos criptográficos. Cuando
muchos algoritmos de cifrado son abandonados por presentar fisuras en su estructura matemática,
seguimos teniendo un texto codificado a mano que se resiste a nuestras poderosas técnicas de
criptoanálisis. ¿Quién sabe? tal vez sólo sea una cuestión de (des)interés económico...
PRESENTACIÓN DEL TRABAJO
Como se ha podido comprobar en las líneas anteriores, todavía hoy en día se esta trabajando en intentar
descifrar este documento y mi trabajo va a basarse en eso.
Voy a diseñar una red neuronal capaz de reconocer varios caracteres de dicho manuscrito, teniendo en
cuenta que están escritos a mano y pueden albergar errores; voy a traducirlos a un alfabeto conocido
mediante el cual se pueda descifrar... o como mínimo leer tan enigmático manuscrito.
La red ideal para el reconocimiento de todos estos caracteres sería una red del tipo Back-Propagation
pero la ‘red’ elegida por mi para diseñar este sistema será simplemente una unica neurona, exactamente
perceptrón, el cual aprenderá a distinguir entre 2 caracteres.
Necesitare, como es lógico, un alfabeto de transcripción, para que, una vez identificado el carácter, este
pueda ser asignado a una letra concreta del alfabeto conocido.
Para ello he optado por el alfabeto de transcripción diseñado por la FSG (First Voynich Manuscript Study
Group), los cuales obtuvieron dicho alfabeto siguiendo las siguientes pautas:
La obtención de dicho alfabeto implicaba dos elecciones: Tenían que saber cuales eran exactamente los
caracteres que formaban el texto individualmente y después establecer una letra o número equivalentes
en “nuestro” alfabeto para cada uno de esos caracteres.
La parte más crítica a la hora de determinar el alfabeto de transcripción era la primera, para ello debían
determinar el nivel de detalle y el tipo de detalle con el cual el manuscrito pudiese ser transcrito, ya que
eligiendo solamente mal un caracter podía variar el texto por completo.
Por ejemplo, si erróneamente se asume que “m” y “n” son la misma letra (porque se supone que el
numero de ‘montañitas’ no es importante) o “h” y “n” son la misma letra porque solo difieren en la longitud
de un trazo, o que “n” y “u” son la misma letra pero invertidas, el análisis sería realmente difícil. Por otro
lado, si se cree que “m” y “m” son diferentes letras, o que “A” es totalmente diferente de “a”, entonces el
análisis también sería un desastre.
Para la segunda elección, se tomaron interesantes marcas a mano encima y al lado de algunos
caracteres, que se podían ver en el manuscrito, como también de una especie de alfabeto de
equivalencias incompleto, encontrado en las últimas páginas del libro y con todo tipo de anotaciones. A
pesar de todo ello, la elección de las equivalencias no fue tarea fácil, ya que muchas de las anotaciones
estaban medio borradas o renombradas varias veces.
Tras “decodificar” todo esto como buenamente se pudo, se comparo con otra decodificación realizada por
Mark Rhoads, un importante criptógrafo del ejercito, pudiéndose observar gran similitud entre ambos
alfabetos de transcripción, razón por la cual yo he optado por tomar este alfabeto como base para la
realización de mi trabajo.
El alfabeto elegido es el siguiente:
Voy a pasar a comentar como será la red, en que consistirá, que hará y como funcionará exactamente el
sistema de interpretación de caracteres.
Como ya he dicho, se tratará de un único perceptrón (“una neurona”) que se encargara de aprender los
patrones de cada carácter y asignarle una letra en concreto.
Un perceptrón es capaz de diferenciar dos tipos de patrones diferentes... o no saber diferenciarlos. El mio
aprenderá a diferenciar entre la letra (P) y la (R).
Los patrones equivalentes a las letras P, R que podemos ver a continuación se encuentran a tamaño real
de 25x35 píxeles.
(P) (R)
El proceso a seguir es el siguiente:
Dividimos cada una de las imágenes de cada carácter tomadas por algún dispositivo externo, como
podría ser un escáner, en ‘cuadraditos’, o sea, en forma de matriz, como se vera en la próxima página.
Cada letra se divide en una matriza de 25x35 puntos. Se ha escogido esta medida porque con ella se
asegura una medianamente buena representación del carácter y de todos sus trazos.
Una vez tenemos dichos patrones se le enseñan a la red y se la entrena para que aprenda a
diferenciarlos. Tras el duro entrenamiento (2 epochs en nuestro caso), se la ‘suelta’ al mundo real donde
tiene que valerse de sus propios medios (lo aprendido) y convivir con miles de errores....
Debemos darle una velocidad de aprendizaje, tras comprobar varias velocidades y analizar los diferentes
resultados, he optado por una velocidad de 0.1.
Aquí podemos observar los diferentes patrones y sus ‘matrices’ bipolares (-1,1) correspondientes.
-1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1
-1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1
-1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1
-1 -1 -1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1
-1 -1 -1 -1 1 1 1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1
-1 -1 -1 1 1 1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1
-1 -1 1 1 1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 -1 -1
-1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1
-1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1
-1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1
-1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1
-1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1
-1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1
-1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
CONCLUSIONES
A pesar de la aparente simplicidad de esta red, como ya he mencionado, los resultados han sido
sorprendentes, creía que debido al gigantesco tamaño de los patrones (tamaño real), la red no sería
capaz de funcionar correctamente y se equivocaría mucho. Tras pasarle hasta 12 patrones modificados
(simulando deterioro) la red los ha acertado todos. (Debido al gran tamaño de dichos patrones no se han
incluido en estas hojas).
Cuando he terminado de construir la red, he decidido empezar con patrones relativamente fáciles, por el
miedo a que se equivocase... pero poco a poco he ido viendo que no se equivocaba de ninguna manera,
llegando a un punto que le entraba unos patrones tan deformados que ni siquiera yo reconocía y, aún así
no ha fallado. Realmente impresionante.
Solo encuentro un posible error a la red y ese es que tal vez sea “demasiado lista”, pudiendo llegar a
reconocer algunas veces cosas que no son.
Una de las ventajas de esta red es que todas las matrices, tanto las de entrenamiento como las de prueba
se pueden modificar fácilmente a voluntad con lo cual el programa puede ser altamente reutilizable.
MEJORAS
Desde que se inició el diseño de esta red neuronal, se pretendía que fuese capaz de diferenciar entre 4
patrones de caracteres diferentes y no solo dos. La siguiente mejora del programa (ANEXO 2) consigue
ese objetivo mediante el uso de tres perceptrones en varias capas.
Esta nueva red presentada a continuación es capaz de diferenciar entre 4 patrones distintos. Se basa
principalmente en la anterior red pero es más “lista”. Simplemente consiste en tres redes (perceptrones)
paralelas, la primera distingue si se trata de un patrón PL (P+L) o RY (R+Y). Según lo que reconozca,
pasa a otras redes secundarias que distinguen la P de la L en el caso PL o la R de la Y en el caso RY.
ANEXO
ENTRENADOR DE LA RED
PROGRAM Trainer;
CONST alpha=0.1;
tet1=0.3;
tet2=-0.3;
TYPE
tM=ARRAY [1..2,1..876] OF REAL;
tW=ARRAY [1..875] OF REAL;
VAR
M:tM;
W:tW;
i:integer;
epoch:LONGINT;
t, b:real;
OBJ1, OBJ2:boolean;
F1, F2, F3: Text;
Ch: STRING [2];
PROCEDURE Resetejar;
BEGIN
OBJ1:=false;
OBJ2:=false;
b:=1;
t:=0;
epoch:=0;
FOR i:=1 TO 875 DO
W[i]:=0;
END;
PROCEDURE Patrons;
BEGIN
Assign(F1,'a:txtp.txt');
Reset(F1);
FOR i:=1 TO 875 DO
BEGIN
Read(F1,Ch);
IF Ch='-1' THEN
M[1,i]:=-1
ELSE M[1,i]:=1;
END;
Close (F1);
M[1,876]:=-1;
Assign(F2,'a:txtr.txt');
Reset(F2);
FOR i:=1 TO 875 DO
BEGIN
Read(F2,Ch);
IF Ch='-1' THEN
M[2,i]:=-1
ELSE M[2,i]:=1;
END;
Close (F2);
M[2,876]:=1;
END;
BEGIN
Resetejar;
Writeln;
Writeln ('********************************************');
Writeln ('****** PERCEPTRON v.0.2 ******');
Writeln ('****** by ******');
Writeln ('****** Ray San ******');
Writeln ('********************************************');
Writeln;
Writeln ('Algoritme dïaprenentatge de la Xarxa');
Writeln;
Patrons;
Writeln ('Quant vulguis prem una tecla per comen‡ar.');
Readln;
REPEAT
BEGIN
epoch:=epoch+1;
FOR i:=1 TO 875 DO
t:=W[i]*M[1,i]+t;
t:=t+b;
IF t<tet2 THEN t:=-1;
IF t>tet1 THEN t:=1;
IF t<>M[1,876] THEN
BEGIN
OBJ1:=false;
b:=b+alpha*M[1,876];
FOR i:=1 TO 875 DO
W[i]:=W[i]+alpha*M[1,876]*M[1,i];
END
ELSE OBJ1:=true;
FOR i:=1 TO 875 DO
t:=W[i]*M[2,i]+t;
t:=t+b;
IF t<tet2 THEN t:=-1;
IF t>tet1 THEN t:=1;
IF t<>M[2,876] THEN
BEGIN
OBJ2:=false;
b:=b+alpha*M[2,876];
FOR i:=1 TO 875 DO
W[i]:=W[i]+alpha*M[2,876]*M[2,i];
END
ELSE OBJ2:=true;
Writeln ('Han pasat: ',epoch,' epochs. Prem una tecla per
continuar.');
Readln;
END;
UNTIL (((OBJ1=true) AND (OBJ2=true)) OR (epoch=100));
Writeln ('La xarxa ha convergit a lïepoch:',epoch);
Writeln;
Writeln ('El valor de b final es:',b:2:2);
Writeln;
Writeln ('Prem una tecla per veure el vector de pesos obtingut.');
Readln;
BEGIN
FOR i:=1 TO 100 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=101 TO 200 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=201 TO 300 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=301 TO 400 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=401 TO 500 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=501 TO 600 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=601 TO 700 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=701 TO 800 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=801 TO 875 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
END;
Writeln;
Writeln;
Writeln ('La Xarxa ha estat entrenada amb Šxit.');
Writeln ('Les dades obtingudes es grabaran a disc.');
Writeln ('Prem una tecla.');
Readln;
Assign(F3,'a:txtvalors.txt');
Rewrite(F3);
FOR i:=1 TO 875 DO
Writeln (F3,W[i]:2:2);
Writeln (F3,b:2:2);
Close (F3);
Writeln ('Gravacio finalitzada amb exit. Prem una tecla per acabar.');
Readln;
END.
XNA
PROGRAM Neurona;
CONST
tet1=0.3;
tet2=-0.3;
TYPE
tV=ARRAY [1..875] OF real;
VAR
V, Wn:tV;
Y, NI, b, peso:real;
i:INTEGER;
Fn, F3: Text;
Ch: STRING [2];
PROCEDURE Entrapatern;
BEGIN
Writeln;
Writeln ('Per entrar un nou patro segueix les seguents
instruccions:');
Writeln ('(1) - Escriu el patro bipolar complert en format
txt');
Writeln ('(2) - Asegurat de escriure [-1] o [ 1], tot
seguit.');
Writeln ('(3) - Renombra lïarchiu a nouP.txt i fical al
diskette.');
Writeln ('Prem una tecla.');
Readln;
Assign(Fn,'a:nouP.txt');
Reset(Fn);
FOR i:=1 TO 875 DO
BEGIN
Read(Fn,Ch);
IF Ch='-1' THEN
V[i]:=-1
ELSE V[i]:=1;
END;
Close(Fn);
END;
PROCEDURE valorstrain;
BEGIN
Assign(F3,'a:txtvalors.txt');
Reset(F3);
FOR i:=1 TO 875 DO
BEGIN
Readln (F3,peso);
Wn[i]:=peso;
END;
Readln (F3,peso);
b:=peso;
NI:=0;
Close (F3);
END;
BEGIN
Writeln ('Inicialitzan programa...');
Writeln ('Prem una tecla.');
Readln;
Writeln;
Writeln ('********************************************');
Writeln ('****** PERCEPTRON v.0.2 ******');
Writeln ('****** by ******');
Writeln ('****** Ray San ******');
Writeln ('********************************************');
Writeln;
valorstrain;
Entrapatern;
FOR i:=1 TO 875 DO
NI:=NI+(V[i]*Wn[i]);
NI:=NI+b;
IF NI < tet2 THEN
BEGIN
Y:=-1;
Writeln ('Es tracta de la lletra P');
END
ELSE
IF NI > tet1 THEN
BEGIN
Y:=1;
Writeln ('Es tracta de la lletra R');
END
ELSE
BEGIN
Y:=0;
Writeln ('No puc reconŠixer la lletra.');
END;
Writeln ('El Net Input es: ',NI:2:2);
Writeln;
Writeln ('Gr…cies per utilitzar aquest software.');
Writeln;
Writeln ('Premi qualsevol tecla per acabar.');
Readln;
END.
ANEXO 2
ENTRENADOR DE LA RED
PROGRAM Trainer;
CONST alpha=0.1;
tet1=0.3;
tet2=-0.3;
TYPE
tM=ARRAY [1..2,1..876] OF REAL;
tW=ARRAY [1..875] OF REAL;
VAR
M:tM;
W:tW;
i:integer;
epoch:LONGINT;
t, b:real;
OBJ1, OBJ2:boolean;
F1, F2, F3: Text;
Ch: STRING [2];
PROCEDURE Resetejar;
BEGIN
OBJ1:=false;
OBJ2:=false;
b:=1;
t:=0;
epoch:=0;
FOR i:=1 TO 875 DO
W[i]:=0;
END;
PROCEDURE Patrons;
BEGIN
Assign(F1,'a:txtpl.txt');
Reset(F1);
FOR i:=1 TO 875 DO
BEGIN
Read(F1,Ch);
IF Ch='-1' THEN
M[1,i]:=-1
ELSE M[1,i]:=1;
END;
Close (F1);
M[1,876]:=-1;
Assign(F2,'a:txtry.txt');
Reset(F2);
FOR i:=1 TO 875 DO
BEGIN
Read(F2,Ch);
IF Ch='-1' THEN
M[2,i]:=-1
ELSE M[2,i]:=1;
END;
Close (F2);
M[2,876]:=1;
END;
BEGIN
Resetejar;
Writeln;
Writeln ('********************************************');
Writeln ('****** PERCEPTRON v.0.5 ******');
Writeln ('****** by ******');
Writeln ('****** Ray San ******');
Writeln ('********************************************');
Writeln;
Writeln ('Algoritme dïaprenentatge de la Xarxa');
Writeln;
Patrons;
Writeln ('Quant vulguis prem una tecla per comen‡ar.');
Readln;
REPEAT
BEGIN
epoch:=epoch+1;
FOR i:=1 TO 875 DO
t:=W[i]*M[1,i]+t;
t:=t+b;
IF t<tet2 THEN t:=-1;
IF t>tet1 THEN t:=1;
IF t<>M[1,876] THEN
BEGIN
OBJ1:=false;
b:=b+alpha*M[1,876];
FOR i:=1 TO 875 DO
W[i]:=W[i]+alpha*M[1,876]*M[1,i];
END
ELSE OBJ1:=true;
FOR i:=1 TO 875 DO
t:=W[i]*M[2,i]+t;
t:=t+b;
IF t<tet2 THEN t:=-1;
IF t>tet1 THEN t:=1;
IF t<>M[2,876] THEN
BEGIN
OBJ2:=false;
b:=b+alpha*M[2,876];
FOR i:=1 TO 875 DO
W[i]:=W[i]+alpha*M[2,876]*M[2,i];
END
ELSE OBJ2:=true;
Writeln ('Han pasat: ',epoch,' epochs. Prem una tecla per
continuar.');
Readln;
END;
UNTIL (((OBJ1=true) AND (OBJ2=true)) OR (epoch=100));
Writeln ('La xarxa ha convergit a lïepoch:',epoch);
Writeln;
Writeln ('El valor de b final es:',b:2:2);
Writeln;
Writeln ('Prem una tecla per veure el vector de pesos obtingut.');
Readln;
BEGIN
FOR i:=1 TO 100 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=101 TO 200 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=201 TO 300 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=301 TO 400 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=401 TO 500 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=501 TO 600 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=601 TO 700 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=701 TO 800 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=801 TO 875 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
END;
Writeln;
Writeln;
Writeln ('La Xarxa ha estat entrenada amb Šxit.');
Writeln ('Les dades obtingudes es grabaran a disc.');
Writeln ('Prem una tecla.');
Readln;
Assign(F3,'a:txtvalors.txt');
Rewrite(F3);
FOR i:=1 TO 875 DO
Writeln (F3,W[i]:2:2);
Writeln (F3,b:2:2);
Close (F3);
Writeln ('Gravacio finalitzada amb exit. Prem una tecla per acabar.');
Readln;
END.
PROGRAM TrainerPL;
CONST alpha=0.1;
tet1=0.3;
tet2=-0.3;
TYPE
tM=ARRAY [1..2,1..876] OF REAL;
tW=ARRAY [1..875] OF REAL;
VAR
M:tM;
W:tW;
i:integer;
epoch:LONGINT;
t, b:real;
OBJ1, OBJ2:boolean;
F1, F2, F3: Text;
Ch: STRING [2];
PROCEDURE Resetejar;
BEGIN
OBJ1:=false;
OBJ2:=false;
b:=1;
t:=0;
epoch:=0;
FOR i:=1 TO 875 DO
W[i]:=0;
END;
PROCEDURE Patrons;
BEGIN
Assign(F1,'a:txtp.txt');
Reset(F1);
FOR i:=1 TO 875 DO
BEGIN
Read(F1,Ch);
IF Ch='-1' THEN
M[1,i]:=-1
ELSE M[1,i]:=1;
END;
Close (F1);
M[1,876]:=-1;
Assign(F2,'a:txtl.txt');
Reset(F2);
FOR i:=1 TO 875 DO
BEGIN
Read(F2,Ch);
IF Ch='-1' THEN
M[2,i]:=-1
ELSE M[2,i]:=1;
END;
Close (F2);
M[2,876]:=1;
END;
BEGIN
Resetejar;
Writeln;
Writeln ('********************************************');
Writeln ('****** PERCEPTRON v.0.5 ******');
Writeln ('****** by ******');
Writeln ('****** Ray San ******');
Writeln ('********************************************');
Writeln;
Writeln ('Algoritme dïaprenentatge de la Xarxa');
Writeln;
Patrons;
Writeln ('Quant vulguis prem una tecla per comen‡ar.');
Readln;
REPEAT
BEGIN
epoch:=epoch+1;
FOR i:=1 TO 875 DO
t:=W[i]*M[1,i]+t;
t:=t+b;
IF t<tet2 THEN t:=-1;
IF t>tet1 THEN t:=1;
IF t<>M[1,876] THEN
BEGIN
OBJ1:=false;
b:=b+alpha*M[1,876];
FOR i:=1 TO 875 DO
W[i]:=W[i]+alpha*M[1,876]*M[1,i];
END
ELSE OBJ1:=true;
FOR i:=1 TO 875 DO
t:=W[i]*M[2,i]+t;
t:=t+b;
IF t<tet2 THEN t:=-1;
IF t>tet1 THEN t:=1;
IF t<>M[2,876] THEN
BEGIN
OBJ2:=false;
b:=b+alpha*M[2,876];
FOR i:=1 TO 875 DO
W[i]:=W[i]+alpha*M[2,876]*M[2,i];
END
ELSE OBJ2:=true;
Writeln ('Han pasat: ',epoch,' epochs. Prem una tecla per
continuar.');
Readln;
END;
UNTIL (((OBJ1=true) AND (OBJ2=true)) OR (epoch=100));
Writeln ('La xarxa ha convergit a lïepoch:',epoch);
Writeln;
Writeln ('El valor de b final es:',b:2:2);
Writeln;
Writeln ('Prem una tecla per veure el vector de pesos obtingut.');
Readln;
BEGIN
FOR i:=1 TO 100 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=101 TO 200 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=201 TO 300 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=301 TO 400 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=401 TO 500 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=501 TO 600 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=601 TO 700 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=701 TO 800 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=801 TO 875 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
END;
Writeln;
Writeln;
Writeln ('La Xarxa ha estat entrenada amb Šxit.');
Writeln ('Les dades obtingudes es grabaran a disc.');
Writeln ('Prem una tecla.');
Readln;
Assign(F3,'a:txtvalorspl.txt');
Rewrite(F3);
FOR i:=1 TO 875 DO
Writeln (F3,W[i]:2:2);
Writeln (F3,b:2:2);
Close (F3);
Writeln ('Gravacio finalitzada amb exit. Prem una tecla per acabar.');
Readln;
END.
PROGRAM TrainerRY;
CONST alpha=0.1;
tet1=0.3;
tet2=-0.3;
TYPE
tM=ARRAY [1..2,1..876] OF REAL;
tW=ARRAY [1..875] OF REAL;
VAR
M:tM;
W:tW;
i:integer;
epoch:LONGINT;
t, b:real;
OBJ1, OBJ2:boolean;
F1, F2, F3: Text;
Ch: STRING [2];
PROCEDURE Resetejar;
BEGIN
OBJ1:=false;
OBJ2:=false;
b:=1;
t:=0;
epoch:=0;
FOR i:=1 TO 875 DO
W[i]:=0;
END;
PROCEDURE Patrons;
BEGIN
Assign(F1,'a:txtr.txt');
Reset(F1);
FOR i:=1 TO 875 DO
BEGIN
Read(F1,Ch);
IF Ch='-1' THEN
M[1,i]:=-1
ELSE M[1,i]:=1;
END;
Close (F1);
M[1,876]:=-1;
Assign(F2,'a:txty.txt');
Reset(F2);
FOR i:=1 TO 875 DO
BEGIN
Read(F2,Ch);
IF Ch='-1' THEN
M[2,i]:=-1
ELSE M[2,i]:=1;
END;
Close (F2);
M[2,876]:=1;
END;
BEGIN
Resetejar;
Writeln;
Writeln ('********************************************');
Writeln ('****** PERCEPTRON v.0.5 ******');
Writeln ('****** by ******');
Writeln ('****** Ray San ******');
Writeln ('********************************************');
Writeln;
Writeln ('Algoritme dïaprenentatge de la Xarxa');
Writeln;
Patrons;
Writeln ('Quant vulguis prem una tecla per comen‡ar.');
Readln;
REPEAT
BEGIN
epoch:=epoch+1;
FOR i:=1 TO 875 DO
t:=W[i]*M[1,i]+t;
t:=t+b;
IF t<tet2 THEN t:=-1;
IF t>tet1 THEN t:=1;
IF t<>M[1,876] THEN
BEGIN
OBJ1:=false;
b:=b+alpha*M[1,876];
FOR i:=1 TO 875 DO
W[i]:=W[i]+alpha*M[1,876]*M[1,i];
END
ELSE OBJ1:=true;
FOR i:=1 TO 875 DO
t:=W[i]*M[2,i]+t;
t:=t+b;
IF t<tet2 THEN t:=-1;
IF t>tet1 THEN t:=1;
IF t<>M[2,876] THEN
BEGIN
OBJ2:=false;
b:=b+alpha*M[2,876];
FOR i:=1 TO 875 DO
W[i]:=W[i]+alpha*M[2,876]*M[2,i];
END
ELSE OBJ2:=true;
Writeln ('Han pasat: ',epoch,' epochs. Prem una tecla per
continuar.');
Readln;
END;
UNTIL (((OBJ1=true) AND (OBJ2=true)) OR (epoch=100));
Writeln ('La xarxa ha convergit a lïepoch:',epoch);
Writeln;
Writeln ('El valor de b final es:',b:2:2);
Writeln;
Writeln ('Prem una tecla per veure el vector de pesos obtingut.');
Readln;
BEGIN
FOR i:=1 TO 100 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=101 TO 200 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=201 TO 300 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=301 TO 400 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=401 TO 500 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=501 TO 600 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=601 TO 700 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=701 TO 800 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
FOR i:=801 TO 875 DO
Write ('// W-',i,': ',W[i]:1:1);
Writeln;
Writeln ('Prem una tecla per seguir...');
Readln;
END;
Writeln;
Writeln;
Writeln ('La Xarxa ha estat entrenada amb Šxit.');
Writeln ('Les dades obtingudes es grabaran a disc.');
Writeln ('Prem una tecla.');
Readln;
Assign(F3,'a:txtvalorsry.txt');
Rewrite(F3);
FOR i:=1 TO 875 DO
Writeln (F3,W[i]:2:2);
Writeln (F3,b:2:2);
Close (F3);
Writeln ('Gravacio finalitzada amb exit. Prem una tecla per acabar.');
Readln;
END.
PROGRAM Neurona;
CONST
tet1=0.3;
tet2=-0.3;
TYPE
tV=ARRAY [1..875] OF real;
VAR
V, Wn:tV;
Y, NI, b, peso:real;
i:INTEGER;
Fn, F3: Text;
Ch: STRING [2];
PROCEDURE Entrapatern;
BEGIN
Writeln;
Writeln ('Per entrar un nou patro segueix les seguents
instruccions:');
Writeln ('(1) - Escriu el patro bipolar complert en format
txt');
Writeln ('(2) - Asegurat de escriure [-1] o [ 1], tot
seguit.');
Writeln ('(3) - Renombra lïarchiu a nouP.txt i fical al
diskette.');
Writeln ('Prem una tecla.');
Readln;
Assign(Fn,'a:nouP.txt');
Reset(Fn);
FOR i:=1 TO 875 DO
BEGIN
Read(Fn,Ch);
IF Ch='-1' THEN
V[i]:=-1
ELSE V[i]:=1;
END;
Close(Fn);
END;
PROCEDURE valorstrain;
BEGIN
Assign(F3,'a:txtvalors.txt');
Reset(F3);
FOR i:=1 TO 875 DO
BEGIN
Readln (F3,peso);
Wn[i]:=peso;
END;
Readln (F3,peso);
b:=peso;
NI:=0;
Close (F3);
END;
BEGIN
Writeln ('Inicialitzan programa...');
Writeln ('Prem una tecla.');
Readln;
Writeln;
Writeln ('********************************************');
Writeln ('****** PERCEPTRON v.0.5 ******');
Writeln ('****** by ******');
Writeln ('****** Ray San ******');
Writeln ('********************************************');
Writeln;
valorstrain;
Entrapatern;
FOR i:=1 TO 875 DO
NI:=NI+(V[i]*Wn[i]);
NI:=NI+b;
IF NI < tet2 THEN
BEGIN
Assign(F3,'a:txtvalorspl.txt');
Reset(F3);
FOR i:=1 TO 875 DO
BEGIN
Readln (F3,peso);
Wn[i]:=peso;
END;
Readln (F3,peso);
b:=peso;
NI:=0;
Close (F3);
FOR i:=1 TO 875 DO
NI:=NI+(V[i]*Wn[i]);
NI:=NI+b;
IF NI < tet2 THEN
BEGIN
Y:=-1;
Writeln ('Es tracta de la lletra P');
END
ELSE
IF NI > tet1 THEN
BEGIN
Y:=1;
Writeln ('Es tracta de la lletra L');
END
ELSE
BEGIN
Y:=0;
Writeln ('No puc reconŠixer la lletra.');
END;
END
ELSE
IF NI > tet1 THEN
BEGIN
Assign(F3,'a:txtvalorsry.txt');
Reset(F3);
FOR i:=1 TO 875 DO
BEGIN
Readln (F3,peso);
Wn[i]:=peso;
END;
Readln (F3,peso);
b:=peso;
NI:=0;
Close (F3);
FOR i:=1 TO 875 DO
NI:=NI+(V[i]*Wn[i]);
NI:=NI+b;
IF NI < tet2 THEN
BEGIN
Y:=-1;
Writeln ('Es tracta de la lletra R');
END
ELSE
IF NI > tet1 THEN
BEGIN
Y:=1;
Writeln ('Es tracta de la lletra Y');
END
ELSE
BEGIN
Y:=0;
Writeln ('No puc reconŠixer la lletra.');
END;
END
ELSE
BEGIN
Y:=0;
Writeln ('No puc reconŠixer la lletra.');
END;
Writeln ('El Net Input es: ',NI:2:2);
Writeln;
Writeln ('Gr...cies per utilitzar aquest software.');
Writeln;
Writeln ('Premi qualsevol tecla per acabar.');
Readln;
END.

Más contenido relacionado

Similar a Voynich

Eco_Umberto_Lector_in_Fabula_3rd_ed_1993.pdf
Eco_Umberto_Lector_in_Fabula_3rd_ed_1993.pdfEco_Umberto_Lector_in_Fabula_3rd_ed_1993.pdf
Eco_Umberto_Lector_in_Fabula_3rd_ed_1993.pdfIgnacioSalvatierra7
 
El primer trabajo de investigación
El primer trabajo de investigaciónEl primer trabajo de investigación
El primer trabajo de investigaciónJavier Badía
 
PROYECTO " PALABRAS ANGELADAS"
PROYECTO " PALABRAS ANGELADAS"PROYECTO " PALABRAS ANGELADAS"
PROYECTO " PALABRAS ANGELADAS"florenciasegovia22
 
La lectura como diálogo 1º medio
La lectura como diálogo 1º medioLa lectura como diálogo 1º medio
La lectura como diálogo 1º medioapunteslyc
 
Comentario Literario de textos (Lázaro Carreter y Evaristo Correa) I
Comentario Literario de textos (Lázaro Carreter y Evaristo Correa) IComentario Literario de textos (Lázaro Carreter y Evaristo Correa) I
Comentario Literario de textos (Lázaro Carreter y Evaristo Correa) Inormrg
 
ANALISISOBRALITERARIA.ppt
ANALISISOBRALITERARIA.pptANALISISOBRALITERARIA.ppt
ANALISISOBRALITERARIA.pptEDWINSAMUELS3
 
Guia para el análisis de obras literarias
Guia para el análisis de obras literariasGuia para el análisis de obras literarias
Guia para el análisis de obras literariaswarlytutor
 
ijhvhvhvhvhvhvhvhvhvhvhvhvhvvhvhvhvhvhvhvht
ijhvhvhvhvhvhvhvhvhvhvhvhvhvvhvhvhvhvhvhvhtijhvhvhvhvhvhvhvhvhvhvhvhvhvvhvhvhvhvhvhvht
ijhvhvhvhvhvhvhvhvhvhvhvhvhvvhvhvhvhvhvhvhtDOLIMK
 

Similar a Voynich (20)

Notas
NotasNotas
Notas
 
Eco_Umberto_Lector_in_Fabula_3rd_ed_1993.pdf
Eco_Umberto_Lector_in_Fabula_3rd_ed_1993.pdfEco_Umberto_Lector_in_Fabula_3rd_ed_1993.pdf
Eco_Umberto_Lector_in_Fabula_3rd_ed_1993.pdf
 
Castellano
CastellanoCastellano
Castellano
 
Tema4 Semiotica De La ComunicaciòN
Tema4 Semiotica De La ComunicaciòNTema4 Semiotica De La ComunicaciòN
Tema4 Semiotica De La ComunicaciòN
 
Prototipo.1
Prototipo.1Prototipo.1
Prototipo.1
 
El primer trabajo de investigación
El primer trabajo de investigaciónEl primer trabajo de investigación
El primer trabajo de investigación
 
PROYECTO " PALABRAS ANGELADAS"
PROYECTO " PALABRAS ANGELADAS"PROYECTO " PALABRAS ANGELADAS"
PROYECTO " PALABRAS ANGELADAS"
 
Proyecto de Lengua
Proyecto de LenguaProyecto de Lengua
Proyecto de Lengua
 
mapa de aplicaciones
mapa de aplicacionesmapa de aplicaciones
mapa de aplicaciones
 
Trabajo D Lengua 2
Trabajo D Lengua 2Trabajo D Lengua 2
Trabajo D Lengua 2
 
Trabajo D Lengua
Trabajo D LenguaTrabajo D Lengua
Trabajo D Lengua
 
Trabajo D Lengua 2
Trabajo D Lengua 2Trabajo D Lengua 2
Trabajo D Lengua 2
 
Capitulo 3 multimedia
Capitulo 3 multimediaCapitulo 3 multimedia
Capitulo 3 multimedia
 
2 EL TEXTO COMO UNIDAD DE LENGUA
2 EL TEXTO COMO UNIDAD DE LENGUA2 EL TEXTO COMO UNIDAD DE LENGUA
2 EL TEXTO COMO UNIDAD DE LENGUA
 
La lectura como diálogo 1º medio
La lectura como diálogo 1º medioLa lectura como diálogo 1º medio
La lectura como diálogo 1º medio
 
Comentario Literario de textos (Lázaro Carreter y Evaristo Correa) I
Comentario Literario de textos (Lázaro Carreter y Evaristo Correa) IComentario Literario de textos (Lázaro Carreter y Evaristo Correa) I
Comentario Literario de textos (Lázaro Carreter y Evaristo Correa) I
 
ANALISISOBRALITERARIA.ppt
ANALISISOBRALITERARIA.pptANALISISOBRALITERARIA.ppt
ANALISISOBRALITERARIA.ppt
 
Guia para el análisis de obras literarias
Guia para el análisis de obras literariasGuia para el análisis de obras literarias
Guia para el análisis de obras literarias
 
ANALISIS OBRA LITERARIA.ppt
ANALISIS  OBRA LITERARIA.pptANALISIS  OBRA LITERARIA.ppt
ANALISIS OBRA LITERARIA.ppt
 
ijhvhvhvhvhvhvhvhvhvhvhvhvhvvhvhvhvhvhvhvht
ijhvhvhvhvhvhvhvhvhvhvhvhvhvvhvhvhvhvhvhvhtijhvhvhvhvhvhvhvhvhvhvhvhvhvvhvhvhvhvhvhvht
ijhvhvhvhvhvhvhvhvhvhvhvhvhvvhvhvhvhvhvhvht
 

Más de Edu Herrera

Orfeo y euridice
Orfeo y euridiceOrfeo y euridice
Orfeo y euridiceEdu Herrera
 
Paradojas de zenon
Paradojas de zenonParadojas de zenon
Paradojas de zenonEdu Herrera
 
Una nueva ciencia de la vida r.seldrake
Una nueva ciencia de la vida r.seldrakeUna nueva ciencia de la vida r.seldrake
Una nueva ciencia de la vida r.seldrakeEdu Herrera
 
La geometria de la naturaleza
La geometria de la naturalezaLa geometria de la naturaleza
La geometria de la naturalezaEdu Herrera
 
Circuitos energeticos del ser humano
Circuitos energeticos del ser humanoCircuitos energeticos del ser humano
Circuitos energeticos del ser humanoEdu Herrera
 
Fsica y tiempo_de_ensueno_isbn9783938681602_p
Fsica y tiempo_de_ensueno_isbn9783938681602_pFsica y tiempo_de_ensueno_isbn9783938681602_p
Fsica y tiempo_de_ensueno_isbn9783938681602_pEdu Herrera
 
Aristoteles obra biologica
Aristoteles obra biologicaAristoteles obra biologica
Aristoteles obra biologicaEdu Herrera
 
Corpus hermeticum
Corpus hermeticumCorpus hermeticum
Corpus hermeticumEdu Herrera
 
Trismegisto hermes corpus_hermeticum
Trismegisto hermes corpus_hermeticumTrismegisto hermes corpus_hermeticum
Trismegisto hermes corpus_hermeticumEdu Herrera
 
El libro de san cipriano
El libro de san ciprianoEl libro de san cipriano
El libro de san ciprianoEdu Herrera
 

Más de Edu Herrera (15)

Orfeo
OrfeoOrfeo
Orfeo
 
Orfeo y euridice
Orfeo y euridiceOrfeo y euridice
Orfeo y euridice
 
Ptolomeo
PtolomeoPtolomeo
Ptolomeo
 
Paradojas de zenon
Paradojas de zenonParadojas de zenon
Paradojas de zenon
 
Una nueva ciencia de la vida r.seldrake
Una nueva ciencia de la vida r.seldrakeUna nueva ciencia de la vida r.seldrake
Una nueva ciencia de la vida r.seldrake
 
La geometria de la naturaleza
La geometria de la naturalezaLa geometria de la naturaleza
La geometria de la naturaleza
 
Circuitos energeticos del ser humano
Circuitos energeticos del ser humanoCircuitos energeticos del ser humano
Circuitos energeticos del ser humano
 
Fsica y tiempo_de_ensueno_isbn9783938681602_p
Fsica y tiempo_de_ensueno_isbn9783938681602_pFsica y tiempo_de_ensueno_isbn9783938681602_p
Fsica y tiempo_de_ensueno_isbn9783938681602_p
 
Cuentos
CuentosCuentos
Cuentos
 
Descartes
DescartesDescartes
Descartes
 
Aristoteles obra biologica
Aristoteles obra biologicaAristoteles obra biologica
Aristoteles obra biologica
 
Corpus hermeticum
Corpus hermeticumCorpus hermeticum
Corpus hermeticum
 
Libro rojofr
Libro rojofrLibro rojofr
Libro rojofr
 
Trismegisto hermes corpus_hermeticum
Trismegisto hermes corpus_hermeticumTrismegisto hermes corpus_hermeticum
Trismegisto hermes corpus_hermeticum
 
El libro de san cipriano
El libro de san ciprianoEl libro de san cipriano
El libro de san cipriano
 

Último

LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfAlfaresbilingual
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSYadi Campos
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docxEliaHernndez7
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.docRodneyFrankCUADROSMI
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Katherine Concepcion Gonzalez
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdfMiNeyi1
 
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOBRIGIDATELLOLEONARDO
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONALMiNeyi1
 

Último (20)

LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
 
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
 

Voynich

  • 1. EL MANUSCRITO VOYNICH INTRODUCCION En la Librería Beinecke, perteneciente a la Universidad de Yale, podemos encontrar uno de los más misteriosos e interesantes desafíos que la Historia nos ha dejado. Se trata de un manuscrito, donado en 1969 por H.P Kraus, que en 1912 había sido adquirido por Wilfrid M. Voynich, librero anticuario norteamericano, en un seminario jesuita en Frascati, en Villa Mondragone, cerca de Roma. Sus orígenes y autor son inciertos, aunque junto al texto se halló una carta fechada el 19 de agosto de 1666, de Johannes Marcus Marci, rector de la Universidad de Praga, dirigida a Athanasius Kircher, un erudito jesuita. Según dicha carta el manuscrito era obra del científico Roger Bacon, uno de los personajes del S.XIII con un pensamiento científico más avanzado. El manuscrito es un libro de 15 por 23 centímetros en octavo, consta de 204 páginas, aunque se perdieron 28. Cada una de ellas tiene coloridos dibujos y anotaciones manuscritas en una clave secreta. A pesar de los esfuerzos que han llevado a cabo eruditos en la materia a lo largo de los siglos (incluso en nuestros días), no se sabe en qué idioma está escrito o cifrado, ni cuál fue la intención original del autor, constituye en sí mismo todo un enigma y hasta la fecha nadie ha logrado descifrarlo. EL MISTERIO La primera noticia fiable que se tiene de él data de principios del siglo XVII. Sabemos que el emperador Rodolfo II de Bohemia (1552-1612) lo compró por una cifra desorbitada para la época (600 ducados), y que luego pasó por varias manos hasta llegar en 1666 a las de Atanasio Kircher, un sacerdote jesuíta. Desde ese momento hasta 1912, nadie sabe a ciencia cierta qué le ocurrió al libro. Para cualquier criptógrafo y estudioso de los lenguajes este libro constituye un estimulante reto, ya que ni siquiera sabemos a ciencia cierta cuál es el tema que trata Sus numerosas ilustraciones parecen indicar que es un tratado de alquimia cuyo auténtico contenido se quiso mantener en secreto, pero esto no son más que especulaciones. Posee diferentes secciones, que parecen tratar los siguientes temas: Botánica (la mayoría de los dibujos representa plantas no identificadas), Astronomía (aparecen casi todos los símbolos zodiacales), Biología (con algunos dibujos sobre anatomía), Cosmología y Farmacia. Al final se incluye lo que parece un recetario. Además, el libro posee numeración de páginas, algunas anotaciones en alemán, otras en algún alfabeto desconocido, y una anotación en la última página en caracteres tradicionales que parece representar una clave para descifrar el texto. No obstante, ni siquiera sabemos a ciencia cierta si el texto está cifrado o no. Como puede verse, tenemos todos los ingredientes para poner a prueba nuestras habilidades. A partir de las vestimentas de los personajes dibujados, podría decirse que el manuscrito fue escrito en Europa durante el siglo XIII, aunque una de las ilustraciones se parece a un girasol, lo cual sugiere que en parte fue escrito después del descubrimiento de América. De todas formas, tampoco está descartado que el libro sea un simple engaño hecho para estafar a alguno de sus poseedores, ya que sabemos que en ocasiones se han pagado incribles sumas de dinero por él.
  • 2. ESTUDIOS REALIZADOS Hasta la fecha se han llevado a cabo multitud de estudios sobre el Manuscrito Voynich, e incluso en más de una ocasión ha habido personas que aseguran haberlo traducido, pero todavía ninguna de las traducciones ha sido reconocida por la comunidad. El problema principal es que no sabemos apenas nada sobre el posible significado real del libro (aunque a estas alturas casi nadie niega que cuando se descifre, sólo contenga un compendio de los conocimientos de la época). De hecho, ¡ni siquiera sabemos si está cifrado!, por lo que decidir cómo dar por válida una posible solución constituye un problema en sí mismo. Parece evidente que la traducción debería cumplir una serie de condiciones mínimas: ser criptológicamente coherente, no permitir soluciones alternativas, cubrir todo el manuscrito, ser factible con los medios de la época, dar un significado coherente al libro, etc. A pesar de este complicado entramado de dificultades, hay una serie de hechos cuando menos estimulantes: - Existen dos grandes bloques con tipos de escritura claramente diferenciados en el libro. Esto se ha logrado analizando estadísticamente el contenido. La causa de esto puede ser múltiple: diferentes autores, mismo autor pero diferente estilo, o simplemente temas diferentes. - El texto del manuscrito cumple con las propiedades estadísticas principales de los lenguajes naturales, aunque presenta alguna peculiaridad, que puede deberse a la presencia de abreviaturas. - Apenas hay correcciones en el texto. PERSPECTIVAS Todavía quedan muchas cuestiones abiertas, pero sin duda el Manuscrito Voynich ha de constituir un perfecto banco de pruebas para nuestras teorías sobre el lenguaje y los códigos criptográficos. Cuando muchos algoritmos de cifrado son abandonados por presentar fisuras en su estructura matemática, seguimos teniendo un texto codificado a mano que se resiste a nuestras poderosas técnicas de criptoanálisis. ¿Quién sabe? tal vez sólo sea una cuestión de (des)interés económico...
  • 3. PRESENTACIÓN DEL TRABAJO Como se ha podido comprobar en las líneas anteriores, todavía hoy en día se esta trabajando en intentar descifrar este documento y mi trabajo va a basarse en eso. Voy a diseñar una red neuronal capaz de reconocer varios caracteres de dicho manuscrito, teniendo en cuenta que están escritos a mano y pueden albergar errores; voy a traducirlos a un alfabeto conocido mediante el cual se pueda descifrar... o como mínimo leer tan enigmático manuscrito. La red ideal para el reconocimiento de todos estos caracteres sería una red del tipo Back-Propagation pero la ‘red’ elegida por mi para diseñar este sistema será simplemente una unica neurona, exactamente perceptrón, el cual aprenderá a distinguir entre 2 caracteres. Necesitare, como es lógico, un alfabeto de transcripción, para que, una vez identificado el carácter, este pueda ser asignado a una letra concreta del alfabeto conocido. Para ello he optado por el alfabeto de transcripción diseñado por la FSG (First Voynich Manuscript Study Group), los cuales obtuvieron dicho alfabeto siguiendo las siguientes pautas: La obtención de dicho alfabeto implicaba dos elecciones: Tenían que saber cuales eran exactamente los caracteres que formaban el texto individualmente y después establecer una letra o número equivalentes en “nuestro” alfabeto para cada uno de esos caracteres. La parte más crítica a la hora de determinar el alfabeto de transcripción era la primera, para ello debían determinar el nivel de detalle y el tipo de detalle con el cual el manuscrito pudiese ser transcrito, ya que eligiendo solamente mal un caracter podía variar el texto por completo. Por ejemplo, si erróneamente se asume que “m” y “n” son la misma letra (porque se supone que el numero de ‘montañitas’ no es importante) o “h” y “n” son la misma letra porque solo difieren en la longitud de un trazo, o que “n” y “u” son la misma letra pero invertidas, el análisis sería realmente difícil. Por otro lado, si se cree que “m” y “m” son diferentes letras, o que “A” es totalmente diferente de “a”, entonces el análisis también sería un desastre. Para la segunda elección, se tomaron interesantes marcas a mano encima y al lado de algunos caracteres, que se podían ver en el manuscrito, como también de una especie de alfabeto de equivalencias incompleto, encontrado en las últimas páginas del libro y con todo tipo de anotaciones. A pesar de todo ello, la elección de las equivalencias no fue tarea fácil, ya que muchas de las anotaciones estaban medio borradas o renombradas varias veces. Tras “decodificar” todo esto como buenamente se pudo, se comparo con otra decodificación realizada por Mark Rhoads, un importante criptógrafo del ejercito, pudiéndose observar gran similitud entre ambos alfabetos de transcripción, razón por la cual yo he optado por tomar este alfabeto como base para la realización de mi trabajo.
  • 4. El alfabeto elegido es el siguiente:
  • 5. Voy a pasar a comentar como será la red, en que consistirá, que hará y como funcionará exactamente el sistema de interpretación de caracteres. Como ya he dicho, se tratará de un único perceptrón (“una neurona”) que se encargara de aprender los patrones de cada carácter y asignarle una letra en concreto. Un perceptrón es capaz de diferenciar dos tipos de patrones diferentes... o no saber diferenciarlos. El mio aprenderá a diferenciar entre la letra (P) y la (R). Los patrones equivalentes a las letras P, R que podemos ver a continuación se encuentran a tamaño real de 25x35 píxeles. (P) (R) El proceso a seguir es el siguiente: Dividimos cada una de las imágenes de cada carácter tomadas por algún dispositivo externo, como podría ser un escáner, en ‘cuadraditos’, o sea, en forma de matriz, como se vera en la próxima página. Cada letra se divide en una matriza de 25x35 puntos. Se ha escogido esta medida porque con ella se asegura una medianamente buena representación del carácter y de todos sus trazos. Una vez tenemos dichos patrones se le enseñan a la red y se la entrena para que aprenda a diferenciarlos. Tras el duro entrenamiento (2 epochs en nuestro caso), se la ‘suelta’ al mundo real donde tiene que valerse de sus propios medios (lo aprendido) y convivir con miles de errores.... Debemos darle una velocidad de aprendizaje, tras comprobar varias velocidades y analizar los diferentes resultados, he optado por una velocidad de 0.1.
  • 6. Aquí podemos observar los diferentes patrones y sus ‘matrices’ bipolares (-1,1) correspondientes. -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
  • 7. CONCLUSIONES A pesar de la aparente simplicidad de esta red, como ya he mencionado, los resultados han sido sorprendentes, creía que debido al gigantesco tamaño de los patrones (tamaño real), la red no sería capaz de funcionar correctamente y se equivocaría mucho. Tras pasarle hasta 12 patrones modificados (simulando deterioro) la red los ha acertado todos. (Debido al gran tamaño de dichos patrones no se han incluido en estas hojas). Cuando he terminado de construir la red, he decidido empezar con patrones relativamente fáciles, por el miedo a que se equivocase... pero poco a poco he ido viendo que no se equivocaba de ninguna manera, llegando a un punto que le entraba unos patrones tan deformados que ni siquiera yo reconocía y, aún así no ha fallado. Realmente impresionante. Solo encuentro un posible error a la red y ese es que tal vez sea “demasiado lista”, pudiendo llegar a reconocer algunas veces cosas que no son. Una de las ventajas de esta red es que todas las matrices, tanto las de entrenamiento como las de prueba se pueden modificar fácilmente a voluntad con lo cual el programa puede ser altamente reutilizable. MEJORAS Desde que se inició el diseño de esta red neuronal, se pretendía que fuese capaz de diferenciar entre 4 patrones de caracteres diferentes y no solo dos. La siguiente mejora del programa (ANEXO 2) consigue ese objetivo mediante el uso de tres perceptrones en varias capas. Esta nueva red presentada a continuación es capaz de diferenciar entre 4 patrones distintos. Se basa principalmente en la anterior red pero es más “lista”. Simplemente consiste en tres redes (perceptrones) paralelas, la primera distingue si se trata de un patrón PL (P+L) o RY (R+Y). Según lo que reconozca, pasa a otras redes secundarias que distinguen la P de la L en el caso PL o la R de la Y en el caso RY.
  • 8.
  • 9. ANEXO ENTRENADOR DE LA RED PROGRAM Trainer; CONST alpha=0.1; tet1=0.3; tet2=-0.3; TYPE tM=ARRAY [1..2,1..876] OF REAL; tW=ARRAY [1..875] OF REAL; VAR M:tM; W:tW; i:integer; epoch:LONGINT; t, b:real; OBJ1, OBJ2:boolean; F1, F2, F3: Text; Ch: STRING [2]; PROCEDURE Resetejar; BEGIN OBJ1:=false; OBJ2:=false; b:=1; t:=0; epoch:=0; FOR i:=1 TO 875 DO W[i]:=0; END; PROCEDURE Patrons; BEGIN Assign(F1,'a:txtp.txt'); Reset(F1); FOR i:=1 TO 875 DO BEGIN Read(F1,Ch); IF Ch='-1' THEN M[1,i]:=-1 ELSE M[1,i]:=1; END; Close (F1); M[1,876]:=-1; Assign(F2,'a:txtr.txt'); Reset(F2); FOR i:=1 TO 875 DO BEGIN Read(F2,Ch); IF Ch='-1' THEN M[2,i]:=-1 ELSE M[2,i]:=1; END; Close (F2); M[2,876]:=1; END;
  • 10. BEGIN Resetejar; Writeln; Writeln ('********************************************'); Writeln ('****** PERCEPTRON v.0.2 ******'); Writeln ('****** by ******'); Writeln ('****** Ray San ******'); Writeln ('********************************************'); Writeln; Writeln ('Algoritme dïaprenentatge de la Xarxa'); Writeln; Patrons; Writeln ('Quant vulguis prem una tecla per comen‡ar.'); Readln; REPEAT BEGIN epoch:=epoch+1; FOR i:=1 TO 875 DO t:=W[i]*M[1,i]+t; t:=t+b; IF t<tet2 THEN t:=-1; IF t>tet1 THEN t:=1; IF t<>M[1,876] THEN BEGIN OBJ1:=false; b:=b+alpha*M[1,876]; FOR i:=1 TO 875 DO W[i]:=W[i]+alpha*M[1,876]*M[1,i]; END ELSE OBJ1:=true; FOR i:=1 TO 875 DO t:=W[i]*M[2,i]+t; t:=t+b; IF t<tet2 THEN t:=-1; IF t>tet1 THEN t:=1; IF t<>M[2,876] THEN BEGIN OBJ2:=false; b:=b+alpha*M[2,876]; FOR i:=1 TO 875 DO W[i]:=W[i]+alpha*M[2,876]*M[2,i]; END ELSE OBJ2:=true; Writeln ('Han pasat: ',epoch,' epochs. Prem una tecla per continuar.'); Readln; END; UNTIL (((OBJ1=true) AND (OBJ2=true)) OR (epoch=100)); Writeln ('La xarxa ha convergit a lïepoch:',epoch); Writeln; Writeln ('El valor de b final es:',b:2:2); Writeln; Writeln ('Prem una tecla per veure el vector de pesos obtingut.'); Readln; BEGIN FOR i:=1 TO 100 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=101 TO 200 DO Write ('// W-',i,': ',W[i]:1:1);
  • 11. Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=201 TO 300 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=301 TO 400 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=401 TO 500 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=501 TO 600 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=601 TO 700 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=701 TO 800 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=801 TO 875 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; END; Writeln; Writeln; Writeln ('La Xarxa ha estat entrenada amb Šxit.'); Writeln ('Les dades obtingudes es grabaran a disc.'); Writeln ('Prem una tecla.'); Readln; Assign(F3,'a:txtvalors.txt'); Rewrite(F3); FOR i:=1 TO 875 DO Writeln (F3,W[i]:2:2); Writeln (F3,b:2:2); Close (F3); Writeln ('Gravacio finalitzada amb exit. Prem una tecla per acabar.'); Readln; END.
  • 12. XNA PROGRAM Neurona; CONST tet1=0.3; tet2=-0.3; TYPE tV=ARRAY [1..875] OF real; VAR V, Wn:tV; Y, NI, b, peso:real; i:INTEGER; Fn, F3: Text; Ch: STRING [2]; PROCEDURE Entrapatern; BEGIN Writeln; Writeln ('Per entrar un nou patro segueix les seguents instruccions:'); Writeln ('(1) - Escriu el patro bipolar complert en format txt'); Writeln ('(2) - Asegurat de escriure [-1] o [ 1], tot seguit.'); Writeln ('(3) - Renombra lïarchiu a nouP.txt i fical al diskette.'); Writeln ('Prem una tecla.'); Readln; Assign(Fn,'a:nouP.txt'); Reset(Fn); FOR i:=1 TO 875 DO BEGIN Read(Fn,Ch); IF Ch='-1' THEN V[i]:=-1 ELSE V[i]:=1; END; Close(Fn); END; PROCEDURE valorstrain; BEGIN Assign(F3,'a:txtvalors.txt'); Reset(F3); FOR i:=1 TO 875 DO BEGIN Readln (F3,peso); Wn[i]:=peso; END; Readln (F3,peso); b:=peso; NI:=0; Close (F3); END;
  • 13. BEGIN Writeln ('Inicialitzan programa...'); Writeln ('Prem una tecla.'); Readln; Writeln; Writeln ('********************************************'); Writeln ('****** PERCEPTRON v.0.2 ******'); Writeln ('****** by ******'); Writeln ('****** Ray San ******'); Writeln ('********************************************'); Writeln; valorstrain; Entrapatern; FOR i:=1 TO 875 DO NI:=NI+(V[i]*Wn[i]); NI:=NI+b; IF NI < tet2 THEN BEGIN Y:=-1; Writeln ('Es tracta de la lletra P'); END ELSE IF NI > tet1 THEN BEGIN Y:=1; Writeln ('Es tracta de la lletra R'); END ELSE BEGIN Y:=0; Writeln ('No puc reconŠixer la lletra.'); END; Writeln ('El Net Input es: ',NI:2:2); Writeln; Writeln ('Gr…cies per utilitzar aquest software.'); Writeln; Writeln ('Premi qualsevol tecla per acabar.'); Readln; END.
  • 14. ANEXO 2 ENTRENADOR DE LA RED PROGRAM Trainer; CONST alpha=0.1; tet1=0.3; tet2=-0.3; TYPE tM=ARRAY [1..2,1..876] OF REAL; tW=ARRAY [1..875] OF REAL; VAR M:tM; W:tW; i:integer; epoch:LONGINT; t, b:real; OBJ1, OBJ2:boolean; F1, F2, F3: Text; Ch: STRING [2]; PROCEDURE Resetejar; BEGIN OBJ1:=false; OBJ2:=false; b:=1; t:=0; epoch:=0; FOR i:=1 TO 875 DO W[i]:=0; END; PROCEDURE Patrons; BEGIN Assign(F1,'a:txtpl.txt'); Reset(F1); FOR i:=1 TO 875 DO BEGIN Read(F1,Ch); IF Ch='-1' THEN M[1,i]:=-1 ELSE M[1,i]:=1; END; Close (F1); M[1,876]:=-1; Assign(F2,'a:txtry.txt'); Reset(F2); FOR i:=1 TO 875 DO BEGIN Read(F2,Ch); IF Ch='-1' THEN M[2,i]:=-1 ELSE M[2,i]:=1; END; Close (F2); M[2,876]:=1; END;
  • 15. BEGIN Resetejar; Writeln; Writeln ('********************************************'); Writeln ('****** PERCEPTRON v.0.5 ******'); Writeln ('****** by ******'); Writeln ('****** Ray San ******'); Writeln ('********************************************'); Writeln; Writeln ('Algoritme dïaprenentatge de la Xarxa'); Writeln; Patrons; Writeln ('Quant vulguis prem una tecla per comen‡ar.'); Readln; REPEAT BEGIN epoch:=epoch+1; FOR i:=1 TO 875 DO t:=W[i]*M[1,i]+t; t:=t+b; IF t<tet2 THEN t:=-1; IF t>tet1 THEN t:=1; IF t<>M[1,876] THEN BEGIN OBJ1:=false; b:=b+alpha*M[1,876]; FOR i:=1 TO 875 DO W[i]:=W[i]+alpha*M[1,876]*M[1,i]; END ELSE OBJ1:=true; FOR i:=1 TO 875 DO t:=W[i]*M[2,i]+t; t:=t+b; IF t<tet2 THEN t:=-1; IF t>tet1 THEN t:=1; IF t<>M[2,876] THEN BEGIN OBJ2:=false; b:=b+alpha*M[2,876]; FOR i:=1 TO 875 DO W[i]:=W[i]+alpha*M[2,876]*M[2,i]; END ELSE OBJ2:=true; Writeln ('Han pasat: ',epoch,' epochs. Prem una tecla per continuar.'); Readln; END; UNTIL (((OBJ1=true) AND (OBJ2=true)) OR (epoch=100)); Writeln ('La xarxa ha convergit a lïepoch:',epoch); Writeln; Writeln ('El valor de b final es:',b:2:2); Writeln; Writeln ('Prem una tecla per veure el vector de pesos obtingut.'); Readln;
  • 16. BEGIN FOR i:=1 TO 100 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=101 TO 200 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=201 TO 300 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=301 TO 400 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=401 TO 500 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=501 TO 600 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=601 TO 700 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=701 TO 800 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=801 TO 875 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; END; Writeln; Writeln; Writeln ('La Xarxa ha estat entrenada amb Šxit.'); Writeln ('Les dades obtingudes es grabaran a disc.'); Writeln ('Prem una tecla.'); Readln; Assign(F3,'a:txtvalors.txt'); Rewrite(F3); FOR i:=1 TO 875 DO Writeln (F3,W[i]:2:2); Writeln (F3,b:2:2); Close (F3); Writeln ('Gravacio finalitzada amb exit. Prem una tecla per acabar.'); Readln; END.
  • 17. PROGRAM TrainerPL; CONST alpha=0.1; tet1=0.3; tet2=-0.3; TYPE tM=ARRAY [1..2,1..876] OF REAL; tW=ARRAY [1..875] OF REAL; VAR M:tM; W:tW; i:integer; epoch:LONGINT; t, b:real; OBJ1, OBJ2:boolean; F1, F2, F3: Text; Ch: STRING [2]; PROCEDURE Resetejar; BEGIN OBJ1:=false; OBJ2:=false; b:=1; t:=0; epoch:=0; FOR i:=1 TO 875 DO W[i]:=0; END; PROCEDURE Patrons; BEGIN Assign(F1,'a:txtp.txt'); Reset(F1); FOR i:=1 TO 875 DO BEGIN Read(F1,Ch); IF Ch='-1' THEN M[1,i]:=-1 ELSE M[1,i]:=1; END; Close (F1); M[1,876]:=-1; Assign(F2,'a:txtl.txt'); Reset(F2); FOR i:=1 TO 875 DO BEGIN Read(F2,Ch); IF Ch='-1' THEN M[2,i]:=-1 ELSE M[2,i]:=1; END; Close (F2); M[2,876]:=1; END;
  • 18. BEGIN Resetejar; Writeln; Writeln ('********************************************'); Writeln ('****** PERCEPTRON v.0.5 ******'); Writeln ('****** by ******'); Writeln ('****** Ray San ******'); Writeln ('********************************************'); Writeln; Writeln ('Algoritme dïaprenentatge de la Xarxa'); Writeln; Patrons; Writeln ('Quant vulguis prem una tecla per comen‡ar.'); Readln; REPEAT BEGIN epoch:=epoch+1; FOR i:=1 TO 875 DO t:=W[i]*M[1,i]+t; t:=t+b; IF t<tet2 THEN t:=-1; IF t>tet1 THEN t:=1; IF t<>M[1,876] THEN BEGIN OBJ1:=false; b:=b+alpha*M[1,876]; FOR i:=1 TO 875 DO W[i]:=W[i]+alpha*M[1,876]*M[1,i]; END ELSE OBJ1:=true; FOR i:=1 TO 875 DO t:=W[i]*M[2,i]+t; t:=t+b; IF t<tet2 THEN t:=-1; IF t>tet1 THEN t:=1; IF t<>M[2,876] THEN BEGIN OBJ2:=false; b:=b+alpha*M[2,876]; FOR i:=1 TO 875 DO W[i]:=W[i]+alpha*M[2,876]*M[2,i]; END ELSE OBJ2:=true; Writeln ('Han pasat: ',epoch,' epochs. Prem una tecla per continuar.'); Readln; END; UNTIL (((OBJ1=true) AND (OBJ2=true)) OR (epoch=100)); Writeln ('La xarxa ha convergit a lïepoch:',epoch); Writeln; Writeln ('El valor de b final es:',b:2:2); Writeln; Writeln ('Prem una tecla per veure el vector de pesos obtingut.'); Readln;
  • 19. BEGIN FOR i:=1 TO 100 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=101 TO 200 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=201 TO 300 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=301 TO 400 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=401 TO 500 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=501 TO 600 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=601 TO 700 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=701 TO 800 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=801 TO 875 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; END; Writeln; Writeln; Writeln ('La Xarxa ha estat entrenada amb Šxit.'); Writeln ('Les dades obtingudes es grabaran a disc.'); Writeln ('Prem una tecla.'); Readln; Assign(F3,'a:txtvalorspl.txt'); Rewrite(F3); FOR i:=1 TO 875 DO Writeln (F3,W[i]:2:2); Writeln (F3,b:2:2); Close (F3); Writeln ('Gravacio finalitzada amb exit. Prem una tecla per acabar.'); Readln; END.
  • 20. PROGRAM TrainerRY; CONST alpha=0.1; tet1=0.3; tet2=-0.3; TYPE tM=ARRAY [1..2,1..876] OF REAL; tW=ARRAY [1..875] OF REAL; VAR M:tM; W:tW; i:integer; epoch:LONGINT; t, b:real; OBJ1, OBJ2:boolean; F1, F2, F3: Text; Ch: STRING [2]; PROCEDURE Resetejar; BEGIN OBJ1:=false; OBJ2:=false; b:=1; t:=0; epoch:=0; FOR i:=1 TO 875 DO W[i]:=0; END; PROCEDURE Patrons; BEGIN Assign(F1,'a:txtr.txt'); Reset(F1); FOR i:=1 TO 875 DO BEGIN Read(F1,Ch); IF Ch='-1' THEN M[1,i]:=-1 ELSE M[1,i]:=1; END; Close (F1); M[1,876]:=-1; Assign(F2,'a:txty.txt'); Reset(F2); FOR i:=1 TO 875 DO BEGIN Read(F2,Ch); IF Ch='-1' THEN M[2,i]:=-1 ELSE M[2,i]:=1; END; Close (F2); M[2,876]:=1; END;
  • 21. BEGIN Resetejar; Writeln; Writeln ('********************************************'); Writeln ('****** PERCEPTRON v.0.5 ******'); Writeln ('****** by ******'); Writeln ('****** Ray San ******'); Writeln ('********************************************'); Writeln; Writeln ('Algoritme dïaprenentatge de la Xarxa'); Writeln; Patrons; Writeln ('Quant vulguis prem una tecla per comen‡ar.'); Readln; REPEAT BEGIN epoch:=epoch+1; FOR i:=1 TO 875 DO t:=W[i]*M[1,i]+t; t:=t+b; IF t<tet2 THEN t:=-1; IF t>tet1 THEN t:=1; IF t<>M[1,876] THEN BEGIN OBJ1:=false; b:=b+alpha*M[1,876]; FOR i:=1 TO 875 DO W[i]:=W[i]+alpha*M[1,876]*M[1,i]; END ELSE OBJ1:=true; FOR i:=1 TO 875 DO t:=W[i]*M[2,i]+t; t:=t+b; IF t<tet2 THEN t:=-1; IF t>tet1 THEN t:=1; IF t<>M[2,876] THEN BEGIN OBJ2:=false; b:=b+alpha*M[2,876]; FOR i:=1 TO 875 DO W[i]:=W[i]+alpha*M[2,876]*M[2,i]; END ELSE OBJ2:=true; Writeln ('Han pasat: ',epoch,' epochs. Prem una tecla per continuar.'); Readln; END; UNTIL (((OBJ1=true) AND (OBJ2=true)) OR (epoch=100)); Writeln ('La xarxa ha convergit a lïepoch:',epoch); Writeln; Writeln ('El valor de b final es:',b:2:2); Writeln; Writeln ('Prem una tecla per veure el vector de pesos obtingut.'); Readln;
  • 22. BEGIN FOR i:=1 TO 100 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=101 TO 200 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=201 TO 300 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=301 TO 400 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=401 TO 500 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=501 TO 600 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=601 TO 700 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=701 TO 800 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; FOR i:=801 TO 875 DO Write ('// W-',i,': ',W[i]:1:1); Writeln; Writeln ('Prem una tecla per seguir...'); Readln; END; Writeln; Writeln; Writeln ('La Xarxa ha estat entrenada amb Šxit.'); Writeln ('Les dades obtingudes es grabaran a disc.'); Writeln ('Prem una tecla.'); Readln; Assign(F3,'a:txtvalorsry.txt'); Rewrite(F3); FOR i:=1 TO 875 DO Writeln (F3,W[i]:2:2); Writeln (F3,b:2:2); Close (F3); Writeln ('Gravacio finalitzada amb exit. Prem una tecla per acabar.'); Readln; END.
  • 23. PROGRAM Neurona; CONST tet1=0.3; tet2=-0.3; TYPE tV=ARRAY [1..875] OF real; VAR V, Wn:tV; Y, NI, b, peso:real; i:INTEGER; Fn, F3: Text; Ch: STRING [2]; PROCEDURE Entrapatern; BEGIN Writeln; Writeln ('Per entrar un nou patro segueix les seguents instruccions:'); Writeln ('(1) - Escriu el patro bipolar complert en format txt'); Writeln ('(2) - Asegurat de escriure [-1] o [ 1], tot seguit.'); Writeln ('(3) - Renombra lïarchiu a nouP.txt i fical al diskette.'); Writeln ('Prem una tecla.'); Readln; Assign(Fn,'a:nouP.txt'); Reset(Fn); FOR i:=1 TO 875 DO BEGIN Read(Fn,Ch); IF Ch='-1' THEN V[i]:=-1 ELSE V[i]:=1; END; Close(Fn); END; PROCEDURE valorstrain; BEGIN Assign(F3,'a:txtvalors.txt'); Reset(F3); FOR i:=1 TO 875 DO BEGIN Readln (F3,peso); Wn[i]:=peso; END; Readln (F3,peso); b:=peso; NI:=0; Close (F3); END; BEGIN Writeln ('Inicialitzan programa...'); Writeln ('Prem una tecla.'); Readln; Writeln; Writeln ('********************************************'); Writeln ('****** PERCEPTRON v.0.5 ******'); Writeln ('****** by ******'); Writeln ('****** Ray San ******'); Writeln ('********************************************'); Writeln; valorstrain;
  • 24. Entrapatern; FOR i:=1 TO 875 DO NI:=NI+(V[i]*Wn[i]); NI:=NI+b; IF NI < tet2 THEN BEGIN Assign(F3,'a:txtvalorspl.txt'); Reset(F3); FOR i:=1 TO 875 DO BEGIN Readln (F3,peso); Wn[i]:=peso; END; Readln (F3,peso); b:=peso; NI:=0; Close (F3); FOR i:=1 TO 875 DO NI:=NI+(V[i]*Wn[i]); NI:=NI+b; IF NI < tet2 THEN BEGIN Y:=-1; Writeln ('Es tracta de la lletra P'); END ELSE IF NI > tet1 THEN BEGIN Y:=1; Writeln ('Es tracta de la lletra L'); END ELSE BEGIN Y:=0; Writeln ('No puc reconŠixer la lletra.'); END; END ELSE IF NI > tet1 THEN BEGIN Assign(F3,'a:txtvalorsry.txt'); Reset(F3); FOR i:=1 TO 875 DO BEGIN Readln (F3,peso); Wn[i]:=peso; END; Readln (F3,peso); b:=peso; NI:=0; Close (F3); FOR i:=1 TO 875 DO NI:=NI+(V[i]*Wn[i]); NI:=NI+b; IF NI < tet2 THEN BEGIN Y:=-1; Writeln ('Es tracta de la lletra R'); END ELSE IF NI > tet1 THEN BEGIN Y:=1; Writeln ('Es tracta de la lletra Y');
  • 25. END ELSE BEGIN Y:=0; Writeln ('No puc reconŠixer la lletra.'); END; END ELSE BEGIN Y:=0; Writeln ('No puc reconŠixer la lletra.'); END; Writeln ('El Net Input es: ',NI:2:2); Writeln; Writeln ('Gr...cies per utilitzar aquest software.'); Writeln; Writeln ('Premi qualsevol tecla per acabar.'); Readln; END.