Computación cuántica (III): de los qubits a los computadores cuánticos

La unidad de información en el mundo cuántico es el qubit (del inglés “quantum bit”). Un qubit puede tener los estados 0 y 1, pero a diferencia de los bits clásicos, también puede tener una superposición de estos estados. Siendo poco rigurosos, podemos ver estas superposiciones como estados intermedios entre 0 y 1 (en realidad, son combinaciones de dichos valores). Para construir un computador cuántico, es necesario resolver diversos retos técnicos, el primero de los cuales es: ¡cómo “construir” un qubit!. Además, hay que representar los qubits, operar con ellos, definir el valor inicial de los qubits al inicio del cálculo y medir el resultado final. Es decir, el qubit deberá corresponder a alguna propiedad física de una partícula, y todas las manipulaciones sobre los qubits deberán poder realizarse alterando dicha propiedad de alguna forma. Además, deberá ser posible fijar un valor concreto para dicha propiedad (para inicializar los qubits) y medir dicha propiedad para obtener el resultado al final del cálculo. Fijémonos en la paradoja que todo esto comporta. Por un lado, necesitamos disponer de un control muy preciso sobre las propiedades que se usan para codificar los qubits; pero por otro, también nos interesa que nuestro computador esté lo más aislado posible, para garantizar que dichas propiedades no son alteradas por interferencias externas. Estas interferencias, denominadas ruido cuántico, nunca pueden eliminarse del todo al tratarse de fenómenos a escala subatómica. Por eso, es necesario disponer de mecanismos de redundancia para garantizar la fiabilidad del resultado, igual que se usan códigos correctores de errores para detectar y/o reparar errores de comunicación. Este punto es especialmente importante, ya que...

Computación cuántica (II): un nuevo paradigma

El modelo actual de ordenador no es el único posible. Existen otros paradigmas para diseñar un ordenador que son radicalmente diferentes al modelo “convencional”. Un potencial cambio de paradigma se refiere a la electrónica digital: los ordenadores representan la información de forma discreta, usualmente con los valores 0 o 1. Para hacerlo, se consideran dos niveles de voltaje: el nivel “tierra” (0) y el voltaje proporcionado por la fuente de alimentación (1), con un cierto margen de tolerancia para cada nivel. A partir de estos valores pueden realizarse operaciones lógicas (las definidas en el álgebra de Boole, como AND, OR o NOT), que en la práctica se implementan como puertas lógicas mediante transistores que transmiten o bloquean el voltaje para reflejar el resultado de la operación. Pero también hay dispositivos que utilizan un modelo de computación analógica, donde la información se almacena como una magnitud continua: no hay rangos de valores discretos (entre A y B, el valor es X), sino que se utiliza el valor completo de una magnitud. El uso de valores continuos introduce el problema del ruido: fluctuaciones imprevistas que pueden distorsionar este valor y que limitan el rango de valores observables y la precisión. Este problema también aparece en la electrónica digital, pero se resuelve con los márgenes de tolerancia definidos para cada nivel de voltaje. Cabe destacar que esta magnitud puede ser el voltaje en un cable, pero también podrían ser magnitudes mecánicas (p.ej. la contracción de un muelle elástico) o hidráulicas. Así pues, no es necesario limitarse a propiedades electrónicas para implementar un ordenador: es posible cambiar a un paradigma basado en otras...

Computación cuántica (I): el fin de los ordenadores clásicos

