【要約】カードゲームの「初手で引ける確率」を超幾何分布で正確に計算する(Python)🎴 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
TCGプレイヤーは、デッキ構築の最適化において、ドロー確率を直感に頼ってしまう問題に直面している。直感による判断は、統計的な事実と大きく乖離するリスクがある。具体的には以下の課題が挙げられる。
- ・モンテカルロ法による近似計算は、計算コストと誤差の制御が困難である。
- ・「非復元抽出」というドローの特性を考慮した厳密な計算モデルが不足している。
- ・複数のカードが絡む場合、単純な確率の積では計算できない依存関係が存在する。
// Approach
筆者は、Pythonの標準ライブラリを用いて数学的に厳密な計算ロジックを実装した。数学的な公式を直接コードに落とし込むことで、精度と速度を両立させている。
- ・
math.combを活用し、二項係数を用いた超幾何分布の公式を直接計算する。 - ・「1枚以上引く確率」の算出には、補集合(1 - 全て外れる確率)を用いることで計算を高速化した。
- ・複雑な複合条件に対しては、動的計画法(DP)による状態遷移の検討を提示している。
// Result
実装により、デッキ構築における確率的な期待値を正確に把握できるようになった。定量的な検証結果として以下の数値が示されている。
- ・60枚デッキで4枚採用の場合、初手に1枚以上引く確率は約40%である。
- ・合計12枚の採用で、初手ドロー率が約81%となる安定ラインを特定した。
- ・ポケモンカードのサイド落ち確率(4枚採用で約35%)など、具体的なルールへの適用例を提示した。
Senior Engineer Insight
> 本手法は、計算精度と実行速度のバランスが極めて高い。
math.combによる数式ベースの解法は、乱数を用いるシミュレーションよりも決定論的であり、テスト容易性も高い。実務におけるシミュレーター開発では、まずこの厳密解をベースラインとし、カード間の相互作用などの複雑な条件に対してのみ、動的計画法やモンテカルロ法を組み合わせるハイブリッドな設計が現実的である。