2010-04-14 11 views
13

Escribí un programa en java que lanza un dado y registra el número total de veces que se lanza cada valor 1-6. Rodé 6 millones de veces. Aquí está la distribución:¿Cómo sé si esto es lo suficientemente aleatorio?

#of 0's: 0 
#of 1's: 1000068 
#of 2's: 999375 
#of 3's: 999525 
#of 4's: 1001486 
#of 5's: 1000059 
#of 6's: 999487 

(. 0 no era una opción)

Es esto coherente con la distribución al azar de los dados rollos? ¿Qué pruebas estadísticas objetivas podrían confirmar que los dados son de hecho lo suficientemente aleatorios?

EDIT: se han planteado preguntas sobre la aplicación: un juego que quiero ser tan justo como se pueda lograr razonablemente.

+2

Cualquiera que sea la aplicación para la que lo utilice, determina si el algoritmo es "lo suficientemente aleatorio". Además, el orden puede importar en su aplicación; una cadena si 1 podría ser "malo" para su situación. – strager

+1

la distribución es lo suficientemente constante. ¿Alguna vez pasaste tiempo en random.org? Puede ser un buen lugar para que comiences. – jcolebrand

+3

Creo que esto es lo que necesita comprobar: cuantas más iteraciones realice, los resultados deberían acercarse a la distribución de 1/6 por dígito por dígito. –

Respuesta

5

Para probar si esta distribución particular es consistente con la distribución esperada de los números lanzados con una inmersión "regular", debe realizar el Pearson's Chi-square test.

Tenga en cuenta que esto aún no probará que su algoritmo es "justo", solo que estos resultados particulares se ven "justos".

Para comprobar si su algoritmo es "justo" en general, use el Diehard tests, como han mencionado otros.

+0

¿Cómo hacen las pruebas duras de garuntee aleatoriedad? – David

+2

Las pruebas Diehard no garantizan aleatoriedad. No hay nada que pueda garantizar la aleatoriedad. :-) Las pruebas Diehard son un conjunto de pruebas automatizadas destinadas a ejecutarse contra la implementación particular de generadores aleatorios que buscan pruebas estadísticas de que esta implementación particular no es una implementación "justa". Si su generador pasa las pruebas Diehard, eso no significa que es "justo" y la aleatoriedad está garantizada; solo significa que hay una gran probabilidad de que sea "justo" –

4

Si su generador de números aleatorios pasa las pruebas Diehard, eso es lo mejor que puede hacer.

Incluso un dado físico no será perfecto con 1/6 por cara.

Aumenta las pruebas en un orden de magnitud, luego hazlo de nuevo. Si obtiene 1/6 en cada prueba, estará bien.

+1

_si obtienes aproximadamente 1/6 para cada cara_ ~ estadísticamente nunca deberías obtener exactamente 1/6 para cada cara, eso no es aleatorio. – jcolebrand

+3

Exactamente 1/6 para cada cara es tan probable como cualquier otro resultado posible. Ciertamente, no diría que alguien debería "nunca" obtenerlo como resultado. – jemfinch

+0

ya estoy ejecutando 6 millones de intentos. ¿No es eso lo suficientemente aumentado? también, ¿qué es la prueba Diehard? – David

1

Esta prueba por sí sola no es suficiente para determinar la aleatoriedad. No es que sea completamente inútil, pero un rodillo de dados "aleatorio" que emite 1,2,3,4,5,6 y repeticiones sería perfectamente aleatorio según esta prueba.

Otra prueba sugerida: elija un número, x, y cada vez que se lance, registre las estadísticas de qué número viene a continuación; Deberías ver una distribución pareja nuevamente. Repita para los seis valores de x. Si supera esta prueba, es probable que sea lo suficientemente aleatorio como para ser utilizado como un rodillo de dados.

0

La probabilidad de que 6'000'000 dados salgan en exactamente 1'000'000 resultados de cada uno es cercana a 0. Siempre que la suma de los resultados sea correcta y que la varianza (error) de la diferencia con el resultado esperado va hacia 0 (relativamente) cuando el número de ensayos aumenta, entonces su función aleatoria no es incorrecta.

Puede probarlo matemáticamente o probando la función aleatoria con secuencias de prueba cada vez mayores para ver si converge.

Para un número repetido de pruebas, la suma de cada resultado debe aproximarse a la distribución gaussiana. P.ej. cada resultado 1-6 debería caer dentro de una distribución normal centrada alrededor de 1'000'000 con una varianza que es inversamente proporcional al número de tiras de dados.

Las otras pruebas, las pruebas Diehard, prueban que la secuencia real de dados es aleatoria en sí misma y no que el resultado de 6'000'000 rollos, por ejemplo, es 100'000 1 consecutivos, luego 100'000 2 y así sucesivamente y finalmente algunas secuencias aleatorias.

+0

¿Puedes entrar en más detalles sobre la varianza, qué significa y cómo se calcula? – David

+0

La varianza es una medida de cuán "aleatoria" es una variable. Si prueba la aleatoriedad de los dados con 6 rondas, obtendrá una gran variación en cada resultado [1-6], pero si la prueba 6'000'000 veces, la varianza será mucho menor. Piense en la varianza como propagación. Aynyway, las pruebas Diehard son más relevantes para probar la aleatoriedad. – Ernelli

Cuestiones relacionadas