Los eventos aleatorios se presentan a todo nuestro alrededor. Sin embargo, aun cuando son útiles en múltiples aplicaciones modernas, las computadoras son incapaces de producirlos. ¿Por qué estos números se escapan de su alcance?

Alguna vez has puesto una lista de reproducción en modo aleatorio? ¿Te has preguntado cómo funciona esto en realidad? ¿Cómo escoge una máquina la siguiente canción para reproducir?

Las computadoras son quizá uno de los inventos más importantes de nuestra época. Podemos pensar en estas como cajas negras en las cuales entran unos datos (llamados comúnmente entradas) y salen otros (llamados salidas). Toda operación de una computadora se puede reducir a esto: un procesamiento de información.

Por ejemplo, cuando iniciás sesión en una página web como Facebook, la computadora toma como entradas tu correo electrónico y tu contraseña y produce como salida toda la información que podés ver en tu página de inicio. Como otro ejemplo podemos tomar WhatsApp. Cuando enviás un mensaje, el teléfono (un teléfono inteligente es en realidad una pequeña computadora) toma como entrada el mensaje y genera como salida el mismo mensaje, junto con alguna información del destinatario, solo que a través de un canal distinto: la red.

Las computadoras, además, están construidas para ser determinísticas. Es decir, dado un conjunto de entradas, las salidas van a ser siempre las mismas. Por ejemplo, cuando entrás a Facebook, si ponés tu usuario y tu contraseña, esperarías siempre entrar a tu propia cuenta, y no a la de alguien más.

De nada serviría que la máquina decidiera aleatoriamente a cuál cuenta entrar. Esto, sin embargo, genera un problema: hay veces en las que sí es deseable que una computadora haga algo aleatorio. Ya mencionamos el ejemplo de la lista de reproducción, pero la aleatoriedad también es necesaria en muchos campos, desde cosas triviales como los videojuegos, hasta en simulaciones o en criptografía.

Sabiendo entonces que una computadora, como máquina que es, no puede producir resultados espontáneos, ¿cómo es que esta puede escoger, por ejemplo, el orden de las cartas en el mazo cuando jugás Solitario, o cuál canción reproducir a continuación en tu lista de Spotify? ¿Cómo programamos una computadora para escoger “lo que ella quiera”?

La respuesta es: no lo hacemos. Es imposible para una computadora generar números aleatorios (y por lo tanto generar cualquier evento aleatorio, puesto que todo dentro de una computadora se representa por medio de números). Lo que queremos decir con esto es que, dado un conjunto de entradas siempre es posible determinar las salidas que producirá una computadora. Pero claro, ya habíamos dicho esto cuando dijimos que las computadoras son determinísticas. Las hemos construido justamente para ser así. Para generar eventos aleatorios, existen dos acercamientos: el uso de números pseudoaleatorios, o tomar un número aleatorio de una fuente externa.

Los números pseudoaleatorios, como su nombre da a entender, son números que no son realmente aleatorios, pero que lo parecen. Estos números siguen un patrón, que, sin embargo, suele ser largo y poco evidente. Por ejemplo, observá la siguiente secuencia de números:

744,744,744,224,852,994,757,724,617,740,476,717,653

 

A simple vista, no se nota ningún patrón. Sin embargo, estos números han sido generados por medio del algoritmo inventado por la NSA conocido como SHA-256, el cual genera números pseudoaleatorios (se usó esta implementación por la Universidad de Berkeley para generarlos). Si tuviéramos una serie de números construidos por el algoritmo lo suficientemente larga (y posiblemente haciendo uso de mucho tiempo y esfuerzo) seríamos capaces de predecir con total certeza el siguiente número en la secuencia.

En esta página web podés ver dos imágenes de simples puntos negros y blancos generadas usando, en la primera, números realmente aleatorios y, en la segunda, números pseudoaleatorios. Quizá con solo ver una pequeña porción de la segunda imagen sería difícil encontrar un patrón, pero viendo la imagen completa es evidente que un patrón emerge.

números aleatorios (random.org bitmap)

números aleatorios (PHP rand() on Windows Bitmap)

Los números pseudoaleatorios funcionan bien para aplicaciones triviales, como organizar una lista de reproducción o los videojuegos. Sin embargo, para aplicaciones donde es realmente importante que sea imposible predecir el siguiente número en una secuencia, como en la criptografía o en la generación de simulaciones que sean lo más exactas posibles, se utilizan números realmente aleatorios.

Y dado que las computadoras no pueden producir esta clase de números, estos se toman como una entrada más, tomada de una fuente externa. Por ejemplo, la página web RANDOM.ORG  utiliza datos tomados de fuentes como el ruido atmosférico, el cual tiene un comportamiento muy difícil de predecir, para producir números realmente aleatorios.

Muchas veces le atribuimos a las computadoras capacidades humanas. Tendemos a personificarlas, imaginando que internamente “piensan” de una manera similar a como nosotros lo hacemos. Es importante entender, sin embargo, que sus capacidades son tan limitadas como las de cualquier otra máquina, y que su funcionamiento puede ser explicado perfectamente sin atribuirles una mente humana.

Es importante recordar que las computadoras son simplemente máquinas al servicio de las personas.

Share This: