¿Conoces o has ideado algún algoritmo práctico "fácil de aprender" que permita a los humanos generar números aleatorios (algo "verdaderos")? Por "en la cabeza" quiero decir ... preferiblemente sin herramientas o dispositivos externos. Además, es deseable un alto rendimiento (muchos números aleatorios por minuto).
Le pregunté esto a SO, pero no obtuvo mucho interés. Tal vez esto sea más adecuado para programadores.
self-improvement
algorithms
random
Magnus Wolffelt
fuente
fuente
Respuestas:
Aquí hay un algoritmo de George Marsaglia :
fuente
Echa un vistazo a este artículo sobre geomancia . Específicamente la sección sobre generación de cartas geománticas . Implica una técnica de generación de números pseudoaleatorios que utiliza dígitos binarios y algunos cálculos recursivos simples. Parece que podrías hacer esto en tu cabeza con bastante facilidad (aunque un trozo de papel ayudaría).
Descargo de responsabilidad: no lo he probado yo mismo; cuando necesito un número lo suficientemente aleatorio, obtengo algún resultado
/dev/random
, lo usorand
en cualquier idioma que tenga a mano o utilizo mi confiable d20.Si eres un prodigio de las matemáticas, el método del cuadrado medio es un método computacionalmente ligero, aunque notablemente poco confiable.
fuente
Creo que una suposición razonable es que debe confiar en la gran cantidad de información verbal que almacena en su cerebro. La fuente puede ser cualquier cosa, letras de canciones, poemas, bocetos de Monty Python, pero tiene que ser algo que se sepa de memoria.
Luego, debe seleccionar una parte bastante aleatoria, eliminando el sesgo inconsciente tanto como sea posible. Una forma de hacer esto, por ejemplo, sería seleccionar una canción, elegir un número
k
entre 10 y 20 y luego encontrar lak
letra th en su letra.Obviamente, esto no le dará una distribución uniforme en sí misma, ya que la frecuencia de las letras es diferente, pero sin embargo es una letra aleatoria, o al menos tan cercana como creo que es posible sin una fuente externa.
Actualización: Por cierto, cuando se le pide a la gente que escriba una secuencia aleatoria de decir lanzamientos de monedas, el error más común es hacer que su secuencia sea "demasiado aleatoria": las series de resultados idénticos serán demasiado cortas, lo que implica una duración de ejecución simple El análisis revelará. Este método está dirigido principalmente a evitar esta trampa. Por supuesto, pueden surgir otras anomalías a la sombra de este sesgo de longitud de ejecución, pero necesitaría experimentos adecuados para encontrarlas. Irónicamente, no se puede encontrar un algoritmo para generar números aleatorios pensando solo pensando solo.
fuente
Muestra tu reloj.
Hago esto si necesito un número aleatorio que sea un factor de 60 (segundos). Tome el módulo apropiado de la hora que sea. 4:17:23 PM, simulando una tirada de dados, se convierte en 5.
fuente
Excelente pregunta Me temo que una buena respuesta puede resultar muy difícil.
Pero para empezar, es bastante fácil generar aleatoriedad "verdadera" cuando dos personas están involucradas: simplemente deje que una de las personas cuente en silencio en su módulo de cabeza algún número, y la otra diga "detenerse" después de un intervalo arbitrario. Posteriormente, este número puede transformarse en otras distribuciones utilizando métodos estándar.
Para hacer que este método sea robusto, el módulo no debe ser demasiado grande, de lo contrario habrá un fuerte sesgo contra los números pequeños. Realmente me interesaría ver si existe algún trabajo que analice las propiedades estocásticas de este método.
fuente
Esta es una pregunta compleja; Trataré de explicar un poco sin adentrarme demasiado en la maleza.
Primero, tenemos que preguntarnos "¿qué es el verdadero azar"? Tales discusiones rápidamente degeneran en aguas filosóficas, pero la esencia es esta: "¿el universo es verdaderamente aleatorio"? En otras palabras, si cuantificas el tiempo y la materia, ¿puedes calcular el siguiente estado del universo a partir del actual? En caso afirmativo, entonces el universo es determinista y no hay aleatoriedad verdadera (¿entiendes lo que quiero decir sobre "filosófico"?)
Debido a que la "aleatoriedad verdadera" es difícil de definir, a menudo nos conformamos con la "pseudoaleatoriedad". Esto generalmente se requiere cuando se generan números "aleatorios" en una computadora, por supuesto.
El generador de números pseudoaleatorio más simple sería algo así como el famoso algoritmo "9 .. 9 .. 9 .." de Dilbert. Pero intuitivamente no parece muy bueno (que por supuesto es el chiste). Los estadísticos han desarrollado una gran cantidad de pruebas para determinar si una secuencia de resultados supuestamente aleatorios son "buenos". Comience con la página de Wikipedia para "prueba de chi cuadrado" y podría pasar una tarde leyendo sobre estas pruebas.
Un algoritmo informático simple como un "generador congruencial lineal" produce números lo suficientemente buenos para una prueba de chi-cuadrado (sin embargo, aún debe "sembrar" este algoritmo a partir de algo).
El siguiente paso en "bondad" es "aleatoriedad criptográficamente fuerte", lo que significa que dada una secuencia a1, a2, ... no puede predecir el siguiente número en la secuencia con "probabilidad razonable" a menos que use muchos cálculos. Estos números a veces se denominan "computacionalmente pseudoaleatorios". Una forma común de obtener una secuencia de este tipo es a través de una "cadena hash" como esta: a1 = SHA512 (a2), a2 = SHA512 (a3), ... Dado que creemos (en base a la experiencia, no a la prueba matemática) que SHA512 es computacionalmente difícil de invertir, creemos que a2 es "imposible" de predecir dado a1.
Entonces, ahora surge la pregunta, ¿qué es lo mejor que los humanos pueden hacer bajo las reglas estipuladas en su pregunta? Los humanos son notoriamente malos para generar aleatoriedad; solía haber un sitio web en el que intentaba generar lanzamientos de monedas escribiendo "al azar" H, T, T, H, H, T, T, etc. como si estuviera lanzando una moneda (pero lo hace en tu cabeza). Después de un tiempo, el sitio web comenzaría a predecir sus lanzamientos mejor que el 50% del tiempo (usando un Modelo de Markov Oculto). Simplemente somos malos en esto.
Hay maneras de mejorar la situación utilizando varias técnicas de mezcla que probablemente sean factibles en su cabeza. E incluso hay aplicaciones con las que podría imaginarme por qué querrías esto (el preso político quiere encriptar un mensaje a aliados externos). Pero creo que esta publicación es lo suficientemente larga. :)
fuente
La razón de la proliferación de los RNG basados en herramientas es que aún no se ha desarrollado un buen algoritmo interno para la generación de números aleatorios .
Afortunadamente, los generadores portátiles de números aleatorios, que incluyen monedas para el flopping, dados (con varios números de facetas) para rodar, tarjetas para recoger y pajitas para dibujar, son relativamente fáciles de obtener a bajo costo. Además, para los tecnófilos entre nosotros, hay algunas simulaciones bastante buenas de estas herramientas disponibles para la mayoría de las plataformas móviles.
Recomiendo encarecidamente cualquiera de estos sobre cualquier alternativa de carne.
fuente
¿Altamente aleatorizado, gran cantidad por minuto y generado por humanos? No va a pasar
Los principales problemas con los que te encontrarás son
Esto llevó a muchos criptógrafos a abandonar las técnicas "internas" en favor de procesos externos que eran aleatorios porque era demasiado simple elaborar patrones basados en números "internos".
Fuera de tema pero interesante
Si bien no es un mecanismo para generar números aleatorios en su cabeza, el algoritmo Solitario (como se describe en Cryptonomicon de Neal Stephenson ) demuestra lo difícil que es usar números aleatorios para fines criptográficos. Solo requiere un paquete de cartas normales para crear una salida razonablemente segura, pero el método para hacerlo es bastante complejo.
fuente
Aléjese del escritorio y vaya a Las Vegas.
La humanidad tiene docenas de procedimientos aleatorios. Puedes verlos a todos en Las Vegas.
Tienes círculos giratorios. Tienes cubos rotos. Y has barajado las fichas. Todos funcionan maravillosamente bien.
Los cubos son quizás los más antiguos. Aparentemente, se usaron palos alargados de 4 lados en un punto. Los nudillos cúbicos simétricos de ovejas fueron populares durante milenios. Hemos estado usando ese tipo de aleatorizadores desde, probablemente, casi al mismo tiempo que desarrollamos el lenguaje.
http://itunes.apple.com/us/app/motionx-dice/id287509231?mt=8
"Cualquiera que considere métodos aritméticos para producir dígitos aleatorios está, por supuesto, en un estado de pecado"
--- John von Neumann
fuente
No se me ocurre ninguno. De hecho, esperaría que cualquier cosa que se te ocurriera tuviera tantos prejuicios que sería inútil.
Si necesito números aleatorios, generalmente lanzo dados.
fuente
¿Estás pidiendo un LCM que puedas hacer en tu cabeza? Tenga en cuenta que la idea de que esto es mejor que los dados sigue siendo absurda.
Sin embargo, esto es tan aleatorio como cualquier algoritmo finito, definido y efectivo puede ser.
http://www.vias.org/simulations/simusoft_lincong.html
http://www1.i2r.a-star.edu.sg/~knandakumar/nrg/Tms/Probability/Probgenerator.htm
U_ {k + 1} = (a \ times U_k + b) mod (m + 1).
Es más fácil ver qué está haciendo esto si elegimos valores pequeños a = 5, b = 1 ym = 7. Deberías poder hacer eso en tu cabeza.
fuente