Generación de números aleatorios


La generación de números aleatorios es un proceso mediante el cual, a menudo por medio de un generador de números aleatorios ( RNG ), se genera una secuencia de números o símbolos que no se puede predecir razonablemente mejor que por azar . Esto significa que la secuencia de resultados particular contendrá algunos patrones detectables en retrospectiva pero impredecibles para la previsión. Los verdaderos generadores de números aleatorios pueden ser generadores de números aleatorios de hardware(HRNGS) que generan números aleatorios, donde cada generación es una función del valor actual del atributo de un entorno físico que cambia constantemente de una manera que es prácticamente imposible de modelar. Esto estaría en contraste con las llamadas "generaciones de números aleatorios" realizadas por generadores de números pseudoaleatorios (PRNG) que generan números que solo parecen aleatorios pero que, de hecho, están predeterminados; estas generaciones pueden reproducirse simplemente conociendo el estado del PRNG. .

Varias aplicaciones de la aleatoriedad han llevado al desarrollo de varios métodos diferentes para generar datos aleatorios . Algunos de estos han existido desde la antigüedad, entre cuyas filas se encuentran ejemplos "clásicos" bien conocidos, que incluyen el lanzamiento de dados , el lanzamiento de monedas , el barajado de cartas , el uso de tallos de milenrama (para la adivinación ) en el I Ching., así como otras innumerables técnicas. Debido a la naturaleza mecánica de estas técnicas, generar grandes cantidades de números suficientemente aleatorios (importantes en estadística) requería mucho trabajo y tiempo. Por lo tanto, los resultados a veces se recopilarían y distribuirían como tablas de números aleatorios .

Existen varios métodos computacionales para la generación de números pseudoaleatorios. Ninguno de ellos alcanza el objetivo de la verdadera aleatoriedad, aunque pueden cumplir, con éxito variable, algunas de las pruebas estadísticas de aleatoriedad destinadas a medir cuán impredecibles son sus resultados (es decir, hasta qué punto son discernibles sus patrones). Esto generalmente los hace inutilizables para aplicaciones como la criptografía . Sin embargo, también existen generadores de números pseudoaleatorios criptográficamente seguros (CPRNGS) cuidadosamente diseñados , con características especiales diseñadas específicamente para su uso en criptografía.

Los generadores de números aleatorios tienen aplicaciones en juegos de azar , muestreo estadístico , simulación por computadora , criptografía , diseño completamente aleatorio y otras áreas en las que es deseable producir un resultado impredecible. En general, en aplicaciones que tienen la imprevisibilidad como característica primordial, como en aplicaciones de seguridad, los generadores de hardware son generalmente preferidos a los algoritmos pseudoaleatorios, cuando sea factible.

Los generadores de números pseudoaleatorios son muy útiles para desarrollar simulaciones con el método de Monte Carlo , ya que la depuración se ve facilitada por la capacidad de ejecutar la misma secuencia de números aleatorios nuevamente comenzando desde la misma semilla aleatoria . También se utilizan en criptografía, siempre que la semilla sea ​​secreta. El remitente y el receptor pueden generar el mismo conjunto de números automáticamente para usarlos como claves.

La generación de números pseudoaleatorios es una tarea importante y común en la programación de computadoras. Mientras que la criptografía y ciertos algoritmos numéricos requieren un alto grado de aleatoriedad aparente , muchas otras operaciones solo necesitan una cantidad modesta de imprevisibilidad. Algunos ejemplos simples podrían ser presentarle a un usuario una "cita aleatoria del día" o determinar en qué dirección podría moverse un adversario controlado por computadora en un juego de computadora. Las formas más débiles de aleatoriedad se utilizan en algoritmos hash y en la creación de algoritmos de búsqueda y clasificación amortizados .


Los dados son un ejemplo de un generador de números aleatorios de hardware mecánico. Cuando se lanza un dado cúbico, se obtiene un número aleatorio del 1 al 6.
Demostración de un generador de números aleatorios simple basado en dónde y cuándo se hace clic en un botón