ユニオンアリーナにおける、マリガンを考慮した手札事故回避率の計算



マリガンを考慮した、各0,1投入枚数における手札事故回避率のプロット

intro

ユニオンアリーナのゲーム性質上、0エナジーおよび1エナジーのカードの枚数決定についての議論は避けて通れません。
最初の1,2ターンに0エナジーのカードを置くことができなければまともな試合を進行することが難しく、とはいえ0エナジーの枚数比重が多すぎると最終盤面での総合的なパワーに影響を及ぼしてしまうため、可能であれば適度な枚数に留めることが望ましいです。極端な話、事故を起こさないために0エナの枚数を50枚にしたら、最終面が弱すぎてまず勝てません。当たり前ですが。

しかし現状、これらの枚数決定は各プレイヤーの肌感覚で行われていると感じています(今は0エナ12枚・1エナ4枚の16枚構成、そこからいずれかを1枚削った15枚構成などが主流でしょうか)。
そこで今回、初手の手札事故をなるべく起こさない最適な01枚数を探すことを目的とし、手札事故回避率の計算を行いました。

ただし、ここでいう「手札事故回避」とは、「最初の手札に0または1エナのカードが2枚以上あり、かつ少なくとも1枚は0である事象」と定義することにします。

初手の手札事故確率というのはデッキタイプによっても異なるため、一般化が難しいところであります。
たとえば仮に2エナのカードが1枚も入っていないデッキであれば、初手札に01エナが3枚なければ手札事故と言えるでしょう。
またミミック・福丸小糸のような初回に発動できるワンドローワンディスの効果を持っているカードがあれば、初手に1枚しかなくても望みをかけることは可能です(確率は大抵の場合5割未満だと思いますが)。
また0、1が多くても、強い動きができないと判断した時、マリガンという選択をとったほうが良い場合もあるとは思います。

今回は計算簡略化のためこのようなケースを全て無視することにします。なのでかなり大雑把な計算になることをあらかじめご了承ください。あくまで、「ゲームを問題なく始められるであろう確率」みたいな感じで見ていただければと思います(ここまで書いてみて、かなりテキトーな記事になる予感がしてきました。大丈夫かな…)

また念のため、計算過程を載せてみますが、自分は確率や統計を専門に学んでいるわけではないので、高校1,2年程度(数A・B)の知識のみで記述しようと思います。なので数学に詳しい方(大学で数学を専攻していた方など)は、表記の作法等でアレルギーを起こすかもしれないのでブラウザバックしてください。
数学が苦手だった方や、計算過程に興味ない方はそちらを飛ばして、結果のみを参照しても大丈夫なように書いてみます。どうぞ上の目次の「計算結果」から飛んで行ってください。

なお、計算結果はすべてGNU octaveというフリーの数値解析ソフトウェアを用いて出力しました。
MATLABと互換性のあるフリーソフトで、今回、.mファイルとしてスクリプトを記述し実行をしています。


計算過程

高校生の数学の問題っぽく書くとこんな感じです。


「たかしくんはユニオンアリーナのデッキ50枚のうち、0エナジーのカードをx枚、1エナのカードをy枚投入しました。このとき、以下の確率をそれぞれ求めましょう。
(1)手札事故回避率P(x,y)
(2)マリガンを考慮する場合の手札事故回避率Pm(x,y)

ただし「手札事故回避」を「最初の手札7枚に0または1エナのカードが2枚以上あり、かつ少なくとも1枚は0である事象」と定義し、また「マリガンを考慮する」とは「最初の手札7枚の確認で手札事故回避が生じればマリガンを行わず、手札事故回避が生じなかった場合のみ、初手の7枚を除いた43枚から新たに7枚引いて最初の手札とする」という前提のことを指すものとします。


解答
(1)手札事故回避率P(x,y)

「最初の手札7枚に0または1エナのカードが2枚以上ある事象」をA、
「最初の手札7枚のうち、少なくとも1枚は0エナである事象」をBとすると、
求めるべき確率は
P(A∩B)
と表される。
ここで「最初の手札7枚に0エナまたは1エナのカードがちょうどk枚(2≦k≦7)ある事象」をAkとすると、各kの値について
Ak ⊂ A
A ⇔ A2 ∪ A3 ∪… ∪A7
また異なるAk間は排反事象であることから、
P(A) = ΣP(Ak)、(k=2,3,…7)
同様にして
P(A∩B) = ΣP(Ak∩B) (k=2,3,…7)

と表される。
したがって、まずP(Ak∩B)を求め、後にその総和を求めればよい。

ここでP(Ak∩B)について、条件付き確率の式より
P(Ak∩B) = P(Ak)・P(Ak|B)
となる。

