概要
遊戯王の初動札や手札誘発を引ける確率をシミュレーションできる「遊戯王確率シミュレーター」について紹介します。
関連ツール
シミュレーターを作成した目的
遊戯王のデッキ構築において、目的のカードが引ける確率ができるだけ高くなるように、デッキに入れるカードの種類や枚数を考える必要があります。 例えば、マスターデュエルのデッキ構築画面には「お試しドロー」という機能があり、デッキから5枚試しにドローできる機能があります。 しかし、確率はかなりの回数を試行しなければ収束しないため、5枚ドローして、手動で記録していくのは現実的ではありません。そのため、カードの種類や枚数が変化したときに確率がどう変化するのかを簡単に計算できるツールを作りました。
シミュレーターの使い方
遊戯王確率シミュレーター からアクセスできます。スマホでも一応動きはしますが、画面の大きさ的に PC でないと厳しいと思います。
カード入力欄でカード名の一部 (よみがなでも可) を入力すると、カード一覧の候補が出てきます。「追加」ボタンをクリックして、「デッキ」にカードを追加していきます。
追加されたカードは、「デッキのカード」一覧に表示されます。枚数はここで調整してください。不要なカードは「削除」ボタンをクリックすることで、デッキから削除されます。
「ペア入力欄」で初動となるカードまたはその組み合わせをメニューから選択し、「ペア追加」をクリックします。3枚初動まで設定可能です。メニューのよこの「×」ボタンをクリックすると、その選択が解除されます。 また、「ペア削除」ボタンをクリックすると、登録した初動ペアが削除されます。
現状では、サーチ系の魔法カードでサーチ先を自動で検出できるような機能はないため、以下のように魔法でサーチして初動カードの一方を持ってこれる場合は手動で登録する必要があります。
ペアの登録が完了したら、「確率を計算する」ボタンをクリックします。すると、以下の情報が表示されます。後攻の場合はドロー枚数を6に変更してください。試行回数は多くするほど確率が収束しますが、計算時間がかかりますので、1万~10万の間で設定するとよいと思います。
- 登録した初動ペアのいずれかが引ける確率
- 手札誘発が引ける確率
- 各々のペアが引ける確率
カードを引ける確率の計算方法 (単純な場合)
合計 $n$ 枚のデッキから $d$ 枚ドローしたときに、デッキに $a$ 枚入れているカードを $b$ 枚引ける確率 $p_b$ について考えます。
- $n$ 枚のデッキから $d$ 枚選ぶパターン数は ${}_n C_d$ で計算できます。
- $a$ 枚入れているカードから $b$ 枚選ぶパターン数は ${}_a C_b$ で計算できます。
- $d$ 枚引いたとき、残りの $d – b$ 枚はそれ以外のカードを選ぶ必要があるので、そのパターン数は ${}_{(n – a)} C_{(d – b)}$ で計算できます。
よって、
$$ p_b := \frac{{}_a C_b \times {}_{(n – a)} C_{(d – b)}}{{}_n C_d} $$で計算できます。また、1枚以上引ける確率を求めるには、$\sum_{b = 1}^a p_b$ を計算すればよいです。
from math import comb
n = 40 # デッキ枚数
d = 5 # ドロー枚数
a = 3 # デッキに入れてる枚数
max_b = 3
probs = []
for i in range(max_b + 1):
prob = comb(a, i) * comb(n - a, d - i) / comb(n, d)
probs.append(prob)
for i in range(len(probs)):
print(f"{i}枚引ける確率: {probs[i]:.2%}, {i}枚以上引ける確率: {sum(probs[i:]):.2%}")
0枚引ける確率: 66.24%, 0枚以上引ける確率: 100.00% 1枚引ける確率: 30.11%, 1枚以上引ける確率: 33.76% 2枚引ける確率: 3.54%, 2枚以上引ける確率: 3.64% 3枚引ける確率: 0.10%, 3枚以上引ける確率: 0.10%
後攻の6枚ドローの場合も計算してみます。
n = 40 # デッキ枚数
d = 6 # ドロー枚数
a = 3 # デッキに入れてる枚数
max_b = 3
probs = []
for i in range(max_b + 1):
prob = comb(a, i) * comb(n - a, d - i) / comb(n, d)
probs.append(prob)
for i in range(len(probs)):
print(f"{i}枚引ける確率: {probs[i]:.2%}, {i}枚以上引ける確率: {sum(probs[i:]):.2%}")
0枚引ける確率: 60.57%, 0枚以上引ける確率: 100.00% 1枚引ける確率: 34.07%, 1枚以上引ける確率: 39.43% 2枚引ける確率: 5.16%, 2枚以上引ける確率: 5.36% 3枚引ける確率: 0.20%, 3枚以上引ける確率: 0.20%
以上の計算結果から、3枚入りのカードは先攻なら30%、後攻なら34%の確率で1枚以上引けることがわかります。
シミュレーターの必要性
1枚初動のカードの確率であれば、上記の計算で十分ですが、現実はある特定のペアが揃っていた場合に動ける2枚初動が一般的です。また、強欲で謙虚な壺のような壺系カードは初動確率に大きく影響してきます。こうなってくると、複数ある初動ペアに対して、解析的に確率に求めるのは困難です。 そのため、「実際に5枚ドローして引きたいカードが手札にあるかを確認する」という作業を沢山試行して、統計をとるアプローチでおおよその確率を求める必要があります。
デッキを40枚に揃える必要があるのか
同種のカードは3枚までしか入れられないため、単純に考えると、ピンポイントで引きたいカードがある場合は母数であるデッキ枚数が少なくするほうが、引ける確率は高くなります。 しかし、デッキ枚数を増やしてもその分初動札も増やせば、初動確率は低下しません。例えば、「当たりが1本入っている10本のくじ」と「当たりが10本入っている100本のくじ」はどちらも当たりが引ける確率は10%で同じです。また、サーチ系の魔法カードなどを活用することで、枚数を増やしたことによる素引きできる確率の低下を補うこともできます。 例えば、ある電脳堺デッキで「金満で謙虚な壺を1枚入れた40枚のデッキ」では初動確率は71%なのに対して、それに金満で謙虚な壺を1枚増やした41枚デッキの場合は初動確率は74%に増加しました。 そのため、重要なのは枚数ではなく、確率であるため、40枚に拘る必要は必ずしもありません。
コメント
コメント一覧 (0件)
非常に便利で、いつもデッキ構築の際に利用させてもらっています。
要望なのですが、1種類のカードの投入できる枚数の上限を3枚から変更してもらうことは可能でしょうか?
理由ですが、これが出来ると
・サーチカードが複数あるカード(例:No-P.U.N.K.セアミンと緊急テレポート、フォクシーチューン、オーガナンバー)
・特定のテーマカードを必要とするカード(例:大砂海ゴールドゴルゴンダとスプリガンズ)
などの設定が簡単になるからです。
ご検討の程よろしくお願いします。
コメントありがとうございます。
即席で作ったものでして、近日中にちゃんとにしたツールに作りなおそうと思います。
コメントいただいたように、自分でも使いづらいと思っている点が、初動ペアの登録の際に、サーチカードが絡む場合にパターンが多くなってしまう事です。「闇属性モンスター」「レベル2モンスター」のような具体的なカード名よりもう少し緩い条件で組み合わせを設定できるようにすることも検討中ですが、サーチカード系はカードによって効果処理が様々なので、どうするのがよいか悩み中です。
> 1種類のカードの投入できる枚数の上限を3枚から変更してもらうことは可能でしょうか?
3枚以上投入可能にすることは簡単ですが、以下のような懸念点があります。
例えば、PUNKデッキで「娑楽斎」+「オーガーナンバー」でレベル8シンクロ立てれると思いますが、オーガーナンバーを9枚にすると、
「娑楽斎」+「オーガーナンバー」というペアが初手に揃う確率が実際より高くなってしまうので、あるカードを4枚以上設定する場合は注意が必要になってきます。
一応、次回のアップデートの際に枚数制限は外そうと思います。
もしペア登録に関していい方法があれば、ご意見いただけると幸いです。
返信ありがとうございます。
提案ですが、利用者がタグ付けを出来るようにするというのはどうでしょうか。
アルベルは烙印融合にアクセスできるから「烙印融合」タグを付けるだとか、増殖するGがあるとスプライトの共通効果を使えるから「レベル2」タグを付けるだとか。
この方式だと、例えばミラジェイドの効果を使って赫の烙印などをセットしたい場合は初動にアルベルだけを指定することも出来るので便利ではないでしょうか。
まあこれは素人の意見であり、実装の難しさも分からないので参考程度でお願いします。
コメントありがとうございます。
タグ付け機能いいかもですね。(サイキック族のモンスターに緊急テレポートのタグ付けするとか)
まずはカードデータの更新して、最低限の機能を実装したあと、機能追加の際に検討してみます。
貴重なご意見ありがとうございます。
UIも見やすくて使いやすく、よくMDでお世話になっています。
ただ、URL共有か何かで一度作ったパターンを保存して、あとから見返せるようにできると尚良いと個人的に思っております。
コメントありがとうございます。
即席で作ったものなので、ツールを作り直し中です。
5月中ぐらいの予定で、ツール及びカードデータの更新を予定しております。
その際は、他に作ったスモールワールド検索ツール (https://pystyle.info/apps/yugioh-small-world-searcher/) のように URL で今の入力状態を保存、共有できる仕組みにする予定です。
貴重なご意見ありがとうございます。