- ベストアンサー
ランダムはどう起こりうる??
MP3プレーヤーを聞いていてふと思ったんですが、 シャッフルってどうなってるんでしょうか?? トラックが1~13まであるとして、8を再生して、その次は3、となるときの「意思決定の根本の理由」は何なのでしょう? Lingoと言うプログラムをしたことがあるのですが、そのランダム設定をするときは、ルールをつかい1~13までの数字を打ち込むだけだったんです。 ランダムを作る数式があるとYahooの質問で探したのですがあまり理解できませんでした。割る方式で余りの数字がどうだとか。。 直感的に質問したのでわかりにくいかもしれませんが、わかりやすく教えていただけるかた、ご教授お願いします!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
「ランダム」と言っても実は本当にランダムなわけではありません。 コンピュータは知能がある訳じゃないので、いくら性能がよくても自分で本当にランダムな数字を「思いつく」事はできないからです。 ではどうやってランダムな数字を発生させているのか?miragediveさんが知りたいのはこの部分だと思います。 昔からある原理を一つ教えます。実はコンピュータには乱数列と言うランダムな数字の列があらかじめインプットされています。順番がめちゃくちゃな単なる数字の列です。コンピュータは乱数発生の指令を受けるとただ単にこの列の一番最初から読み上げるだけです。なぜ一番最初から読み上げるかと言うとお気づきの通り途中から読み上げるにしてもその「途中何番目か」というランダムな発想がコンピュータには出来ないからです。こうすることによってあたかもコンピュータが自分でランダムな数字を選んできたかのように見せることが出来ます。 しかしこれだと当然ですが法則性がすぐに現れてしまい同じ乱数列が何度も出現します。これを防ぐためには毎回乱数列の途中から読み上げさせればいいのですが(ランダマイズと言う)、先ほど言ったようにコンピュータには「適当な途中」を考える事が出来ません。どうすればいいかというと原始的な方法のひとつにその時の時刻を使う方法があります。コンピュータに時間機能が内蔵されている場合、刻々変わる時刻の「秒」の数字を使い、乱数発生を指令されたその瞬間の秒の値でその乱数列の何番目から読み上げるか決めます。「秒」を意識してコンピュータ操作する事はないのでこれでほぼランダムと言える数字を取り出すことが出来ます。実際には秒なり分なり操作時間なりをもっともっと複雑な数式に入れてかなり高度にランダマイズしますが、初期のパソコンゲームなどはランダマイズが単純だったので敵の出現にすぐ法則性が見えたりしました。 なおこれは非常に古いランダムの原理なので実際今のコンピュータはどのような原理を利用しているかは分かりません。
その他の回答 (4)
- Allemagne
- ベストアンサー率36% (18/50)
最も安いアルゴリズムとしては数列を使ったやり方で(多分これのことっすね) x[n+1]=(a*x[n]+b)mod(m) という方法があります。ちなみに(x)mod(y)は(ドイツ語では少なくとも)moduloと呼ばれるオペレーターでxをyで割ったときの余りが出ます。例えば17mod3だったら2になります。ここではaかけるx[n]にbをたしたものをmで割ったときのあまりが出るということになりますね。aとbはどんな数字でも構いませんが周期性を避けるために大きな数字をいれるのが理想です。 ちなみにExcelをつかってa=59,b=37, m=13で計算してみました。ようするにn+1番目のxの値はn番目のxの値に59をかけて37をたしたものを13でわったときのあまりです。(0は13として扱ってみてください) 1 5 7 8 2 12 4 0 11 10 3 6 1 5 次にa=67,b=71, m=13でやってみました。 0 6 5 3 12 4 1 8 9 11 2 10 0 6 この乱数で問題なのは必ず周期が最大でmになってしまうということなので適当なところでaとbを変える必要があります。
- lc-holic
- ベストアンサー率37% (25/66)
おそらく、コンピューターがどうやってランダムな数字を生成しているのか、という話なのでしょうが、 これは一般的に擬似乱数と呼ばれる、乱数っぽい数字を作り出すためのアルゴリズムが使われています。 あくまでも「っぽい」というだけで、本物の乱数ではありません。 一応、Wikipediaにリンクしておきますが、googleなどで他の擬似乱数に関するサイトを検索されるのが良いかと思います。 http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E4%B9%B1%E6%95%B0
- SAYKA
- ベストアンサー率34% (944/2776)
乱数を作るには幾つか手法が有るよ。 lingoのルールがどうのっていうのは randomSeed の事かな? 通常のランダムはNo1の通り MP3プレーヤ系で「全部選曲されるまで同じ曲は出ない」という乱数の場合は 曲数分の箱を用意してそれをかき混ぜ それをそのまま順番として使う方法とかがあるよ 乱数自体の発生のさせかたは ・・・・・ http://www.google.co.jp/search?q=%E8%A1%8C%E5%88%97%20%E7%96%91%E4%BC%BC%E4%B9%B1%E6%95%B0&hl=ja&lr=lang_ja (探し方が違ったかも・・・) 実は行列の演算で求まるよ。(手計算できる) そこで「基」になる値を変化させると開始値とその後が変化するんだけど、この「基」の値を指示するのが randomSeed
- max39kw
- ベストアンサー率14% (2/14)
こんにちは、 Lingoと言うのはわかりませんがExcelで作る場合、まず乱数を発生させます。 RANDです。0から1までの乱数(任意の数)がでます。 この数値を13倍(トラックの数)します。そうすると0から13までの数になります。それに+1すると1から14になります。小数点以下を切り捨てると1から14の整数になります。確率は低いのですが14がでた場合13とするかもう一度やり直すかです。 まちがってたら、すみません