Rubyで正規乱数を使いたい場面が場面があったので備忘録がてらにメモ。
正規乱数とは、正規分布に従う形の乱数のこと。
簡単に説明すれば通常の乱数は範囲内の数値が完全にランダムで取得できますが、こちらでは正規分布に従って、値によって取得できる確率(出現率)が異なる。
利用ケースとしては「A, B, C」といった値のうち、Bが一番出現率が高くて、たまにAやCが出現する……といったロジックの作成時に有効。
(3つだと正直採用理由としては薄いが)
今回は、手軽に正規乱数が生成できる「RandomBell」を採用することにした。
プログラム例: demo.rb
#!/usr/bin/ruby require "random_bell" 20.times do puts RandomBell.new.rand end
出力例: demo.rb
0.23298496223812165 0.5808889180926479 0.6339955139512485 0.5469677664536374 0.430846601996505 0.2357401173039183 0.6129031905463543 0.5509746034599111 0.6814646944451258 0.6006659779398363 0.5087945006355383 0.5929194195546358 0.42422675687108424 0.6467333263529129 0.616221802927346 0.5389514020831013 0.39782389432990556 0.485352302182309 0.31168800382348927 0.583208925506976
あくまで出力は0から1の値の範囲なので、利用する場合はこれに特定の数値(先ほどの例であればA, B, Cの個数)を加味してやれば良い。
(例えば個数をかけた後に整数に直すなど)