domingo, 29 de abril de 2012

de lo Aleatorio a lo Complejo


Los compiladores de los diferentes lenguajes de programación suelen tener una función (RAND) para generar números aleatorios. 
Verdaderamente, los números que generan no son aleatorios sino que sólo lo parecen. Simplemente siguen un algoritmo congruencial que produce que no nos demos cuenta de que, realmente, los números son tan determinados como los que genera la cadena “12345678…”. 
Y es que el problema es difícil. 
Los algoritmos o programas, por definición, son pautas para generar cadenas de código, es decir, son reglas para determinar la salida de números determinados por esas mismas reglas.
 ¿Cómo hacer unas reglas para generar números que, precisamente, 
se definen por no sujetarse a regla alguna?
Por eso me he quedado atónito cuando leo aquí que han conseguido generar números verdaderamente aleatorios (42 nada menos), pero claro, a partir del mundo cuántico, sección de la realidad 
que tengo prohibida por receta médica. 

Pero, ¿qué es realmente un número aleatorio? 
Una definición  muy atractiva es la que da el ruso Kolmogorov en una magistral fusión entre computación y teoría de la información. 
Un algoritmo es un programa que en un número preciso y finito de pasos genera un código, una cadena de símbolos. 
Habitualmente, los programas son más cortos que las cadenas que producen (esta propiedad se llama compresividad y posibilita, desde una perspectiva computacional, las  leyes científicas). 
 Un programa mucho más largo que el código que produce sería un absurdo, ya que siempre podríamos generar un programa más corto que estableciera una función biyectiva (“uno a uno”) entre el programa y el código a generar de modo que tendría su misma longitud. 
Es decir, el programa más largo posible tiene la misma longitud que el código que genera. Y, sin casi quererlo, ese código es un número aleatorio.

Si tenemos un número que genera nuestro programa y conocemos el algoritmo que lo genera, estamos ante un número no aleatorio.
Tenemos pautas para determinarlo, para crearlo. 
Sin embargo, si no disponemos de ningún algoritmo para generar ese número más que uno de similar longitud a él mismo, 
es porque no hay reglas que lo determinen.

Otro punto interesante del planteamiento de Kolmogorov es que su comparación entre la longitud del programa y la de la cadena que genera nos vale para medir la complejidad de los sistemas.
 Así, un sistema será más complejo que otro cuanto más largo sea el programa mínimo que lo computa. 
Entonces, cuanto más aleatorio seas, tanto más complejo serás. 
Aleatorio y complejo se hacen sinónimos ¿Cómo de complejos somos los seres vivos? 

Veámoslo en un texto de Mosterín:

“Uno podría pensar, por ejemplo, en medir la complejidad de un organismo por la longitud de su genoma (es decir, por la longitud de la secuencia de bases o letras que codifican su información genética), pero los resultados de esta medida no siempre corresponden a nuestras intuiciones. Algunos anfibios tienen más DNA por célula que los mamíferos (incluidos nosotros). Las cebollas tienen cinco veces más DNA por célula que los humanes,
 ¡Y los tulipanes, diez veces más!

Desde luego, la mera longitud del DNA es un indicador muy tosco de la complejidad. La medida matemáticamente más refinada es la de Komogorov: la complejidad de una secuencia es la longitud del mínimo programa que la genera (en cierta máquina universal de Turing estandarizada). 
Así, las numerosas partes repetitivas del llamado “DNA basura” que comprende la mayor parte del genoma de muchos organismos pueden ser en gran medida descontadas, pues pueden ser generadas por un programa relativamente corto. 
La reciente secuenciación de los genomas de varios organismos nos podría permitir intentar medir su complejidad de Kolmogorov, pero la tarea no tiene nada de trivial, pues se trata de una función no computable en general. 
En cualquier caso, esta medida no se ha computado todavía, y, si llegara a hacerse, nada nos asegura que vaya a corresponder a nuestras expectativas. Según la medida de Kolmogorov, los sistemas más complejos no son seres vivos (parcialmente simétricos y repetitivos), sino los completamente caóticos, como la “nieve” de la pantalla del televisor no sintonizado”

Los seres vivos estamos muy ordenados, tenemos múltiples repeticiones. 
Sin embargo, el comportamiento de un gas o de la misma nieve de la tele… ¡requiere un programa más largo!
 ¡Soy menos complejo que un canal mal sintonizado de mi tele!
O sea, que si Dios fuera un superprogramador informático, 
los seres humanos no seríamos, ni de lejos, lo más difícil de programar… 

Qué¡Toma golpe al Principio Antrópico!