Disculpe, ¿Señora Azar, me deja programar?
Barcelona representa lo más cercano a lo que idealice desde joven. Pues tengo todo lo que necesito —que tampoco es mucho—. Me gusta ir a las mismas cafeterías, a los mismos bares, a las mismas librerías, ir a caminar por las mismas calles, e incluso ir al mismo parque. Soy un hombre de rutina. Me gusta. Acaso porque no me gusta el azar.
Un libro que me cambió la forma de interpretar la vida y que, después de todo, no todo depende de nosotros y nuestras decisiones es ¿Existe la Suerte?, de Nassim Nicholas Taleb.1 Matemático, ensayista, probabilista, «gruñón» y también filosofó, Taleb, en este libro nos presenta (o recuerda) que muchos de los sucesos que ocurren en nuestra vida son producto del azar, para bien o mal, quizá ha escuchado la frase «todo depende del lugar y momento», «estar en el lugar indicado, en el momento preciso», esto puede significar cuestiones positivas como: «conocer al amor de tu vida justo cuando estabas en una cafetería cualquiera», «conocer a una persona que te ofrece una oferta laboral imposible de rechazar», «perder el tren que, unos minutos después se va a descarrilar» (para mala suerte de otros). En otros casos, «haber subido al avión que se va a estrellar», «nunca poder encontrar un trabajo que te haga feliz», «tener una totalidad de decepciones amorosas», etcétera. Usted ya entiende la idea.
No todo es una consecuencia deliberada de nuestras acciones. Aunque creamos que sí. Eso, por supuesto, no significa llevar una actitud ante la vida de, «bueno, teniendo en cuenta que no tengo el control de nada, no haré nada».2 Es más bien una precaución y alerta, tener claro que, muchos de nuestros logros y fracasos, no están bajo nuestro control. Vivimos dentro de un sistema complejo, vivir en sociedad lo es.
Cuando usamos en programación la función random, no es en realidad un valor aleatorio, es lo que los especialistas llaman: un valor pseudoaleatorio. Porque no hay un azar total, al final hay instrucciones muy específicas que nos permiten generar una secuencia de «números aleatorios», por ello, es que podemos agregar una semilla (seed) para volver a producir la misma secuencia de números aleatorios cada vez que se invoca la función rand.
Antes bien, esto no resulta en un problema grave para la mayoría de los programadores. Pues son pocos los que realmente requieren un azar «real», como puede ocurrir cada vez que vamos a caminar por un bosque y se cae una rama sobre nuestras cabezas (que nos causa un pequeño dolor, pues es pequeña y frágil, claro, tenemos suerte). En áreas de optimización, por ejemplo, los algoritmos de aproximación, donde hay algoritmos que se inspiran en la naturaleza tales como el de la colonia de hormiga (Ant Colony System) o los algoritmos genéticos: los valores pseudoaleatorios están siempre presente y no se requiere un mayor azar, mayor precisión.
En cualquier caso hay intentos de añadir verdaderos valores aleatorios a un computador. Esto es útil y práctico, por ejemplo, en sistemas que necesitan simular nuestro entorno, y dado que, nuestro entorno si tiene un azar real, entonces es una manera de que sea lo más cercano a cómo funciona nuestro mundo. Las simulaciones computacionales son toda una área de investigación; los flujos de agua, predicción del tiempo, simulación de accidentes automovilísticos, simuladores de vuelo, emisiones radioactivas, son algunas posibles simulaciones con utilidad práctica. Aunque no las únicas.
A estos verdaderos generadores de números aleatorios se les conocen como True Random Number Generator (TRNG), son sistemas no determinísticos. Y puesto que cualquier computador clásico (no cuántico) sigue un conjunto fijo de instrucciones, no es posible crear un algoritmo no determinístico que trabaje de manera aislada. Por tanto, esto no se suele hacer sin tener un hardware externo que registre el «ruido» o «entropía» de una fuente de datos no determinista y pasarla a un computador, a esto se le llama TRNG.
En la actualidad hay hardware como el siguiente:
Redoubler es un hardware open source (sí, también hay hardware open source) que detecta el ruido térmico para generar verdaderos valores aleatorios,3 lo cual, al menos, se transforma en una fuente más fiable en áreas como la criptografía y en las mismas simulaciones.
Un libro que presenta una introducción amena y profunda —para programadores e ingenieros—a los diversos tipos de generadores aleatorios que son posible crear con un computador (incluso cuántico), llevada, a temas como la seguridad (criptografía) y al uso de diversas herramientas de software es Random Number Generators—Principles and Practices: A Guide for Engineers and Programmers (2018) de David Johnston.
Crear verdaderos números aleatorios es una labor complicada. Muy complicada. Pues nuestros computadores son deterministas por naturaleza, y el mundo real, no funciona así. ¿O sí?
Es internacionalmente conocido por su libro Cisne Negro. Un libro que continúa tratando sobre los eventos altamente improbables (por eso el nombre de cisne negro, ¿existen cisnes negros? Sí, pero son raros).
Le sugiero leer sobre la Filosofía Estoica. Quizá Séneca sea un buen lugar de introducción.
Para una comprensión más técnica le recomiendo leer https://www.reddit.com/r/AskElectronics/comments/jukrml/trying_to_understand_modular_entropy/