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」を許容し、過剰な降り癖を防止。
- 許容上限(役別の支払い上限%)を設け、無謀なベットを制御。
- レイズ判断:
勝率が高い時や強役の時にのみレイズ。状況補正を掛けて上限内で額を決定。
実装面では、勝率・上限・レイズ額を「テーブル化」して管理。
感覚ではなく、数値で戦略を共有・調整できる設計を重視しました。
開発体制と工夫
-
短期開発に最適化された分業体制
実装を自分が集約し、他メンバーは戦略立案や発表資料作成を担当。
各自が得意分野に集中することで、限られた時間でも完成度を高めました。 -
テスト駆動による安定化
drawCardとdecideBetPointの主要分岐を Jest で自動テスト化。
実際の試合では再現しづらい状況も、テストで瞬時に再検証できる環境を構築。 -
生成AIの活用
コード補完やアルゴリズム整理に ChatGPT を活用。
初めて触れるTypeScriptでも、開発を止めずに実装を進められました。
結果と評価
- 4チーム中 2位+オーディエンス賞を受賞
AIが安定した勝率を発揮し、戦略性と一貫性が高く評価されました。 - 他チームの「爆発力重視型」と対照的に、
“安定して勝率を伸ばす”AIとして存在感を示しました。
学びと気づき
-
数値に基づくチーム設計の有効性
パラメータを共有し、全員が“同じロジック”で議論できる環境は強力。
理解コストを下げ、修正速度を大きく高めました。 -
短期開発でも“形にする”面白さ
実際にAIが強くなっていく過程を体感でき、
自分の設計が勝率へ直結する喜びを味わいました。 -
未知の要素を突破する力
ポットオッズや勝率計算など初見の概念も、
調査+実装+試行で“動く形”にできるという自信を得ました。
まとめ
初の1Weekハッカソンで、
**「限られた時間でも理論と工夫でAIを強くできる」**という実感を得ました。
チーム開発における役割分担、情報共有、論理的議論の重要性を学び、
今後の研究や開発でも活かしていきたいです。