主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ランダムと確率 スパ4のランダムキャラ選択を見ていて思うことから

                
tags: JavaScript
 ゲームやその辺のなにかランダム要素を回して、その結果が出たときに「これ確率いじくってるだろ」と言われたり、「ランダムになっていない」と言われるのを結構目にする。そのあたりから、人が望むランダムと本当のランダムについて、コードを交えながら結果を目で確認できるように書いていく。

 一般的だと思うのはウォークマンのランダム再生で、曲順をランダムにしているはずなのに、アルバムの正規の曲順どおりに次の曲が再生されたときだ。この経験が積み重なって、ウォークマンのランダム再生がおかしいと感じたことがあった。それを同じ機種を持っている友達と話したところ、あれはランダムになっていないという意見で一致した。これを今にして考えてみると、ぼくはランダムというものの理解を誤っていた。ランダムだからこそ、順番どおりに再生されてしまうことがあっても不思議ではない。
 どこかのメーカーのプレーヤーではランダム発生器を完全なランダムから、人為的で人がランダムだと感じるようなランダム発生器に代えていると聞いた。たぶん、極力順番通りに再生されないよう、正規の順番から一曲以上飛ばしたり逆順に飛んだりするようにしているんだろう。

 ゲームでぼちぼち目にするのは、ルーレットのようなランダム要素を回し続けて、結果の目がどこかにかたよって、任意の目が全然出ないときだ。こんな状況に出くわして、「確率が操作されている」と言われているのを見ることもある。
 たとえばスーパーストリートファイター4AEというゲームには39人のキャラクターがいて、ランダムセレクトができる。ランダムセレクトでは39人のキャラ全員の中から一人が選ばれるようになっている。このゲームのランダムセレクトは、ランダムになっていなくて結果がかたよるからおかしいと言われているのを見かける。本当にそうなの? ちょっと確認してみる。実際やるのは手間なのでシミュレーションする。
 まず100万回のランダムセレクトをシミュレートする。シミュレーションはJavaScriptで書いたので、コードも結果もリンク先で確認できる。
http://jsfiddle.net/hiroaki/e4uxq/
 Resultウィンドウの各行で『キャラクターに対応した数字:その数字の出現回数』となっている。数字は1から39のあいだでランダムに出るようになっているので、1がキャラクター1、2がキャラクター2というふうに読み替える。どのキャラクター(に対応した数字)が出るかを100万回カウントしている。で、結果はどのキャラクターも25000から26000回ほど出現している。一番出現回数の多かったキャラクターと一番少なかったキャラクターを比べても、出現回数の差は1%未満である。結果が大きくかたよることなく、ランダムセレクトがランダムとして機能しているのがわかる。
 ここでシミュレーションの回数を、現実的なゲームプレイヤーのプレイ回数に合わせる。このゲームを二時間遊んだとして、1プレイは2分程度なので、二時間で60プレイとなる。ここで一見すると、60回もプレイすれば、39人のキャラクターが一度は現れると思うかもしれない。またリンク先でシミュレーションする。
http://jsfiddle.net/hiroaki/e4uxq/1/
 シミュレーション実行毎に結果は微妙に違ってくるが一貫して言えるのは、一度も現れないキャラクターがいて、その一方で3回、4回と現れるキャラクターがいることだ。下手をすれば60回のプレイで5回、6回と同一のキャラクターが現れることもある。これが一切手が加わっていないランダムセレクトの結果。
 ランダムというのはいつでもおしなべて等しくキャラクターが現れるということではない。ランダムでも十分な試行回数が取れなければ、結果がどこかにかたよってしまうのが普通だ。
 では試行回数の少ないランダムセレクトで出現キャラクターがかたよる状況に文句が出た場合、どう対応するか。おそらく期待されているのは、少ない試行回数でもキャラクターがかたよらないようにすることだ。そういうときは、一度出たキャラクターはすべてのキャラクターが一度出終わるまで出ない、出てきたのが二度目のキャラクターはすべてのキャラクターで二度目が出終わるまで…というループを続けていけば、ランダムだと受け止めてくれるだろう。

 思うに一般の多くがランダムだと感じるには、なにかしら人為的に操作をしなければならない。シャッフル再生ならば、正規の順番どおりに流れることはないと思われているし、ランダムルーレットなら少ない試行回数でも重複が起きずに結果が分散すると思われている節がある。自作するものにランダム要素を盛り込む場合、このあたりのことを考えておかなければ、ランダムになっていないというクレームが入ることになるかもしれない。
            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。