global.RandomVariate
new global.RandomVariate(
urg,
nonuniform )
乱数生成器を生成します。 この生成器は、発生確率が不均一な乱数を生成します。 例えば、大きい値は出やすいが小さな値は出にくい、とか、正規分布に基づいた発生確率を持つ、といったものです。
不均一乱数生成器インスタンスを返します。
大雑把ではありますが、不均一乱数生成関数 nonuniformを、累積分布関数の逆関数で実装する場合の流れを示します。
例えば、乱数値の範囲が0〜1、確率密度関数f(x)が f(x) = ax (aは正の実数)であるような不均一乱数を実装する場合、以下のようになります。
範囲は[0,1)であることから、累積分布関数F(x)は、f(t)を0からxまで積分した F(x) = ax 2/2 となります。 範囲[0,1)の確率の累積が1であることから、F(x) = 1 (x→1) です。 ここから a = 2 が得られるので、累積分布関数は F(x) = x 2 です。 uを[0,1)の一様な乱数とするとき、求める関数は、累積分布関数の逆関数 F -1(u) = u 1/2となります。
よって、下記のように実装すればよいことになります。
function linear(random) { var u = random(); return Math.sqrt(u); } var randgen = new RandomVariate(myGenerator, linear);