読者です 読者をやめる 読者になる 読者になる

イーブイズの小屋

カードで戦うイーブイズの日常

確率で見るポケモンカードゲーム

f:id:moco470:20160729141257j:plain

今回の記事は世界一無駄な数学の話です。
高校1年生レベルの確率の知識があればf:id:moco470:20160729155424p:plainポッポでも理解できると思います。

 

 

初手でサポート事故が起こる確率


命題:初期の山札の枚数を60枚,デッキ内のたねポケモンの枚数をn枚,ドローサポートの枚数をm枚とする.このとき,先行1ターン目のプレイヤーがサポート事故を引き起こさない確率を求めたい.なお,対戦相手のマリガンは考慮しないものとする.

 

サポート事故の確率を2通りの点から考察したい.

 a)初手の7枚でドロサポを引いている

 b)初手の7枚にドロサポがなく,最初のドローでドロサポを引く

 

a)

まず,最初の7枚の手札で,たねポケモンがいる条件下でドローサポートを引いている確率P_dを求める.

7枚のうち,たねポケモンの数がk (\leq n)枚,ドローサポートの数がi (\leq m)枚,k+i \leq 7であるとする.例えば,最初の手札でたねポケモンを1匹,ドローサポートを1枚引いている確率p_{d1}は,

\displaystyle{ p_{d1} = \dfrac{ ({}_n \mathrm{C}_1) ({}_m \mathrm{C}_1) ({}_{60-(n+m)} \mathrm{C}_{5}) }{ {}_{60} \mathrm{C}_7 } }

で表される.

{初手のたねポケモンの枚数} \in \{1,2,3,...,6\},{初手のドローサポートの枚数} \in \{1,2,3,...,6\}であることに留意して,この確率を総和すると,

\displaystyle{ p_d = \sum_{i=1}^{7-k} \sum_{k=1}^6 \dfrac{ ({}_n \mathrm{C}_k) ({}_m \mathrm{C}_i) ({}_{60-(n+m)} \mathrm{C}_{7-(i+k)}) }{ {}_{60} \mathrm{C}_7 } }

また,条件付確率は分母値が{たねポケモンを引いている確率}であるため,この確率p_tを求めて,

 \displaystyle p_t = \sum_{l=1}^6 \dfrac{ ({}_n \mathrm{C}_l)({}_{60-m} \mathrm{C}_{7-l}) }{ {}_{60} \mathrm{C}_7 }

したがって,求める条件付確率P_dは,

 \displaystyle P_d = \dfrac{p_d}{p_t}

 

b) 

次に,7枚の手札で,たねポケモンがいる条件下でドローサポートを引かず,最初のドローでドローサポートを引き当てる確率P_gを求める.

まずは,最初の7枚の手札で,たねポケモンがいる条件下でドローサポートを引かない確率P_d'を求める.a)と同様にして,i \equiv 0 とすると,

\displaystyle{ P_d' = \sum_{k=1}^7 \dfrac{ ({}_n \mathrm{C}_k) ({}_{60-(n+m)} \mathrm{C}_{7-k}) }{ {}_{60} \mathrm{C}_7 } }

なお,この確率は,a)で求めた条件付確率P_dの余事象である.

この後,サイドを6枚置くことを考える.m枚あるドローサポートのうち,s(\leq m)枚サイド落ちする確率P_sは,

\displaystyle P_s = \sum_{s=0}^6 \dfrac{ ({}_m \mathrm{C}_s) ({}_{53-m} \mathrm{C}_{6-s}) }{ {}_{53} \mathrm{C}_6 }

先の式と合わせて,

\displaystyle P_{ds}' = \sum_{s=0}^6 \sum_{k=1}^7 \left\{ \dfrac{ ({}_n \mathrm{C}_k) ({}_{60-(n+m)} \mathrm{C}_{7-k}) }{ {}_{60} \mathrm{C}_7 } \dfrac{ ({}_m \mathrm{C}_s) ({}_{53-m} \mathrm{C}_{6-s}) }{ {}_{53} \mathrm{C}_6 } \right\} 

