Introducción - Departamento Lenguajes y Ciencias de...

22
1 Introducción _________________________________________________________________________ 1.1 Breve historia de la Computación El desarrollo formal de la teoría de la computación se originó casi cincuenta años antes de que apareciera el primer ordenador digital, el ENIAC (1945) diseñado por John Eckert y John Mauchly (con objeto de calcular trayectorias balísticas). Sus raíces se encuentran en los trabajos de Hilbert, Gödel, Rosser, Kleene, Church, Turing y Post, sobre la potencia del razonamiento matemático con respecto a un problema computacional, propuesto por el alemán David Hilbert, hace más de 90 años. Este problema, llamado el Problema de Decisión (Entscheidungsproblem), se puede establecer de una manera informal: David Hilbert (1862-1943) Si tal programa existe, cualquier conjetura se puede probar o refutar expresándola formalmente y construyendo mecánicamente una demostración, de manera que todo el razonamiento matemático se basa en un fundamento lógico, donde todos los enunciados (afirmaciones) ciertos son demostrables (al igual que los falsos) y cada afirmación es verdadera o falsa. Así cualquier teoría matemática estaría formada por un conjunto de axiomas y un conjunto de reglas de inferencia que permiten generar enunciados válidos adicionales a partir de enunciados válidos dados. La verdad de cada axioma se admite a priori. Dicho programa se puede escribir si se puede encontrar un conjunto de axiomas que: sean lo suficientemente potentes para permitir que se pueda probar cualquier enunciado verdadero, y que no admitan contradicciones, es decir, que una afirmación y su negación no puedan ser ciertas al mismo tiempo. Dada una representación formal de una afirmación (enunciado) matemática, diseñar un algoritmo (programa) que determine si la afirmación es verdadera (teorema) o falsa (no válida lógicamente).

Transcript of Introducción - Departamento Lenguajes y Ciencias de...

Page 1: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

1 Introducción

_________________________________________________________________________ 1.1 Breve historia de la Computación El desarrollo formal de la teoría de la computación se originó casi cincuenta años antes de que apareciera el primer ordenador digital, el ENIAC (1945) diseñado por John Eckert y John Mauchly (con objeto de calcular trayectorias balísticas). Sus raíces se encuentran en los trabajos de Hilbert, Gödel, Rosser, Kleene, Church, Turing y Post, sobre la potencia del razonamiento matemático con respecto a un problema computacional, propuesto por el alemán David Hilbert, hace más de 90 años. Este problema, llamado el Problema de Decisión (Entscheidungsproblem), se puede establecer de una manera informal:

David Hilbert (1862-1943) Si tal programa existe, cualquier conjetura se puede probar o refutar expresándola formalmente y construyendo mecánicamente una demostración, de manera que todo el razonamiento matemático se basa en un fundamento lógico, donde todos los enunciados (afirmaciones) ciertos son demostrables (al igual que los falsos) y cada afirmación es verdadera o falsa. Así cualquier teoría matemática estaría formada por un conjunto de axiomas y un conjunto de reglas de inferencia que permiten generar enunciados válidos adicionales a partir de enunciados válidos dados. La verdad de cada axioma se admite a priori. Dicho programa se puede escribir si se puede encontrar un conjunto de axiomas que:

• sean lo suficientemente potentes para permitir que se pueda probar cualquier enunciado verdadero, y que

• no admitan contradicciones, es decir, que una afirmación y su negación no puedan ser ciertas al mismo tiempo.

Dada una representación formal de una afirmación (enunciado) matemática, diseñar un algoritmo (programa) que determine si la afirmación es verdadera (teorema) o falsa (no válida lógicamente).

Page 2: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

2

En 1931, el matemático austriaco Kurt Gödel publica su famoso teorema de incompletitud que establece que no puede existir un conjunto de axiomas con las dos propiedades anteriores y, por lo tanto, el programa anterior no se podrá escribir. Más concretamente:

Kart Gödel (1906-1978) La Teoría de la Computabilidad se ocupa de construir un formalismo matemático para razonar sobre la existencia o no existencia de algoritmos efectivos para problemas particulares. Los resultados que se prueben dentro de esta teoría deben ser aplicables a todas las arquitecturas de ordenadores, independientemente de sus parámetros, como pueden ser la velocidad del procesador o el tamaño de la memoria. Para ello tiene como base el concepto de modelo de computación. Ejemplos de modelos de computación son las máquinas de Turing, las máquinas RAM, las máquinas de Post y los algoritmos de Markov. Por lo tanto, necesitamos saber qué entendemos por algoritmo efectivo y por problema. Aunque el desarrollo formal de la teoría de la computabilidad se realiza en el siglo XX, sin embargo la búsqueda de algoritmos efectivos para resolver ciertos problemas se viene realizando desde hace más de 2000 años. Los matemáticos griegos, como se comprueba en los trabajos de Euclides y Pitágoras, pusieron gran énfasis en las técnicas constructivas. Así, en geometría se plantearon algunos problemas que dejaron sin resolver y que han constituido materia de investigación durante mucho tiempo, como: • El problema de la cuadratura del circulo: "Dado un circulo, construir un cuadrado con la misma área utilizando regla y compás" • El problema de la trisección de un ángulo: "Dividir un ángulo dado en tres partes iguales mediante regla y un compás". • El problema de la duplicación del cubo: "Dado un cubo, construir otro con exactamente el doble de volumen que el original, utilizando regla y compás". En este contexto, un algoritmo efectivo será aquel que emplee en sus pasos de computación sólo regla y compás. Sin embargo, hoy se sabe que ninguno de estos

"Ningún sistema de razonamiento matemático es lo suficientemente potente para ser capaz de probar toda afirmación cierta acerca de las propiedades de los números naturales".

Page 3: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

3

problemas tiene solución. Por lo tanto, no existe un método de construcción apropiado y así no pueden existir tales algoritmos. La longitud de cualquier segmento construido usando regla y compás se puede escribir como una expresión en la que intervienen los números naturales y las operaciones +, ×, ÷ y

