Texas Hold'em Poker AI

自己紹介


名前:津田伸秀
サイト:  http://vivi.dyndns.org/    twitter:vivisuke
facebook:https://www.facebook.com/nobuhide.tsuda
年齢不詳のおじさん、ぼちぼちソフト作家、自宅研究員(主席)
趣味:テニス、オセロ、思考ゲーム・パズル類
Qt/C++ 使い, webアプリ(PHP, JS, jQ, SQL)も出来るよ
Windows用テキストエディタ ViVi を延々開発中
パズルアプリ(Android・tmlib)も公開中だよ
最近は、世界最速「さくさくエディタ」 開発中だよ
迷走中、お仕事募集中でござるぞ

Texas Hold'em Poker

Poker

  • 5枚のカードで役を作り、優劣を決める
  • 役:
    • Straight Flush
    • 4 of a kind
    • Full House
    • Flush
    • Straight
    • 3 of a kind
    • 2 pair
    • 1pair
    • Hight Card

Texas Hold'em

  • poker のプレイ方法のひとつ
  • US カジノでは最もポピュラー
  • WSOP (世界大会) 優勝賞金:約8億円
    • (頭脳)スポーツとしては最も高額
  • AJPC (全日本)も開催されている
  • 日本ではマイナーだが、徐々にプレイヤー増加中
    • 前年比+50%で増加中という説もある

Texas Hold'em 詳細

  • 2枚のカードをプレイヤーに伏せて配る
    • Hole Card
  • 5枚のカードを場に表で配る
    • Community Cards
  • 各プレイヤーは合計7枚から5枚を選んで勝負
  • bet (賭け) : Fold/Check/Call/Raise
  • 1ゲーム:bet (賭け) は合計4回行われる
    • 場のカードが無い時 (Pre-Flop)
    • 場にカードが3枚ある時 (Flop)
    • 場にカードが4枚ある時 (Turn)
    • 場にカードが5枚ある時 (River)
  • 最後に最強だった人が場のチップを総取り
  • 複数回ゲームし、チップ額で優劣を決める

Texas Hold'em 特徴

  • 7スタッドと比べて必要枚数が少ない
    • 10人テーブルでも 5 + 20枚しか必要ない
    • 7スタッドは 70枚必要
  • コミュニティカードが共通
    • → 手の強弱に極端な差がつかない
    • 駆け引きが重要となる

Poker AI

Poker

  • チェス、オセロ、将棋等:
    • 2人ゼロ和有限確定完全情報ゲーム
  • バックギャモン
    • 2人ゼロ和有限確定完全情報ゲーム
  • Poker
    • N人ゼロ和有限不確定不完全情報ゲーム
  • 不確定不完全情報ゲームAI研究は発展途上
    • 基本的にCOMは全状態探索に強い
    • 場合の数が多いほど強いAI作成が困難

Poker AI


Progamming Poker AI

Progamming Poker AI

  • Hand Type
  • Hand Value
  • Hand Strength
  • Pot Odds
  • Rate of Return
  • Fold/Call/Raise Decision

Hand Type

  • 1ペア、フラッシュ等の役のこと
  • 役の強さの順に数値を割り当てる
  • enum {
        HIGH_CARD = 0,
    	ONE_PAIR,
    	TWO_PAIR,
    	THREE_OF_A_KIND,
    	STRAIGHT,
    	FLUSH,
    	FULL_HOUSE,
    	FOUR_OF_A_KIND,
    	STRAIGHT_FLUSH,
    	N_KIND_HAND,
    };

Hand Value

  • 同じ役でもカードランクにより強さが決まる
  • ランクも考慮した手札の強さを整数値化
  • 4 * 6 = 24 bit で表す
    • [Type][C1][C2][C3][C4][C5]

Hand Strength

  • 実際にゲームを行った時の勝率 [0, 1]
  • 手札だけでなく、何人テーブルかも重要
  • モンテカルロ法によりとりあえず計算可能
  • 実プレイヤーの行動傾向を折り込めばより正確
  • レイズ状況をどう織り込むかが問題

Pot Odds

  • PotOdds = bet / (pot + bet)
    • pot != 0
    • bet <<< pot ならば 0
    • bet >>> pos ならば 1
  • pot が $40 で、bet が $20 ならば
    • 20 / (40 + 20) = 0.3333...
  • 勝つ確率を p とすれば
    • exp = p*pot - (1-p)bet
    • exp == 0 となるのは
      • p = bet / (pot + bet)
  • ∴ HS ≧ PotOdds ならば賭けてよい

Rate of Return

  • RateOfReturn = HS / PotOdds
    • リターン割合の期待値
  • RR ≧ 1.0 ならば強気
  • RR < 1.0 ならば弱気

Fold/Call/Raise Decision

  • RateOfReturn を計算し、確率的に FCR を決める
  • If RR < 0.8 then 95% fold, 0 % call, 5% raise (bluff)If RR < 1.0 then 80%, fold 5% call, 15% raise (bluff)
    If RR <1.3 the 0% fold, 60% call, 40% raise
    Else (RR >= 1.3) 0% fold, 30% call, 70% raise
    If fold and amount to call is zero, then call.
  • Raise 額は 1BB
  • RR が大きければ額を増やす確率を増やす?

まとめ


まとめ

  • Progaramming Poker AI を参考にし、テキサスホールデムを実装してみた。
  • 細かい問題はあるが、それなりにうまくプレイしているように見える
  • プレイヤーの傾向を反映したプレイアウトなどで、HS 計算の精度を上げたい
  • パラメータ最適化を機械学習してみたい
  • 本方式以外のAIアルゴリズムも調査・研究してみたい

Texas Hold'em Poker AI

By Nobuhide Tsuda

Texas Hold'em Poker AI

  • 2,271