ユニオンアリーナのマリガンをシミュレートした結果
はじめに
簡単にですがユニオンアリーナのシミュレータを作成したためその結果をまとめました。条件の抜けやこんな条件のときの結果が知りたい等の要望がございましたらお気軽にご相談ください、シミュレート可能な限り追記いたします。
シミュレート結果
本記事の表記
以降カードの記載を以下のように定義します(本記事はマリガンの安定に主眼をおいているため1 AP のキャラに対象を絞っています)
要求1エナジーのキャラ → 1
要求1エナジー&2エナジー発生のキャラ → 1(2)
その他いずれかのキャラ or イベントカード → _
例)
(0 x 2, 1 x 1, 2 x 1, 3 x 1, 4 x 2)
この表記の場合、0エナジーが2枚・1エナジーが1枚・2エナジーが1枚・3エナジーが1枚・4エナジーが2枚の計7枚が手札であることを指します。
初動の定義
ゲーム開始時点で全てエナジーにおいた際に先行3ターン目に3エナジーキャラの登場からスタートできる
初動の定義リスト
(0 x 3, _ x 4) // 000
(0 x 2, 1 x 1, _ x 4)// 001
(0 x 1, 1 x 2, _ x 4)// 011
(0 x 2, 2 x 1, _ x 4)// 002
(0 x 1, 1 x 1, 2 x 1, _ x 4)// 012
(0 x 1, 1(2) x 1, _ x 4)// 01(2)
結果(3以上は省略してます)
結果の見方
movable hand count : (初動の条件を満たしたパターンの回数) / (試行回数)
movable hand probability: 今回の実験において初動の条件を満たす確率
*注意:これはコンピュータの疑似乱数を用いたデッキカットを想定しているため人間が実際に行うものとは確率が多少上下することが予想されます。
0 x 12, 1 x 4, 2 x 6
0 x 12, 1 x 6, 2 x 4
0 x 12, 1 x 4, 2 x 8
0 x 10, 1 x 4, 2 x 6
0 x 8, 1 x 8, 2 x 6
0 x 8, 1 x 4, 1(2) x 4
0 x 14, 1 x 8, 2 x 4
ここから先はおまけ(導出過程)なので読まなくても問題ないです
シミュレート方法
複雑なアルゴリズムは使用していません(というかできません)ざっくりと以下の通りです
長さ50の配列にエナジー1のキャラを10枚・その他のカードを40枚入れると仮定する場合は u32(符号無しの32 bit 整数) の 1 を10個、u32 の99を40個詰める。
配列をランダムソートする
配列の先頭から7つ取り出して自分で設定した初動条件のいずれかのに該当すればカウンタを増やす。
2で初期条件に該当しなかった場合、新たに先頭から8番目から7つ取り出し同じく条件に該当するかチェックする。
2から4を自分で設定した任意の回数繰り返す(今回は100万回)
集計する
ソースコード(GitHub)
バグや不具合などございましたら issue, PR お待ちしています