. La duplicación del cubo es imposible pues se precisa construir un segmento de longitud 21/3 (Descartes, 1637). La trisección del ángulo requiere construir líneas cuyas longitudes vienen dadas por las raíces de un polinomio cúbico. Para ciertos ángulos, como los de 60º estas longitudes no son expresables en la forma requerida (Descartes, 1637). Lindemann probó en 1882 que el númeroπ es trascendente y como cualquier solución deberá construir un segmento de longitud π , no existe un algoritmo válido para su construcción. En un programa de ordenador se genera una salida utilizando la entrada leída. Así, cualquier programa se puede considerar como un evaluador de una función, f, que aplica algún dominio de valores de entrada, I, en algún rango de valores de salida, O. Por ejemplo, con un compilador de un lenguaje de programación de alto nivel, I={ficheros de caracteres} y O={ficheros binarios}. La cuestión que surge ahora es:

¿Qué problemas se pueden resolver con programas de ordenador? También se puede formular de forma equivalente: ¿Qué funciones se pueden computar? Para establecer una formulación rigurosa de lo que entendemos por algoritmo efectivo y por problema necesitamos dar los siguientes conceptos: Un alfabeto es cualquier conjunto finito no vacío, Σ; un símbolo (o letra) es un elemento del alfabeto; una palabra es una secuencia o cadena finita de símbolos de Σ y la longitud de una palabra x de Σ*es el número de símbolos que la forman. Dos palabras x e y de Σ* serán iguales si y sólo si tienen todos los términos iguales; esto es, si y sólo si tienen las mismas letras en las mismas posiciones. El conjunto infinito de todas las palabras que se pueden formar con símbolos de Σ se representa por Σ*:

{ }* , 1, 2,3,...n nΣ = Σ =

Page 4: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

4

donde Σn es el conjunto de todas las palabras de longitud n que se pueden formar con los elementos del alfabeto. En el conjunto Σ* de las palabras del alfabeto Σ se define una operación llamada concatenación de palabras de la manera siguiente: Dadas las palabras x = a1a2...an e y = b1b2...bm, la concatenación es la palabra

xy = a1a2...anb1b2...bm

El conjunto Σ* no tiene elemento neutro con respecto a la operación de concatenación, a menos que se introduzca por definición. Podemos suponer que Σ* contiene una palabra e (palabra vacía) que no contiene símbolos. Llamaremos lenguaje sobre un alfabeto Σ a cualquier subconjunto L de Σ*. Cualquier orden entre los símbolos de Σ induce un orden entre las palabras de Σn de la siguiente manera: 1. Para cada n, las palabras de longitud n preceden a las palabras de longitud n+1. 2. Para las palabras de igual longitud se establece el orden alfabético. A este orden se le llama orden lexicográfico. Como consecuencia de este orden podemos enumerar todas las palabras del lenguaje. Es decir, cualquier lenguaje sobre Σ es un conjunto numerable. También podemos establecer funciones f : Σ1

* → Σ2*, donde Σ1 y Σ2 son dos

alfabetos. Un problema de decisión es una función cuyo resultado es 0 ó 1 (falso o verdadero). Por lo tanto, todas las funciones f : Σ1

* → {0,1} son problemas de decisión sobre Σ. En los problemas de decisión se trata de determinar si alguna propiedad de la entrada es cierta o no. Ejemplo: Problema de decisión de la paridad de un número natural expresado en base dos. El alfabeto es el conjunto {0,1} y cada palabra corresponde a un número natural expresado en base dos. En este caso f(x) vale 1 si x corresponde a un número par, es decir, si la palabra x termina con el símbolo 0. Así, f(010110) = 1 y f(11001) = 0. Dado cualquier problema de decisión, f : Σ* → {0,1}, el conjunto Σ* queda dividido en dos conjuntos disjuntos:

L(f) = { x ∈ Σ* : f(x) = 1 },

Page 5: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

5

que es el lenguaje correspondiente a f; y Σ*− L(f) que es el lenguaje complementario de L(f). Ejemplo: El lenguaje correspondiente al problema de decisión de la paridad es:

L(f) = {0, 00, 10, 000, 010, 100, 110,....} Hemos sustituido la idea vaga de resolución del problema por el concepto preciso de determinar si una palabra de entrada dada es un elemento de un conjunto particular de palabras. Así, determinar si un número natural escrito en binario es par es equivalente a decidir si dicho número se encuentra en el conjunto

{0, 00, 10, 000, 010, 100, 110,....} Los modelos formales de computación que vamos a estudiar nos suministran un conjunto de operaciones básicas para manipular los datos de entrada y obtener los datos de salida. Así, en un modelo de computación cualquiera, un algoritmo efectivo, para un problema de decisión dado, f, es una secuencia de operaciones (permitidas) que determina si una palabra cualquiera x está (o no) en L(f). Se dirá que tal algoritmo (programa) reconoce el lenguaje L(f). La Teoría de la Computabilidad se ocupa de dividir el universo de todos los lenguajes

sobre Σ*, en aquellos lenguajes que pueden ser reconocidos por algoritmos efectivos y los que no. Ello conduce a las funciones no computables, es decir, a los problemas no resolubles. Vamos a recordar algunos modelos clásicos (máquinas) de computación, como las máquinas de Turing (determinística y no determinísticas) y los autómatas celulares que conducen a diferentes formalizaciones del concepto de algoritmo, todas ellas equivalentes (equivalentes también a otras formalizaciones ideadas por Kleene, Church, Post, etc.). Esta equivalencia refuerza la Tesis de Church-Turing que afirma:

Alan Turing ( 1912-1954)

“la clase de problemas que se pueden resolver utilizando el sistema de programación de Turing es exactamente el mismo que los que se pueden resolver utilizando cualquier sistema de programación razonable”

Page 6: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

6

