web-dev-qa-db-fra.com

Algorithme de génération de nombres aléatoires pour cerveaux humains?

Êtes-vous au courant, ou avez-vous été conçu, des algorithmes "en tête" simples à apprendre pratiques qui permettent aux humains générer (un peu "vrai") de nombres aléatoires? Par "in-tête", je veux dire .. de préférence sans outils ni périphériques externes. En outre, une sortie élevée (de nombreux nombres aléatoires par minute) est souhaitable.

Demanda cela sur SO mais cela n'a pas eu beaucoup d'intérêt. Peut-être que cela convient mieux aux programmeurs.

39
Magnus Wolffelt

Voici un algorithme de George Marsaglia :

Choisissez un numéro à 2 chiffres, dites 23, votre "graine".

Former un nouveau numéro à 2 chiffres: Le chiffre 10 du 10 fois 6 fois les unités chiffres.

L'exemple de séquence est de 23 -> 20 -> 02 -> 12 -> 13 -> 19 -> 55 -> 35 -> ...

et sa période est l'ordre du multiplicateur, 6, dans le groupe de résidus relativement amples au module, 10. (59 dans ce cas).

Les "chiffres aléatoires" sont les unités des chiffres des nombres à 2 chiffres, c'est-à-dire 3,0,2,2,3,9,5, ... la séquence mod 10. L'arithmétique est assez simple pour effectuer dans votre diriger.

36
Davo

Vérifiez cet article sur la géomancie . Spécifiquement la section sur générant des graphiques géomantiques . Il implique une technique de génération de nombres pseudo-aléatoires utilisant des chiffres binaires et un calcul récursif simple. On dirait que vous pouviez le faire dans votre tête assez facilement (bien qu'un morceau de papier puisse aider).

Disclaimer: Je ne l'ai pas essayé moi-même; Lorsque j'ai besoin d'un nombre suffisamment aléatoire, je reçois une sortie de /dev/random, utiliser Rand dans n'importe quelle langue que j'ai à portée de main ou rouler mon confiance D20.

Si vous êtes un prodige mathématique, la méthode carrée du milie est une très bonne lumière de calcul, si une méthode visiblement peu fiable.

26
Inaimathi

Je pense qu'une hypothèse raisonnable est que vous devez compter sur la vaste quantité d'informations verbales que vous stockez dans votre cerveau. La source peut être n'importe quoi, chanson paroles, poèmes, Monty Python croquis, mais cela doit être quelque chose que vous connaissez par cœur.

Ensuite, vous devez sélectionner une partie assez aléatoire de celui-ci éliminer le biais inconscient autant que possible. Un moyen de faire cela par exemple serait de sélectionner une chanson, choisissez un numéro k entre 10 et 20, puis trouver la lettre kth dans ses paroles.

Évidemment, cela ne vous donnera pas une répartition uniforme en soi, car la fréquence des lettres est différente, mais c'est une lettre aléatoire néanmoins, ou du moins aussi proche de celle-ci que je pense sans une source externe.

Mise à jour : Au fait, lorsque les personnes sont invitées à écrire une séquence aléatoire de Say Boîtiers, l'erreur la plus courante de loin consiste à rendre votre séquence "trop ​​aléatoire": les courses identiques seront trop Short, qu'une analyse de longueur simple sera révélatrice. Cette méthode visait principalement à éviter ce piège. Bien sûr, d'autres anomalies pourraient découler de l'ombre de ce biais de la longueur de la course, mais vous auriez besoin d'expériences appropriées pour les trouver. Un peu ironiquement, un algorithme de génération de nombres aléatoires en pensant seul ne peut être trouvé seul en pensant seul.

10
biziclop

Échantillez votre montre.

Je fais cela si j'ai besoin d'un nombre aléatoire qui est un facteur de 60 (secondes). Prenez le modulo approprié de tout moment. 16h17:23, simulant un rouleau de matrice, devient 5.

9
Mark Canlas

Excellente question. Je crains qu'une bonne réponse puisse s'avérer très difficile.

Mais comme démarrage, il est assez facile de générer du "vrai" aléatoire lorsque deux personnes sont impliquées: laissez simplement une des personnes compter de manière silencieuse dans leur module de tête, et l'autre dit "arrêter" après un intervalle arbitraire. Ensuite, ce nombre peut être transformé en d'autres distributions en utilisant des méthodes standard.

Pour rendre cette méthode robuste, le module ne doit pas être trop important, sinon il y aura un biais fort contre de petits nombres. Je serais vraiment intéressé de voir s'il existe des travaux analysant les propriétés stochastiques de cette méthode.

5
Konrad Rudolph

C'est une question complexe; Je vais essayer d'expliquer un peu sans errer trop loin dans les mauvaises herbes.

Premièrement, nous devons demander "ce qui est vrai aléatoire"? Ces discussions dégénèrent rapidement dans des eaux philosophiques, mais le gist est celui-ci: "Est-ce que l'univers véritablement aléatoire"? En d'autres termes, si vous quant à la quantification du temps et de la matière, pouvez-vous calculer l'état suivant de l'univers de l'actuel? Si oui, alors l'univers est déterministe et il n'y a pas de véritable aléatoire (voir ce que je veux dire sur "philosophique"?)

Parce que "vrai aléatoire" est difficile à définir, nous nous installons souvent de "pseudorandomness". Ceci est généralement requis lors de la génération de numéros "aléatoires" sur un ordinateur, bien sûr.

Le générateur de numéros de pseudo-pseudorandom le plus simple serait un algorithme "9 .. 9 .. 9 .." de Dilbert. Mais intuitivement, cela ne semble pas très bon (bien sûr la blague). Les statisticiens ont développé toute une foule de tests pour dire si une séquence de produits prétendument aléatoires est "bonne". Commencez par la page Wikipedia pour "Test carré de Chi" et vous pourriez passer une après-midi à lire sur ces tests.

Un simple algorithme informatique comme un "générateur linéaire congrandu" produit des chiffres suffisamment bon pour un test chi-carré (vous devez toujours "semer" cet algorithme de quelque chose, cependant).

L'étape suivante dans la "bonté" est "aléatoire cryptographiquement forte", ce qui signifie que donner une séquence A1, A2, ... Vous ne pouvez pas prédire le numéro suivant dans la séquence avec "probabilité raisonnable" à moins que vous n'utilisiez beaucoup de calcul. Ces chiffres sont parfois appelés "pseudorandom de calcul". Un moyen courant d'obtenir une telle séquence est via une "chaîne de hachage" comme ceci: A1 = SHA512 (A2), A2 = SHA512 (A3), ... Depuis que nous croyons (sur la base de l'expérience, pas une preuve mathématique) que SHA512 est Compulument difficile à inverser, nous croyons que A2 est "impossible" de prédire seulement A1 A1.

