57

Python が乱数発生器のシードに使用したシードを調べる方法はありますか?

独自のシードを指定できることはわかっていますが、Python でシードを管理することに非常に満足しています。ただし、特定の実行で得られた結果が気に入った場合は、後でその実行を再現できるように、使用したシードを知りたいです。使用された種があれば、できました。

答えが「できない」の場合、シードを自分で生成する最善の方法は何ですか? 実行ごとに常に異なるものにしたい---何が使用されたかを知りたいだけです。

更新: はい、つまり、random.random()! 間違い…【タイトル更新】

4

7 に答える 7

61

自動シードをジェネレーターから戻すことはできません。私は通常、次のようなシードを生成します。

seed = random.randrange(sys.maxsize)
rng = random.Random(seed)
print("Seed was:", seed)

この方法は時間ベースであるため、スクリプトを (手動で) 実行するたびに異なりますが、複数のジェネレーターを使用している場合、それらはほぼ同時に作成されたという理由だけで同じシードを持つことはありません。

于 2011-02-16T04:46:51.037 に答える
35

乱数ジェネレーターの状態は、常に単なるシードではありません。たとえば、安全な PRNG には通常、より大きなデータ ブロックであるエントロピー バッファーがあります。

ただし、乱数発生器の状態全体を保存および復元できるため、後で結果を再現できます。

import random

old_state = random.getstate()
print random.random()

random.setstate(old_state)
print random.random()

# You can also restore the state into your own instance of the PRNG, to avoid
# thread-safety issues from using the default, global instance.
prng = random.Random()
prng.setstate(old_state)
print prng.random()

getstateもちろん、永続的に保存したい場合は、結果をピクルすることができます。

http://docs.python.org/library/random.html#random.getstate

于 2011-02-16T05:12:13.630 に答える
5

を使用してシードを「設定」random.seed(None)すると、ランダマイザーはシステム時間の関数として自動的にシードされます。ただし、ご覧のとおり、この値にアクセスすることはできません。ランダム化したいがシードがわかっている場合に私がすることは次のとおりです。

tim = datetime.datetime.now()
randseed = tim.hour*10000+tim.minute*100+tim.second
random.seed(randseed)

注: time.time()@Abdallah によって提案されているように使用するよりもこれを使用することを好む理由は、このようにランドシードが人間が判読でき、すぐに理解できるためです。これには多くの場合大きな利点があります。必要に応じて、日付コンポーネントやマイクロセグメントを追加することもできます。

于 2016-02-15T08:05:33.573 に答える
3

同じことをしたかったのですが、シードを取得できませんでした。だから、種子は時間から生成されるので、私は考えました。システム時間を使用してシードを作成し、それをシードとして使用したので、どのシードが使用されたかがわかります。

SEED = int(time.time())
random.seed(SEED)
于 2015-09-03T12:21:59.123 に答える
2

シードは、次の乱数を作成するために使用されるランダムパッケージの内部変数です。新しい番号が要求されると、シードも更新されます。

毎回同じ乱数を使用するようにしたい場合、またはiを構成可能にしたい場合は、単純に0をシードとして使用します。

CorelDrawには、シードで初期化されたランダムパターンジェネレーターがありました。パターンはシードごとに大幅に異なるため、シードはパターンの重要な構成情報でした。これは、実行の構成オプションの一部である必要があります。

編集:ephemientが指摘したように、乱数ジェネレーターの内部状態は、その実装によってはシードよりも複雑になる場合があります。

于 2011-02-16T04:58:21.337 に答える