1.2 Elementos de un modelo de computación Intuitivamente, podemos decir que la computación es la capacidad o habilidad de especificar una secuencia de acciones que conducirán a un resultado. Pero hay que precisar lo que entendemos por acciones, y para ello tenemos que definir un modelo de computación, que será un sistema formal que permita expresar, sin ambigüedad, las acciones que se van a realizar. Los matemáticos dedicados a la lógica han desarrollado muchos modelos de computación: máquinas de Turing, máquinas RAM, algoritmos de Markov, máquina de Post, las funciones recursivas generales, etc., todos ellos llamados modelos de computación no restringidos. Se han realizado muchos esfuerzos para conseguir un modelo de computación más potente que los mencionados anteriormente, pero no se han conseguido resultados, ni siquiera se ha probado que no puedan existir. Aunque las redes de neuronas artificiales resuelven el problema de la parada, que no resuelve la máquina de Turing, pero para ello requieren un número ilimitado de unidades de proceso. Nosotros defendemos la conjetura de la tesis de Church que establece que todos los problemas "resolubles" se pueden resolver mediante cualquiera de los modelos de computación no restringidos. Esta conjetura ha resistido todos los ataques durante más de 50 años. Nosotros estudiaremos un modelo específico llamado la Máquina de Turing que nos permitirá introducir de forma precisa el concepto de función computable. Posteriormente, analizaremos algunos modelos de computación celular. Un modelo computacional es una representación abstracta de un sistema que realiza cierta actividad de cálculo o computación (operaciones aritméticas y lógicas). Al sistema lo llamaremos modelo de máquina. Los ordenadores modernos suelen tener tres componentes principales: - La unidad de procesamiento central (procesador central) que realiza operaciones aritméticas y decisiones (controles) lógicas sobre datos particulares. - La unidad de almacenamiento (memoria) que permite almacenar la información y recuperarla cuando se desee (discos, cintas, semiconductores, etc.). La característica común es su gran capacidad para almacenar información. Por ello, se le suele llamar memoria auxiliar, para distinguirla de la memoria que forma parte del procesador central que tiene una capacidad de almacenamiento muy limitada. - Los dispositivos de entrada y salida que son los medios con los que se recibe la información y se comunica al exterior la nueva información originada (terminales, impresoras, pantallas, etc.). Un modelo de máquina M es una clase de dispositivos Mi (i≥1), llamados máquinas, y estructurados similarmente, que se pueden describir como objetos matemáticos en el

Page 7: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

7

lenguaje de la teoría de conjuntos. Estos objetos matemáticos vienen definidos por n-uplas de conjuntos finitos. Así, veremos que la máquina de Turing viene definida por una séxtupla formado por tres conjuntos finitos, una función de transición y dos elementos de estos conjuntos. En estas definiciones de máquinas es común la presencia de un objeto finito, llamado programa o control finito (algunas veces referido a la noción de procesador para la ejecución de un programa) que opera sobre una estructura llamada memoria, que puede ser ilimitada. En cada instante de tiempo el control finito está en un estado particular, siendo finito el número de estados posibles. La memoria se puede contemplar como un almacén de piezas de información compuestas por símbolos de uno o más conjuntos finitos llamados alfabetos (recordemos que un alfabeto es un conjunto finito no vacío, Σ, y un símbolo es un elemento de un alfabeto. La memoria siempre viene representada por una estructura regular de celdas, casillas o cuadrados donde se almacena la información. Las estructuras de memoria suelen ser lineales y discretas (como una cinta dividida en trozos iguales donde se escriben los símbolos del alfabeto) o estructuradas en retículos (cuadrículas) o en árboles. La memoria se supone infinita, aunque sólo una parte finita de la memoria se utilizará en cada computación. En general, se pueden distinguir dos secciones en la memoria: la sección de entrada donde la información se recoge leyendo un símbolo cada vez; y la sección de salida mediante la cual se comunica un símbolo, cada vez, al mundo exterior. El programa comunica las secciones de entrada y salida mediante canales explícitos que pueden examinar las secciones de la manera programada. Algunas máquinas, como la máquina de Turing, no tiene separadas las secciones de entrada y salida, pues la entrada se almacena en la cinta (memoria) al comienzo de la computación y el resultado se recupera de la cinta cuando termina la computación. Para formalizar el concepto de computación vamos a dar el concepto de configuración de la máquina. Una configuración de la máquina es una descripción completa de los estados de la máquina, incluyendo el estado completo de su memoria. Es decir, consta de un indicador de la instrucción en curso del programa, de la estructura y contenido de la parte finita de la memoria que ha participado en la computación y el estado de las secciones de entrada y salida de la memoria. Ahora tenemos que definir la relación de transición entre dos configuraciones de la máquina. Así, diremos que la configuración C2 se obtiene por una transición desde la configuración C1, que representaremos por C1 → C2 , si la instrucción correspondiente del programa de C1 lleva la máquina a la configuración C2. Por lo tanto, una computación (determinística) es una sucesión de configuraciones, conectadas por la relación de transición.

Page 8: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

8

Vamos a distinguir entre máquinas determinísticas y máquinas no determinísticas. Una máquina se dice determinística si para cada configuración C1 existe a lo sumo otra configuración C2 que le sucede en la relación de transición, C1 → C2 ; y una máquina se dice no determinística si para cada configuración C1 existen varias configuraciones que le suceden. Una configuración inicial es aquella formada por un estado inicial del control finito, una memoria que está en blanco salvo la parte que contiene a la sección de entrada, una sección de salida vacía, y todos los canales del programa de conexión y la memoria se inicializan en alguna posición estándar. Así, una entrada x determina la configuración inicial de la máquina, Ci(x). Cada una de las configuraciones que se obtienen por computación a partir de una configuración inicial se dice que son alcanzables. Una configuración C se llama final cuando no existe otra configuración que le sucede. Si el estado del control finito en la configuración final es uno de los estados específicos de aceptación, es decir, aquellos estados así definidos en la n-upla que describe la máquina, entonces la configuración final se llama configuración de aceptación; si no, se le llama configuración de rechazo. Una computación completa (determinística) de la máquina M sobre una entrada x, que representaremos por T(x), es una secuencia de configuraciones que comienza en una configuración inicial y que, si termina, termina en una configuración final. Así, una computación puede ser infinita (computación divergente) o puede terminar en un estado final. Una máquina aceptadora es aquella que tiene dos estados finales, llamados estado de aceptación y estado de rechazo. Toda computación finita de M debe parar en uno de estos dos estados finales. Una computación se llama de aceptación o de rechazo según que la configuración final sea de aceptación o de rechazo, respectivamente. Una entrada x es aceptada por una máquina M si la computación M(x) termina en un estado de aceptación (configuración final de aceptación). El conjunto de entradas aceptadas por la máquina M, se dice que es el lenguaje aceptado o reconocido por M. Una máquina traductora M es aquella que recibe una palabra de entrada, x, y produce como salida otra palabra, y. Se usa para computar funciones. Dada una función f, una máquina traductora M computa f si la computación T(x) alcanza una configuración final que tiene como salida f(x). Obsérvese que una máquina M computa la relación R(M) determinada por todos los pares <x,y>, tales que existe una computación de aceptación que empieza en la configuración inicial, Ci(x), y termina en una configuración C donde y es el contenido de la memoria de salida. Un modelo de máquina secuencial viene constituido por una unidad de control conectada a la memorias por varios canales y que ejecuta sólo una instrucción cada vez (incluso en el caso no determinístico). Sólo un símbolo, en cada instante de tiempo, se comunica entre la sección de entrada o salida de la memoria y el control finito.

Page 9: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

9

Si un modelo de máquina tiene más de un control finito, es decir, si el control finito es reemplazado por un conjunto de programas o procesadores, que puede ser infinito, como la memoria, pero en cada configuración alcanzable, sólo un número finito de procesadores se activan en la computación, entonces se puede conseguir un modelo de máquina paralela. En estos modelos se requiere gran cantidad de memoria (memoria compartida) además de la memoria local propia de cada procesador. Asimismo, cada procesador tiene sus canales privados para interactuar con la memoria y los procesadores se pueden comunicar directamente entre sí (mediante una red de interconexión) o a través de la memoria compartida. Así, los procesadores en los modelos paralelos pueden intercambiar información directamente por los canales de comunicación sin usar memoria pasiva intermedia. Las transiciones en las máquinas paralelas son el resultado combinado de las transiciones dentro de los procesadores activos: a) Una transición global se puede obtener como el efecto acumulado de todas las transiciones locales realizadas por los procesadores activos que operan al mismo tiempo (computación sincronizada o síncrona). b) Alternativamente, una transición global se puede obtener cuando los procesadores operan cada uno a su propia velocidad de una forma no vinculada a los demás (computación asíncrona). En ambos casos los procesadores pueden interferir unos con otros cuando actúan sobre la memoria compartida. Eso ocurre, por ejemplo, cuando dos procesadores quieren leer o escribir en la misma parte de la memoria. Cada modelo específico determina como hay que actuar para resolver este conflicto. 1.3 Modelos de Computación: de la Computabilidad Clásica a las Redes Neuronales La mayoría de los ordenadores actuales tienen tres componentes citadas: la unidad central de proceso (CPU), la memoria y dispositivos de entrada y salida. La unidad central de proceso se ocupa de realizar las computaciones aritméticas y las decisiones lógicas a partir de los datos de entrada. La memoria es el dispositivo encargado de guardar información, debe tener una capacidad suficiente para recoger toda la información generada por la CPU, y los dispositivos de entrada y salida son los medios para recoger la información generada y comunicarla al mundo exterior, como puede se una pantalla o una impresora. 1.3.1 La computabilidad clásica La teoría clásica de la Computabilidad trata de determinar qué problemas algorítmicos se pueden resolver por ordenador en condiciones ideales de disposición ilimitada de memoria y tiempo. Las máquinas de Turing han sido aceptadas como modelos estándar para el

