ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

再現可能な乱数の生成

シードの指定

この例では、はじめにシードを指定することにより乱数の配列を繰り返し作成する方法を示します。毎回同じシードを使用して乱数発生器を初期化することにより、常に同じ結果が得られます。

まず、乱数発生器を初期化してこの例の結果を再現可能にします。

rng('default');

シード 1 を使用して乱数発生器を初期化します。

rng(1);

次に、乱数の配列を作成します。

A = rand(3,3)
A =

    0.4170    0.3023    0.1863
    0.7203    0.1468    0.3456
    0.0001    0.0923    0.3968

同じコマンドを繰り返します。

A = rand(3,3)
A =

    0.5388    0.2045    0.6705
    0.4192    0.8781    0.4173
    0.6852    0.0274    0.5587

rand の最初の呼び出しにより乱数発生器の状態が変化したので、2 回目の結果は異なったものとなります。

ここで、前と同じシードを使用して乱数発生器を再初期化し、続いて最初の行列 A を再現します。

rng(1);
A = rand(3,3)
A =

    0.4170    0.3023    0.1863
    0.7203    0.1468    0.3456
    0.0001    0.0923    0.3968

場合によっては、シードのみを設定するだけでは同じ結果が保証されないことがあります。これは、乱数関数の値の取得先となる乱数発生器が、コード実行に際して予想とは異なったものとなる場合があるからです。長期的に反復が可能となるようにするには、シードと乱数発生器のタイプを共に指定します。

たとえば、次のコードはシードを 1 に、乱数発生器をメルセンヌ・ツイスターに設定します。

rng(1,'twister');

以下のような場合には、シードと発生器のタイプを共に設定します。

  • 将来の MATLAB® リリースで実行したときに、今日作成したコードの動作で返されるものと同じ結果が必ず返されるようにする。

  • 現在のリリースを使用しても、以前の MATLAB リリースで作成したコードの動作で返されるものと同じ結果が必ず返されるようにする。

  • 自分以外が作成した乱数コードの実行後に、自分のコードで乱数を繰り返し生成する。

使用可能な乱数発生器の一覧は、rng のリファレンス ページを参照してください。

発生器設定の保存と復元

この例では、乱数発生器の設定を保存して復元することにより、再現可能な乱数の配列を作成する方法を示します。発生器の設定の保存と復元を行う最も一般的な理由は、アルゴリズムや反復の特定ポイントで生成される乱数を再現することです。たとえば、デバッグの補助として発生器の設定を使用できます。

まず、乱数発生器を初期化してこの例の結果を再現可能にします。

rng(1,'twister');

発生器の設定を構造体 s に保存します。

s = rng;

1 から 10 までの整数値の乱数からなる配列 A を作成します。

A = randi(10,3,3)
A =

     5     4     2
     8     2     4
     1     1     4

同じコマンドを繰り返します。

A = randi(10,3,3)
A =

     6     3     7
     5     9     5
     7     1     6

randi の最初の呼び出しにより乱数発生器の状態が変化したので、2 回目の結果は異なったものとなります。

ここで、発生器を s に保存した元の状態に戻し、最初の配列 A を再現します。

rng(s);
A = randi(10,3,3)
A =

     5     4     2
     8     2     4
     1     1     4

発生器を初期化する再シードと異なり、この方法では、発生器の設定の保存と復元がいつでも実行できます。

参考

関連する例

詳細

この情報は役に立ちましたか?