見出し画像

シャッフルの最適解を探る

お久しぶりです。ランチョーです。

今年1月、アリーナきっかけで7年ぶりにテーブルトップのスタンダードに復帰し、店舗のイベントに参加するようになりました。

その中で、自身のシャッフルおよび相手のデッキをカットする速度について対戦相手より時間がかかっている感覚があり、現状の方法でやっているものの代替を探ることにしました。

コロナ禍で、他人のデッキに接触することが問題となり、シャッフル方法も変わりつつあるかと思いますが、今回は古来より行われているシャッフルについての記事です。

後から気づいた点、いただいたご意見等ありましたら、随時追記予定です。

僕のシャッフル


まずは、時間がかかっていると感じた自分のシャッフル方法について確認。

【対戦前に自分のデッキをシャッフルする際の流れ】
(7枚切り※1を1回)→ヒンドゥーシャッフル3※2を2回→横入れ※を2回~4回→ヒンドゥー3×2回ー→横入れ2回~4回
で相手に渡す。
【相手のデッキをシャッフルする際の流れ】
[対戦前]
ヒンドゥー2回~4回→横入れ5回くらい→ヒンドゥー2回→横入れ2回~4回
[対戦中、相手のサーチ等でカットが必要になった場合の流れ]
横入れ3回くらい→ヒンドゥー3×2回

まずは、この方法でどれだけカードが混ざっているかの検証をします。
1枚目から60枚目までを順番に並べたものと比較して、
どれだけカードが散っているかを評価する式を作成しました。
Channel Fireballの記事で評価方法を見た気がするのですが、かなり昔のことで記憶がないので、シャッフル前のインデックスの前後の並びのインデックスの差で比較します。
マイナスが発生するケースが考えられるので、{[各インデックスの差]と、[もともとの並びの差(連番なので1で固定)]の差}を二乗しそれをデッキ枚数分累計して評価することにしました。
※文字だとわかりにくいので、式で説明すると以下のような感じです。標準偏差の考えをもとに勝手に評価式をつくりました。
順番並び替えの煩雑性について、ご存じの方法があったら試したいので是非教えていただきたいです。きちんと調べていないのでもしかしたらすでにあるかも。

勝手につくった煩雑性の評価式

並び替え前の状態

1枚目から60枚目まで、特に操作をしていない状態の図です。
以下のようにインデックスが綺麗な連番になっている状態から、上記の煩雑さを求める式でどれだけ煩雑にでききるかを試します。

並び替えをする前のデッキの状態

煩雑さ:1

①対戦前の7切り→ヒンドゥー2回→横入れ4回→ヒンドゥー2回→横入れ4回


私が普段行っている対戦前の処理を行った後の状態

煩雑さ:32537

それなりに手間をかけているため、順番や、部分部分で区切ったときのインデックスのばらつきはかなりあります。

この状態に持っていくまでに、効果の薄い処理は省いていきたいので、それぞれの項目ごとに検証していきます。

[1]ディールシャッフル

7切りのみ行った場合の結果は以下の通りです。

煩雑さ:17991

インデックスの順に7か所に置いているだけなので、このような並びになります。
例えばデッキに21枚の土地が入っていて、1枚目から21枚目に土地を固めておいてこのようにディールした場合、8枚~9枚のパイルに3枚ずつ散ることになります。
これは、3ターン目までは土地が止まらずに、置くことを担保できる可能性が高い状態です。
さらに、土地を引いたら次も土地になっている可能性が高いので、土地が不要な場合はフェッチランド等のシャッフル手段の起動の目安にもなります。
自分のデッキをシャッフルする際に疑われないために、また相手が意図的にこのような特性を利用してきた場合に、ディールシャッフルのみでは不十分です。
記憶があいまいですが、マジックの公式ルールにもシャッフルは2種類以上を組み合わせて行うようにという内容があったと思います。
今回は検証なので、
・ディールシャッフルを行うことでデッキがどのような状態になるか。
・煩雑さはどのようになるか
この部分だけ注目していただければと思います。

[2]ヒンドゥーシャッフル3


ヒンドゥーシャッフル3のみを行った場合の結果は以下の通りです。
脚注にも載せておきますが、僕はヒンドゥーシャッフルで1度つかんだカードの束を上にのせて終わりにすることは少なく、だいたい15枚くらいつかんで上にのせ、さらにその15枚の下から半部くらいをその上にのせ..というのを3回くらい繰り返します。これは時間節約のためと、同じ部分を何度ものせておろしてを繰り返すとシャッフルの意味が薄くなると考えているからです。
今回の例では、60枚のデッキの上25枚の位置から15枚をつかんでデッキの上にのせ、その下から8枚を上にのせ、さらにその8枚から4枚を上に乗せると一連の流れをヒンドゥーシャッフル3(3回繰り返すという意味で)としました。
僕はこれを2回繰り返すので、ヒンドゥーシャッフル3を2回だけ行った場合の結果を確認してみましょう。

ヒンドゥー3を2セット行った後の状態

煩雑さ:25249

分布の山がかなり大きいです。

※今回の例はあくまで私の例です。
真ん中からでなく、デッキボトムから半分くらいとって、最後の1枚になるまでヒンドゥーシャッフルを続ける方もいますし、その時の体調や気分によって枚数やヒンドゥーシャッフルを開始する位置、回数は変動しますのであくまで参考程度でお願いします。