Page 10: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

10

estudio de la computabilidad durante más de medio siglo. Comenzaremos analizando el modelo más simple de máquinas de estados finitos. Las máquinas de estados finitos fueron introducidas formalmente por Rabin y Scott (1959). Una máquina de estados finitos consta de un dispositivo memoria primitiva representado por una colección finita de estados y de una función de transición que actualiza el estado actual como una función del estado previo y de la entrada en curso. Se supone que toda la información viene codificada por cadenas de símbolos (caracteres) de un alfabeto fijo, que constituyen la entrada a la máquina. Una formalización sencilla de una máquina de estados finitos es el autómata finito. Un autómata finito determinístico es una quíntupla M = (K, Σ, δ, s, F), en la que

K es un conjunto finito de estados Σ es un alfabeto s∈K es el estado inicial F⊆K es el conjunto de estados finales δ es una función de K×Σ en K, llamada función de transición.

Un autómata finito determinístico funciona de la siguiente manera: la información que recibe la máquina viene codificada en símbolos de un alfabeto que se escriben en una cinta de entrada divida en cuadrados (en número ilimitado) y se escribe un símbolo en cada cuadrado (casilla). La parte principal de la máquina es una “caja negra”, llamada unidad de control finito, que presenta, en cada momento específico, un estado concreto del conjunto de estados posibles K. La unidad de control finito puede conocer el símbolo escrito en la casilla correspondiente de la cinta de entrada mediante una cabeza de lectura movible. Inicialmente, la cabeza grabadora se coloca al comienzo de la cinta y la unidad de control finito se encuentra en el estado inicial. A continuación el autómata lee el símbolo de la primera casilla y la unidad de control finito pasa a un nuevo estado que viene especificado por su función de transición; el nuevo estado depende del estado previo y del símbolo leído. Entonces la cabeza de lectura se mueve una casilla a la derecha y lee el símbolo escrito en dicha casilla. Este proceso se va repitiendo a intervalos regulares, se lee un símbolo, la unidad de control finito actualiza su estado y la cabeza de lectura pasa a la casilla siguiente, así sucesivamente hasta que la cabeza de lectura llega al final de la cadena de símbolo escritos en la cinta de entrada. El autómata acepta (aprueba), o no (desaprueba), la cadena de símbolos de entrada (palabra) según que el estado que presenta la unidad de control finito sea, o no, un estado del conjunto final de estados F. El conjunto de palabras (cadenas de símbolos) que acepta un autómata finito determinístico constituye el lenguaje aceptado por la máquina. Ahora surge la siguiente cuestión: ¿qué propiedades tienen los lenguajes aceptados por un autómata finito determinista? Se puede demostrar que son cerrados bajos las siguientes operaciones unión, intersección, complementación, concatenación y la operación estrella de Kleene. Por otra parte, la clase de los lenguajes regulares (o conjuntos regulares) sobre un alfabeto Σ es el conjunto minimal de lenguajes que contienen a φ, a todos los conjuntos formados por un solo símbolo, {a}, para a∈Σ, y son cerrados bajo las operaciones de

Page 11: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

11

