1 名前:デフォルトの名無しさん [2007/10/17(水) 22:34:59 .net] 擬似乱数発生器について語ろうか。その2 前スレ 擬似乱数 pc11.2ch.net/test/read.cgi/tech/1146071975/ 関連スレ 【危険】とんでもプログラム告発スレッド【悪質】 pc11.2ch.net/test/read.cgi/tech/1191860116/ SIMD-oriented Fast Mersenne Twister (SFMT): www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html
348 名前:デフォルトの名無しさん mailto:sage [2011/06/16(木) 21:37:26.52 .net] >>340 rand_r()は実装されてないの? シミュレーションとかに使うなら、当然もっとまともな乱数使うべきなんだけど
349 名前:デフォルトの名無しさん mailto:sage [2011/06/16(木) 22:04:02.90 .net] randってアルゴリズムからして処理系依存だから ドキュメント読むしかないと思うが
350 名前:天使 ◆uL5esZLBSE mailto:sage [2011/07/03(日) 19:51:40.73 .net] 2011年、Ruby,Perl,PHP,Pythonって並べたときにさ ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな ゴミは何いってもゴミ
351 名前:デフォルトの名無しさん mailto:sage [2011/07/03(日) 20:36:04.58 .net] おや知らないうちに、MTの周期の短い奴が
352 名前:デフォルトの名無しさん mailto:sage [2011/07/03(日) 21:16:56.21 .net] 内部ベクトルぽ周期がxorshift128に似てるね テストしてみるか
353 名前:デフォルトの名無しさん [2011/07/18(月) 01:12:26.71 .net] 初カキコというか質問があるんですが
354 名前:デフォルトの名無しさん mailto:sage [2011/07/18(月) 01:23:00.97 .net] うーん… XorShiftでいいや。
355 名前:デフォルトの名無しさん [2011/07/18(月) 01:27:26.98 .net] パワフルプロ野球スレでcupsを256にすれば天才選手(低確率で出る
356 名前:初期能力が強い選手)が出ると聞きました 乱数のことはよくわからないんですがそのcupsという項目があって それを256に合わせればいいという認識でよろしいんでしょうか それがあってるとして、 乱数は数値化しないとそれにあわせることはできないのでしょうか もしくは数字だけが分かっていればなんとかなるものですか? [] [ここ壊れてます]
357 名前:デフォルトの名無しさん mailto:sage [2011/07/18(月) 01:28:07.97 .net] すいません…ageてしましました…
358 名前:デフォルトの名無しさん mailto:sage [2011/07/18(月) 01:35:15.25 .net] ゲームの話は板違い
359 名前:デフォルトの名無しさん [2011/07/18(月) 01:37:58.95 .net] >>351 しゅません、ここしか見つからなくて…
360 名前:デフォルトの名無しさん mailto:sage [2011/07/25(月) 07:45:02.26 .net] >>348 ttp://raluck.exblog.jp/7153886/
361 名前:デフォルトの名無しさん mailto:sage [2011/07/25(月) 19:27:51.78 .net] 乱数の「精度」って記述初めて見たぞ?言いたいことは判らなくも無いが。
362 名前:デフォルトの名無しさん mailto:sage [2011/07/25(月) 19:32:37.26 .net] 普通、品質って言うわな。 シードとサンプルの長さと、どのような検定で、どういう風に結果が悪いのか、 定量的なことが書いてあれば一読に値すると思うが、これではわけわからん。
363 名前:デフォルトの名無しさん mailto:sage [2011/07/25(月) 19:37:41.28 .net] ゲームに使うとかいろいろな種を試したとか 乱数の事なんか何にも分かってないんだろう 悪いけどそんな個人ブログなんか読む価値ないよ
364 名前:デフォルトの名無しさん mailto:sage [2011/07/25(月) 19:37:53.89 .net] つーかウィキペディアのXorShiftの記事にも「精度」って言葉が使ってある。 誰だよほんとにもう。
365 名前:デフォルトの名無しさん mailto:sage [2011/07/26(火) 12:24:34.03 .net] ja.wikipedia.org/w/index.php?title=Xorshift&action=history > 2011年7月25日 (月) 22:05 MetaNest (会話 | 投稿記録) (1,890バイト) > (疑似乱数列の評価として「精度」なんて形容を使うのは聞いたことがない) 自分が聞いたことがないから間違っている、 という理由で編集する前に他の記事を確認してください。 www.google.co.jp/search?q=%E4%B9%B1%E6%95%B0+%E7%B2%BE%E5%BA%A6+site%3Aja.wikipedia.org 「精度」はどのくらいのビット数で示される範囲で乱数になっているかという意味で使われているようです。 つまり品質の一部分ですね。
366 名前:デフォルトの名無しさん mailto:sage [2011/07/26(火) 12:37:39.46 .net] それはwikipediaのノート内で議論すべきでは
367 名前:デフォルトの名無しさん mailto:sage [2011/07/26(火) 19:22:02.57 .net] 漏れは精度っていうのは誤差の大小だと思っていた。
368 名前:デフォルトの名無しさん mailto:sage [2011/07/26(火) 19:28:23.63 .net] 一体何の誤差なのか
369 名前:デフォルトの名無しさん mailto:sage [2011/07/26(火) 20:21:03.30 .net] 理想的な分散から外れる誤差というのはあるんじゃね
370 名前:ななし。 [2011/07/27(水) 14:04:51.54 .net] カ オ ス ラ ウ ン ジ ゆ る せ な ぁ い ー
371 名前:デフォルトの名無しさん mailto:sage [2011/07/27(水) 16:02:15.11 .net] the art of computer programinngの2巻の証明の行間が開きすぎだったから 細部まで証明しましたが何か?
372 名前:デフォルトの名無しさん mailto:sage [2011/07/27(水) 22:37:01.04 .net] 頭いいね!
373 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 16:16:05.44 .net] 擬似乱数の偏りってビットごとの偏りとか周期性もちゃんと見たほうがいいと思うんだけどねえ。 乱雑性検定の一覧とか出したほうがいいんじゃないの
374 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 16:42:04.28 .net] まさにそれをやってるのがdiehard testsじゃないの
375 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 19:08:01.33 .net] その、「ビットごとの」は「周期性」にもかかってる? ていうか現代的な生成法で特定のビット位置のみ変な特性があるとかまず考えられないように思うけど。 線形合同法ぐらいだと下の桁はダメダメだが。
376 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 19:15:45.81 .net] >「精度」はどのくらいのビット数で示される範囲で乱数になっているかという意味で使われているようです。 これ、初期値によっちゃ10個ぐらい0が続いてもどうする?
377 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 19:17:27.23 .net] >>367 そうなんだけど>353の人にお勧めしたい。 ちゃんと
378 名前:した統計を取る気があるが知らないだけのようなので。 >>368 両方。ビットの周期性も、全体としての周期性も。 線形合同法を意識して書いたからその通りですね。 [] [ここ壊れてます]
379 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 19:45:25.22 .net] > どのくらいのビット数で示される範囲で乱数になっているかという意味 数式で書いてくれ、で終わりだろこんな文
380 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 04:39:55.82 .net] それより問題は>>348 がTinyMTを試した結果なぜXorshiftを選択したかだな
381 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 19:21:14.73 .net] 内部ベクトルって見て楽しいのかね
382 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 19:57:03.18 .net] 見て楽しいかどうかは人それぞれ 4ビットでシフトレジスタ ttp://upload.wikimedia.org/wikipedia/commons/7/7f/LFSR-F4.GIF
383 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 00:13:01.69 .net] 楽しくなければ乱数じゃない!
384 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 09:30:26.00 .net] グレイコードってやつだな。
385 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 10:37:52.94 .net] グレイコードは1度にハミング距離が1しか変化しないコードだろ
386 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 10:48:53.38 .net] なんだ・・・ただ1づつ足していくだけかクダラネ。
387 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 12:02:14.43 .net] ハミング距離も知らんのか
388 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 12:20:06.08 .net] すごいすごいすごい ハミング距離を知っているなんて凄いねーー エライネー 天才だね〜
389 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 19:22:19.62 .net] いやあそれほどでも(クィッ!
390 名前:デフォルトの名無しさん mailto:sage [2011/08/26(金) 11:30:52.08 .net] 復帰
391 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 00:15:56.56 .net] 擬似乱数ではないのでスレ違いかもしれないが ちょっとコンセプトを思いついたので実装してみた。 netrand-test.appspot.com/
392 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 00:34:50.29 .net] 何に使うんだそれは
393 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 07:01:49.82 .net] /dev/random のような用途?
394 名前:デフォルトの名無しさん [2011/11/23(水) 11:19:10.85 .net] なんか加減算だけでそれっぽいのができたぜ www42.atwiki.jp/syugyou?cmd=upload&act=open&pageid=250&file=mon13.html
395 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 22:49:37.46 .net] >>386 SFMTに対して、どこがアドバンテージあるの? 周期2^216091-1とかだぞ。
396 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 22:57:01.60 .net] 出力範囲が1000(10ビット未満)というのもな 32ビット精度必要なら4個を組にして使うわけだが,その上での一様性も相当疑わしい
397 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 08:38:35.87 .net] 出現回数をカウントできるようにしたぜ
398 名前:デフォルトの名無しさん mailto:sage [2011/12/09(金) 20:48:49.64 .net] お知識拝借 次のような擬似乱数生成方法を探しております シード(頻繁には変化しない入力値)のほかにいくつかの入力値(頻繁に変化、1,2,3など近い値が入力される) があって、それら入力値を入れると必ず決まった擬似乱数を生成する、というような乱数生成方法 当初XorShiftをアレンジすれば出来ると思ったのですが、シード以外の入力値が近いと 結果返ってくる値も近いようなものしか出来ず使えませんでした。 こういったタイプの擬似乱数関数として良好なものはありますでしょうか もしくはどういった風にXorShiftを改造すればこういったものが実現できそうでしょうか 乱文失礼、お力添えお願い申し上げます
399 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 01:02:45.31 .net] 要するにハッシュ関数的な要素が欲しいんでしょ 入力値のハミング距離が近くても出力値のハミング距離が遠くなるように ハッシュ関数通せばいいよ
400 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 01:04:32.98 .net] ハッシュ関数、初耳ですがちょっと調べてみます
401 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 01:13:57.92 .net] 毎回srandしてるようにも読めるな そうでないなら適当に読み捨てれば?
402 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 01:37:08.54 .net] >>390 どれぐらい「近いようなもの」でなければよいのか、 はっきりしてもらわないと何ともならんのじゃないか?
403 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 01:39:31.04 .net] ハッシュ関数知らないレベルだから改善の余地は大いにありそうだが
404 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 02:29:28.25 .net] >>393 お恥ずかしながらおそらくそれをしていました >>394 32bitですねfloat精度程度 入力値もfloat3つ程度、シェーダーでノイズを作るような目的です だから欲しいのは ulong32 Noise(ulong32 x,ulong32 y,ulong32 z,ulong32 seed) で当初XorShiftの4つにこれを当てはめて数回振っていましたが どうも模様が見えてしまう結果になります ハミング距離が遠くなるようなハッシュ関数考えてみます
405 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 02:45:34.85 .net] 典型的にはZobrist Hashingが使える
406 名前:デフォルトの名無しさん mailto:sage [2011/12/11(日) 08:35:49.22 .net] 他の人たちは 390 が何をしたいか分かったの? もっとちゃんと問題を定義したらズバリの答えが出る気がするけど。 >>396 余計なお世話かもしれないが、単精度浮動小数点数の乱数を作るのは (rand() & 0x7fffff) | 0x3f800000 として [1.0 .. 2.0) を作り、必要に応じて線形変換するのが常道。 バイアス部分にも乱数のビットを埋めるのは好ましくない。 で、もし本当に 32bits 必要なら、単精度じゃなくて倍精度を選ぶべきかもしれない。 > どうも模様が見えてしまう結果になります これが周期の問題なのだとしたら、余計なことしないで単にメルセンヌツイスターを使うだけの方が乱数性も処理速度も好ましいものになるだろう。
407 名前:デフォルトの名無しさん mailto:sage [2011/12/11(日) 08:58:54.46 .net] >>396 低周波成分(いわゆる模様)の無いノイズが欲しいなら それは乱数ではなく、乱数から低周波成分を除く加工をして作る数列 ブルーノイズとか
408 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 19:02:48.17 .net] >>398 >(rand() & 0x7fffff) | 0x3f800000 >として [1.0 .. 2.0) を作り、必要に応じて線形変換するのが常道。 これは知らなかった。 rand() / (RAND_MAX_1)とばかり。
409 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 19:13:08.54 .net] fmul一回分だけお得と まあ大抵は再度後から掛けるだろうけど
410 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 20:11:28.68 .net] 9bit損するからじゃね?
411 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 14:23:42.69 .net] 音のノイズなら線形合同のほうがいいよ 偏りや周期を聞き分ける人がいたら神だよ
412 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 15:01:03.98 .net] 上位ビット使うんだぞ
413 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 18:33:56.26 .net] 気をつけます。
414 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:38:03.89 .net] >>403 ダイナミックレンジ広いと偏りはわからんが、周期は聞こえるぞ
415 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 10:38:56.24 .net] 線形合同法でノイズ作ったぜ www42.atwiki.jp/syugyou?cmd=upload&act=open&pageid=250&file=oto2.html
416 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 00:08:06.52 .net] もうJKISS32でいいんじゃないか。周期も2^121くらいあるみたいだし。 www.cs.ucl.ac.uk/staff/d.jones/GoodPracticeRNG.pdf /* Implementation of a 32-bit KISS generator which uses no multiply instructions */ static unsigned int x=123456789,y=234567891,z=345678912,w=456789123,c=0; unsigned int JKISS32() { int t; y ^= (y<<5); y ^= (y>>7 ); y ^= (y<<22); t = z+w+c; z = w; c = t < 0; w = t&2147483647; x += 1411392427; return x + y + w; }
417 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 16:57:53.03 .net] 129ビットぶんの状態があるように見えるけど周期は2^121なのか 加算の使い方がまたなんとも
418 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 18:16:00.13 .net] L・C・G!L・C・G!
419 名前:デフォルトの名無しさん [2012/07/24(火) 08:00:03.47 .net] wikipediaにある '特定の範囲で乱数を求めたいときにはa = rand() % 10とする方法も広く知られているが、線形合同法などの下位ビットの乱数としての品質が低い生成法に備えるため上記のコード例のような上位にあるビットを利用するコードが推奨されている' ってどいういうこと?
420 名前: (int)((rand() / ((double)RAND_MAX+1.0)) * 2); と rand()%2 で1000000回、乱数を生成して比較してみたけど、平均値と0.5の差はどちらもオーダー的にほとんど変わらないのだけど、 [] [ここ壊れてます]
421 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 08:24:36.56 .net] 面倒だから 乱数 下位ビット でググってもらっていいかな。
422 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 08:26:01.03 .net] >>411 品質が悪いと、奇数偶数が交互にしか出なかったりする。
423 名前:デフォルトの名無しさん [2012/07/24(火) 09:00:13.60 .net] >>412 よく分からなかったけど、メルセンヌツイスターとかでも%で余りを求めるやり方はいけないの? それとも線形合同法に限った問題なん?
424 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 09:04:24.07 .net] MTはかまわないよ だめなのは質の悪い乱数に限った話 線形合同法はその代表格
425 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 15:07:40.15 .net] %は法の数が大きいと分布の偏りが大きくなる。
426 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 16:50:20.82 .net] >>411 酷い実験してるなw 頼むからブログとかでどっちも変わりませんでしたとか書かないでくれよww
427 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 17:06:19.28 .net] >>416 それって RAND_MAX が 16 だとして、rnd % 10 とかで計算したら、って話? そりゃ普通は、はみ出る部分の値が出たら捨てるだろ。
428 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 17:57:44.60 .net] >>418 普通の知能の持ち主が剰余を使うならそうだが、剰余を使うほとんどの連中はそんなことはしないだろう
429 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 19:19:37.18 .net] 法(のり)
430 名前: ◆QZaw55cn4c mailto:sage [2012/07/24(火) 20:14:18.94 .net] >>414 今は線形合同法といっても、計算で仕様するビット全部ではなく、上位の一部を表に返す、とかするものもあるようだ。 en.wikipedia.org/wiki/Linear_congruential_generator
431 名前:デフォルトの名無しさん mailto:sage [2012/07/25(水) 06:50:57.92 .net] 線形合同法は比較的単純な弱点が多いから、使う側が完全に把握して使うべきであって、 ライブラリ側でそういう配慮をするのはよくない(そういう配慮をして、ブラックボックス的に 使わせるなら他の生成法にすべき)。
432 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 22:53:54.77 .net] 久々に見たらスレが進んでいるなと思ったら >>411 > 1000000回、乱数を生成して比較してみたけど、平均値と0.5の差はどちらもオーダー的にほとんど変わらないのだけど これは本当にひどい 高校生でさえ鋭い奴は問題に気が付くレベル
433 名前:デフォルトの名無しさん [2012/08/01(水) 07:50:35.33 .net] >>413 それを定量的に調べる方法はありますか?
434 名前:デフォルトの名無しさん mailto:sage [2012/08/01(水) 08:14:03.90 .net] >>424 csrc.nist.gov/groups/ST/toolkit/rng/index.html
435 名前:デフォルトの名無しさん [2012/08/03(金) 08:40:44.06 .net] メルセンヌ・ツイスタでseedはどうやって与えれば良いの?
436 名前:デフォルトの名無しさん mailto:sage [2012/08/03(金) 08:47:28.71 .net] 初期化関数の引数にシードを与えればいいよ。
437 名前:デフォルトの名無しさん [2012/08/03(金) 09:07:33.39 .net] それやってみたのですが、最初の方は似たような数字になってしまいます。
438 名前:デフォルトの名無しさん mailto:sage [2012/08/03(金) 09:17:44.87 .net] 内部状態が2kバイト強あるから、先頭から4kバイト弱ぶんぐらい読み飛ばす。 あと、十分な量のseedを与えることができるインタフェースが用意されてないか、確認する。
439 名前:デフォルトの名無しさん mailto:sage [2012/08/03(金) 09:22:52.54 .net] >>428 それ、小さいシードで初期化するときの実装が古いやつなんじゃないか?
440 名前:デフォルトの名無しさん mailto:sage [2012/08/03(金) 09:27:16.85 .net] 何万個か読み捨てればいいよ。
441 名前:デフォルトの名無しさん mailto:sage [2012/10/01(月) 07:40:42.45 .net] Perlでメルセンヌツイスタをつかえますか?
442 名前:デフォルトの名無しさん mailto:sage [2012/10/01(月) 09:10:34.08 .net] うん
443 名前:デフォルトの名無しさん [2012/11/20(火) 11:52:42.11 .net] rand(0)とrand(1)どちらも同じ乱数列を生成するのですが、 そのように決まっているのですか? それともたまたま使っている処理系が、0と1で同じ乱数列を吐き出すのですか?
444 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 12:10:19.47 .net] rand()って引数いらんのでは? 説明めんどいからsrandも調べてみ 色々わかるから ちなみにrand()は精度低い乱数
445 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 12:36:34.27 .net] >>434 お使いの処理系のマニュアルをご覧ください。 つーか、言語も何も判らんのに答えられるわけないとは思わないもんなのだろうか。
446 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 13:27:08.91 .net] 回答もランダムです
447 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 12:27:29.80 .net] MATLABやRならrandはメルセンヌツイスタになってるよw
448 名前:デフォルトの名無しさん mailto:sage [2013/01/07(月) 21:11:37.12 .net] >>429 だな。 少なくともオフィシャルの実装には配列でシードを与える関数がある。