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,242