unión, concatenación y estrella de Kleene. Así, un resultado importante (ver Lewis y Papadimitriou) es que un lenguaje es regular siempre y cuando sea aceptado por un autómata finito. Una posible generalización de los autómatas finitos determinísticos es sustituir la función de transición δ por una relación de transición ∆ que es un subconjunto finito de Κ×Σ*×Κ, donde Σ* es el conjunto de todas las cadenas finitas que se pueden formar con símbolos del alfabeto Σ, incluyendo la cadena vacía. Es decir, ahora se permiten varios estados siguientes para un símbolo de entrada dado y un estado previo de la unidad de control. A este tipo de máquinas se le llama autómatas finitos no deterministas. Sin embargo, estas maquinas son equivalentes a los autómatas finitos determinísticos, es decir, aceptan los mismos lenguajes. Además, para cada autómata finito no deterministico se puede construir un autómata finito determinístico equivalente. Sin embargo, los autómatas finitos determinísticos no se pueden considerar como modelos verdaderamente generales para el diseño de computadores puesto que no son capaces de reconocer lenguajes tan simples como L = { anbncn: n∈Z+ }. Por ello, es necesario introducir nuevos mecanismos que puedan reconocer estos lenguajes y lenguajes mucho más complicados. Uno de estos dispositivos más potentes es la máquina de Turing que fue ideada por Alan Turing (1912-1954). La máquina de Turing consta de una unidad de control finito, de una cinta y de una cabeza grabadora que puede usarse para leer o para escribir sobre la cinta. Una máquina de Turing no determinística es una cuádrupla M = (K, Σ, δ, s), en la que

K es un conjunto finito de estados, que no contiene al estado de parada h. Σ es un alfabeto que contiene el símbolo blanco #, pero no contiene los símbolos

L y R. s∈K es el estado inicial δ es una función de K×Σ en (K∪{h})×(Σ∪{L,R}) , llamada función de

transición. La máquina de Turing funciona de la siguiente manera:

1. La información de entrada viene constituida por un conjunto de símbolos de entrada colocados al comienzo de la cinta, uno por casilla, y las demás casillas tienen inicialmente el símbolo blanco. La máquina puede ir alterando sus entradas escribiendo sobre ellas nuevos símbolos y escribiendo símbolos sobre las demás casillas que contienen símbolos blancos. La máquina podrá también escribir la respuesta sobre la cinta y leerla al final de la computación y así no necesita un conjunto de estados finales.

2. La unidad de control opera a intervalos regulares, es decir, en pasos discretos; en cada paso realiza dos funciones, dependiendo del símbolo leído en la cinta y de su estado actual, pasa a un nuevo estado especificado por su función de transición, y escribe un símbolo en el cuadrado de la cinta donde está situada la cabeza grabadora o mueve la cabeza grabadora a la casilla de la izquierda (L) o a la casilla de la derecha (R).

3. La máquina se parará solamente cuando alcanza el estado de parada o intenta moverse a la izquierda del comienzo de la cinta.

Page 12: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

12

Para estudiar si una función es o no computable, utilizaremos la máquina de Turing. Consideremos dos alfabetos Σo y Σ1 y una f definida de *

0Σ a *1Σ . Un máquina de

Turing, M = (K, Σ, δ, s), se dice que computa la función f si Σo, Σ1 ⊆Σ y para cualquier entrada w∈ *

0Σ la máquina se para y en las celdas de salida escribe la cadena de símbolos u, siendo f(w)=u. Si existe una máquina de Turing que computa la función f se dice que f es computable según Turing. Si Σo es un alfabeto que no contiene el símbolo blanco, ni los símbolos fijos Y y N, entonces diremos que un lenguaje L⊆ *

