(動画チュートリアル関連) Seed や Stream とは?

動画チュートリアル 『UE4 Blueprint Quickshot 12 - Random Streams (v4.7)』で出てくる Seed や Initial Seed、Stream とは何でしょうか?

動画チュートリアルでは Random Float in Range from Stream (ストリームから一定範囲にある Float 値の乱数を得る) 関数を利用して乱数を作っています。

「乱数」はでたらめの数という意味ですが、コンピュータで作られる乱数は、一定の計算に基いて作られているため、本当はでたらめではありません (つまり、予測可能です)。その計算の基になる数が Seed (シード、種、初期値) です。

乱数を計算する方式は多数あります。たとえば、 **シードにある数を掛けてさらに別の数を加えたものの下4桁を乱数にし、さらにその得られた乱数から新たなシードを作って新たな乱数を得る (以下、延々と続けることができる) **、などというやり方もあります。

ストリームと乱数とシードの関係を分かりやすく説明するために、円周率を使ったごくごく簡単な 1 桁の擬似乱数を考えてみます。円周率は、

3.14159 26535 89793 23846 26433 83279 50288…

だとして、シードが 3 の時は、円周率の小数点以下第3位以下の数を乱数とします。つまりこの場合、

1、5、9…

というように乱数が生成されることになります。シードが 5 の時は、小数点以下第5位以下の数

9、2、6…

という乱数が生成されることになります。この時、1、5、9… や 9、2、6…が、シードから得られるストリーム (一連の乱数) となります。(さらに、このストリームの中から「 5 以下の乱数を取り出す」などと 範囲 を指定することもできます。)

上記の例から、シードが決まれば、乱数のストリームが 1 個だけ決まることが分かります。言い換えるならば、 シードを変えなければ、ずっと同じ乱数が生成されることになります。 このことは、シードの値がどんな値でも同じです。必ず一意にストリームが決まります。また、どんなに複雑な計算方式を用いる乱数であっても同じです (もちろん UE4 の乱数発生関数であっても)。乱数の流れは一意に決まります。ですから、動画チュートリアルでは Initial Seed (最初に設定されているシード) を変更して、ブッシュの位置を変えています。言い換えれば、Initial Seed を変更するまでは、同じ乱数が使われることになるので、ブッシュの位置も予測可能 (「同じ位置になるはずだ」と予測できる) なのです。

:arrow_forward:関連する UE4 ドキュメンテーションランダム ストリーム