Probleme haben, eine Simulation deterministisch mit random.Random (0) in Python zu halten

Ich habe eine sehr große Simulation in Python mit vielen Modulen. Ich nenne viele zufällige Funktionen. Um die gleichen zufälligen Ergebnisse zu halten, habe ich eine Variable keep_seed_random.

Wie so:

import random keep_seed_random = True if keep_seed_random is False: fixed_seed = random.Random(0) else: fixed_seed = random 

Dann benutze ich festes alles über das Programm, wie zB

 fixed_seed.choice(['male', 'female']) fixed_seed.randint() fixed_seed.gammavariate(3, 3) fixed_seed.random() fixed_seed.randrange(20, 40) 

und so weiter…

Es hat gut geklappt Aber jetzt, dass das Programm zu groß ist, da ist etwas anderes störend und die Ergebnisse sind nicht mehr identisch, auch wenn ich keep_seed_random = False wähle

Meine Frage ist, ob es irgendeine andere Quelle der Zufälligkeit in Python gibt, dass ich fehlt?

PS Ich importiere zufällig nur einmal.

BEARBEITET

Wir haben versucht, den genauen Zeitpunkt zu ermitteln, wann das Programm von exakt gleichen Ergebnissen zu unterschiedlichen Ergebnissen gedreht wurde. Es schien zu sein, als wir eine Menge von Lesung von Datenbanken ohne Verbindung zu zufälligen Modulen eingeführt haben.

Die Ergebnisse zeigen nun unter zwei ähnlichen Ergebnissen. Das ist, ich laufe main.py einmal ein Ergebnis von 8148.78 für das BIP Ich laufe wieder Ich bekomme 7851.49 Wieder 8148.78 zurück wieder 7851.49

Auch für die funktionierende Version, vor der Änderung, das erste Ergebnis (wenn wir Instanzen erstellen und Gurke speichern sie) bekomme ich ein Ergebnis. Dann sind ab dem zweiten die Ergebnisse gleich. Also, ich vermute, es ist verwandt mit Pickle Lesen / Laden.

Die Frage bleibt!

2. EDITIERT

Wir haben das Problem teilweise gefunden. Das Problem ist, wenn wir Instanzen erstellen und Pickle Dump und dann Gurke laden.

Wir können immer noch nicht genau die gleichen Ergebnisse für das Erstellen und einfach Laden. Bei wiederholtem Laden sind die Ergebnisse jedoch exakt.

Also, das Problem ist in PICKLE Einige Randomisierung kann auftreten, wenn Dumping und Laden (ich glaube).

Vielen Dank,

One Solution collect form web for “Probleme haben, eine Simulation deterministisch mit random.Random (0) in Python zu halten”

Dies ist schwer zu diagnostizieren, ohne eine gute reproduzieren Fall wie @ mart0903 erwähnt. Allerdings gibt es im Allgemeinen mehrere Quellen der Zufälligkeit, die auftreten können. Ein paar Dinge kommen in den Sinn:

Wenn Sie beispielsweise die multiprocessing und / oder subprocess , um mehrere parallele Prozesse zu erzeugen, können Sie eine Racebedingung erleben. Das heißt, verschiedene Prozesse beenden zu verschiedenen Zeiten jedes Mal, wenn Sie das Programm ausführen. Vielleicht kombinierst du das Ergebnis in irgendeiner Weise, die von diesen Threads abhängig ist, die in einer bestimmten Reihenfolge ausgeführt werden.

Vielleicht schlägst du einfach über ein Wörterbuch und erwartest, dass die Schlüssel in einer bestimmten Reihenfolge sind, wenn in der Tat Wörterbücher nicht bestellt werden. Zum Beispiel führen Sie die folgenden ein paar Mal in einer Reihe (Ich bin mit Python 3.5 im Fall ist es wichtig) und Sie werden feststellen, dass die Key-Value-Paare drucken in einer anderen Reihenfolge jedes Mal:

 if __name__=='__main__': data = dict() data['a'] = 6 data['b'] = 7 data['c'] = 42 for key in data: print(key + ' : ' + str(data[key])) 

Sie könnten sogar auf Zeit-Briefmarken oder legen Sie etwas Wert, oder vielleicht eine uuid irgendwo, dass Sie in einer Berechnung verwenden.

Die Möglichkeiten könnten weitergehen. Aber wieder, schwer zu nageln ohne eine einfache reproduzieren Fall. Es kann nur einige gute-ol-Breakpoints und eine Menge von Schritt durch Code.

Viel Glück!

  • Schnelle willkürliche Verteilung zufällige Stichproben
  • Random Walk's seltsame Ergebnis in Python 3?
  • Python- Wie kann ich Fragen, die ein A, B, C, D haben
  • Bimodale Verteilung in C oder Python
  • Generieren Sie zufällige Zahlen, die die beliebige Verteilung replizieren
  • Wie kann ich zufällig einen Artikel aus einer Liste auswählen?
  • Zufallszahlengenerator, wie man Zufallszahlen bekommt, die nicht gleich sind
  • Python: Wählen Sie zufällige Zeile aus Datei, dann löschen Sie diese Zeile
  • Erstellen Sie eine Matrix mit zufälliger Position
  • Zufällige Auswahl in pandas dataframe
  • Wie lerne ich in dict in zufälliger Reihenfolge in Python?
  • Python ist die beste Programmiersprache der Welt.