0Σ es decidible según Turing si la función indicador

},{ : *0 NYfL →Σ

definida por la expresión:

⎩⎨⎧

∉∈

=LwNLwY

wf L si si

)(

es computable según Turing. También se dice que M decide L o que M es un procedimiento de decisión para L. También una máquina de Turing se puede utilizar como un aceptador de lenguajes. Si Σo es un alfabeto que no contiene el símbolo blanco, diremos que una maquina de Turing M acepta una palabra w∈ *

0Σ si M se para con dicha palabra. Asimismo, diremos que M acepta el lenguaje L⊆ *

0Σ si y sólo si L={ w∈ *0Σ : M acepta w } .

Ahora surge la pregunta ¿cuál es la clase de las funciones computables según Turing? la respuesta está clara, es la clase de las funciones µ-recursivas. Una posible generalización de la máquina de Turing es la máquina de Turing no determinística, en la que se sustituye la función de transición por una relación de transición que asigna varios estados posibles a la unidad de control para un mismo símbolo de entrada leído y un mismo estado previo. Sin embargo, se demuestra que cualquier lenguaje aceptado por una máquina de Turing no determinística es aceptado también por una cierta máquina de Turing deterministica. Por otra parte, si las palabras (cadenas de símbolos) se utilizan para representar lenguajes, no podemos representar a todos los lenguajes, puesto que sólo disponemos de un conjunto numerables de palabras para cada lenguaje y sin embargo hay lenguajes no numerables. Las máquinas de estados finitos son objetos que se puede utilizar para especificar lenguajes. Sin embargo, con ellas sólo conseguimos especificar, es decir, decidir o aceptar, un conjunto muy reducido de los lenguajes posibles. Hay problemas acerca de las máquinas de Turing que no admiten solución algorítmica del tipo Turing. Si D es un diccionario infinito que da respuesta a cada cuestión del tipo:

Page 13: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

13

¿acepta (es decir, consigue parar) la máquina de Turing M la entrada w? No hay máquinas de Turing que decidan dicho lenguaje D. A este problema se le conoce con el nombre de problema de la parada para máquinas de Turing y consiste en determinar, para una máquina de Turing arbitraria M y una entrada dada w, si M parará alguna vez partiendo de dicha entrada. También se han propuesto otras máquinas diferentes a la de Turing, como las máquinas RAM (memorias de registros direccionables), los algoritmos de Markov, los sistemas de Post, las gramáticas formales de Chomsky, etc. Todas ellas son equivalentes computacionalmente a la máquina de Turing. Ello nos lleva a la tesis de Church-Turing: Cualquier algoritmo se puede implementar en una máquina de Turing. Sin embargo, a continuación vamos a ver que el problema de la parada es resoluble neuronalmente. 1.3.2 Computación sobre grafos: Redes de autómatas, autómatas celulares y RNA. Una red de autómatas consiste en un conjunto de elementos de proceso, que van a ser máquinas de estados finitos, localizados en los vértices de un digrafo (grafo dirigido), uno en cada vértice. Cada elemento de proceso recibe su entrada de las unidades vecinas y comunica su salida a sus unidades vecinas. Formalmente, una red de autómatas es un par A= }{, iMC constituido por un espacio celular C=(G,{Qi}), y una familia de máquinas de estados finitos Mi (sólo un número finito de ellas pueden ser distintas) con alfabeto de entrada

idiii QQ ××=Σ ...1

y función de transición local

δi : Qi×Σi → Qi

que aplica ),...,,( 1 iidii xxx en ),...,,( 1 iidiii xxxδ , donde

idii ,...,1 son los nodos (vértices) conectados con el nodo i. El espacio celular C está formado por un dígrafo G numerable, pero localmente finito, es decir, sólo un número finito de arcos entran o salen de cada vértice, cuyos vértices se llaman células o nodos, y por una familia de subconjuntos finitos Qi de un conjunto Q que nos dan los estados o niveles de activación posibles de cada célula i (todos contiene el estado inactivo 0). Una red de autómatas opera localmente de la siguiente manera: Una copia de una máquina de estados finitos Mi, llamada elemento de proceso, ocupa cada vértice i del grafo G, que es por ello llamado célula o nodo. Cada copia Mi recibe como entrada los estados que presentan las células vecinas y su propio estado y entonces actualiza su estado según la dinámica local establecida por su función de transición δi. La red repite esta actualización de los estados de sus células repetidas veces. Una red neuronal (discreta) es una red de autómatas donde cada una de sus células actualiza sus estados aplicando una función de activación a una suma ponderada de las entradas (estados) que recibe de las células vecinas. En una red neuronal,

Page 14: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

14

• cada arco (i,j) del dígrafo que conecta el vértice i con el vértice j tiene asociado un peso wij, llamado peso sináptico;

• la entrada neta de cada unidad celular viene dada por una suma ponderada de los estados que presentan las unidades celulares vecinas y así el nuevo estado de la unidad celular i;

• La actualización de los estados se realiza según una función de activación fi ,

fi : A → A que verifica que fi(0)=0 (para evitar generación espontánea de la activación), siendo A el conjunto de estados (niveles de activación) que pueden tomar las unidades celulares. Así, el nuevo estado de la unidad celular i, en el tiempo t+1, viene dado por la expresión:

⎟⎟⎠

⎞⎜⎜⎝

⎛=+ ∑

jjijii txwftx )()1( (1)

Formalmente, una red neuronal (discreta) es un tripleta N=⟨A,G,{fi}⟩ constituida por un conjunto A de estados posibles finito (valores de activación), que admite una estructura aditivo-multiplicativa (permite la suma de estados ponderados), un dígrafo numerable G, pero localmente finito, y una familia de funciones de activación, {fi}, una función de activación para cada unidad celular. La dinámica local de computación de la red viene dada por la expresión (1). Un autómata celular es una red de autómatas definida sobre un grafo regular con una máquina de estados finita idéntica para cada unidad celular. Generalmente, los autómatas celulares están definidos sobre retículos (enrejados) Euclídeos, de una o dos dimensiones (ver la figura 1.3.2), que forman un grafo homogéneo y sobre cuyos puntos enteros se colocan las unidades celulares. Las conexiones entre vértices son los ejes de la rejilla. Formalmente, un autómata celular es una tripleta ⟨C,N,M⟩ constituida por un espacio celular C =(Γ,Q) construido sobre un grafo de Cayley, Γ, un conjunto finito N de vértices de Γ, una copia de una máquina de estados finitos M en cada vértice i con alfabeto de entrada Qd =Q×...×Q (d veces) y una función de transición local

δ : Q×Qd → Q

1 1( , ,..., ) ( , ,..., )

d di i i i i ix x x x x x Qδ→ ∈ donde N = {i1,...,id} es el conjunto de vértices vecinos. La dinámica global de un autómata celular viene definida por la siguiente expresión:

),...,,()(1 diiii xxxxT δ= .

Garzon y Franklin (1989) demostraron que cada autómata celular es una red neuronal. Además, demostraron que el problema de la parada de una máquina de Turing es resoluble mediante una red neuronal. Este resultado puede parecer un poco sorprendente y puede

Page 15: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

15

creerse que constituye un contraejemplo para la tesis de Churh-Turing, pero no es así, ya que dicha tesis se refiere a la resolución algorítmica de problemas por medios finitos, mientras que la red neuronal que se emplea en la demostración requiere la utilización de un objeto infinito (el dígrafo G). Sin embargo, aunque utiliza un conjunto infinito de unidades celulares, ellas operan sobre estados finitos. Asimismo, hay en la literatura varias implementaciones diferentes de una máquina de Turing mediante redes neuronales. Por otra parte, si nos limitamos a redes neuronales acotadas, es decir, con un número finito de unidades celulares y de valores de activación, éstas se pueden modelar mediante un autómata finito M, pensando en las configuraciones como el conjuntos de estados del autómata finito. La función de transición de M vendrá determinada por el procedimiento de actualización de la red neuronal. Así, las redes neuronales finitas son equivalentes computacionalmente a los autómatas finitos. Finalmente, nos preguntamos si hay problemas que no sean resolubles por redes neuronales infinitas. Un problema no resoluble por redes neuronales infinitas es el problema de la estabilidad (Garzon y Flanklin, 1989). Una cuestión todavía en estudio es ver qué se puede computar con redes neuronales discretas ¿definen un nuevo dominio de computabilidad diferente al de los modelos clásicos? 1.4 La computación celular La arquitectura de von Neumann, basada en el principio de un procesador complejo que realiza una tarea en cada momento, ha dominado la tecnología de la computación en los últimos 50 años. Sin embargo, una nueva forma de computación está emergiendo basada en principios completamente diferentes, que podemos llamar Computación Celular. Este nuevo paradigma computacional suministra nuevas formas de hacer la computación más eficiente (en términos de velocidad, coste, disipación, almacenamiento y calidad de la solución) para tratar grandes problemas en dominios de aplicación específicos.

von Neumann La Computación Celular utiliza unidades de proceso simples que por sí solas pueden hacer muy pocas cosas, frente a un procesador de propósito general que realiza tareas muy complicadas. Así, la unidad de proceso de una red neuronal es sencilla y no lo es un procesador Pentium IV. Por otra parte, frente al paralelismo masivo que usa cientos de procesadores, la computación celular utiliza millones de unidades de proceso, que generalmente se expresan en forma exponencial, 10n.

La computación celular se basa en tres principios: • Simplicidad • Paralelismo inmenso • Localidad

Page 16: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

16

Computación Celular Computación Distribuida Parcialmente Conectada paralela local serie global Arquitectura Convencional Máquinas de Estados Finitos Complejidad Simplicidad

Figura 1.3.1. Cubo de representación de los tipos de computación. La Computación Celular viene también caracterizada por la conectividad local de las unidades de proceso de manera que cada unidad de proceso sólo se comunica con un reducido número de unidades de proceso más o menos cercanas a ella. Además, las líneas de conexión son portadoras de una pequeña cantidad de información. El principio de localidad conlleva que ninguna unidad de proceso tenga una visión global del sistema; no hay un controlador central. Por lo tanto, podemos decir esquemáticamente que (ver la figura 1.3.1):

Computación Celular = Simplicidad + Paralelismo inmenso + Localidad Algunos modelos de computación celular son:

a) Los autómatas celulares, que fueron concebidos a finales de los años 40 por Stanislaw Ulam y Jonh von Neumann. Constan de un conjunto de unidades de proceso, llamadas células, colocadas sobre los nodos de una rejilla, cada una de las cuales puede presentar un estado de un conjunto finito de estados posibles. El estado que presentan dichas unidades se actualiza en pasos discretos según una cierta regla de interacción (función de transición) que depende del estado que presentan en ese momento las unidades de proceso vecinas. Desde el principio, los autómatas celulares se han utilizado como modelos formales en la física, la biología y la informática.

