101 votes

définir une graine aléatoire à l'échelle du programme en python

J'ai un programme assez important, dans lequel j'utilise des fonctions de l'application random dans différents fichiers. J'aimerais pouvoir définir la graine aléatoire une fois, à un seul endroit, pour que le programme renvoie toujours les mêmes résultats. Cela peut-il être réalisé dans python ?

1voto

Une mise en garde importante est que pour les versions de python antérieures à 3.7, les clés de dictionnaire ne sont pas déterministes. Cela peut conduire à un caractère aléatoire dans le programme ou même à un ordre différent dans lequel les nombres aléatoires sont générés et donc à des nombres aléatoires non déterministes. Conclusion : mettez à jour python.

0voto

Gary Points 1

J'étais également perplexe face à la question de la reproduction d'un projet d'apprentissage profond, et j'ai donc réalisé une petite expérience pour partager les résultats avec vous.

Je crée deux fichiers dans un projet, qui sont nommés test1.py y test2.py respectivement. Sur le site test1 j'ai mis random.seed(10) pour le random et imprimer 10 nombres aléatoires plusieurs fois. Comme vous pouvez le vérifier, les résultats sont toujours les mêmes.

Qu'en est-il test2 ? Je procède de la même manière, à l'exception de la mise en place de la semence pour la random Les résultats s'affichent différemment à chaque fois. Cependant, tant que j'importe test1 --- même sans l'utiliser, les résultats sont les mêmes qu'en test1 .

L'expérience aboutit donc à la conclusion que si vous voulez définir la graine pour tous les fichiers d'un projet, vous devez importer le fichier/module qui définit et définit la graine.

0voto

acciptris Points 11

Selon le rapport de Jon réponse , réglage random.seed(n) au début du programme principal permet de régler la semence de manière globale. Ensuite, pour définir les graines des bibliothèques importées, on peut utiliser la sortie de random.random() . Par exemple,

rng = np.random.default_rng(int(abs(math.log(random.random()))))

tf.random.set_seed(int(abs(math.log(random.random()))))

-16voto

user1277476 Points 1612

Vous pouvez le garantir assez facilement en utilisant votre propre générateur de nombres aléatoires.

Il suffit de choisir trois grands nombres premiers (en supposant que ce n'est pas une application de cryptographie), et de les insérer dans a, b et c : a = ((a * b) % c) Cela donne un système de rétroaction qui produit des données assez aléatoires. Notez que tous les nombres premiers ne fonctionnent pas de la même manière, mais si vous ne faites qu'une simulation, cela ne devrait pas avoir d'importance - tout ce dont vous avez besoin pour la plupart des simulations est un enchevêtrement de nombres avec un modèle (pseudo-aléatoire, rappelez-vous) suffisamment complexe pour qu'il ne corresponde pas d'une manière ou d'une autre à votre application.

Knuth en parle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X