2009-07-20 6 views
4

In einer Ansicht in Django verwende ich random.random(). Wie oft muss ich random.seed() anrufen? Einmal für jede Anfrage? Einmal für jede Jahreszeit? Einmal während der Webserver läuft?Seeding random in django

+0

Im Zusammenhang mit http://stackoverflow.com/questions/203382/do-stateless-random-number-generators-exist, http://stackoverflow.com/questions/1108780/why-do-i-always-get -die-gleiche-Folge-von-Zufallszahlen-mit-Rand, http://stackoverflow.com/questions/976993/issues-with-seeding-a-pseudo-random-number-generator-more-than-once –

Antwort

3

Rufen Sie random.seed() selten, wenn überhaupt.

Um zufällig zu sein, müssen Sie zulassen, dass der Zufallszahlengenerator ausgeführt wird, ohne den Seed zu berühren. Die Reihenfolge der Zahlen ist zufällig. Wenn Sie den Seed ändern, starten Sie eine neue Sequenz. Die Startwerte sind möglicherweise nicht sehr zufällig, was zu Problemen führt.

Je nachdem, wie viele Nummern Sie benötigen, können Sie in Erwägung ziehen, den Seed regelmäßig von /dev/random zurückzusetzen.

Sie sollten versuchen, den Seed neu zu setzen, kurz bevor Sie den vorherigen Seed verbraucht haben. Sie erhalten nicht die vollen 32 Bit an Zufälligkeit, also möchten Sie vielleicht den Seed nach dem Generieren von 2 ** 28 Zahlen zurücksetzen.

0

Es hängt wirklich davon ab, wofür Sie die Zufallszahl benötigen. Experimentieren Sie, um herauszufinden, ob es einen Unterschied macht. Sie sollten auch bedenken, dass es tatsächlich ein Muster für Pseudozufallszahlen gibt. Macht es einen Unterschied für Sie, wenn jemand die nächste Zufallszahl erraten kann? Wenn dies nicht der Fall ist, seed es einmal zu Beginn einer Sitzung oder wenn der Server zum ersten Mal gestartet wird.

Seeding einmal zu Beginn der Sitzung würde wahrscheinlich am sinnvollsten, IMO. Auf diese Weise erhält der Benutzer während seiner Sitzung eine Reihe von Pseudozufallszahlen. Wenn Sie jedes Mal, wenn eine Seite geliefert wird, in den Start gehen, ist dies nicht garantiert.

+1

Verschwenden Sie nicht viel Zeit beim Experimentieren. Ändern der Samen führt zu einer Verzerrung. Wenn Sie wirklich Glück haben, erscheinen Ihre Samen zufällig für die paar Dutzend Tests, die Sie ausführen möchten. Wenn du nicht etwas Magisches hast, ist das zufällige Setzen von Samen nicht schrecklich zufällig. –

3

Den Seed nicht einstellen.

Die einzige Zeit, die Sie festlegen möchten, ist, wenn Sie sicherstellen möchten, dass die gleichen Ereignisse weiterhin auftreten. Zum Beispiel, wenn Sie nicht wollen, dass Spieler in Ihrem Spiel betrügen, können Sie den Samen speichern und dann einstellen, wenn sie ihr Spiel laden. Dann, egal wie oft sie speichern + neu laden, gibt es immer noch die gleichen Ergebnisse.