J'utilise la fonction aléatoire de Python (Population, K) pour générer un ensemble de valeurs aléatoires d'une liste pour créer de nouvelles permutations de cette liste. La question est que chaque fois qu'il traverse une boucle, il génère la même séquence aléatoire exacte em>. Pourquoi est-ce? J'ai même utilisé Random.sed (i) de sorte que la variable I (changer à chaque fois à travers la boucle) la grinait une valeur différente à chaque fois. Toujours la même séquence. Ce qui donne! @
Voici comment je l'utilise: p> qui est simplement appelé à partir de la méthode init d'une classe individuelle. La méthode init est appelée comme ... p> et la méthode init ressemble à ceci ... p> À la fin, j'imprime un dernier mot. Voici la sortie d'exécution de cette méthode deux fois: p> mot final = [[1150, 1160], [720,
635], [95, 260], [595, 360], [770,
610], [830, 610], [25, 185], [520,
585], [605, 625], [410, 250], [555,
815], [880, 660], [300, 465], [1220,
580], [1215, 245], [1250, 400], [565,
575], [1605, 620], [845, 680], [1170,
65], [795, 645], [525, 1000], [760,
650], [580, 1175], [420, 555], [25,
230], [345, 750], [700, 500], [725,
370], [1530, 5], [1740, 245], [875,
920], [415, 635], [1340, 725], [975,
580], [575, 665], [1465, 200], [830,
485], [660, 180], [475, 960], [685,
595], [145, 665], [510, 875], [845,
655], [650, 1130], [945, 685], [480,
415], [700, 580], [560, 365], [685,
610], [835, 625], [1320, 315]] P>
mot final = [[1150, 1160], [720,
635], [95, 260], [595, 360], [770,
610], [830, 610], [25, 185], [520,
585], [605, 625], [410, 250], [555,
815], [880, 660], [300, 465], [1220,
580], [1215, 245], [1250, 400], [565,
575], [1605, 620], [845, 680], [1170,
65], [795, 645], [525, 1000], [760,
650], [580, 1175], [420, 555], [25,
230], [345, 750], [700, 500], [725,
370], [1530, 5], [1740, 245], [875,
920], [415, 635], [1340, 725], [975,
580], [575, 665], [1465, 200], [830,
485], [660, 180], [475, 960], [685,
595], [145, 665], [510, 875], [845,
655], [650, 1130], [945, 685], [480,
415], [700, 580], [560, 365], [685,
610], [835, 625], [1320, 315]] P>
blockQuote> Notez que ces deux sont absolument identiques .. p> EDIT: STRUT> Depuis que je suis difficile de choisir le code que je pense sera utile, Pourtant, suffisamment courte pour aller dans cet article, j'ai posté un tas de celui-ci sur Pastebin. http://pastebin.com/f5f068391 C'est, espérons-le une meilleure alternative .. Merci encore P> p>
4 Réponses :
Ne changez pas la graine pour chaque échantillon. Cela casse le générateur de nombres aléatoires et assure absolument qu'il n'est pas aléatoire.
Définir la graine exactement une fois. Et ne changez jamais cette valeur à nouveau pendant que votre application est en cours d'exécution. P>
Le générateur de nombres aléatoires commence par une graine connue et constante. Chaque fois que vous exécutez, vous devriez obtenir la même séquence. Réglage Aucune graine donne une séquence prévisible. Réglage de toute graine constante (comme Si vous voulez une séquence imprévisible, vous avez besoin d'une semence imprévisible. Utilisez le temps de la journée ou certains octets lus depuis / dev / aléatoires comme des valeurs de semences. Une fois. P> considère cela comme une simplification. P> Il semble produire différentes séquences pour moi. P> i code> dans l'exemple) donne une séquence prévisible. P> >>> import string, random
>>> alphabet = string.ascii_lowercase
>>> random.sample( alphabet, 5 )
['x', 'p', 's', 'k', 'h']
>>> random.sample( alphabet, 5 )
['y', 'h', 'u', 'n', 'd']
La graine a été ajoutée après que l'échantillonnage aléatoire ne changeait pas. Cela ne résout pas vraiment rien. La question n'est pas qu'elle est identique à chaque fois que le programme fonctionne. C'est identique à chaque fois que la boucle i> fonctionne. Cela me donne exactement la même sortie mille fois dans une exécution de l'application.
Il produit des séquences différentes pour moi, mais quand je boucle et recréer une liste, je reçois le identique. HOLD ON, je vais éditer avec ma sortie.
Je ne suis pas sûr de ce que vous entendez par "générer la même séquence aléatoire em>". Puisque vous ne nous donnez que un extrait qui ne peut pas être dirigé seul, il est tout à fait possible qu'il y ait des bugs dans d'autres parties de votre code que vous choisissez de ne pas nous montrer - j'ai essayé d'ajouter la quantité absolument minimale de code Nécessaire pour faire courir votre extrait, c'est-à-dire: et voici ce que je vois quand j'exécute ce script autonome plusieurs fois: p> self.chromosome = list(self.alleles)
random.shuffle(self.chromosome)
J'ajouterai également plus de code :) J'ai ajouté la sortie de l'exécution de cette méthode deux fois, mais j'estimiez et je modifierai plus, merci!
Oui, vos problèmes sont complètement différents, laissez-moi éditer la réponse à expliquer.
Wow, irréel. Merci pour le détail. Utiliser des cours en Python pour la première fois et cela m'a un peu lié. Merci pour l'effort et pour me dire du hasard.
@AlexMartelli, vous toptez ma liste de citations célèbres avec L'esprit-lecture est un art peu fiable i>!
self.finalWord.append(random.sample(alphabet, 1)[0])
Je me demandais la même chose, puis je me suis rendu compte que c'est parce que Python verrouille la valeur aléatoire jusqu'à ce que vous exécutez à nouveau le code de numéro aléatoire. En d'autres termes, la fonction de nombre aléatoire doit être dans la boucle tandis que la boucle et non au-dessus. Faire ce dernier provoque le même nombre aléatoire établi de répéter à nouveau et encore une fois que la boucle commence.
Voici un exemple simple qui exécute 20 essais d'un entier aléatoire entre 1 et 10: P>
#CORRECT version:
x = 1
y = 1
while x<=20:
number = random.randint(1,10)
print("Trial", y, "is", number)
x = x + 1
y = y + 1
#INCORRECT version:
number = random.randint(1,10)
x = 1
y = 1
while x<=20:
print("Trial", y, "is", number)
x = x + 1
y = y + 1
La partie "boucle autour" de cela est parfaitement incertaine. Je ne peux pas reproduire ce comportement en fonction du code que vous avez partagé.
@ S.Lott, l'entrée Pastebin fait des choses reproductibles (ne peut pas exécuter car il manque un fichier de données, mais c'est facile à simuler); Voir la dernière modification de mon A pour les nombreux bogues interagissants que j'ai diagnostiqués jusqu'à présent dans ce code (Aucun lié à
aléatoire code>, vraiment) et mes correctifs suggéré (et une reorg suggérée, à utiliser aléatoire. Shuffle au lieu de la boucle de Random.Sample -L'LI-Supprimer, que est i> un peu liée à la fonctionnalité offerte paraléatoire code> ;-)."J'ai du mal à choisir le code que je pense sera utile" Il y a un tour à cela. Trouvez le plus petit code de code qui produit réellement le problème. Il est parfois difficile de le faire si vous blâmez la mauvaise chose pour votre problème. Mais par rapport au problème de la plus petite pièce de code montrant que le problème est une excellente compétence de débogage.
aléatoire.sample (..., 1) [0] code> est équivalent àaléatoire.choice (...) code>