Alors maintenant, la question se pose, quelle est la meilleure chose que les humains puissent faire en vertu des règles stipulées dans votre question? Les humains sont notoirement mauvais pour générer du caractère aléatoire; Il y avait un site Web qui vous aurait essayé de générer des coups de monnaie en tapant "au hasard" H, T, T, T, T, H, H, T, T, etc. Comme si vous retourniez une pièce de monnaie (mais vous le faites dans ta tête). Après un certain temps, le site Web commencerait à prédire vos retours supérieurs à 50% du temps (à l'aide d'un modèle de Markov caché). Nous sommes simplement mauvais à cela.

Il existe des moyens d'améliorer la situation à l'aide de diverses techniques de mélange qui sont probablement faisables dans votre tête. Et il y a même des applications que je pourrais imaginer pourquoi vous voudrez peut-être que cela (prisonnier politique souhaite crypter un message aux alliés extérieurs). Mais je pense que ce post est assez long. :)

4
Fixee

La raison même de la prolifération de RNG basée sur les outils est celle-ci n bon algorithme de tête pour la génération de nombres aléatoires doit encore être développé.

Heureusement, des générateurs de nombres aléatoires portables - y compris des pièces de monnaie pour le floppage, des dés (avec différents nombres de facettes) pour le laminage, les cartes pour la cueillette et les pailles de dessin - sont relativement faciles à obtenir à faible coût. De plus, pour les technophiles parmi nous, il existe des simulations assez bonnes de ces outils disponibles pour la plupart des plates-formes mobiles.

Je recommande vivement l'un d'entre eux sur toute alternative de viande.

3
Kramii

Je suis sincèrement curieux de tout ce que les gens auraient pu venir sur ce problème.

S'il vous plaît, coupez-vous du bureau et allez à Las Vegas.

L'humanité a des dizaines de procédures randomissantes. Vous pouvez tous les voir à Las Vegas.

Vous avez des cercles de filature. Vous avez des cubes qui tombent. Et vous avez mélangé des jetons. Ils travaillent tous merveilleusement bien.

Les cubes sont peut-être les plus âgés. Apparemment, il y avait des bâtons à 4 côtés allongés utilisés à un moment donné. Les knuctles cubes symétriques des moutons étaient populaires pour les millénaires. Nous utilisons ces types de randomiseurs depuis - probablement - à peu près au même moment que nous avons développé la langue.

http://itues.apple.com/us/app/motionx-dice/id287509231?mt=8

"Toute personne qui envisage des méthodes arithmétiques de production de chiffres aléatoires est, bien sûr, dans un état de péché"

--- John von Neumann

2
S.Lott

Je ne peux penser à aucun. En fait, je m'attendrais à ce que tout ce que vous avez proposé aurait tellement de préjugés qu'il serait inutile.

Si j'ai besoin de nombres aléatoires, je roule généralement des dés.

1
Zachary K

Demandez-vous un LCM que vous pouvez faire dans votre tête? Notez que l'idée que cela vaut mieux que les dés restent absurdes.

Cependant, cela est aussi aléatoire que tout algorithme fini, défini et efficace peut éventuellement être.

http://www.vias.org/simulations/simusoft_lincong.html

http://www1.i2r.a-star.edu.sg/~knandakumar/nrg/tms/probabilité/probenerator.htm

U_ {k + 1} = (a\fois u_k + b) mod (m + 1).

Il est plus facile de voir ce que cela fait si nous choisissons de petites valeurs A = 5, B = 1, et M = 7. Vous devriez être capable de le faire dans votre tête.

0
S.Lott