Algorithme de génération de nombres aléatoires pour le cerveau humain? [fermé]


37

Êtes-vous au courant ou avez-vous mis au point des algorithmes «en-tête» pratiques, faciles à apprendre, qui permettent aux humains de générer (en quelque sorte des «vrais») nombres aléatoires? Par "en tête" je veux dire .. de préférence sans outils ni appareils externes. En outre, une sortie élevée (plusieurs nombres aléatoires par minute) est souhaitable.

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


7
@ S.Lott Je ne pense pas que ce soit absurde du tout. Peu pratique? Pourquoi, bien sûr. Absurde? Certainement pas. Et même si c'était le cas, l'absurdité peut ouvrir la voie à de nouvelles pensées utiles.
biziclop

21
9 .... 9 .... 9 .... 9 - Vous ne pouvez pas prouver que ce n'est pas aléatoire.

13
S.Lott: L'idée d'un générateur de nombres pseudo-aléatoires facile à calculer n'est pas du tout absurde. Je pense que le PO veut trouver un moyen d'éviter le préjugé humain ici ....
Jens

8
Je trouve drôle (et en même temps légèrement déprimant) combien de personnes semblent apprécier un argument d'ignorance. "Je ne peux pas l’imaginer, donc il ne peut pas exister", ou des réponses qui manquent complètement à la question.
biziclop

4
Cette question semble être hors sujet car il s'agit de la capacité cognitive d'un individu et non de la programmation.

Réponses:


36

Voici un algorithme de George Marsaglia :

Choisissez un nombre à 2 chiffres, par exemple 23, votre "graine".

Formez un nouveau nombre à 2 chiffres: le chiffre du 10 plus 6 fois le chiffre des unités.

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

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

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


Cela sonne vraiment bien.
biziclop

4
Ce n'est peut-être pas un problème pour les besoins d'une personne particulière, mais cela ne vous donne que 90 flux différents.
Compman

5
79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, oh non! Je suppose que vous êtes censé rester <= 60, ce qui fonctionne bien car vous pouvez utiliser l'horloge pour obtenir une graine si vous n'en avez pas.
eds

4
@eds Euh quoi? 79 -> 61 -> 15 -> ...
Izkata

1
Peut-être que @eds voulait dire 59. Tous les chiffres de 1 à 58 semblent être un jeu juste.
Erhannis

26

