コンピュータを用いた麻雀牌の攪拌にて最高精度を得る方法と、MJ5の攪拌性能の比較

MJ5は攪拌精度に灘が有ることが分かった。 これは第三者が遊戯中に牌山を予測することができると示したわけではない。 検証結果から同一牌どうしが平均よりやや近くに出易いことが照明された。最高精度の攪拌を実現する手法を公開するので、それと比較してみてほしい。
6
ガノー@ぺるせぽ。管理人 @Garnot1

MJ5ではMTで疑似乱数を生成しているが、これは線形合同法の一部。しかし、だからといって予測可能性があるとは言えない。4人分のキーを揃えても、XORマスクによって牌の内容が秘匿されている訳だ。

2015-03-03 13:40:45
ガノー@ぺるせぽ。管理人 @Garnot1

#MJ5 のシャッフル精度はやや悪い(左)。ほんの少しだけだが、最高精度の攪拌処理(右)と比べて、同じ牌どうしの距離が近くなってしまう模様。※グラフは中央に近い方が混ざりが良いことを示す。 #麻雀 pic.twitter.com/pD7aOlG57n

2015-03-05 12:06:08
拡大
拡大
ガノー@ぺるせぽ。管理人 @Garnot1

牌山の精度検証中。高精度なRNGを用いて牌山を作っているが、RNGが遅すぎて5億回の牌山生成に25日かかる見込み。これを精度を保ちつつ高速化し、0.5日まで短縮。

2015-03-03 09:29:53
ガノー@ぺるせぽ。管理人 @Garnot1

#麻雀 麻雀牌の攪拌において、最善の攪拌精度を実現するには、「i=0~135回、牌[i]と牌[i~135の乱数]を入れ替える」処理を複数回(3~10回以上)行い、「疑似乱数生成器は一様乱数を得られるもの(MT等)を使用する」。これが計測可能な限界精度であると結論付けた。

2015-03-07 12:06:28
ガノー@ぺるせぽ。管理人 @Garnot1

#麻雀 攪拌処理において、先のアルゴリズムを「1回やれば十分」と認識している人は多い。それはコンピューターで生成された一様乱数が、理想的な一様乱数でなければ成り立たない。理想的な攪拌精度を求めるなら、3~10回は攪拌した方が良いだろう。

2015-03-07 12:12:11
ガノー@ぺるせぽ。管理人 @Garnot1

#麻雀 勿論だが、1回やっただけでもかなり高い精度を得られることに変わりは無い。混ざりの良さの、コンマレベルの精度上昇まで求めるなら複数回やった方が良い、という意味である。

2015-03-07 12:14:36
ガノー@ぺるせぽ。管理人 @Garnot1

#麻雀 大多数の人たちは、「疑似乱数発生器の精度によって、混ざり具合の良し悪しが変わる」と思っている。しかし、あり得ないような実装を除いて、一般的な精度の「線形合同法、暗号論的乱数発生器、一様乱数発生器」を用いて混ざり具合を評価しても、コンマレベルの差しか生まれない。

2015-03-07 12:20:12
ガノー@ぺるせぽ。管理人 @Garnot1

#麻雀 麻雀牌の攪拌程度においては、乱数発生器の精度だけでは大差は生まれないことが研究成果によって導かれた。それでも、コンマレベルの差で順位付すると 「一様乱数発生器>=暗号論的乱数発生器>線形合同法」である。

2015-03-07 12:23:11
ガノー@ぺるせぽ。管理人 @Garnot1

#麻雀 MJ5の攪拌はやや難があり、偏りを生むことが証明されている。この偏りは若干ではあるが、初期化の際に牌のIDが大きい牌が若干後半に出やすくなる性質を有している。また、極小であるが、同一牌どうしの距離が若干近くなる事も分かっている。

2015-03-07 13:31:21
ガノー@ぺるせぽ。管理人 @Garnot1

#麻雀 しかし、コンピュータで5千万回牌山を検証して分かるくらいの偏りであるから、この検証結果を利用して、「攪拌精度が少々悪いからと言って、牌山を読むことは不可能である」と結論付けたい。

2015-03-07 13:33:42