次の段階はオールインを削除することではなく、正当な場面と不当な場面を学習・評価で区別することだ。まず固定のtight/exploitativeヒューリスティック相手を置く。早いオールインには弱手をフォールドし、強度とポットオッズが合えばコール、序盤は小さくベットする。ただし強いハンドや妥当なSPRなら終盤の正当なオールインも行う。

相手から評価指標までの実験再設計
相手から評価指標までの実験再設計

既存コードには次のガードがある。

src/model.cppcpp · 2行
const bool earlyShove = learned == ActType::AllIn &&
    (observation.street < 4 || strength < prior_.allInAbove);

危険行動を検知し別選択へ誘導するcontainmentであり、表面上の事故を抑えるには役立つ。しかし内部の価値推定や信用割当は直さない。ガード有効時の結果だけで学習方針が改善したとは言えない。

固定ヒューリスティックを使う学習と回帰テストの循環
固定ヒューリスティックを使う学習と回帰テストの循環

学習相手は一人に限定しない。tight、balanced、looseのヒューリスティックと過去モデルのスナップショットを混ぜ、座席と対戦をランダム化する。固定の攻略相手は回帰テストに残す。特定相手を暗記した方針と、多様なスタイルで耐える方針を区別できる。

報酬はクリップした勝敗ではなく、スタック成長率または対数収益を中心にする。破産には独立したペナルティを置き、根拠なく序盤に全スタックをさらすリスクにも緩やかな罰を与える。強い終盤オールインは罰しない。行動・ストリート別advantageや中間価値で信用を細かく配る。

複数のランダムシードで最低1,000ハンドを評価し、ストリート別オールイン率、実行時の平均強度、破産・フォールド率、1,000ハンドの中央値スタックを記録する。平均だけでは稀な破産を隠すため、分布と不確実性も残す。

オールイン品質とスタック生存の評価画面
オールイン品質とスタック生存の評価画面

成功はオールインをゼロにすることではない。弱い序盤オールインが減り、妥当な終盤オールインは残り、相手構成が変わっても中央値スタックと生存性が改善することだ。ガードを外しても改善が残って初めて、方針自体が良くなったと言える。