Ich muss eine MonteCarlo-Simulationen parallel auf verschiedenen Maschinen ausführen. Der Code ist in C++, aber das Programm ist eingerichtet und gestartet mit einem Python-Skript, das eine Menge Dinge, insbesondere die zufällige Saat setzt. Die Funktion setseed thake eine 4 Byte unsigned integerBester Seed für parallelen Prozess
ein einfaches
import time
setseed(int(time.time()))
Verwendung ist nicht sehr gut, weil ich die Jobs in eine Warteschlange auf einem Cluster einreichen, bleiben sie für einige Minuten anhängig dann sie beginnt, aber es kann die Startzeit ist impredicible sein, dass zwei Jobs zur gleichen Zeit (Sekunden) beginnen, so dass ich wechseln:
setseet(int(time.time()*100))
aber ich bin nicht glücklich. Was ist die beste Lösung? Vielleicht kann ich Informationen kombinieren aus: Zeit, Maschinen-ID, Prozess-ID. Oder vielleicht ist die beste Lösung, von/dev/random (Linux-Maschinen) zu lesen?
Wie liest man 4 Bytes aus/dev/random?
f = open("/dev/random","rb")
f.read(4)
geben Sie mir eine Zeichenfolge, ich möchte eine ganze Zahl!
Sie haben nicht wirklich gesagt, was "am besten" ausmacht. Ich nehme an, dass Sie versuchen, sicherzustellen, dass jede Instanz einen anderen Samen verwendet. Aber sollten sie zwischen verschiedenen Jobs in einem einzigen Durchlauf eindeutig sein, oder benötigen Sie etwas, das der globalen Eindeutigkeit (alle ausgeführt und alle Jobs) nahe kommt (oder garantiert ist)? Zweitens, müssen Sie in der Lage sein, einen Lauf mit den gleichen Startwerten zu wiederholen (manchmal hilfreich beim intermittierenden Debugging). Und es könnte andere Komplikationen geben. – dmckee
Ich möchte für jeden Fall einen Zufallssamen haben. Wenn der Seed von 0 bis 2^(8 * 4) -1 ist, ist es sehr wahrscheinlich, dass die Samenkörner für jeden Fall unterschiedlich sind. Ich zwinge die Samen nicht dazu, anders zu sein, selbst wenn es vielleicht besser wäre, wenn sie es wären. Ich denke, es ist kein großes Problem. Ich brauche nicht wiederholen mit dem gleichen Saatgut laufen. –
Nun, das ist der einfache Fall und Sie haben bereits gute Antworten. Prost. – dmckee