Page 17: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

17

b) Las redes neuronales celulares, constituidas por un conjunto de unidades de proceso, llamadas neuronas, cuyos valores posibles pueden ser discretos o continuos y el valor que presenta cada unidad neuronal viene dado por una función que depende de una combinación lineal de los estados de las unidades vecinas. Se puede aplicar, por ejemplo, en análisis de imágenes para extraer el contorno de los objetos para su posterior reconocimiento e identificación.

c) La computación ADN, que utiliza unidades moleculares (ADN) y esta inspirada en

la biología molecular. Aunque las unidades moleculares no son demasiado simples pues pueden exhibir un comportamiento biológico complejo, sin embargo, se pueden tratar como elementos simples, desde un punto de vista computacional, al poder realizar sólo unas cuantas operaciones básicas en el tubo de ensayo. Para encontrar el camino Hamiltoniano entre dos vértices dados (un camino que pasa sólo una vez por cada vértice), Adleman (1994) utilizó oligonucleótidos, es decir, cadenas cortas de hasta 20 nucleótidos, para codificar los vértices y la aristas de un grafo dado. A continuación, colocó múltiples copias de los oligonucleótidos en un tubo de ensayo; los oligonucleótidos se enlazaban unos con otros formando moléculas que representan caminos del grafo. Aplicó entonces procedimientos de la biología molecular para tamizar la plétora de soluciones moleculares ADN candidatas. Es decir, encontrar si existe o no un camino Hamiltoniano. El tamaño enormemente pequeño de estas moléculas permite un paralelismo inmenso sobre una escala completamente nueva. Además, serán más rápidas, más eficientes energéticamente y capaces de almacenar mucha más información que los ordenadores actuales.

d) Las estructuras autorreproductoras, que fueron estudiadas por von Neumann a

finales de los cuarenta. Chou y Reggia (1998) han usado bucles reproductores para resolver el problema NP-completo de la satisfacibilidad que consiste en ver si existe valores de verdad que hacen verdadero un predicado (literal). Cada bucle representa a una posible solución de factibilidad para el problema; cuando se reproduce un bucle se obtiene un bucle hijo que representa a una solución candidata diferente, que a su vez se vuelve a reproducir. Bajo un forma de selección artificial, las reproducciones que representa soluciones prometedoras proliferan y las que no se eliminan.

1.4.1. Características de un sistema básico de Computación Celular Los modelos de computación celular son muy flexibles y se puede adaptar para la realización de tareas específicas, según las características de las unidades de proceso, que llamaremos unidades celulares o simplemente células. 1.4.1.1 Tipos de células Las células toman una valor de un conjunto de valores posibles, que puede ser discreto (en cuyo caso el valor se llama estado) o continuo (analógico).

Page 18: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

18

1.4.1.2 Comportamiento El comportamiento dinámico de la célula viene determinado por una función de los valores de sus células vecinas. Dicha función puede venir dada por alguna de las siguientes formas:

• Una enumeración exhaustiva, utilizada para células discretas, donde el estado que debe presentar cada célula, según la configuración de estados de la células vecinas, viene recogido en una lista.

• Una función parametrizada (lineal o no lineal) que describe el estado siguiente de cada célula como una correspondencia con los estados de las células vecinas.

• Un programa que computa el estado siguiente de cada célula según los estados de las células vecinas.

• Una regla de conducta que especifica el comportamiento en diferentes situaciones. Dicha regla puede estar inspirada en la biología molecular o en la física cuántica.

1.4.1.2 Movilidad Además de cambiar sus valores, las células se puede cambiar también su situación dentro de un ambiente dado y, por lo tanto, pueden ser, o no, móviles. 1.4.1.3 Conectividad La comunicación entre células se realiza según un esquema de conectividad específico. Así, las células pueden estar colocadas sobre los vértices de una rejilla regular con una geometría dada, como puede ser rectangular, triangular, hexagonal, etc. En la rejilla rectangular cada célula sólo tiene 4 vecinas (figura 1.3.2). La regularidad quiere decir que todas las células tienen que tener el mismo esquema de conexión. Así, el esquema de conectividad puede ser regular o irregular.

Figura 1.3.2. Células colocadas sobre una rejilla rectangular Cuando la rejilla es finita tenemos que especificar las condiciones de las células que están en la frontera, por ejemplo, como neuronas que no cambian de estado con el tiempo. También podemos evitar tener células en la frontera utilizando superficies como el toro. Asimismo, las células pueden constituir los vértices de un grafo dirigido. Aunque se puede considerar esquemas de conexión donde todas las células estén conectadas entre sí, pero este esquema cae fuera del ámbito de la computación celular.

Page 19: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

19