ヒンドゥーシャッフルの問題点は、隣り合うインデックスのカードが散りにくいという点にあります。
ゾーンの分割は得意ですが、隣り合うカードの分割は切った回数しかできないので、あるカードをドローしたときに、次に何のカードを引くのかを低くない確率で予測することができます。
また、強力なカードの組み合わせを並べておいてからディールシャッフルのみを行うと、そのコンボが揃いやすくなることも問題です。
そのため、相手がデッキを確認した後のシャッフルをヒンドゥーシャッフルのみで行うことは危険であることは古来より言い伝えられています。

[3]横入れシャッフル


最後の単体シャッフルは横入れシャッフルです。
こちらについても拘りがあり、私はデッキの上からとった20枚くらいのカードの束をデッキのボトム20枚くらいに差し込むようにしています。
この方法だと、中間の20枚が混ざらないのですが、次回横入れをする際に、混ざらなかった20枚がトップに来ているため、複数回行うことで確実にすべてのカードがシャッフル対象になります。
デッキの半分をもって横入れする方法だと、デッキトップにあったカードが、トップ7枚(初手)に固定されてしまうのと、カードの位置の入れ替わりが少ないので、ファローの効果も兼ねられるボトム差し込み方式を使っています。

今回は、相手のデッキをカットするときによくやる3回の処理を行った後の結果を確認します。


横入れ(上20→下20に刺す)×3回を処理後の状態

煩雑さ:34197

ちなみに、上30枚を下30枚に刺す場合は以下のようになります。

煩雑さ:45685

デッキを半分ずつに分けて差し込む方法だと、どうしてもデッキボトムやデッキトップにまとめておいたカードがパイルごとに割り振られたり、してしまうように見えます。


初期のインデックスが近いカードがパイルごとに分かれる

シャッフルの評価方法として、ランダム性が担保されていることが評価方法の一つだと思うので、このようにソートが発生してしまうシャッフルはよくないかなと思います。
1枚目のカードが1枚目に固定されている点も気になります。
やはり、半分ずつではなく、トップからとった束をボトムに差し込むのがよさそうです。

単体での煩雑さは横入れシャッフルが最も効果が高そうです。

ではここから、シャッフルの方法を組み合わせた場合の効果の検証に入ります。

私が知っているのは上記の3種類ですので、3C2 = 3通りの検証をします。

[4]ディールシャッフル+ヒンドゥーシャッフル3

7切りをした後で、先述のヒンドゥー3を2セット行います。


ディール後にヒンドゥー3を2セット

煩雑さ:25249

見た目は、ディールシャッフルの結果とあまり変わっていないように見えます。
やはり、ヒンドゥーシャッフルの回数が少ないと効果が薄く、ディールシャッフルの問題であったパイルごとに揃った分布を解消するという点が
補いきれていないようです。

[5]ディールシャッフル+横入れシャッフル3セット


7切りをした後で、先述のトップ20枚をボトムに刺す横入れを3セット行います。


煩雑さ:33794

ぱっと見、かなりばらついているように見えます。

最後にヒンドゥー+横入れを確認しましょう。

[6]ヒンドゥーシャッフル3+横入れシャッフル3セット

ヒンドゥーシャッフル3を2セットの後、横入れ(20-20)を3セット行います。
これは対戦中のシャッフルでよく行っているもの。

フルセットでの結果を比べるとあまり混ざっていない気が…

上記の結果から、以下のことがわかりました。

①公式の指示通り、シャッフル方法は複数のものを組み合わせたほうがいい。

②複数のシャッフル方法を組み合わせたからといって、必ずしもランダム性が担保されるわけではない。

③相手のシャッフル方法をみて、あらかじめソートされる可能性が考えられるので、ファローの回数や横入れの回数、つかむ位置は気分で変えたほうがいい。

④初期状態からの煩雑性を増やすという意味では、ヒンドゥーシャッフルの効果は非常に薄い。※この指標はオリジナルなのでこの部分は消える可能性があります。

結論

今回の検証を踏まえ、私が今後とる行動は
①対戦前のシャッフルは、自分のデッキは必ず3種類の方法を組み合わせるかつ、ディールは席に着く前にある程度済ませておく努力をする。

②相手のデッキをカットする際に、着席後に相手がディールシャッフルを介していない場合(ディールシャッフルが確認できない場合)は、[ヒンドゥー+横入れ]の回数をランダムで増やす+つかむ位置もランダムで変えて追加する。

③ヒンドゥーシャッフルはかける時間に対して効果が薄いので、残り時間が少ないときは何セットも行わない。その時間をほかのシャッフル方法でのシャッフルに費やす。

といったところです。

あまり参考にならないかもしれませんが、ご意見やご指摘がございましたら是非コメントを頂けると幸いです。

※1 私がマジックを始めた頃、偶数でディールするのはよくないと聞いたことがあったため、脳死で7切りにしています。このあたりもプログラムを組んで検証しましたが、現実的に対戦をする中では8切りでも問題ないと感じました。

※2 ヒンドゥーシャッフル3は私が勝手につけた名前です。一回カードの束をつかんでから3回切るヒンドゥーシャッフルをヒンドゥーシャッフル3とします。


この記事が気に入ったらサポートをしてみませんか?