月曜日, 5月 01, 2006

ドリトルのrandom関数の「見える化」をやってみる

最近の経営手法のトレンドに「見える化」というのがある。ITでいうとナレッジマネジメントなどの分野で、この「見える化」が話題だ。ITを使って、複雑に絡み合ったデータや暗黙知などを可視化しようとするものだ。

実験音楽(もどき)でも多用しているのだが、偶然を作り出すのに乱数を発生させる関数は必須だ。ドリトルのrandom(n)関数は、1~nまでの乱数を返す。乱数は、偏りのない数を発生させているはずなのだが、本当にそうなっているかどうか見て確かめてみたいところではある。

こんなことを考えてみた。例えば、縦(x)横(y)200の平面の点の数は40000個ある。だから、この平面の座標を40000個ランダムに発生させて、そこにpsetで点を打っていけば、この平面が点で埋め尽くされるのではないか。

ということで、これを確かめるプログラムを作ってみた。40000個の10%にあたる4000個の座標をrandom関数で発生させてそこに点をプロットしてみる。

見える化ということだから、ラベルオブジェクトを使って、いま何個目の座標をプロットしているかと、乱数で決めたxy座標の値を表示することにした。最初に青色で座標軸を表示して、その後、赤色でランダムに4000個の点をプロットしてみる。

//random関数の見える化

dispmsg=ラベル! 作る -150 200 位置 400 50 大きさ.

描画:pset=「|x y color size|
ラベル! 作る (size)(size) 大きさ (x)(y) 位置 (color) 色 書く
」.

xmax=200.ymax=200.count=4000.

n=ymax/2.「描画! (0)(n)(青)(1) pset. n=n-1」!(ymax) 繰り返す.
n=xmax/2.「描画! (n)(0)(青)(1) pset. n=n-1」!(xmax) 繰り返す.

n=0.「n=n+1.
 x=(random(xmax)-xmax/2).
 y=(random(ymax)-ymax/2).
 描画! (x)(y)(赤)(1) pset.
 dispmsg! ("count="+(n)+" x="+(x)+" y="+(y)) 書く.
」!(count) 繰り返す.

dispmsg! ("count="+(n)+" 終了") 書く.

//--------- ここまで ----------



赤い点がほぼ一様に分布しているから、ドリトルのrandom関数も偏り無くランダムな数値を発生しているようだ。