- Keiryo_tan
- 4123
- 17
- 1
- 2
JavaScriptで乱数を扱うとき「Math.random()」を使うと思いますが、そこで考える事を終わらしてはいけない。 少し数式を変えるだけで一様分布以外の乱数が得られます。 ics.media/entry/11292 pic.twitter.com/5SjMwLE7fy
2016-03-07 10:31:06本編スタート
前にRTした記事を紹介から、、JavaScriptのプログラムで、ビジュアルアートやアニメーションの演出に使う乱数のいじくり方が書かれているね。 ICS MEDIA - JavaScript開発に役立つ重要なランダムの数式まとめ ics.media/entry/11292
2016-03-18 23:10:24ビジュアル的な演出に主眼が置かれていて、理論の方向から解説するのは野暮っていう気もするけど…。ゲームなんかに応用するときには重要になるはず。
2016-03-18 23:11:09たとえば、正体が不明の「謎分布」だと期待値が分からない!ゲームやくじ引きに使う乱数を調整するのに、期待値が分からないと困るよね。 pic.twitter.com/MBWRnvOoNC
2016-03-18 23:13:07まずは確率分布の基本についておさらい。 確率変数は確率に従って定義域内でいろいろな値をとる 確率密度関数の積分が、積分区間内(a以上b以下)の値をとる確率
2016-03-18 23:16:24確率分布の種類はたくさんあって、それだけで専門書が成り立つくらい。パラメトリック統計学の「主役」正規分布、ほかに一様分布、指数分布とか、、、
2016-03-18 23:17:55a以上b以下の区間内の値を等確率でとる分布が一様分布U(a,b)。 ほとんどのプログラミング言語で、U(0,1)に従う乱数が用意されてるよ。 pic.twitter.com/yKWNP6LB8I
2016-03-18 23:19:09記事の最初に登場するのは、「一様分布に従う乱数を2回発生させて、足し合わせたもの」。 この分布は確率密度関数の形から三角分布の名前で呼ばれるんだ。三角分布Triangular(a,b,c)のパラメータは下限値a、上限値b、モードc。 pic.twitter.com/H34ZxV9VGI
2016-03-18 23:21:47[知識2]UとVが一様分布U(0,1)に従うとすると、「X = (U+V)/2」は三角分布Triangular(0,1,1/2)に従う
2016-03-18 23:23:02[知識3]Xが三角分布Triangular(0,1,1/2)に従うとすると、「Y = a + (b−a)⋅X」はTriangular(a,b,(a+b)/2)に従う
2016-03-18 23:23:34- 非対称形の三角分布に従う乱数の作り方では、MINMAX法が新しいです。「X = (1−c)⋅min(U,V) + c⋅max(U,V)」、これでTriangular(0,1,c)に従います。
- A new method to simulate the triangular distribution
- こんなにシンプルなのに2008年まで知られてなかったなんて…!
その次に出てくるのは、「一様分布に従う乱数を2乗したもの」。 ぱっと見、ヒストグラムは0寄りに偏って見えるけど確率密度関数の式までは分からないかな…?
2016-03-18 23:25:15そこで、確率変数の変換の式を使って、変換した変数について確率密度関数を求めてみるよ。 pic.twitter.com/hX87bQNpjM
2016-03-18 23:27:05T = U^2 U = √T du/dt = 1/(2√t) p_T(t) = |1/(2√t)| = 1/(2√t) よって、 [知識4]Uが一様分布U(0,1)に従うとすると、「T = U^2」はベータ分布Beta(1/2,1)に従う
2016-03-18 23:28:10ベータ分布はあまりなじみのない人が多いかな。0以上1以下の区間で連続的な値をとる分布で、オペレーションズリサーチのPERTなどで利用されてるよ。
2016-03-18 23:29:12ベータ分布Beta(α,β)のパラメータは、分布の形を決めるαとβ。(魅惑の曲線!) pic.twitter.com/t6O25661dh
2016-03-18 23:32:16