Para una computadora, ¿qué tan aleatorio es ser aleatorio?

Originalmente respondido: para una computadora, ¿qué tan aleatorio es ser aleatorio?

Esta pregunta tiene dos respuestas: 1) nada aleatorio o 2) completamente aleatorio.

1) Nada aleatorio

En este caso, hay un algoritmo llamado generador de números pseudoaleatorios (PRNG) que hace algo de discusión para crear una secuencia de números aleatorios. Este algoritmo generalmente es una máquina de estados que toma los valores en algún estado interno, manipula los bits a través de varias operaciones y produce otro número en la serie. Si conoce el estado interno del sistema, puede predecir el siguiente número, ya que es simplemente la misma serie de operaciones.

Puede pensar que estos generan una sola serie de números en el mismo orden que es muy, muy larga. Para obtener una serie de números aleatorios, simplemente elija un punto de inicio inicial en la serie muy larga y tome cada número como el próximo “número aleatorio”.

Supongamos que tenemos esta serie:

54100 2 14 65432 19 14 37105 56 13772105 19

Si comenzara al principio y escogiera 5 números, obtendría

54 100 2 14 65

Pero si comenzara en el 37 obtendría

37 105 56 13 172

Así es como funciona un PRNG, lo que significa que es periódico. Si elijo suficientes números aleatorios, eventualmente llegaré a un estado que es el mismo que el estado inicial y los números comenzarán a repetirse. Cuanto más largo sea el período de PRNG, mejor será PRNG para un uso sostenido.

Un PRNG requiere una semilla que se define como el estado inicial del sistema interno. Generalmente, se trata de una serie de series de números (que es en realidad un número determinado de bits) que inicializan el estado interno del PRNG, estableciendo el número inicial en un número determinado de la serie. Si usa la misma semilla, obtendrá los mismos números exactamente en el mismo orden.

Prueba esto, ve a este sitio:

Planet Map Generator

Ingrese 2016 como semilla, haga clic en “Crear mapa” y obtendrá este mapa:

Este es el mapa generado por el creador del mapa utilizando un PRNG con “2016” como estado inicial. Siempre generará este mapa. Otra semilla generará un mapa diferente.

Usar la misma semilla puede ser muy útil. En los juegos que generan aleatoriamente un mundo o un mapa de juego, cada semilla se convierte en un mapa o juego diferente. Esto se usa en Spider Solitaire como una forma de enviar un juego a otra persona. Puedes decir que el juego “1456234” es muy fácil y otro jugador puede ingresarlo como semilla para obtener el mismo juego. Otro ejemplo es en Minecraft, donde puedes ingresar una semilla en el mundo generador y generar el mismo mundo en cualquier sistema. Ahora, si quieres darle un mundo genial a un amigo, no tienes que enviar tu partida guardada, solo la semilla. Eso es en los juegos, en el mundo de la simulación es mucho más importante tener números aleatorios repetibles.

He escrito muchas simulaciones químicas, donde un número dado de moléculas o átomos están dispuestos en un espacio tridimensional e iteración por iteración, el simulador intenta determinar cómo interactúan esos a distancias y rotaciones dadas. Para determinar el estado “final” de la reacción, la simulación se ejecuta una y otra vez con diferentes semillas y los resultados se correlacionan para determinar los posibles estados de reacción (función softmax). Eso significa que necesito diferentes semillas para las diferentes ejecuciones, pero cuando estoy codificando el software, necesito los mismos números aleatorios una y otra vez durante el desarrollo para permitirme depurar el programa. Esto es necesario porque un error puede aparecer solo en un cierto estado inicial de las moléculas y si fuera aleatorio, nunca podría repetir esa misma configuración en varias sesiones de depuración. Una vez que el software está “libre de errores” (ja), la semilla se almacena como parte de cada ejecución, por lo que si ocurre un error, puedo ingresar esa semilla y depurar lo que salió mal.

2) completamente

Algunos dispositivos de hardware utilizan las propiedades de un dispositivo analógico o un sensor físico para crear números aleatorios reales. Esto podría ser algún efecto secundario como el ruido de avalancha o un semiconductor de polarización inversa, pero también podría ser un sensor físico como un sensor fotoeléctrico que cuenta el número de fotones que golpean un área pequeña en un marco de tiempo determinado. Estos dispositivos, conocidos como un generador de números aleatorios de hardware, son verdaderamente aleatorios y tienen un rendimiento que permite leer un número determinado de bits del dispositivo en un segundo. Esto generalmente está en kilobits por segundo, pero podría estar en megabits. En este caso, es verdaderamente aleatorio, ya que utiliza el ruido o el entorno para crear una secuencia de números aleatorios.

Aquí hay un tuyo:

waywardgeek / infnoise

Aquí hay un popular, listo para usar:

TrueRNG V2 de Ubld.It Electronics