この後,山札から1枚ドローする.ここでドローサポートを引けばよいので,

\displaystyle P_g = \sum_{s=0}^6 \sum_{k=1}^7 \left\{ \dfrac{ ({}_n \mathrm{C}_k) ({}_{60-(n+m)} \mathrm{C}_{7-k}) }{ {}_{60} \mathrm{C}_7 } \dfrac{ ({}_m \mathrm{C}_s) ({}_{53-m} \mathrm{C}_{6-s}) }{ {}_{53} \mathrm{C}_6 } \dfrac{ {}_{m-s} \mathrm{C}_1 }{ {}_{47} \mathrm{C}_1} \right\} 

 

以上のa),b)より,先行1ターン目のプレイヤーがサポート事故を引き起こさない確率Pは,

\displaystyle P = P_d + P_g 

によって算出される.

 

※追記 :阿吽くんにTwitterでスマートな考え方を提案をされたので参考までに。


b')

7枚の手札で,たねポケモンがいる条件下でドローサポートを引かず,最初のドローでドローサポートを引き当てる確率P_gを求める.

まずは,最初の7枚の手札で,たねポケモンがいる条件下でドローサポートを引かない確率P_d'を求める.a)と同様にして,i \equiv 0 とすると,

\displaystyle{ P_d' = \sum_{k=1}^7 \dfrac{ ({}_n \mathrm{C}_k) ({}_{60-(n+m)} \mathrm{C}_{7-k}) }{ {}_{60} \mathrm{C}_7 } }

この後,サイドを6枚置いたのち,ターン開始時にドローをする.

ここで,残りの山札の53枚のうちドローサポートはm枚であるから,山札の上から任意にカードを引いたとき,そのカードがドローサポートである確率は等しく\dfrac{m}{53}である.

つまり,サイドに何枚ドローサポートが落ちたかを考慮しなくとも確率は常に一定.

\displaystyle P_g = P_d' \times \dfrac{m}{53} = \sum_{k=1}^7 \dfrac{ ({}_n \mathrm{C}_k) ({}_{60-(n+m)} \mathrm{C}_{7-k}) }{ {}_{60} \mathrm{C}_7 } \times \dfrac{m}{53}

 

 

実例


Excelによって計算した実例を示す.一般的なデッキの模範例として,たねポケモンの枚数をm=8,ドローサポートの枚数をn=10としたが,この数は任意に可変である.

f:id:moco470:20160729123822p:plain

この例では,およそ76%の確率で初手にドローサポートを引けることになる.余事象的に考察すると,4回に1回程度の割合でサポ事故が引き起こると言えるので,ハイパーボールからのシェイミやトレーナーズポスト,コンプサーチャーによる事故緩和を考慮されたい.

 

※Web上でも使えるようツール化しましたのでご活用ください。(デスクトップ上での実行を推奨)

 

次回考察予定項


・先行1ターン目のジャッジマンで相手が事故る確率 

・大域的なピーピーマックスが決まる確率 

 

 

 

終わりに


ここまでの感想「 な ぜ 書 い た 。」


難しそうな数式がたくさん出てきてますが、早い話が初手事故の確率を求めてみようということです。ポケモンカードで初手事故の確率を簡易的に算出するツールとかないのかな、と思ったのが発端です。ないなら作ればよくね?!

朝ごはんを食べながら15分くらいで考えためちゃくちゃざっくりしてた式なので、あってるかは知りません。ちなみに初手に引く枚数を7枚→6枚や7枚→4枚にすればNまたはジャッジマン(レッドカード)後に相手が事故る確率も求められますし、もうちょっとちゃんとやればハイボシェイミやコンプサーチャーを確率に内包することもできそうです。

確率が絡むゲームだけに、構築の段階でどのくらい事故が起きるのかを予測できればある程度勝率は上がりそうですね。