1.4.1.4 Líneas de conexión La conexión entre las unidades celulares es simple, es decir, la información transmitida por ellas es pequeña, generalmente sólo se transmiten los valores de estado de las células vecinas. 1.4.1.6 Topología celular El propio esquema de conectividad induce una topología en las unidades celulares. Sin embargo, en algunas formas de computación celular las unidades celulares no están colocadas sobre rejillas o grafos sino que están en un ambiente que provoca contactos a causa del movimiento aleatorio o dirigido de las mismas, como ocurre en la computación ADN, donde no hay una topología rígida. Esto mismo ocurre también en la computación basada en hormigas. 1.4.1.7 Dinámicas temporales El sistema se va actualizando (cambiando, o no, de estados) con el tiempo, y cada actualización se hace en cada instante o periodo de tiempo. En una dinámica temporal sincronizada (paralela) se actualizan todas las células al mismo tiempo (simultáneamente) o un bloque específico de las mismas, mientras que en la computación asíncrona (secuencial) se actualiza sólo una célula cada vez, siguiendo una cierta secuencia, que puede ser aleatoria. La actualización se puede hacer a intervalos regulares de tiempo, es decir, en términos de sucesos temporales discretos, y la llamaremos actualización discreta. Si no se hace ninguna división discreta del tiempo, la actualización es instantánea, es decir, continua. 1.4.1.8 Uniformidad Se dice que el sistema es uniforme si todas las células son del mismo tipo, es decir, son idénticas y así ejecutan la misma función. Hay sistemas celulares no uniformes, donde células diferentes ejecutan funciones de transición diferentes. La no uniformidad puede ser una ventaja computacional. 1.4.1.9 Determinismo frente al no determinismo El sistema es determinístico si para una entrada dada el sistema siempre toma la misma configuración de estados, y por tanto, termina con la misma salida. En un sistema no determinístico para una misma entrada podemos tener varias configuraciones de estados posibles que conducirán, posiblemente, a salidas diferentes. Según como sea la función de transición de la célula, podemos tener un sistema determinístico o no determinístico.

Page 20: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

20

1.4.2 Comportamiento Para ver el comportamiento de un sistema de computación celular como un todo vamos a analizarlo en diferentes facetas. 1.4.2.1 Programación La computación celular requiere nueve técnicas de programación. Distinguiremos dos tipos:

a) Programación directa, donde el programador especifica completamente el sistema en su conjunto de salidas. Así, cuando el sistema recibe una entrada que es un ejemplo o instancia del problema en consideración, el sistema computa una salida correcta.

b) Métodos adaptativos, donde el programador no puede especificar completamente todo el conjunto de salidas, sino sólo parcialmente, y entonces recurre a procesos de aprendizaje, evolución o autoorganización para conseguir la funcionalidad deseada. Así, métodos de aprendizaje y algoritmos evolutivos se ha aplicado a las redes neuronales celulares para encontrar los parámetros de la función de transición con el fin de resolver algún problema dado. Los algoritmos evolutivos se han aplicado a la computación ADN para encontrar buenos códigos de secuencias de nucleótidos.

1.4.2.2 Entradas y salidas Tenemos que especificar las entradas y salidas del sistema según el problema que vayamos a resolver y utilizar una representación adecuada en el modelo celular. Además, tenemos que ver cómo se presentan las entradas a dicho modelo y como se leen las salidas. 1.4.2.3 Implementación Aunque la mayoría de los experimentos en computación celular se llevan a cabo en ordenadores convencionales, el objetivo fundamental es la construcción de máquinas basadas en unidades celulares para conseguir realmente la potencia de la computación celular. En estas el coste se deberá fundamentalmente a las conexiones y no a las unidades de proceso. Hasta la fecha se ha desarrollado varias implementaciones, por ejemplo:

• Implementación de autómatas celulares como hardware digital de propósito general.

• Implementación de autómatas celulares usando procesadores configurables. • Un chip analógico de redes neuronales celulares. • Computación molecular en tubos de prueba • Autómata celular de puntos cuánticos donde los estados no se codifican como

voltajes, como con las arquitecturas digitales convencionales, sino por la posiciones de electrones individuales.

En computación celular no se diseña un modelo teórico y después se implementa sino que ambas cuestiones se deben considerar simultáneamente.

Page 21: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

21

1.4.2.4 Escalabilidad La computación celular permite una mayor escalabilidad que la computación clásica debido a su conectividad local, a la ausencia de un procesador central que tenga que comunicarse con cada célula y a la propia simplicidad de las unidades celulares. La adición de nuevas unidades celulares no es ningún problema. 1.4.2.5 Robustez La robustez de un sistema es su capacidad para funcionar adecuadamente frente a fallos en alguna de sus partes. Cuando una célula funciona incorrectamente entonces los enlaces de comunicación fallan y nosotros deseamos que el sistema continúe funcionando correctamente o que la degradación sea aceptable. La conectividad local favorece la contención de los fallos más fácilmente al reducir los fallos a una región y previene así la expansión al sistema, de manera que una enorme cantidad de células permanecerán operativas y funcionando correctamente. 1.4.2.6 Jerarquización La descomposición jerárquica está presente en las ciencias de la computación, a nivel de lenguajes de programación, de códigos, de lenguajes máquina y a nivel de transistores. Las jerarquías aparecen en la naturaleza, de la molécula se pasa a la célula y de la célula a un organismo, así como las jerarquías de procesamiento en el sistema visual, que comienza con el registro de la imagen en la retina (bajo nivel) y termina con el reconocimiento de objetos (alto nivel). Estas formas jerárquicas también aparecen en la computación celular, bien fijadas en el conjunto de salidas o emergen mediante la programación adaptativa. 1.4.2.7 Problemas locales frente a problemas globales Un problema local contempla la computación de una propiedad en términos puramente locales, como ocurre con el funcionamiento de una unidad celular. Un problema global contempla la computación de una propiedad general del sistema. Así, un reto para el diseñador de modelos celulares es encontrar reglas de interacción local para resolver problemas globales. 1.4.3 ¿Para qué áreas de aplicación es adecuada la computación celular?

• La computación celular encuentra soluciones rápidas y eficientes para problemas

NP-completos que se presentan en diferentes dominios, como en diseño de redes, teoría de grafos, lógica, optimización combinatoria, secuenciación, localización, búsqueda, determinación de rutas óptimas, etc.

• Los modelos celulares encuentran una aplicación natural al procesamiento de imágenes digitales, como consecuencia de su arquitectura, pues al ser las imágenes matrices bidimensionales podemos utilizar rejillas rectangulares y representar cada

Page 22: Introducción - Departamento Lenguajes y Ciencias de …munozp/documentos/modelos_computacionales/tem… · enunciado verdadero, y que • no admitan contradicciones, es decir, que

22

píxel de la imagen mediante una unidad celular, y diseñando la máquina para que haga tareas propias del procesado de imágenes.

• También se ha utilizado modelos celulares para generar números aleatorios de alta calidad.

• La capacidad de la computación celular para realizar operaciones aritméticas permite que se puedan construir calculadoras rápidas a una escala increíblemente pequeña (nanométrica).