Soy estudiante de informática y actualmente estoy inscrito en el curso de Simulación y modelado de sistemas. Implica lidiar con los sistemas cotidianos que nos rodean y simularlos en diferentes escenarios mediante la generación de números aleatorios en diferentes curvas de distribución, como IID, Gauss, etc., por ejemplo. He estado trabajando en el proyecto Boids y una pregunta me llamó la atención: ¿qué es realmente "aleatorio"? Quiero decir, por ejemplo, cada número aleatorio que generamos, incluso en nuestros lenguajes de programación como a través del Math.random()
método en Java, se genera esencialmente siguiendo un "algoritmo".
¿Cómo sabemos realmente que una secuencia de números que producimos es, de hecho, aleatoria y nos ayudaría a simular un modelo determinado con la mayor precisión posible?
fuente
Respuestas:
La respuesta corta es que nadie sabe qué es la aleatoriedad real, o si existe tal cosa. Si desea cuantificar o medir la aleatoriedad de un objeto discreto, normalmente recurrirá a la complejidad de Kolmogorov . Antes de la complejidad de Kolmogorov, no teníamos forma de cuantificar la aleatoriedad de decir una secuencia de números sin considerar el proceso que la generó.
Aquí hay un ejemplo intuitivo que realmente estaba molestando a las personas en el pasado. Considere una secuencia de lanzamientos de monedas. El resultado de un lanzamiento es cara ( ) o cruz ( ). Digamos que hacemos dos experimentos, donde lanzamos una moneda 10 veces. El primer experimento nos da . El segundo experimento nos da . Después de ver el resultado, es posible que sientas la tentación de afirmar que hubo algún problema con la moneda en , o al menos por alguna extraña razón, lo que obtuviste no es aleatorio. Pero si supone que tanto como son tan probables (la moneda es justa), la probabilidad de obtenerT E 1 H , H , H , H , H , H , H , H , H , H E 2 T , T , H , T , H , T , T , H , T , H E 1 H T E 1 E 2 ( 1 / 2 ) 10 E 2 EH T E1 H,H,H,H,H,H,H,H,H,H E2 T,T,H,T,H,T,T,H,T,H E1 H T E1 o es igual a . De hecho, ¡obtener cualquier secuencia específica es tan probable como cualquiera! Aún así, siente al azar, y no.E2 (1/2)10 E2 E1
En general, dado que la complejidad de Kolmogorov no es computable, no se puede calcular cuán aleatoria es una secuencia de números, sin importar qué tipo de proceso "totalmente aleatorio" generado la genere.
fuente
En el caso de Java (o lenguajes similares), conocemos el algoritmo utilizado para crear los números aleatorios. Si comienza con una sola semilla, los números no son aleatorios en absoluto, es decir, si conocemos en una secuencia a 0 , ... , a n , conocemos a i + 1 , o expresamos como probabilidad condicional: ∀ k , l , i : P ( a i + 1 = k ∣ a i = l ) ∈ { 0 ,unayo una0 0, ... , unnorte unai + 1
Sin embargo, esas series pueden cumplir propiedades (ver, por ejemplo, WP: Autocorrelación ) que cumplen los números aleatorios y estas propiedades a menudo son suficientes para realizar tareas, donde nos gustaría usar números aleatorios "reales" (por ejemplo, generados por algún proceso físico), pero podemos ' t esfuerzo ellos.
fuente
Es imposible saber con certeza si una secuencia dada es aleatoria o no. Sin embargo, puede observar las características (o parámetros) de una secuencia y calcular la probabilidad de dicha secuencia dada la distribución de interés.
Puede agregar momentos adicionales de la distribución (como sesgo) de interés para una validación adicional. Para los números IID, también podría intentar entrenar un algoritmo de aprendizaje automático para predecir los próximos elementos de la secuencia y luego probar la hipótesis nula de que el historial mejora el rendimiento. Sin embargo, ninguno de estos métodos puede probar que una secuencia es verdaderamente aleatoria y, en el mejor de los casos, puede reconocer cuándo las secuencias NO son aleatorias (hasta cierto punto de certeza).
fuente
La teoría moderna de la respuesta informática es "una fuente aleatoria es una fuente que parece aleatoria a su clase favorita de algoritmos". Esta es una perspectiva utilitaria: si una fuente de aleatoriedad se parece a la verdadera aleatoriedad para todos los algoritmos que le interesan, entonces nada más importa. Puede analizar sus algoritmos como si recibieran lanzamientos de monedas verdaderamente aleatorios, y su análisis le dará las respuestas correctas.
Esta idea está detrás de cualquier noción formal moderna de pseudoaleatoriedad.
fuente
Aquí hay dos centavos más.
Una forma de pensar en algoritmos aleatorios es imaginar una caja que toma algo de entrada, hace cosas misteriosas a esa entrada y produce una salida ("impredecible").
Pero en cambio, podría ser útil pensar en ellos como algoritmos deterministas que toman dos entradas: la entrada "verdadera" y algunas entradas "aleatorias" que obtenemos de funciones como
Math.Random()
.Como Jonathan y Frafl mencionan, hay formas de verificar si una fuente aleatoria se comporta "aleatoriamente". Pero todo lo que harán es influir en lo que usted cree sobre la información futura que proviene de esta fuente aleatoria. Si cree que cada bit es igualmente probable que sea cero o uno, independientemente de los bits anteriores, entonces, según su conocimiento y sus creencias, esa fuente es aleatoria de manera uniforme e independiente y, por lo tanto, según su conocimiento y creencias, correrá rápido o será correcto, etc. Esa es mi opinión filosófica, de todos modos.
fuente
No podemos generar números verdaderamente aleatorios. Existen diferentes métodos para generar números pseudoaleatorios utilizando una ecuación específica y un valor de semilla particular. Entonces, la secuencia aleatoria de números depende del valor de la semilla. Una vez que conocemos el valor semilla, podemos predecir cuál será la secuencia. Aparte de esto, hay otros métodos para generar números aleatorios. Las personas ahora están utilizando algunos métodos para generar números aleatorios verdaderos, como el tiempo de movimiento de la cabeza del disco y otros métodos físicos que se pueden incorporar en una computadora. Consulte: http://en.wikipedia.org/wiki/Random_number_generation#Generation_methods
fuente
por el método dado como dijiste
Math.random () en Java
Randomize; Aleatorio (n); en Delphi
puede implementar su propia estructura y lógica para generar números aleatorios,
donde dicho "algoritmo" puede funcionar según sus especificaciones dadas para obtener mejores resultados aleatorios.
y construir sobre eso las lógicas.
Gracias.
fuente
otras respuestas son buenas, aquí hay algunos otros ángulos en esta pregunta muy importante / involuntariamente profunda. Los científicos informáticos han estado estudiando la aleatoriedad durante décadas y es probable que continúen estudiándola. tiene muchas conexiones profundas y las principales preguntas abiertas que quedan en todo el campo. Aquí están algunas sugerencias.
La "aleatoriedad verdadera / real" ocurre con procesos físicos de bajo nivel y "ruido" como en diodos zener, mecánica cuántica, etc., que pueden aprovecharse en RNG basados en hardware
otros números generados en el ámbito de la computadora es lo que se conoce como "pseudoaleatorio", que se simula y nunca puede coincidir con "aleatoriedad verdadera". estos son los llamados PRNG
existe un sentido importante de "dureza criptográfica de los generadores de números aleatorios" que en cierto sentido mide su "calidad" o "seguridad", por ejemplo, ver PRNG criptográficamente seguro . básicamente un generador "débil" no tiene tanta complejidad computacional como un generador "duro" y uno "débil" es más fácil de romper.
Un tema de investigación importante en TCS son los algoritmos aleatorios y desrandomizados . La idea es, aproximadamente, estudiar cuánto se altera el algoritmo al reemplazar la "aleatoriedad verdadera" con un PRNG y existen varios teoremas profundos sobre el tema. Aquí hay una pregunta cstheory.se de alto rango que da una idea de la investigación en esta área: algoritmos aleatorios eficientes y simples donde el determinismo es difícil
otro tema clave relacionado en TCS es la entropía de la información , originalmente introducida en física hace mucho tiempo, que estudia un concepto estrechamente relacionado de "desorden de la información" y, al igual que otros conceptos importantes en (T) CS, parece ser una de las ideas clave que atraviesa El límite entre el análisis teórico y aplicado, incluso algunas de las fórmulas son las mismas .
Una vez más, para dar fe del estado de la investigación activa, hay otras preguntas de alto rango en cstheory.se que se relacionan con esta pregunta. Aquí hay uno cercano, casi el mismo: es un generador de números verdaderamente aleatorio computable Turing
fuente