ORLOV ゲーム

ブログ · Video Poker ·

デジタルカードゲームでのシャッフルの仕組み

52枚のデッキには約8 × 1067 通りの並びがあります。あるアルゴリズムは51回のスワップでそのすべてに到達でき、見た目が同じ変種は、一部の並びを他より25%起こりやすくします。

物理的なデッキは不完全にシャッフルされることが多く、たいていは問題になりません。デジタルデッキにはそのような余裕はありません。数行のコードでシャッフルされ、すべての並びを等確率で生成するか、しないかのどちらかで、その違いは画面には決して表れません。数百万ハンド後の度数表に現れるのです。正しく行う標準的な方法は1つ、より徹底しているように見えて間違える、よく知られた方法は1つ、そしてどちらとも関係のない現実的な限界が1つあります。

問題の大きさ

52枚のデッキは52の階乗の通りに並べられます:52 × 51 × 50 と、1まで続く積で、約8.07 × 1067. Calling a deck shuffled is a claim about that number: that each of those orderings is exactly as likely as every other. It is a stronger claim than it sounds, and it is what the code must deliver.

Fisher–Yates、51回のスワップで

正しいアルゴリズムはFisher–Yatesで、一文で述べられるほど簡単です。カウンタ i を最後のカードから2枚目まで下げていきます。各ステップで、位置 j を0から iまで(その値を含む)の範囲で一様ランダムに選び、位置 i と jのカードを入れ替えて、次に進みます。52枚の場合は51回のスワップと51個の乱数で、一度のパスでデッキがシャッフルされます。

その理由は数え上げの論理にあります。最初のステップでは、 jの選び方が52通り、2番目は51、3番目は50と続き、最後のステップでは2になります。このアルゴリズムの実行は52!通りの相異なる結果となり、各選択が一様であるため、どれも等しく起こりえます。並べ方も正確に52!通りあり、同じ並びを2つの実行が生むことはありません。等確率の実行と起こりうる並びとの1対1対応こそが一様なシャッフルの意味なので、このシャッフルは一様です。近似的ではなく、正確に一様です。

これを壊す、範囲の1つずれ(オフ・バイ・ワン)

魅力的に見える変種は、 j 毎回デッキ全体(0から51まで)から選ぶもので、本来の0から i. It looks like it should be better, because every card can move anywhere at every step. It is not uniform, and the counting argument shows why immediately: there are now 5252 までの範囲から選ぶ方法とは異なり、等確率の実行は52!通りではなく5252 は52!の倍数ではないので、並びが均等に出ることはありえません。

3枚のカードで考えると、手で確かめられるほど具体的になります。壊れた版では33 = 27通りの等確率な実行が6通りの並びに分配されますが、1つあたり4.5回ずつ必要になります。実際には、3つの並びが5回、3つが4回になるため、一方の組は他方より25%起こりやすくなります。4枚では、さらに悪化します:44 = 256通りの実行が24通りの並びに配分され、回数は8から15の範囲になります。つまり、最も出やすい並びは、最も出にくい並びのほぼ2倍の頻度で現れます。デッキが大きくなっても偏りは薄れません。ただ、それに気づけなくなるだけです。

本当の上限はどこにあるか

正しいシャッフルであっても、それに供給される乱数の質に依存します。ここが、ブラウザやスマートフォンのゲームに実際の限界がある部分です。 Math.random これらのゲームが動作するChromiumエンジンで使われている乱数生成器はxorshift128+と呼ばれ、128ビットの状態を持ちます。そのため、生成できる異なる系列の数は最大で2128、約3.4 × 1038. Set that against 8.07 × 1067 通りの並びに限られ、到達可能な割合は約4 × 10-30. Almost every ordering of the deck cannot be produced at all.

