1Weekオンラインハッカソン参加録:Poker AIで学んだこと

2025-09-20

概要

2025年9月に開催された 1Week オンラインハッカソン 「Flush Code Hack」 に参加し、
ポーカーAIの設計と実装を担当しました。
本記事では、AIの設計思想、開発プロセス、そしてチーム開発を通じて得た学びをまとめます。


背景

競技プログラミングやアルゴリズム実装の経験を活かし、
**「短期間で実用的なAIを構築できるか」**という挑戦のもと参加しました。
テーマは「カードゲーム対戦プログラムを開発し、トーナメント形式で競う」。
TypeScript での開発は初めてでしたが、AI設計・戦略構築を軸にチームをリードしました。


プロジェクト概要:Poker AIとは?

ワンフレーズで言うと、

「役 × リスクとリターンの計算 × 状況補正で動く、堅実型ポーカーAI」

このAIは、役ごとの推定勝率をベースに、
ポットオッズ(勝負の期待値)と比較してリスクを制御し、
さらに
参加人数・順位・ベットフェーズ
に応じて判断を補正します。

つまり「強い時は攻め、弱い時は降りる」ことを、
感覚ではなく数値に基づいて判断する戦略AIです。


開発内容と構成

戦略ロジックの柱

  • 役ごとの交換方針
    役が完成していれば交換せず、ペアやフラッシュの“芽”を重視。
  • ベット判断(decideBetPoint
    • 推定勝率を役ごとに定義し、状況に応じて補正。
    • ポットオッズと比較し、割に合わない勝負は降りる。
    • 小額なら「micro call」を許容し、過剰な降り癖を防止。
    • 許容上限(役別の支払い上限%)を設け、無謀なベットを制御。
  • レイズ判断
    勝率が高い時や強役の時にのみレイズ。状況補正を掛けて上限内で額を決定。

実装面では、勝率・上限・レイズ額を「テーブル化」して管理。
感覚ではなく、数値で戦略を共有・調整できる設計を重視しました。


開発体制と工夫

  • 短期開発に最適化された分業体制
    実装を自分が集約し、他メンバーは戦略立案や発表資料作成を担当。
    各自が得意分野に集中することで、限られた時間でも完成度を高めました。

  • テスト駆動による安定化
    drawCarddecideBetPoint の主要分岐を Jest で自動テスト化。
    実際の試合では再現しづらい状況も、テストで瞬時に再検証できる環境を構築。

  • 生成AIの活用
    コード補完やアルゴリズム整理に ChatGPT を活用。
    初めて触れるTypeScriptでも、開発を止めずに実装を進められました。


結果と評価

  • 4チーム中 2位+オーディエンス賞を受賞
    AIが安定した勝率を発揮し、戦略性と一貫性が高く評価されました。
  • 他チームの「爆発力重視型」と対照的に、
    “安定して勝率を伸ばす”AIとして存在感を示しました。

学びと気づき

  • 数値に基づくチーム設計の有効性
    パラメータを共有し、全員が“同じロジック”で議論できる環境は強力。
    理解コストを下げ、修正速度を大きく高めました。

  • 短期開発でも“形にする”面白さ
    実際にAIが強くなっていく過程を体感でき、
    自分の設計が勝率へ直結する喜びを味わいました。

  • 未知の要素を突破する力
    ポットオッズや勝率計算など初見の概念も、
    調査+実装+試行で“動く形”にできるという自信を得ました。


まとめ

初の1Weekハッカソンで、
**「限られた時間でも理論と工夫でAIを強くできる」**という実感を得ました。
チーム開発における役割分担、情報共有、論理的議論の重要性を学び、
今後の研究や開発でも活かしていきたいです。