Souvent dans nos créations, nous avons besoin de générer un ou des nombres aléatoires. Mais savez-vous vraiment comment cela fonctionne ? Est ce vraiment le pur fruit du hasard ?
Essayons de décortiquer un peu ce principe simplement…
Nombres aléatoires : Une science ?
En voilà une bonne question. Il faut savoir que les nombres aléatoires sont à chaque instant autour de nous, dans notre vie quotidienne. Ils sont utilisés par exemple en cryptographie, sécurité informatique, parapsychologie, simulation, ils sont partout.
Mais comment sont ils déterminés ? Nous n’allons pas faire ici un cours de physique ou mathématiques (beurk !) , mais essayons de savoir un peu comment cela fonctionne. Il faut en réalité créer un générateur. Il existe plusieurs méthodes pour générer des nombres aléatoires, certaines portent même le nom de leur auteur.
Une façon (parmi tant d’autres) assez simple de créer un générateur est de prendre un nombre. On calcule le carré de ce nombre et on prend les chiffres du milieu comme résultat. C’est la méthode Von Neumann.
Exemple : on prend un nombre au hasard disons 514. Je l’élève au carré donc 514² = 264196 je prends pour résultat les nombres au milieu à savoir : 6419 ce qui donne le premier nombre, ensuite je prend ce résultat et je recommence pour avoir un second nombre, et ainsi de suite… Et ces résultats que nous obtenons on les appelle des graines qui vont nous servir justement à avoir des séquences aléatoires de nombres à chaque fois qu’on appliquera la méthode. Ainsi le premier nombre généré, devient la graine du second et ainsi de suite…
Il existe bien entendu pleins de méthodes, provenant de formules mathématiques diverses qui permettent de générer de manière différentes avec une ou sans fourchette donnée des suites pseudo aléatoires à partir d’une graine.
Comme vous pouvez le voir, ce n’est pas les méthodes qui manquent.
Semer des graines et récoltez !
C’est bien joli tout cela, mais comment cela se passe en programmation ? avec Construct 2 par exemple.
Généralement en informatique on utilise une génération de nombres pseudo aléatoires (bien entendu…). En réalité ce n’est pas complètement aléatoire, puisque les suites de nombres sont calculées en fonction d’une graine comme nous l’avons vu tout à l’heure (appelée seed pour les intimes).
On donne à notre programme une graine, qui représente un nombre et en fonction de celle-ci, le programme va générer une suite. C’est pour cela que nous employons le terme pseudo aléatoire car ce n’est pas complètement le hasard, et le résultat de cette technique dépend bien entendu de la qualité de la graine, afin d’éviter d’avoir deux fois la même suite.
Construct 2 ou la graine perdue
Je vois d’ici vos yeux qui s’éveillent pour certains. Vous comprenez peut être mieux pourquoi lorsque vous demandez une suite de nombres aléatoires, si vous recommencez l’opération une seconde fois, vous avez toutes les chances de retomber sur la même suite. La raison est que la graine qui sert à générer la suite reste la même pendant tout le programme.
Donc pour éviter cela à chaque tirage de nombre il faut générer une nouvelle graine ! Et vous êtes sur que votre suite sera différente à chaque coup.
Et quelle graine prendre ? Pour des raisons évidentes et de facilité généralement on prend comme graine, le temps écoulé depuis le lancement du programme. Cette valeur change tout le temps et c’est donc l’idéale pour générer des nombres pseudo aléatoires. Et dans Construct 2 par exemple comment fait on ?
Les Plugins sont tes amis
Pour palier à ce problème il existe quelques plugins pour Construct 2 qui permettent de générer des graines à chaque tirage.
Je peux vous donner comme exemple RandomPlus qui fait très bien ce travail. Cliquez ici pour en savoir plus sur ce plugin. D’ailleurs vous aurez également via ce lien accès à d’autres plugins qui ont la même finalité.
Voilà ! Amusez vous bien : Que les dés de la chance soient avec vous !
ben j’adhère complètement, bien expliqué et tout le toutim. Le hasard mérite carrément un débat tellement celui ci est mystérieux (presque philosophique).
Bravo Crystal 😉
Merci 🙂
Merci, c’est un sujet intéressant, j’aime bien le principe de la méthode mais ton exemple de 5000², c’est juste pour l’exemple ou ça arrive souvent d’avoir besoin de nombre aussi grand ? Aurais tu un petit exemple d’application?
L’exemple de Von n’était là que pour agrémenter l’explication concernant la génération pseudo aléatoire et n’a pas de rapport direct avec la programmation de jeux ou d’application. Evidemment on a rarement besoin de tirer des nombres aussi grands pour nos jeux. Cet exemple est là pour illustrer mes propos. N’oublions pas que le tirage pseudo aléatoire est une technique utilisée dans bien des domaines et pas seulement l’informatique, notamment en statistique et mathématiques 😉
En programmation, dans 99 % des cas on a pas à s’occuper de savoir comment est généré notre nombre, nous, nous savons juste qu’on donne une fourchette (genre choisir un nombre entre 0 et 100) et l’instruction qu’on utilise comme « Random » dans le cas de Construct nous génère le nombre. En revanche ce qui est important c’est de comprenre le principe de la graine qui elle, est utilisée, et qui permet d’avoir une suite de nombre différente à chaque fois.
Les commentaires sont fermés.