P(Ak) : 「最初の手札7枚に0エナまたは1エナのカードがちょうどk枚(2≦k≦7)ある確率」
P(Ak|B):「最初の手札7 枚に0エナまたは1エナのカードがちょうどk枚(2≦k≦7)あったとき、そのうち少なくとも1枚が0である確率」

これらをそれぞれ求め、その積を計算する。

P(Ak) : 「最初の手札7枚に0エナまたは1エナのカードがちょうどk枚(2≦k≦7)ある確率」

全事象は「デッキdmax枚(ここではdmax =50とする)から7枚選ぶ場合」より、場合の数は
dmax C 7
と表される。

求めるべき事象は「01の総数(i+j)枚からちょうどk枚選ぶ場合の数」なので、
(x+y) C k * (dmax -x-y) C (7-k)   (x+y ≧k)

したがって、
P(Ak) = (x+y) C k * (dmax -x-y) C (7-k) / dmax C 7
となる。

x+y < k の場合、すなわち、「デッキに搭載されている01エナの総数がk枚以下」の場合、
P(Ak) = 0
となる。

P(Ak|B):「最初の手札7 枚に0エナまたは1エナのカードがちょうどk枚(2≦k≦7)あったとき、そのうち少なくとも1枚が0である確率」

ちょうどk枚の01を選ぶ場合の数は
(x+y) C k
である。これを全事象としたときの、
「k枚のうち少なくとも1枚が0エナ」である事象の確率、すなわち「k枚のうちいずれも1エナ」である場合の余事象確率を求めればよい。
k枚のうちいずれも1エナである場合の数は
yCk
ただしこれはy≧k、すなわち「ハンドにきた01枚数が1エナカードのデッキ搭載枚数以下である」という条件下である。
y<kのとき、すなわち、「ハンドにきた01枚数が1エナの搭載枚数よりも多い場合」、k枚の中には必ず0エナのカードが含まれる。

したがって、
P(Ak|B) = 1- yCk/(x+y)Ck (y≧k)
P(Ak|B) = 1 ( y< k )

となる。

P(Ak)とP(Ak|B) を乗算しk=2~7の場合で足し合わせた値が求める解となる。

以下スクリプト

function retval = Pavoid(dmax, x, y)

  P = 0;

  for k = 2:7 %01をちょうどk枚引く
    if x+y < k %総入01がkより少なければその確率は0
      PAk = 0;
    else
      PAk = nchoosek(x+y,k)*nchoosek(dmax-x-y,7-k)/nchoosek(dmax,7); % PAk:01をちょうどk枚ひく確率
    end

    if k <= y
      P = P + PAk * (1-(nchoosek(y,k)/nchoosek(x+y,k))); % 「01をk枚引いたとき、少なくとも1枚は0である」条件付き確率を乗算
    else
      P = P + PAk; % ひいた01の枚数がj枚より多ければ事故が起きることはない
    end
  end
retval = P;
endfunction


(2)マリガンを考慮する場合の手札事故回避率Pm(x,y)

(i)一回目に手札事故を回避する場合
(ii)一回目に0エナ1枚、1エナ0枚の場合
(iii)一回目に0エナ0枚の場合
で場合分けする。

(i)一回目に手札事故を回避する場合
(1)の計算結果がその確率に該当する。

(ii)一回目に0エナ1枚、1エナ0枚の場合
1回目に0エナ1枚、1エナ0枚引く確率は
xC1 * (dmax-x-y)C6/ dmaxC7
この後、デッキ総数を43枚、0エナをx-1枚、1エナをy枚として再度手札を7枚引き直すため、上記値を(1)の計算過程に当てはめて計算し直す。
デッキ総数d枚、0エナx枚、1エナy枚における1試行での手札事故回避率をP(d,x,y)とすると、
求める確率は
(xC1 * (dmax-x-y)C6/ dmaxC7)) * P(43,x-1,y)

(iii)一回目に0エナ0枚の場合
1エナをk枚引く確率は
yCk * (dmax-i-j)C(7-k) / dmaxC7
これにP(43,x,y-k)を乗じ、k=0~7の場合でそれぞれ求め、各値を合算すればよい。

上記(i)(ii)(iii)の確率を合算することで、マリガンを考慮する場合の手札事故回避率が算出される。
以下スクリプト

