見出し画像

Bazaar of Baghdadと確率計算の話

どうももすぎです。今回はドレッジやピッチヴァインといった「どうしても初手にBazaar ofBaghdadが欲しいデッキ」における確率のお話になります。
たぶん偉大なる先人たちも同じことやってるとは思いますが、自分でも検証してみたくなったので実際にやってみました。

1.あらすじ


それは表参道ヴィンテージ後の飲み会で「バザーデッキの初手期待値をパウダー込みで計算するのはさすがにしんどくないか?」的な話になって「計算式立てて数学的に解析すると条件分岐取りこぼしそうやしいっそのことプログラム組んでシミュレーションした方がいいんじゃね?」的な話になり、「そういや最近バザーデッキやたら7枚キープしてくるし気になるな…」ってことで・・・
実際にやってみました。
余談ですけど関東のヴィンテージ強強勢、国立大理系卒の高学歴の方が多くて私立卒のワイちゃんちょっと萎縮してしまいますね…
私は基本的にはバザー系デッキは握らないのですが、バザー系デッキと対戦する上で理解度を深めることも大事ですのでこのようなテーマを取り上げてみました。

2.プログラム作成

プログラムを組むといっても私のプログラミング知識はネットで5分調べた程度しかないため、その知識範囲で組むべくエクセルとマクロ(VBA)を活用することとなりました。
エクセル上でデッキの状態、ライブラリーの並び順、手札の状態、追放領域などを各種関数を用いて管理し、キープ条件を満たしているか、血清の粉末を適用するかなどの「ライブラリーから7枚引いてからキープorマリガンの宣言」を表現します。
一方、この一連の流れを繰り返して「何枚でキープできたか」の統計を取るため、マリガンのための繰り返し処理やキープ時の手札枚数の記録といった繰り返し処理全般をVBAで実行します。

そしてこちらが実際のエクセル

エクセルポチポチポチィーッ!!

こちらがVBAのコード

所詮は素人の記述である

です。

3.確率と期待値

そもそもの話、血清の粉末とかいうカードがなければ至ってシンプルな確率計算となります。例えば「バザー4枚、他56枚」みたいなデッキであれば、バザーが初手にある確率は
(56C7/60C7)^(マリガン回数)×(1-56C7/60C7)で求められるため、
7枚キープ…39.950%
6枚キープ…23.990%
5枚キープ…14.406%
4枚キープ…8.651%
3枚キープ…5.195%
2枚キープ…3.119%
1枚キープ…1.873%
0枚キープ(バザー無し)…2.186%
初手期待値…5.53919枚
となります。
(バザーが一切初手に来なかった場合を便宜上0枚キープとしています)
しかし血清の粉末が存在することで「バザーはないけど血清の粉末がある」を場合分けする必要が出てきます。これだけならまだいいですが、血清の粉末を適用した後にマリガンすると血清の粉末によって追放されたカードを考慮しなければならず、確率計算が複雑になります。
余りにも複雑化する計算を考えるのであれば、実際にシミュレートをして確率を出す方が合理的であるという結論に至りました。
一応、統計学的には試行回数が多ければ多いほど理論値に近づくことがわかっています。ですので、実際にバザーデッキを1万回程度一人回しして統計を取ればいいわけです。もちろん現実に一人回しするのは不可能なので、プログラム上で状況再現して実行させます。
そしてこちらが1万回×10回一人回しした結果となります。

1万回×10回の結果を別シートにまとめたもの

10回の平均値より、
7枚キープ…54.332%
6枚キープ…24.290%
5枚キープ…10.969%
4枚キープ…5.359%
3枚キープ…2.534%
2枚キープ…1.250%
1枚キープ…0.603%
0枚キープ…0.663%
初手期待値…6.13050枚
となります。
ここで注目すべきは、血清の粉末によって
7枚キープできる確率が14.382%
初期手札枚数の期待値(バザー無しを0枚として)が0.59131枚
上昇することがわかります。したがって、血清の粉末を入れることは明確なメリットであることがわかります。
なお、シミュレーションにより弾き出した確率はあくまでも私のプログラムが間違っていなければという前提があることをご留意ください。
…と思ってエクセルを見返していたら、「1回以上マリガンした場合の初期手札7枚にバザーが無く、かつパウダーがある場合に本来はマリガン回数分だけ手札をライブラリーボトムに送ってから手札を追放しなければならないが、7枚全て追放してから引いてる(引く枚数はマリガン回数をちゃんと考慮してる)」ことが発覚したため、急いで修正をして…完成したものがこちらになります。
ちなみに血清の粉末がある場合の追放する優先順位を、パウダー1枚目→その他→パウダー2枚目以降と条件をつけました。(2枚目以降のパウダーを極力マリガンでボトムに送る想定)

ついでにVBAの引数を変更してシミュレート回数10万回に耐えられるように修正、いざシミュレート!

さすがに10万回試行するとおやつ食べおわりますね!

(結果はほとんど変化なし)
あらためて各種確率を算出すると、
7枚キープ…54.204%
6枚キープ…24.255%
5枚キープ…11.167%
4枚キープ…5.282%
3枚キープ…2.498%
2枚キープ…1.254%
1枚キープ…0.600%
0枚キープ…0.740%
初手期待値…6.12523枚
となります。

4.まとめ

血清の粉末によって7枚キープできる確率が39.950%から54.204%に上昇する。
なお、6枚キープの確率はほとんど変わらず5枚以下のキープ確率はパウダー無しの方が高い。
初手期待値が5.54枚から6.13枚に上昇する。(バザー無し手札を0枚とする)
※シミュレートでの算出値は修正後を使用
7枚キープできる確率が50%を超えるため、そもそもバザーデッキは確率的に7枚キープできると考えるべき。
プログラム間違ってたら確率変わるからそんときはゴメンねてへぺろ!
あともし間違ってたら教えてもらえると助かります。

いいなと思ったら応援しよう!