Los ordenadores actuales son descendientes de la Máquina de Turing. Este modelo matemático fue creado por Alan Turing para dar respuesta al Entscheidungsproblem (en alemán, “problema de decisión”), una de las cuestiones centrales de la informática teórica. Las Máquinas de Turing utilizan como memoria una cinta con un número infinito de posiciones y un cursor que puede leer una posición de la cinta, modificar su contenido o desplazarse una posición a la izquierda o a la derecha. El “código” de la máquina de Turing es el conjunto de reglas predefinidas que indican qué acciones debe realizar el cursor según el contenido de la cinta, mientras que los “datos de entrada” sería el contenido inicial de la cinta. También es posible definir una Máquina de Turing Universal que recibe como entrada el código de una máquina de Turing y unos datos de entrada y simula la ejecución de dicha máquina de Turing. Esta Máquina de Turing Universal es uno de los antecesores del concepto de “programa almacenado”: pensar en el programa como un dato más que puede leerse (para ejecutarse) o incluso modificarse. Puede parecer un concepto evidente, pero hasta ese momento la mayoría de máquinas tenían un propósito específico (un problema, una herramienta). Esta idea de máquina “programable y de propósito general” se había utilizado en el campo de las máquinas de tejer (para coser patrones complejos definidos mediante una tarjeta perforada), pero aquí se aplicaba a la realización de cálculos. Aunque excelente como modelo teórico, la Máquina de Turing tiene una arquitectura poco útil desde un punto de vista práctico y existen formas de diseñar una máquina más...

Robótica y programación educativas

Llevamos ya algún tiempo escuchando las bondades del uso educativo de la robótica y la programación, tanto que ya parece que todos aquellos que somos padres o/y maestros deberíamos tener alguna herramienta que nos permitiese introducir a nuestros hijos o alumnos, en este fascinante mundo. Evidentemente no es así, pero dada la cantidad de herramientas disponibles y lo útiles y entretenidas que resultan para los niños muchas de ellas, vale la pena echarles un ojo y valorar si deseamos o no usarlas. En este artículo vamos a hacer un breve repaso por algunas de ellas, intentando explicar sus características, aunque sin entrar a fondo en sus ventajas e inconvenientes. Dividiremos el artículo en dos apartados, uno de software y el otro de hardware, aunque, inevitablemente, en el apartado de hardware nos tocará en muchas ocasiones hablar también de software. Por otra parte, casi todo el software del que hablaremos aquí es gratuito, mientras que para el hardware será necesario hacer algún tipo de inversión económica que variará según el producto y donde se compre. Como la robótica y la programación son interesantes para todos los públicos, también incluimos recursos sobre programación y robótica para todas las edades. Para acabar comentar que no está todo lo que hay. Hemos hecho un resumen a partir de aquello que conocemos. Sin embargo, las posibilidades son casi infinitas y continuamente nuevos proyectos ven la luz ampliando el abanico de posibilidades. Software En este apartado veremos plataformas y aplicaciones software que permiten introducir(nos) en la programación. Empezaremos por aquellas que permiten aprender a programar de una manera sencilla y con un conjunto de instrucciones...

El procesador que no sabía dividir

Como sociedad estamos muy acostumbrados a los fallos de software. De hecho, el “reinicia el ordenador” como solución mágica a cualquier problema ya forma parte de la cultura popular. Sin embargo, en lo que se refiere al hardware, tenemos expectativas muy diferentes: como todas las cosas “físicas” funciona siempre, y cuando se estropea se substituye por otro nuevo y todo vuelve a funcionar mágicamente. Pero no siempre es así…. Retrocedamos un poco en el tiempo. En 1993 Intel, uno de los principales fabricantes de procesadores del mundo, lanza una nueva gama de procesadores. Sus procesadores anteriores (80286, 80386 y 80406) habían tenido mucho éxito, hasta el punto que compañías rivales como AMD habían buscado nombres similares a sus procesadores compatibles (como Am386 o Am486). Intel ya había lanzado una campaña muy agresiva de márqueting para diferenciarse (“Intel Inside“), que busca continuar creando una marca registrada para sus procesadores que no pudiera utilizar la competencia. Se decidió llamar a esta nueva gama de procesadores Pentium, como guiño al “5” en 80586. En 1994, el profesor de matemáticas Thomas Nicely estaba escribiendo un programa para un proyecto de investigación. El programa estudiaba propiedades de números primos muy grandes, buscando por ejemplos números primos gemelos. Se trataba de un proyecto de cálculo intensivo, que llevaba 13 años ejecutándose en diversos sistemas y al que se añadió un ordenador con un procesador Pentium en marzo de 1994. El 13 de junio detectó algunas inconsistencias en los resultados, que atribuyó a un problema en el código generado por el compilador. En septiembre se volvió a ejecutar el código corregido, sólo para detectar un mes más tarde que un nuevo error estaba apareciendo: una discrepancia en el...