aléatoire.de la graine(): pour Quoi faire?
Je suis un peu confus sur ce qu' random.seed()
n'en Python. Par exemple, pourquoi la ci-dessous essais de faire ce qu'ils font (systématiquement)?
>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7
Je n'arrivais pas à trouver de la bonne documentation sur ce sujet.
- La génération de nombre aléatoire n'est pas vraiment "aléatoire". Il est déterministe, et la séquence qu'il génère est dicté par la valeur de départ vous passer dans
random.seed
. Généralement, il suffit d'invoquerrandom.seed()
, et il utilise l'heure actuelle, comme la semence de la valeur, ce qui signifie que chaque fois que vous exécutez le script, vous allez obtenir une autre séquence de valeurs. - En passant de la même graine aléatoire, et en appelant ensuite il va vous donner le même ensemble de nombres. Cela fonctionne comme prévu, et si vous voulez que les résultats soient différents à chaque fois, vous aurez à la graine avec quelque chose de différent à chaque fois que vous démarrez une application (par exemple sortie de /dev/random ou de temps)
- La graine est ce qui alimente le générateur de nombres aléatoires pour générer le premier nombre aléatoire. Après cela, ils RNG est auto-alimenté. Vous ne voyez pas la même réponse cohérente à cause de cela. Si vous exécutez ce script, vous obtiendrez la même séquence de "aléatoire" des nombres. Réglage de la graine est utile si vous souhaitez reproduire des résultats, car tous les "aléatoire" nombre généré sera toujours le même.
- La peine de mentionner: l'ordre indiqué dans ce post est en Python 2. Python 3 donne un ordre différent.
Vous devez vous connecter pour publier un commentaire.
Pseudo-générateurs de nombres aléatoires de travail en effectuant une opération sur une valeur. Généralement, cette valeur est le nombre précédent généré par le générateur. Cependant, la première fois que vous utilisez le générateur, il n'y a aucune valeur précédente.
L'ensemencement d'une pseudo-random number generator lui donne son premier "précédent" de la valeur. Chaque valeur de départ correspond à une séquence de valeurs générées par un générateur de nombre aléatoire. C'est, si vous fournir le même graines deux fois, vous obtenez la même séquence de nombres à deux reprises.
En général, vous voulez des graines de votre générateur de nombre aléatoire avec une valeur qui va changer à chaque exécution du programme. Par exemple, l'heure actuelle est souvent de semences. La raison pour laquelle cela ne se fait pas automatiquement de sorte que si vous voulez, vous pouvez donner un spécifique de la graine pour obtenir une séquence connue de nombres.
Toutes les autres réponses ne semblent pas à expliquer l'utilisation de l'aléatoire.de la graine().
Voici un exemple simple (source):
De l'essayer. Disons aléatoire.graine " donne une valeur aléatoire générateur de valeur ('random.randint()') qui génère ces valeurs sur la base de cette graine. Une des propriétés de nombres aléatoires est qu'ils doivent être reproductibles. Une fois que vous mettez de la même graine que vous obtenez le même modèle de nombres aléatoires. Donc, vous êtes la génération dès le départ à nouveau. Vous donner une autre graine, il commence avec une initiale différente (plus de 3).
Vous avez donné une graine maintenant, il va générer des nombres aléatoires entre 1 et 10, l'un après l'autre. Donc on peut penser que l'un un ensemble de nombres pour une valeur de départ.
Un nombre aléatoire est généré par une opération sur une valeur précédente.
Si il n'y a aucune valeur à l'heure actuelle comme valeur précédente automatiquement. Nous pouvons fournir cette valeur précédente en utilisant
random.seed(x)
oùx
pourrait être n'importe quel nombre ou une chaîne de caractères etc.Donc
random.random()
n'est pas réellement parfait de nombre aléatoire, il peut être prédite parrandom.seed(x)
.Par conséquent, la génération d'un nombre aléatoire n'est pas fait au hasard, parce qu'il fonctionne sur des algorithmes. Les algorithmes de toujours donner le même résultat basé sur la même entrée. Cela signifie, il dépend de la valeur de la graine. Donc, afin de les rendre plus aléatoire, le temps est automatiquement assigné à
seed()
.Dans ce cas, le hasard est en fait pseudo-aléatoire. Donné une graine, il va générer des nombres, avec une répartition égale. Mais avec la même graine, il va générer le même numéro de séquence à chaque fois. Si vous souhaitez la modifier, vous devrez changer vos graines. Beaucoup de gens aiment à générer une graine en fonction de l'heure ou de quelque chose.
Exécuter le programme ci-dessus plusieurs fois...
1ère tentative: imprime 5 entiers aléatoires dans la gamme de 1 à 100
2ème tentative: imprime même 5 nombres aléatoires est apparu au-dessus d'exécution.
3ème tentative: même
.....Donc sur
Explication: à Chaque fois que nous sont en cours d'exécution du programme ci-dessus nous avons mise en de la graine à 10, puis générateur aléatoire prend cela comme une variable de référence. Et puis en faisant un peu de formule prédéfinie, il génère un nombre aléatoire.
Par conséquent, l'installation de la graine à 10 lors de la prochaine exécution fixe à nouveau le numéro de référence à 10 et encore le même comportement commence...
Dès que nous réinitialisation de la valeur de départ, il donne les mêmes plantes.
Remarque: le Changement de la valeur de départ et d'exécuter le programme, vous verrez une séquence aléatoire différente de la précédente.
À mon humble avis, il est utilisé pour générer le même parcours de résultat lorsque vous utilisez
random.seed(samedigit)
de nouveau.Voici un petit test qui montre que l'alimentation de la
seed()
méthode avec le même argument peut provoquer le même pseudo-aléatoire:len(set(l))<=1
Ici est de ma compréhension.
Chaque fois que nous avons fixé une valeur de départ, un "label" ou "de référence" est généré. Le côté aléatoire.appel de fonction est attaché à ce "label", donc la prochaine fois que vous appelez la même valeur de départ et aléatoire.la fonction, il vous donnera le même résultat.
Définir la
seed(x)
avant de générer un ensemble de nombres aléatoires et de l'utilisation de la même graine de générer le même ensemble de nombres aléatoires. Utile en cas de reproduction de l'questions.