こんにちは。みらいです。
今回は、カードゲームにおいて非常に重要な話です。(長いし退屈かもしれませんが、ぜひ読まれてください。)
それは、“シャッフル”です。
概要
まず初めに、結果を書きましょう。
以下は、これの解説になります。
前置き
前置きを書きます。(飛ばして大丈夫です。)
アナログカードゲームにおいて、シャッフルはとても大切な操作です。
十分でないシャッフルは、“偏り”をうみます。
デジタルなものでは、自動でシャッフルがなされ、気にする必要がありませんが、遊戯王など、実際にカードを使ってゲームをする場合には、シャッフルはプレイヤーが自分たちで行わなければなりません。
しかしながら、シャッフルを正確に論じるには、確率論の範囲を理解している必要があります*1。これによって、十分にシャッフルを考えるためのハードルが高くなっています*2。
一方で、シャッフルは十分に行われる必要があるというのは、申し上げた通りです。
したがって、考えやすいものを用いて、シャッフルを考えよう、というのが、この記事の目標になります。(上述したものが、その結果になります。)
準備
デッキを混ぜる
シャッフルを考えるのですが、その前に、いくつかの事項の理解を、筆者と読者で共有したいと思います。(主に言葉づかいです。)
まず、“シャッフル”といっておりますが、実は、これは特別な意味です。
一般に“デッキを混ぜる”*3という行為は、4つに分けられます。
- ゲーム前に、自分のデッキに対して行うもの
- ゲーム前に、相手のデッキに対して行うもの
- ゲーム中に、自分のデッキに対して行うもの
- ゲーム中に、相手のデッキに対して行うもの
これらのうち、1と3のような自分のデッキに対して行うものを、“シャッフル”といいます。
これらのうち、2と4のような相手のデッキに対して行うものを、“カット”といいます。
この記事で主に扱うのは、1になります*4。
これらは、主となる目的が異なります。それぞれの行為の目的は、
- 自分のデッキの並びが一様になるようにする
- 相手の不正を防止する
- 自分のデッキの並びが自分と相手にわからないようにする
- 相手の不正を防止する
になります。ここで、1と3には、本質的に相手の不正を防止する役割は持てないことに注意してください*5。また、1と3で主となる役割が異なっていることにも注意してください。
カットについて
本題からは逸れるのですが、カットについて少し書きます。
カットとは、上述の通り、相手のデッキに対して、不正を防止するために行います。
つまり、“積み込み”を防止するためです。
これは、お互いの信頼うんぬんの話ではなく、互いに同意をとる、ということが重要になります。これは、お互いのデッキがきちんと混ざっているということを同意することになります。原理的には、あとから積み込みの不正を明らかにするのが難しいことが関わっています。事後的に調査することが難しい以上、事前に、同意という形で、お互いの了承が必要になるわけです。
そして、“セルフカット”についての注意ですが、よく行われているもので、デッキをおおよそ3つの束に分けて、相手にそれを任意の順番で重ねてもらう、というものがありますが、これは、上述の意味では、危険です。つまり、その方法に同意をしてしまっているのです。例えば、遊戯王は、基本的に同名モンスターを3枚デッキにいれることができますが、セルフカットにおいては、その3つの束のすべてにそれらを1枚ずつ乗せることが、原理的に可能なのです*6。したがって、セルフカットは、本質的にカットになっておらず、同意だけを取り付ける行為とも取れます。こういったことにならない方法としては、カットの方法を他方のプレイヤーが提案するというものが挙げられます。例えば、他方のプレイヤーが2つのサイコロを振り、その出目の合計の数の場所に、カードを1枚ずつ置いていき、デッキをすべて置き終わったらそれを任意の順番に重ねるというものです*7。とはいえ、これには、それなりに時間がかかります。相手に了承を取って行うか、もしくは、大会などのルールで一定の時間をとるなど決まってくれるとありがたいのですが。結局は、同意の問題なので、こちらが不正を受けるかもしれないリスクを負えば、別に気にする必要はありません。
閑話休題します。
シャッフルの種類
ここでは、一般に知られるシャッフルの手法を、紹介、共有します。
ヒンドゥーシャッフル
手法:
- デッキを片手に持つ
- 他方の手でデッキの下の何枚かをとり、残りのカードの束の上に乗せる
- 乗せたカードに対し、2を繰り返し、最終的に、すべてのカードを最初に持った手に移す
言葉で説明するのは難しいですが、ものとしては、日本で最もポピュラーなものであると思います。
大雑把なカードの動きは、上と下のカードが入れ替わるような感じです。
バトルシティで、マリクが
「ハハハハハハァ、よぉくシャッフルしておくんだ。ラーがデッキの底に沈むように願いながらなあ」
って言いながら、やってたやつです。
ファローシャッフル
手法:
- デッキを、大体半分ずつになるように、右手と左手に持つ
- 一方のカードの束を、他方の持つカードの束に、大体互い違いになるように、差し込む
TCGなどを普段やっている方には、なじみ深いものだと思います。
ディールシャッフル
- デッキを上から1枚ずつ、特定の場所に置いていく。
- この際、置く場所の数を決めておき、その数だけ置いたら、折り返し、デッキが空になるまでこの手順を繰り返す。
こちらもTCGをやっている方になじみ深いものだと思います。置く数が大体8つの場所でやっている人が多いですね。
リフルシャッフル
- デッキを大体半分ずつになるように、右手と左手に持つ
- それぞれの手で持ったカードの束を、下から少しずつ大体交互になるように落としていく
TCGでこれをやられている方はほとんどいないと思います。
一方で、トランプでやられています。
表現としては、パラパラ落としていくやつ、と言われます。
こと遊戯王においては、原作において、“ショットガンシャッフル”と呼称されており、
「ショットガンシャッフルはカードを痛めるぜ!」
と言われています。
カードにもなってますね。
この絵が分かりやすいですね。
ただし、この言い方は、遊戯王のこの話を知っている人にしか通じません。
ショットガンシャッフルは、カジノ等で、ディールシャッフルを指す言葉としても使われているそうなので、注意が必要です。
ここでは、“リフルシャッフル”でいきます。
十分混ざった状態とは
シャッフルとは
さて、ここまで一般的に知られているシャッフルを紹介しましたが、シャッフルの本質とは何でしょうか?
数学をもとにした定義を紹介します。
ここでいう、デッキの並び順がその各順番に現れるカードの確率分布が一様になった状態を、デッキが十分混ざった状態となります。
これに関する結果として、
トランプの山札は、リフルシャッフルによって、大体7回で急によく混ざる
という結果があります。
リフルシャッフルの結果について
ちょっと余談。
論文で、リフルシャッフルの解析がなされるにあたって、その確率的なモデル化がなされているのですが、それは、次のようなものです:
- デッキを二項分布に従って2分する
- 現在のの枚数をとし、現在のの枚数をとしたとき、の確率での下1枚を落とし、の確率での下1枚を落とす
- 2をとが空になるまで繰り返す
もっともらしいでしょうか。
しかし、個人的には、このシャッフルって、下手じゃない?って思うわけです。
リフルシャッフルをやったことある人なら分かると思うんですが、慣れればなれるほど、1でのとの枚数は均等になるでしょう。2の操作も交互に落としていけるようになるでしょう。極端な話、1では、低い確率ですが、どちらかの束がない場合もありえるわけです。
これを、そのまま、ファローシャッフルと同等と思うのは、私は少し無理があると思います。*8
Point!
シャッフルの定義で重要な点は、シャッフルが確率的なものであるということです。
これが意味するのは、シャッフルに関するよくある間違いなのですが、シャッフルというのは、“デッキの並びをバラバラ”になるようにする操作、という理解では不十分です。シャッフルは、その操作の後にデッキの中を見て混ざっているかどうかをいちいち確認しても、シャッフルの効果を確認することはできません。シャッフルというのは、ランダムな操作なので、出てきたそれぞれの並び順が混ざっているように見えても、それは、シャッフルの効果を裏付けるものではありません。シャッフルの効果を確認するのに、最も厳密なものは、シャッフルを確率的に定式化して、それを評価する必要があります。しかし、これは、上述の通り、シャッフルを難しくする要因になっています。
ここで、一つディールシャッフルに関して注意があります。
ディールシャッフルには、ランダムな操作が含まれていません。つまり、ディールシャッフルは、ここで意味するシャッフルではない、ということになります。
しかし、このディールシャッフルを、シャッフルにする方法があります。
それは、ディールシャッフルにて、カードを置く場所の数を、サイコロで決めるという方法です。
- サイコロを2個振り、その合計を計算する
- デッキを上から1枚ずつ、
- 特定の場所に置いていく
- この際、1での合計の数を置いたら、折り返し、デッキが空になるまで繰り返す。
これを、ディールシャッフル改とします。
実験の概要
シャッフルの効果を調べるのに、確率を使う以外の方法を用います。
今回は、統計を使って確率的な結果を観測します。具体的には、シャッフル後に現れる頻度を数えています。
比較の基準として、Pythonデフォルトのリストのランダマイザ―を用いています。
比較の指標として、それぞれの場所に現れる頻度と一様な場合での頻度を比較したときの、それぞれの平均二乗誤差、場所での平均をとってます。
反復の回数は、回です。
実験の結果
ランダマイザ―と同等のスコアになった回数を表示します。
- リフルシャッフル(9回)
- ファローシャッフル(7回)*9
- ファロー(4回)+ヒンドゥー+ファロー(4回)*10
- ファロー&ヒンドゥー・逐次(5)*11
- ファロー(4回)+ディール+ファロー(4回)
- ファロー(5回)+ディール改+ファロー(2回)*12
結果の詳細
結果の推移をグラフにして表示します。logスケールです。ランダマイザ―のスコアは1くらいです。*13
頻度の変化を見てみます。頻度が前後5%の間に入る部分のみを見ています。
ランダマイザ―です:
リフルシャッフルです:
ファローシャッフルです。
ファローシャッフル+ヒンドゥーシャッフル(逐次)です:
ファローシャッフル+ディールシャッフル改です*15:
結果の解析
結果を見る限り、ファローシャッフル以外の手法はほとんど意味がないということが分かります。
また、繰り返すことが大事だということも分かります。(ファロー+ヒンドゥー逐次の結果)
結局、どれだけ、シャッフルの手法が、ランダム性を含むかが、重要になるという推測ができます。
他の手法も繰り返しによって改善できるかもしれませんが、ファローシャッフルのみ7回を繰り返すが最も早いと思います。
補足
これらの結果は、デッキの並び順を一様にするという基準のもとで比較されています。これは、最初に述べた通り、デッキを混ぜるという行為に関しては、デュエル前に行うシャッフルで重視されるものです。
一方で、デュエル中に行うシャッフルでは、並び順を一様にするというより、並び順をプレイヤーにわからなくするということが重視されるため、評価が変わるということに注意してください。
特に、デュエル中に、ファローシャッフルを毎回7回も繰り返すのは、時間的に現実的でないため、より適当な別の基準が必要でしょう。要するに、デュエル中に行うシャッフルであれば、プレイヤーがデッキの並び順を分からいようにする程度で構わないということです。
また、実験における比較では、適当なモデル化を行っています。これは、現実に行うシャッフルとは違い機械的なシャッフルの操作になっています。これが影響するのは、シャッフルの癖が出る場合です。例えば、上述のリフルシャッフルのように、その手法になれている人とそうでない人でも個人差が出るように、他の手法のモデル化でも、人によってはモデルが合わない場合もあります*16。こういったことに関しては、注意が必要です。一方で、ここで紹介したディールシャッフル改では、このモデルの個人差はほとんどありません。そういった意味では、ファローシャッフルだけを繰り返すのではなく、間にディールシャッフル改を挟むのが適当であると考えています。
以上になります。
この記事を観てくださった皆様がより良い
*2:かくいう私も完全に理解して、理論を再現できるわけではありません。
*3:この行為の定義は……めんどくさいので省略します。日本語として普通の意味でとらえてくだされば、十分です。
*4:したがって、最初の結果は1に関すること
*6:原理的に可能な以上、それを実行できる人間がいてもおかしくはないです。
*7:ディールシャッフルと呼ばれるものの変形です。以下で、ディールシャッフル改として出てきます。
*8:今回の実験では、その点も考慮してファローシャッフルをモデル化しています。
*9:6回でも大体収束しています。
*10:実験の設定で、前後のファローの回数を増やして確認したので、こうなっていますが、大体3回でもほとんど収束しています。
*11:ファロー→ヒンドゥー→…を繰り返しです。ヒンドゥー+ファローが1セットです。
*12:この設定は、後半のファローを2回で固定して、前半のファローの回数を変えています。
*13:ファロー+ヒンドゥーの結果はヒンドゥー+ファローが1セットで、常に最初にファローを挟むようにしています。よって、合計のファローシャッフルの回数は、セットの数+1回になることになります。
*14:前後のファローの回数を変えています。
*15:後半は2回で固定しています
*16:ここでは、私が普段行っているものをモデル化しています