一見すると致命的に聞こえますが、そうではありません。ここでの区別こそが、この記事で役立つ部分です。ビデオポーカーのハンドは、52枚のカードの並びを決して見せません。5枚を見せ、そのあとさらに最大5枚を見せます。順序付きの5枚のディールは52 × 51 × 50 × 49 × 48 = 311,875,200通りあり、異なる5枚のハンドは2,598,960通りです。3.4 × 1038 通りの開始状態を3億1,100万回以上のディールに分散させると、それぞれのディールにもなお約1030 の状態があり、どれほどプレイしても測定できないほど小数点以下まで一様です。この乱数生成器の弱点は Math.random 、内部状態を知る人なら誰でも将来の出力を予測できることです。だからこそ、お金が絡む場合には不適切なツールであり、練習用ゲームで5枚を配るには十分すぎるほど適しています。

シャッフルが持ち越さないもの

一様性から導かれる2つの詳細があり、どちらも、ディールが操作されているかを人が疑う点です。

1つ目は、1ハンドを越えて何も残らないことです。各ディールの前に新しいデッキが作られ、ゼロからシャッフルされるため、前のハンドは何も寄与しません。そのため、 カードカウンティングは機能しません (マシンでは)、長い空振りのあとでも次のハンドが当たりやすくなるわけではない理由でもあります。

2つ目は、カードがデッキのどちらの端から来るかは問題ではないことです。実装では、5枚を上から配り、引き直しのカードを下から取ることもあり、何か意味がありそうに聞こえます。しかし一様なシャッフルの後は、デッキのどの位置も同じ分布になるため、上・下・中央は区別できず、その選択はゲームの事実ではなく、コードを書いた人の都合にすぎません。2回シャッフルしても同じです。すでに一様なデッキに一様なシャッフルを行っても結果は一様のままなので、2回目に得るものはありません。

シャッフルの質とディールの公正さは別の問題で、両者を混同するのはよくある間違いです。ゲームは教科書どおりのFisher–Yatesを52枚のデッキに対して実行したあと、画面に表示する前に5枚のうち1枚を変更することもでき、シャッフル自体にはそれが現れません。シャッフルが一様かどうかは、数行のコードで確かめられます。目の前のハンドがシャッフルの未加工の出力かどうかは別の問いで、規制当局のない無料チップのゲームでは、正直な答えはしばしば「いいえ」です。下で紹介するゲームも例外ではありません。

まとめは簡潔です。Fisher–Yatesは0から iまでの範囲で、51回のスワップを行えば、すべての並びが等確率になります。デッキ全体から選ぶ変種は偏り、約5枚を超えると目に見えなくなります。乱数生成器はフルデッキのほとんどの並びに到達できませんが、5枚のゲームではそれは無関係です。これらはいずれも、シャッフルから画面までの間で何が起きるかには答えず、そこがデジタルのディールで疑う価値のある唯一の部分です。

Video Poker: Jacks or Better は上で説明したとおりにシャッフルします。毎ハンドの前に新しい52枚のデッキを作り、0から iまで、51回のスワップのFisher–Yatesを使います。このアプリは Math.random. It is also a free-chip practice game rather than a model of a regulated machine, so the paragraph above applies to it: the five dealt cards are not always the shuffle's untouched output. A dead deal is sometimes nudged towards a pair or a four-card flush, more often after a run of losses or when your balance is nearly gone, and a deal that already contains a pair or better is left alone. The draw is untouched — replacement cards come straight off the remaining shuffled deck — so the hold decisions you practise are the real ones even though hands arrive more kindly than the maths would send them. Use it to drill ホールドの優先順位 を重視して作られており、ハンドの出現頻度を判定するためのものではありません。マシンは4台あり、それぞれが変わらない配当表を表示しています。最初から使えるJacks or Better、レベル3のDeuces Wild、レベル8のBonus Poker、レベル15のDouble Bonus、そしてレベル10のTripleとFive Play。1,000チップから始め、1ハンドあたり5、10、20、50を賭け、1日1回200チップを受け取ります。推奨されるホールドは、戦略ヒントで光って表示されます。オフラインでプレイでき、チップに現金価値はありません。

Google Play で入手