Consultez cet article sur la géomancie . Plus précisément, la section sur la génération de cartes géomantiques . Il s'agit d'une technique de génération de nombres pseudo-aléatoires utilisant des chiffres binaires et un calcul récursif simple. Il semble que vous puissiez le faire facilement dans votre tête (bien qu'un morceau de papier puisse vous aider).

Avertissement: je n'ai pas essayé moi-même; quand j’ai besoin d’un nombre suffisamment aléatoire, je récupère une sortie, je l’ /dev/randomutilise randdans la langue que j’ai sous la main ou j’envoie mon fidèle d20.

Si vous êtes un prodige des mathématiques, la méthode du carré moyen est une méthode assez peu travaillée, même si elle semble peu fiable.


3
+1 Je pense que c'est la première réponse sérieuse à cette question. Un peu triste.
Jens

@Magnus Wolffelt - Je me souvenais de l'avoir mentionné dans un discours de TED par Ron Eglash sur la signification culturelle de la géométrie fractale en Afrique; "Divination de sable de Bamana". C'est assez intéressant, bien que je ne sache toujours pas comment vous utiliseriez cette technique pour le moment, car nous n'avons plus besoin de devins. ted.com/talks/ron_eglash_on_african_fractals.html
Inaimathi

1
Autant que je sache, cette méthode géomantique vous permet simplement d '"améliorer" (je suppose que "debias" serait un meilleur terme) une source de hasard. Ne pas être éternué, mais pas vraiment ce que recherchait le PO. Ce qui ne veut pas dire que ce n'est pas joli ....
Norman Grey

@Norman Grey - Le cerveau humain peut créer des nombres arbitraires biaisés par défaut.
Inaimathi

@Inaimathi Précisément: c'est pourquoi il est important de réduire les chiffres et la méthode que vous avez indiquée est utile. Ou je vous ai mal compris.
Norman Gray

10

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

Ensuite, vous devez en sélectionner une partie assez aléatoire en éliminant le plus possible les préjugés inconscients. Une façon de faire cela, par exemple, serait de sélectionner une chanson, de choisir un nombre kcompris entre 10 et 20, puis de trouver la klettre e dans ses paroles.

Évidemment, cela ne vous donnera pas une distribution uniforme en soi, car la fréquence des lettres est différente, mais c’est quand même une lettre aléatoire, ou du moins aussi proche que je le crois possible sans source externe.

Mise à jour: Au fait, quand on demande aux gens d'écrire une séquence aléatoire de lancers de pièces de monnaie, l'erreur la plus commune est de loin de rendre votre séquence "trop ​​aléatoire": des suites de résultats identiques seront trop courtes, ce qui est une longueur simple. l'analyse révélera. Cette méthode vise principalement à éviter ce piège. Bien entendu, d’autres anomalies peuvent résulter de l’ombre de ce biais de longueur de parcours, mais vous aurez besoin d’expériences appropriées pour les détecter. Ironiquement, un algorithme permettant de générer des nombres aléatoires en pensant seul ne peut être trouvé en pensant seul.


Même alors, je m'attendrais à ce que vous soyez biaisé de différentes manières. (IE a tendance à choisir le même groupe de chansons)
Zachary K

@ Zachary K Sans doute, mais il faudrait aussi choisir un nombre, ce qui le répartit un peu. Bien que les préjugés ne puissent jamais être éliminés, cette méthode vous empêche presque certainement de savoir quelle lettre vous allez choisir (bien qu'avec le temps, vous en mémorisiez certaines).
biziclop

Eini mini miny moe, comme nous le faisions quand nous étions enfants.
Zachary K

2
"Choisis un nombre k compris entre 10 et 20". 17. Le nombre le moins aléatoire.
S.Lott

@ S.Lott Peu importe combien ce nombre est aléatoire. La seule raison pour laquelle vous en avez besoin est que vous avez tendance à vous souvenir plus facilement des premières lettres.
biziclop

9

Échantillon de votre montre

Je le fais si j'ai besoin d'un nombre aléatoire multiplié par 60 (secondes). Prenez le modulo approprié, quelle que soit l'heure. 16h17: 23 heures, simulant un jet de dé, devient 5.


Et pour un grand nombre par minute?
Gary Rowe

Je ne suis pas sûr de suivre. Vous dites faire le groupe de nombres 3600 en incluant les minutes? Je suppose, mais plus le nombre est élevé, moins il est aléatoire. Comme si vous ne pouviez pas prendre d'échantillons rapidement
Mark Canlas

1
@ Gary Rowe Ce critère doit être abandonné, j'en ai bien peur, tout simplement parce que quelle que soit la méthode utilisée, le cerveau humain est tout simplement trop lent.
biziclop

Désolé, je me demandais simplement comment votre approche fonctionnait si vous aviez besoin de plus de 60 numéros par minute. Avec le recul, demander à un cerveau humain de produire autant de chiffres à la minute ira au maximum, alors ne vous inquiétez pas.
Gary Rowe

@biziclop Pas de problèmes. On dirait que j'ai eu une collision de commentaires tout en considérant la situation avec l'approche de @ Mark.
Gary Rowe

5

Excellente question. Je crains qu'une bonne réponse ne soit très difficile.

Mais pour commencer, il est assez facile de générer un «vrai» caractère aléatoire lorsque deux personnes sont impliquées: il suffit de laisser l’une des personnes compter silencieusement dans leur module modulaire et l’autre dit «s’arrêter» après un intervalle arbitraire. Ensuite, ce nombre peut être transformé en d'autres distributions à l'aide de méthodes standard.

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


Il est important que le comptage se fasse rapidement, je pense - la personne qui compte doit veiller à ne pas compter rythmiquement, à seulement 1 ou 2 pas par seconde. Parce qu'il devrait y avoir un nombre important de cycles (intuitivement ≥ 4) à travers tous les nombres pour obtenir suffisamment d'entropie.
Aaron Thoma

Suggestion d'amélioration pour un meilleur caractère aléatoire : La personne qui effectue le comptage choisit une graine aléatoire secrète X₀ comprise entre 0 et le module; en combinaison avec le comptage, cela devrait fournir un caractère aléatoire décent avec un effort de réflexion encore minimal (même si le comptage est lent, par rapport à la durée du comptage; c’est-à-dire un faible nombre de cycles - ≥2 serait intuitivement correct; <2 serait acceptable).
Aaron Thoma

4

C'est une question complexe. Je vais essayer d'expliquer un peu sans trop m'égarer dans les mauvaises herbes.

Tout d’abord, nous devons nous demander "quel est le véritable caractère aléatoire"? De telles discussions dégénèrent rapidement en eaux philosophiques, mais l'essentiel est la suivante: "l'univers est-il vraiment aléatoire"? En d'autres termes, si vous quantifiez le temps et la matière, pouvez-vous calculer le prochain état de l'univers à partir de l'état actuel? Si oui, alors l'univers est déterministe et il n'y a pas de véritable hasard (voyez-vous ce que je veux dire par "philosophique"?)

Parce que le "vrai hasard" est difficile à définir, nous nous contentons souvent de "pseudo-aléatoire". Ceci est généralement nécessaire lors de la génération de nombres "aléatoires" sur un ordinateur, bien sûr.

Le générateur de nombres pseudo-aléatoires le plus simple serait quelque chose du célèbre algorithme "9 .. 9 .. 9 .." de Dilbert. Mais intuitivement, cela ne semble pas très bon (ce qui bien sûr est la blague). Les statisticiens ont mis au point toute une série de tests pour déterminer si une séquence de sorties supposées aléatoires est "bonne". Commencez avec la page wikipedia pour "test du chi carré" et vous pourrez passer l'après-midi à vous renseigner sur ces tests.

Un algorithme informatique simple tel qu'un "générateur congruentiel linéaire" produit des nombres assez bons pour un test du khi-carré (vous devez néanmoins "ensemencer" cet algorithme à partir de quelque chose).

La prochaine étape dans "la qualité" est "le caractère aléatoire fort sur le plan cryptographique", ce qui signifie qu'avec une séquence a1, a2, ... vous ne pouvez pas prédire le nombre suivant dans la séquence avec une "probabilité raisonnable" sauf si vous utilisez beaucoup de calculs. Ces nombres sont parfois appelés "calculs pseudo-aléatoires". Une méthode courante pour obtenir une telle séquence consiste à utiliser une "chaîne de hachage" comme celle-ci: a1 = SHA512 (a2), a2 = SHA512 (a3), ... Puisque nous croyons (sur la base de l'expérience, pas de preuves mathématiques) que SHA512 est difficile à inverser en calcul, nous pensons que a2 est "impossible" à prédire étant donné a1.

Alors maintenant la question se pose, quelle est la meilleure chose que les humains peuvent faire selon les règles stipulées dans votre question? Les humains sont notoirement mauvais pour générer du hasard; Il existait un site Web qui vous permettait de générer des lancers de pièces en tapant "au hasard" H, T, T, H, H, T, etc. comme si vous jetiez une pièce de monnaie (mais vous le faites ta tête). Après un certain temps, le site Web commencerait à prévoir vos retournements mieux que 50% du temps (en utilisant un modèle de Markov caché). Nous sommes juste mauvais à cela.

Il existe des moyens d'améliorer la situation en utilisant diverses techniques de mélange qui sont probablement réalisables dans votre tête. Et il y a même des applications que je pourrais imaginer pour lesquelles vous pourriez vouloir cela (un prisonnier politique veut chiffrer un message à des alliés extérieurs). Mais je pense que ce post est assez long. :)


1
Bien que l'existence d'un processus physique véritablement aléatoire puisse être discutée (bien que des expériences impliquant le paradoxe de l'EPR suggèrent une réponse positive), il existe une définition théorique d'une séquence aléatoire, basée sur la complexité de Kolmogorov.
biziclop

3

La raison même de la prolifération des GNA basés sur des outils est qu’un bon algorithme en tête pour la génération de nombres aléatoires n’a pas encore été mis au point .

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

Je recommanderais chaleureusement ces solutions à toutes les solutions de remplacement.


1
Et ces dispositifs physiques ont vraiment une nature imprévisible, donc, dans un sens, ils sont plus aléatoires que les meilleurs algorithmes informatiques.
Omega Centauri

( @OmegaCentauri: Naturellement, je vois ce que vous avez fait là-bas!; O) (Je ne suis pas sûr que le jeu de mots était prévu, mais j'aime bien. :)) )
Aaron Thoma Le

3

Hautement aléatoire, grande quantité par minute et générée par l'homme? Ça ne va pas arriver

Les principaux problèmes que vous allez rencontrer sont

  • Les gens s'ennuient rapidement pour que les modèles se produisent rapidement
  • Le cerveau humain a beaucoup de structures consacrées à la reconnaissance / création de modèles, il vous faudra donc vaincre cela.
  • Les nombres véritablement aléatoires contiennent des répétitions que les humains tentent d'éviter
  • Les humains ne sont pas bons avec un grand nombre

Cela a conduit de nombreux cryptographes à abandonner les techniques "en-tête" au profit de processus externes aléatoires, car il était trop simple d'élaborer des modèles basés sur des nombres "en-tête".

Hors sujet mais intéressant

Bien qu'il ne s'agisse pas d'un mécanisme permettant de générer des nombres aléatoires dans votre tête, l' algorithme Solitaire (décrit dans Cryptonomicon de Neal Stephenson ) montre à quel point il est difficile d'utiliser des nombres aléatoires à des fins cryptographiques. Cela nécessite seulement un jeu de cartes à jouer ordinaires pour créer une sortie raisonnablement sécurisée, mais la méthode à suivre est assez complexe.


1
Je pense que cela ne répond pas à la question. Les 4 points de votre réponse ne s'appliquent que si les gens essayent de trouver des nombres aléatoires sans algorithme. Je pense que le PO est conscient de cela et c'est la raison pour laquelle il demande un algorithme que les gens peuvent faire dans la tête et donner de bons résultats, c'est-à-dire ne souffrez pas des problèmes mentionnés dans votre réponse.
FabianB

2

Je suis vraiment curieux de savoir tout ce que les gens ont pu imaginer sur ce problème.

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

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

Vous avez des cercles en rotation. Vous avez des cubes culbutants. Et vous avez mélangé des jetons. Ils fonctionnent tous merveilleusement bien.

Les cubes sont peut-être les plus anciens. Apparemment, des bâtons allongés à 4 côtés ont été utilisés à un moment donné. Les articulations cubiques symétriques des moutons étaient populaires depuis des millénaires. Nous utilisons ce type de randomiseur depuis - probablement - à peu près à la même époque où nous avons développé le langage.

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

"Quiconque considère des méthodes arithmétiques pour produire des chiffres aléatoires est, bien sûr, dans un état de péché"

--- John von Neumann


7
Réduit - Je ne suis pas intéressé par les outils externes permettant de générer des nombres aléatoires, mais plutôt par des algorithmes en tête qui peuvent s'appuyer sur des mémoires ou des stimulus pour générer des nombres réellement aléatoires.
Magnus Wolffelt

3
vous ne pouvez pas lancer de dés dans votre tête
jk.

2
@ jk01: Correct. Vous ne pouvez pas faire un hasard dans votre tête non plus.
S.Lott

@ S.Lott - Je pense que ce que vous voulez dire, c'est "Un humain typique ne peut pas générer des nombres systématiquement aléatoires dans sa tête à grande vitesse en utilisant la méthode naïve et aucun outil externe".
Inaimathi

1
@ Inaimathi. Non, je dis quelque chose de beaucoup plus fort. Vous ne pouvez pas faire un hasard dans votre tête. Votre cerveau est rempli de biais, vous avez donc besoin d'un algorithme. Aucun algorithme déterminé, efficace et déterministe n'est aléatoire. Vous ne pouvez simplement pas le faire. Aucun algorithme assez simple n'est même pseudo-aléatoire, vous ne pouvez donc pas approximer aléatoire. Les dés sont petits, pratiques et ont une longue histoire d'utilisation.
S.Lott

1

Je ne peux pas penser à aucun. En fait, je m'attendrais à ce que tout ce que vous proposez comporte autant de préjugés que cela ne vaut rien.

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


0

Demandez-vous un LCM que vous pouvez faire dans votre tête? Notez que l'idée que c'est mieux que les dés reste absurde.

Cependant, ceci est aussi aléatoire que n'importe quel algorithme fini, défini et efficace peut l'être.

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 \ 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 pouvoir le faire dans votre tête.


Je me demande s’il existe une version décemment aléatoire de ceci ( générateur congruentiel linéaire (LCG) ), qui est vraiment facile à faire dans la tête? a = 1 idéalement, a = 2 secondes, idéalement. (Mes pensées à ce sujet dans le prochain commentaire.)
Aaron Thoma

(( Je pensais que a = 1, b premier, b astucieusement choisi, pourrait être une alternative plus réalisable pour les grandes entreprises, cela fonctionnerait toujours bien. Ensuite, j'ai remarqué que ce n'est probablement pas vrai: pour b≈0 ou bm, cela va parcourir plutôt séquentiellement à travers les nombres; j’ai donc pensé que b≈m / 2 était la réponse, mais j’ai alors remarqué que cela pouvait aussi être séquentiel (pour petit | b – m / 2 | / m), juste à deux positions en alternance. Pour b≈m / 3, il pourrait être séquentiel, alternant entre 3 positions; pour b≈m / 99, le problème ne se poserait plus sous une forme alternée, mais il faudrait ~ 99 étapes pour parcourir une soustraction modulo. ))
Aaron Thoma
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.