Incluso sin un RNG de hardware, puede usar un PRNG y agregar entropía al estado interno de vez en cuando para mantener el algoritmo creando buenos números aleatorios. Muchas veces, el RNG de hardware se usa para inicializar un PRNG en lugar de leerlo directamente. Luego, el PRNG tomará cada segundo algo de entropía del hardware RNG (para más información sobre entropía, consulte ¿Cómo funciona un generador de números aleatorios en los lenguajes de programación? ¿Hay algún patrón?)

Para una computadora, ¿qué tan aleatorio es ser aleatorio?

Con un generador de números pseudoaleatorio predeterminado, es lo suficientemente aleatorio para fines en los que no es importante si es aleatorio. Normalmente puede proporcionar una semilla al generador. Dada una cierta semilla, la secuencia es completamente determinista. Pero normalmente el código proporcionará la hora actual al generador como semilla. La secuencia eventualmente se repetirá (pero “eventualmente” puede significar después de mucho tiempo, quizás después de 2 ^ 32 números).

Eso significa que si quieres escribir un juego de solitario, el usuario no va a decir “¡Espera un minuto: ayer vi esta misma secuencia de cartas!”

Pero si vas a escribir un juego en el que hay dinero real en juego, las personas podrían descubrir qué cartas son las siguientes en la secuencia si trabajan lo suficiente. (Nota: esto ha sucedido). Cuando hay dinero en juego, la respuesta es “no lo suficientemente aleatoria”, y debería encontrar una forma diferente de generar sus números.

Primero pasaré por el generador Random Integer.

Generador de enteros aleatorios . Este formulario le permite generar enteros aleatorios . La aleatoriedad proviene del ruido atmosférico, que para muchos propósitos es mejor que los algoritmos de números pseudoaleatorios que se usan típicamente en programas de computadora.

Un generador de números aleatorios ( RNG ) es un dispositivo computacional o físico diseñado para generar una secuencia de números o símbolos que no pueden predecirse razonablemente mejor que por casualidad.

Entonces, para una computadora, no hay nada al azar.

Editar: Me gustaría agregar que, aunque actualmente no podemos encontrar el patrón de Aleatoriedad que genera una máquina, el dispositivo usa una secuencia particular para generar un Entero aleatorio. Entonces, una computadora internamente nunca es aleatoria, ya que tiene un cociente de inteligencia como cero.

En las computadoras, nunca hablamos de secuencias aleatorias, sino que preferimos hablar de secuencias “pseudoaleatorias”. La mayoría de ellos tienen una forma recurrente

R (n + 1) = función (R (n))

¡Ahora el diseño de la función es el desafío! Con los años se han propuesto y utilizado muchos algoritmos diferentes. ¿Cómo eliges cuál es una mejor secuencia aleatoria? – Esa es la pregunta en la base de todos estos esfuerzos para crear nuevas funciones “más aleatorias”.

Resulta que no hay una prueba algorítmica de aleatoriedad verdadera. ¡Pero existen muchos algoritmos para detectar patrones en secuencias! Entonces, así es como se juega el juego.

Cada función del generador pseudoaleatorio se verifica para detectar la existencia de patrones en las secuencias generadas usando varios métodos. El que “falla” (es decir, muestra la existencia de un patrón) en el menor número de pruebas es el campeón. Incluso si una función supera todas las pruebas, ¡no se garantiza que no fallará en alguna prueba diseñada en el futuro!

La última vez que lo comprobé, ¡había un algoritmo llamado “Mersenne Twister” que era el campeón!

¡Espero que mi respuesta haya ayudado!

More Interesting

¿Por qué no se acepta mi solución para SPOJ.com - JUEGOS de problemas?

¿Puede la longitud de un comando Mathematica o Wolfram | Alpha ser una aproximación aproximada de su complejidad de Kolmogorov?

¿Dónde se puede encontrar una implementación de árbol de sufijos de la subcadena común más larga?

¿Qué haces si la resolución de un problema de algoritmo lleva demasiado tiempo?

Soy un desarrollador de fuerza bruta, ¿cómo puedo mejorar mis habilidades de algoritmos?

¿Pueden los algoritmos de aprendizaje automático predecir el precio de las acciones en los mercados de valores?

¿De qué juez en línea puedo aprender algoritmos estándar y estructuras de datos?

¿Cuáles son las ventajas y desventajas de los algoritmos y la heurística en la resolución de problemas?

Si necesita almacenar operaciones de deshacer / rehacer en un procesador de textos, ¿qué estructura de datos se puede usar?

¿Qué es el algoritmo k-Means y cómo funciona?

Cómo mejorar en la implementación de algoritmos

¿Por qué no puedo resolver mi Cubo de Rubik de 4 x 4 x 4 como un cubo de Rubik de 3 x 3 x 3 si ya he hecho los centros y los bordes?

¿Cómo se puede probar que la ruta única a través de un árbol de expansión mínima entre dos nodos es una ruta más corta de "cuello de botella"?

Cómo calcular la correlación de cada fila en una matriz 2D con una matriz 1D de la misma longitud

¿Cuál es la diferencia entre el problema del vendedor ambulante y el problema del árbol de expansión mínima?