Premièrement, il n'y a pas de véritable hasard dans les "nombres aléatoires" générés par ordinateur. Tous les générateurs pseudo- aléatoires utilisent des méthodes déterministes. (Peut-être que les ordinateurs quantiques changeront cela.)
La tâche difficile consiste à créer des algorithmes qui produisent une sortie qui ne peut pas être distinguée de manière significative des données provenant d'une source vraiment aléatoire.
Vous avez raison de dire que définir une graine vous démarre à un point de départ connu particulier dans une longue liste de nombres pseudo-aléatoires. Pour les générateurs implémentés dans R, Python, etc., la liste est extrêmement longue. Assez longtemps pour que même le plus grand projet de simulation possible ne dépasse pas la «période» du générateur pour que les valeurs commencent à se recycler.
Dans de nombreuses applications ordinaires, les gens ne fixent pas de graine. Ensuite, une graine imprévisible est sélectionnée automatiquement (par exemple, à partir des microsecondes sur l'horloge du système d'exploitation). Les générateurs pseudo-aléatoires d'usage général ont été soumis à des batteries de tests, constitués en grande partie de problèmes qui se sont révélés difficiles à simuler avec des générateurs insatisfaisants antérieurs.
Habituellement, la sortie d'un générateur se compose de valeurs qui ne sont pas, à des fins pratiques, distinguables de nombres choisis vraiment au hasard sous la forme d'une distribution uniforme sur Ensuite, ces nombres pseudo-aléatoires sont manipulés afin de correspondre à ce que l'on obtiendrait en échantillonnant au hasard à partir d'autres distributions telles que binomiale, Poisson, normale, exponentielle, etc.( 0 , 1 ) .
Un test d'un générateur consiste à voir si ses paires successives dans les «observations» simulées comme
semblent réellement remplir le carré de l'unité au hasard. (Fait deux fois ci-dessous.) L'aspect légèrement marbré est le résultat d'une variabilité inhérente. Il serait très suspect d'obtenir une intrigue qui semblait parfaitement uniformément grise. [Dans certaines résolutions, il peut y avoir un motif moiré régulier; veuillez modifier le grossissement vers le haut ou vers le bas pour vous débarrasser de cet effet bidon s'il se produit.]U n i f( 0 , 1 )
set.seed(1776); m = 50000
par(mfrow=c(1,2))
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,1))
Il est parfois utile de définir une graine. Certaines de ces utilisations sont les suivantes:
Lors de la programmation et du débogage, il est pratique d'avoir une sortie prévisible. De nombreux programmeurs mettent une set.seed
instruction au début d'un programme jusqu'à ce que l'écriture et le débogage soient terminés.
Lors de l'enseignement de la simulation. Si je veux montrer aux élèves que je peux simuler des jets d'un dé juste en utilisant la sample
fonction dans R, je pourrais tricher, exécuter de nombreuses simulations et choisir celle qui se rapproche le plus d'une valeur théorique cible. Mais cela donnerait une impression irréaliste du fonctionnement réel de la simulation.
Si je mets une graine au départ, la simulation obtiendra le même résultat à chaque fois. Les étudiants peuvent relire leur copie de mon programme pour s'assurer qu'elle donne les résultats escomptés. Ensuite, ils peuvent exécuter leurs propres simulations, soit avec leurs propres graines, soit en laissant le programme choisir son propre point de départ.
Par exemple, la probabilité d'obtenir la 10 totale lors du laminage de deux dés est juste
3 / 36 = 1 / douze = 0,08333333.
2 ( 1 / douze ) ( onze / douze ) / 106---------------√= 0,00055.
set.seed(703); m = 10^6
s = replicate( m, sum(sample(1:6, 2, rep=T)) )
mean(s == 10)
[1] 0.083456 # aprx 1/12 = 0.0833
2*sd(s == 10)/sqrt(m)
[1] 0.0005531408 # aprx 95% marg of sim err.
Lors du partage d'analyses statistiques impliquant une simulation.
De nos jours, de nombreuses analyses statistiques impliquent une certaine simulation, par exemple un test de permutation ou un échantillonneur de Gibbs. En affichant la graine, vous permettez aux personnes qui lisent l'analyse de reproduire exactement les résultats, si elles le souhaitent.
Lors de la rédaction d'articles académiques impliquant la randomisation. Les articles académiques passent généralement par plusieurs cycles d'examen par les pairs. Un tracé peut utiliser, par exemple, des points à gigue aléatoire pour réduire le surplacement. Si les analyses doivent être légèrement modifiées en réponse aux commentaires des examinateurs, il est bon qu'un tremblement particulier non lié ne change pas entre les rondes de révision, ce qui peut être déconcertant pour les examinateurs particulièrement exigeants, alors vous définissez une graine avant de trembler.
2^19937 − 1
. La graine est le point de cette séquence extrêmement longue où le générateur démarre. Alors oui, c'est déterministe.