dmax = 50; %デッキ枚数
P = zeros(20,16); %マリガンなし初手事故回避率
Pnodup = zeros(20,16); %重複無マリガンを考慮した事故回避率
for i = 1:20
    for j  = 1:16
          P(i,j) = Pavoid(50,i,j);
          Pnodup(i,j) = P(i,j) + (nchoosek(i,1)*nchoosek(dmax-i-j,6)/nchoosek(dmax,7)) * Pavoid(43,i-1,j);   %初手01枚、10if(j > 0)
            for k = 0:min([j 7]); %初手、00枚、1がk枚
              Pnodup(i,j) = Pnodup(i,j) + (nchoosek(j,k)*nchoosek(dmax-i-j,7-k)/nchoosek(dmax,7)) * Pavoid(43,i,j-k);
            end
          end
    end
end


計算結果


多分上の目次からここまで飛んできた人が多数だと思いますが、計算結果です。

(1)手札事故回避率 (マリガン前の手札事故回避)

縦:0エナ投入枚数、横:1エナ投入枚数

(2023/10/16追記)
表データで欲しいという方がいらっしゃったので、埋め込んでみました。上の画像と以下の表は同じものです。使いやすいほうを参照ください。

(2)手札事故回避率 (マリガンを考慮する場合)

縦:0エナ投入枚数、横:1エナ投入枚数

(2023/10/16追記)
表データで欲しいという方がいらっしゃったので、埋め込んでみました。上の画像と以下の表は同じものです。使いやすいほうを参照ください。

上記画像から、自分のデッキの0エナ投入枚数と1エナ投入枚数が交わるところを読み取ってみてください。そこに書いてある値があなたのデッキの手札事故回避率です。意外と高いですか?低いですか?

90%以上あったらあとは誤差なんじゃないの、って思う方もいらっしゃるかもしれませんが、これは大きな落とし穴です。1戦だけやるだけであれば話は変わってきますが、たいていのSB・争奪戦では3,4回戦試合したり、CSでは6回以上戦う場合もあります。そう考えると、その中で1回も手札事故を起こさないようにするには、90%じゃ心許ないような気がしませんか?

繰り返し試合を行うことを考えたとき、試合数が多ければ多いほど数パーセントの差がかなり影響を及ぼしてきます。2%程度変わると、かなり肌感覚で感じられると思います。このあたりの話はまた別のノートに書いてみたいです。

上表の使い方はいろいろあるとおもいますが、たとえば斜めのラインで比較すると面白いんじゃないかと思います。
たとえば0エナ12、1エナ4の手札事故回避率は93.516%です。合計で01が16枚ですが、では0エナ8、1エナ8にしてみるとどうでしょう。同じ16枚投入でも、かなり差を感じられるようになってくるのではないでしょうか。

重ねての話になりますが、これはあくまで「単純化した手札事故回避率」です。0エナに1ドロー1ディスのカードを採用する、毎回後攻を取るようにする(弱いかも)など、数値以上に上げる方法はいくらでもあるので検討してみてください。
また今回、2エナの投入枚数は考慮していないため、実際の手札事故回避率はこれよりもさらに低いと考えて頂いた方がいいかもです。01がちょうど2枚あっても、次に出せる2エナがなかったら手札事故ですからね。2エナを考慮した確率計算も時間があればやってみたいです。

さいごに

ここまで読んでくださってありがとうございました。
質問や感想等あればTwitterやDM等で気軽にご連絡頂けると幸いです。
また計算過程に誤りを見つけた方は、大至急連絡をいただけますと幸いです。

上表の使用は自由ですが、計算ミスがあったときの保証はできかねますので、使用の際はこの記事を引用してもらえると僕のせいにできるんじゃないかなと思います。
一応お布施用にとして追加記事を付けてますが、特になにもありません。銭
投げの得意なトルネコはお金を投げて頂けるとモチベ向上につながります。

(2023/11/03追記)マリガン後のみ8枚目を考慮する場合の手札事故回避率

マリガン前は上記と同様、7枚見て手札事故回避が生じているかのチェックをし、マリガン後は8枚目までを見て手札事故回避が生じているかチェックするものとしたときの確率も記しておきます。「8枚目を見る」とは
・後攻1ターン目のドロー
・先攻1ターン目のエクストラドロー
・0エナワンドローワンディスによる手札交換
のことなどを指します。
当然ですが、ワンドローワンディスのカードは手札に来ることが確約されているわけではありませんので、当該カードを採用しているからといって下記確率を参照できるわけではございません。
必ず後攻を取ると決めている人、先攻1ターン目のエクストラドロー1回までなら許すと決めている人は、上の確率より以下の確率の方が参考になるかもです。

計算過程は、マリガン後無造作に8枚とるものとして同じ計算をするだけなので省略します。計算ミスあったらすまにょ

縦:0エナ投入枚数、横:1エナ投入枚数

例の如く、上の画像と下の表は同じものです。使いやすいほうをどうぞ。


ここから先は

95字

¥ 100

期間限定 PayPay支払いすると抽選でお得に!

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