概要
前回に引き続き、プリフロップにおける行動モデルについて考察していく。本稿では、前回のモデルに以下のような構成要素を入れて拡張しよう。
- 混合戦略(同じ手札でも一定の確率でベット戦略を変える)
- ポジション毎のVPIPやベットサイズの調整
- スタックに応じた戦略の読み替え
- ブラフとオールイン
- アンティとレーキ
混合戦略の現実
君の頭脳は乱数を作り出せるようにはできていない
アンドリュー・ブロコス、”ポーカーとゲーム理論”
テキサスホールデムのような不完全情報ゲームでは、同じ状況であっても一定の確率で選択する行動を変えること(混合戦略)が最適な戦略になることがある。わかりやすい例はじゃんけんだろう。じゃんけんでは毎回同じ行動を選択すると、対戦相手に手がバレるため負けやすくなってしまうことになる。最も最適な戦略はグー・パー・チョキをランダムに確率1/3で選ぶことである。しかし、あなたはグー・パー・チョキを確率1/3で選ぶようにランダムに出せと言われて、その通り振舞うことができるだろうか?現実には、特定の手を多く出してしまっていたり、出す順番に系列相関があることがほとんどである。典型的には、前回出した手とは異なる手を出す確率が高めになってしまう傾向があるというものだろう。確率を1/3に近づけたいがために、グー・パー・チョキ・グー・パー・チョキ・・・のように循環した手の出し方を採用してしまうことも少なくないように思える。
コンピュータがやるように一様乱数を生成して、ランダムに行動を選択するということは人間にとって難しい意思決定方法であるということが分かるだろう。人間は作業の効率性を重視するために、ある程度行動を定型化してしまい、一定のパターンに従った行動をしてしまう傾向がある。ポーカーでも、オンラインポーカーでは混合戦略のために乱数をコンピュータ(ランダマイザー)で生成してプレイしているようなプレイヤーもいるようである。加えて、人間は嘘をつくときには身体的な特徴がどうしても出てしまう動物である。ポーカーではテル(癖)と言われるが、ブラフをしたりスロープレイをして対戦相手を罠に賭けようとする場合と、素直にバリューベットをする場合で行動に差が出てしまうことも少なくないようである。このように考えると、混合戦略を効果的に運用するということは相当に難しいことであるし、訓練が必要なことであるのかもしれない。
混合戦略の目的は対戦相手に自分の戦略を読まれないようにすることであるが、現実のポーカーのゲームでは対戦相手の戦略を覚えてプレイしているという状況はそれほど多くないのではないだろうか。有名人やRegularといわれる毎日同じカジノに通ってプレイしている人同士でプレイする以外は、対戦相手の戦略など想像しがたい部分があるだろう。数十ゲーム程度プレイしただけでは、相手の行動がそういう戦略なのか、偶然そういう行動をする手札が配られただけなのかを区別することが難しいように思える。オンラインのゲームや海外旅行ついでにカジノでプレイするプレイヤーなどは基本的に戦略が不明であるし、それが分かりそうな頃合いにはテーブルを離れてしまうということがほとんどだろう。このように考えると、混合戦略を用いることにどれほどの価値があるかは定かではない部分があるように思える。
反対に、現実にはほとんどの人間の頭脳は同じ状況で同じ行動を採用するということができるようにもできていないように思える。単純労働に従事する人たちがなぜ同じ作業を繰り返すことに忍耐するかというと、それに忍耐しなければ生活できないという状況に追いやられて管理されているからだろう。単純労働の現場というのはしばしばパワハラや暴力的な抑圧というのがある程度行われる環境にあると推測されるし、現代では監視カメラなどで常に監視されている状況で労働に従事することが基本である。また、そこで得られる収入というのは生きていける限界ギリギリに設定されていることがほとんどであろう。そういった状況にでも追い詰められない限り、人間は同じ状況において同じ行動をとるということが難しい動物であるということだろう。ポーカーやギャンブルのようにどちらかと言えば、そういった日常から解放されて行うゲームで、そういった規則に従った行動を期待することは適切な仮定ではないと言えるかもしれない。
以上のように、現実は意図的に混合戦略を運用するということはほとんどすべての人はできないし、反対に100%の純粋戦略というのもよほどの強制力がない限り人間にはできないということになる。多くのシチュエーションにおいて、そもそも混合戦略が有効な状況は生じ得ないし、特に意識しなくても同じ手札が配られたときに、どうせあなたは同じ行動を必ずしも採用していないという意味で勝手に混合戦略になっているというのが現実だろう。
GTOのような混合戦略や100%の純粋戦略は明らかに人間らしい意思決定ではないため、2ベットにとどめるか、3ベットするかで微妙な境界上にある手札について一定の確率でランダムな選択を選ぶという風に調整した方が良いかもしれない。その境界の曖昧さの程度が各プレイヤーの個性ということになるだろう。典型的には、タイトなレンジを持つプレイヤーは境界がはっきりしている傾向があるし、ルースなプレイヤーは同じ手札でも適当なアクションを選ぶ傾向があるような気がする。しかし、タイトだけど場当たり的、ルースだけどコントロールされているということも設定としては可能だろう。
- アルゴリズム的・・・規律に従うように訓練しており、手札に応じて必ず戦略通りの行動をとる。
- 真面目・・・手札のうち10%ぐらいは本来の行動と異なる行動をとるが、基本的には戦略通り行動する。
- 標準的・・・手札のうち20%ぐらいは本来の行動と異なる行動をとる。
- いい加減・・・手札のうち30%ぐらいは本来の行動と異なる行動をとる。
- 場当たり的・・・手札のうち50%ぐらいは本来の行動と異なる行動をとる。
具体的には、以下のような行動を行うように設定すればよいだろう。
- 3bet/3betの手札で、指定された確率分だけオープンレイズに対して3betせずコールする。
- 2bet/3betの手札で、指定された確率分の半分だけ3betする。(半分と書いたが、2bet/3betと3bet/3betの手札の組み合わせの比率分だけ3betするイメージ)
- 2bet/3bet、3bet/3betの手札で、3betで回ってきた場合に指定された確率分だけフォールドする。
- 2bet/2betの手札で、3betで回ってきた場合に指定された確率分だけコールする。(2.同様に2bet/2betと2bet/3bet+3bet/3betの手札の組み合わせの比率分だけコールする)
いずれもミスプレイといわれる行動に相当するかもしれないが、この比率を指定することで混合戦略を表現するということになる。注意が必要なのはアルゴリズム的なプレイヤーが強いわけではないし、場当たり的なプレイヤーが弱いわけでもないということである。中途半端な強さの手札で頻繁に3betされることがブラフの役割を果たすことも少なくない。実をいうと混合戦略とミスプレイは区別がつきづらく、意図的にミスプレイをするのが混合戦略であると言えるかもしれない。ブラフやスロープレイは手札の強さを正しく評価しないという意味ではミスプレイということになるが、不完全情報ゲームでは正しすぎることは正しくないし、間違いすぎることも正しくないということで、適切な頻度というのを選ばなければならないということだろう。上記のようなアルゴリズムはGTO的な混合戦略とは異なるかもしれないが、人間的な混合戦略にはなるかもしれない。
ちなみに、ChatGPTに混合戦略とミスプレイって差がないんじゃないのって聞いたら、”それは違うぞ、次のような違いがあるのだ”と回答された。
混合戦略 | ルールを守れない行動 | |
---|---|---|
定義 | 意図して確率的に行動を分ける | 本来の戦略を実行できず、ミスや感情により逸脱する |
目的 | 相手に読まれないための最適化手法 | 意図せず生じるエラーや感情的判断 |
統制 | コントロールされている | コントロールされていない(不安・迷い・惰性など) |
戦略的一貫性 | 数学的・理論的に設計されている | 一貫性がない(ランダムであっても exploitable) |
外側から見ていると、混合戦略なのかティルトしているのか区別がつかない場合もあるような気がするのだけど・・・直近で負けていて、やたら強気のベットを連発しているからティルってるのかと思ったら、手札に強いのが来てるだけだったなんてことも少なくないような気もして、結局区別できなくねえ?というのが筆者の正直な感想である。まあ、これは人読みの技術に依存するのかもしれない・・・
ポジションとプリフロップ戦略
ポーカーの本に当たり前のように書かれていることは、ポジションによってプリフロップでエントリーするハンドレンジを変えるべきということである。意思決定に順番があるため、一般的には意思決定が後の順番であるプレイヤーが有利になる。わかりづらいのは、プリフロップではUTG、MP、CO、BTN、SB、BBという順番になるのに対して、フロップ以降はSB、BB、UTG、MP、CO、BTNになるということである。プリフロップ段階ではSB、BBが有利であるが、フロップ以降はSB、BBは不利な位置に変わることになる。総合的にはUTGやSBが不利なポジションであり、CO、BTNが有利なポジションであると言われる。
プレイヤーが6人の場合で適切なVPIPは大体以下の範囲であると言われる(VPIPの平均が25%ぐらいなので、VPIPが20%の場合は下記表の数値の8割掛けぐらいの数値である)。
Position | VPIP (Open Raise) | VPIP (3Bet) |
---|---|---|
UTG | 15~18% | — |
MP | 18~22% | 2~3% (AK, QQ+) |
CO | 22~26% | 3% (AK, AQs, JJ+) |
BTN | 35~45% | 5% (AQ+, TT+) |
SB | 30~40% | 7~8% (AQ+, JJ+, Axs, KJs+) |
BB | 20~25% | 2~3% (AK, QQ+) |
SBは必然的にフロップ以降OOPになるため、かなり広範囲で3ベットを打つことになるらしい。SBはフロップ以降のプレイが不利になるため、プリフロップでゲームを終わらせたいという願望が他のポジションより強くなる。そのため、SBやBBから3ベットを打つ場合は倍率を4倍(他のポジションでは3倍)にするなど、より他のプレイヤーをフォールドさせることを意識したアクションが取られることが多いようである。BBはBTNやSBがリンプして入る場合VPIPにカウントされない(追加のチップを支払わない)ため、VPIPが低く見えるが実際には半分近くのゲームでフロップに参加することになるだろう。ここでのVPIPはレイズに対してコールして参加する、もしくは、自分がレイズして参加する比率が20~25%ということになる。
ここまで、ハンドレンジを指定するVPIPは1つの値にしてきたが、現実にはポジションごとにVPIPを指定してハンドレンジを変える必要がある。これは平均的なVPIPに対して各ポジションごとで掛け目を掛けることで表現すればよいだろう。ポジションを気にするタイプとポジションを気にしないタイプでパラメータを指定すればよい。例えば、以下のような掛け目を用意してプレイヤーごとに設定すればよいだろう。左の値が2betの掛け目、右の値が3betの掛け目である。
ポジション | 無視 | 考慮あり | 標準的 | 重視 | 偏重 |
---|---|---|---|---|---|
UTG | 1, 1 | 0.825, — | 0.65, — | 0.475, — | 0.3, — |
MP | 1, 1 | 0.900, 0.75 | 0.80, 0.50 | 0.700, 0.25 | 0.6, 0 |
CO | 1, 1 | 0.975, 0.875 | 0.95, 0.75 | 0.925, 0.625 | 0.9, 0.5 |
BTN | 1, 1 | 1.250, 1.125 | 1.50, 1.25 | 1.750, 1.375 | 2, 1.5 |
SB | 1, 1 | 1.125, 1.375 | 1.25, 1.75 | 1.375, 2.125 | 1.5, 2.5 |
BB | 1, 1 | 0.925, 0.875 | 0.85, 0.75 | 0.775, 0.625 | 0.7, 0.5 |
また、本来であれば自分からレイズする場合だけでなく、レイズされた場合にコールするかフォールドするかの範囲も変えるべきだろう。能動的にベットする場合と受動的にコールする場合で比率を変えてもよいかもしれない。ベットする場合は標準的だけど、コールする場合はポジション考慮しないみたいなプレイヤーもありえそうだろう。その他のバリュエーションとして、UTGが好きでUTGのVPIPが高いとか、SBが好きでSBだとエントリー率が高いなど、プレイヤーの好みを反映した比率のセットなどを用意してもよいかもしれない。この辺りは実際に開発する際に考えようかと思う。
スタックとプリフロップオールイン戦略
エムホールデムの攻略方法の記事で、スタックが深い場合プリフロップのアクションが弱くなるということを述べたが、反対にスタックが浅くなるほどプリフロップのアクションは強くすべきとなる。大体スタックが10bbを下回ると、FoldかAll-inかの二択になってしまうことが通常だろう。スタックが20bbだと、3betで半分ぐらいのチップを賭けてしまうことになるため、2betの後にレイズする場合はAll-inになることが多いだろう。これらを行動に反映するためには、レイズするとスタックの一定比率(例えば30~40%)を超えてしまう場合、レイズをオールインに読み替えるという形式で実装すればよいだろう。
スタックが30bb以上ある場合は、AAやKKを除けば、プリフロップからオールインすることは合理的ではないかもしれないが、それにもかかわらずプリフロップからオールインする場合も現実にはあるだろう。これは以下のパターンで分けられるかもしれない。
- 強いハンドを持っているプレイヤーからコールをもらいたい場合(AA,KK,QQ,AKなどを持っている場合)
- 強いハンドを持っているプレイヤー1人だけからコールをもらいたい場合(JJ以下のポケットペア)
- 対戦相手全員にフォールドしてもらいたい場合
- 直近で大きくチップを失った(反対に大きく獲得した)ため、ギャンブルに出る場合
1.のパターンは3bet/3betの手札の場合に一定の確率でオールインするという風に実装すればよいだろう。堅実なプレイヤーであればこの確率は低く設定すればよいし、ギャンブラー的なプレイヤーは高めに設定するということになる。
2.のパターンはポケットペアについて選好順位の高いプレイヤーについて、やはり一定の確率でオールインするという風に実装するイメージだろうか。低ランクのポケットペアは複数のプレイヤーにコールされると弱いため、フォールドしていないプレイヤーが少ないときに確率が高くなるように調整すると良いだろう。3.はBTNやSB、BBのときにプレイヤーが2bet以下で3人以上コールしていたり、ポットに投入されるチップが一定以上貯まった場合にやはり一定の確率でオールインするという設定になるかもしれない。4.はプレイヤーごとにティルトパラメータみたいなのを持っておいて、チップを失った場合や大きく獲得した場合に蓄積していくようにして、一定値を超えると何回か(3回ぐらい?)のゲームでギャンブルでオールインを連発するようになるみたいな設計が良いかもしれない。数回オールインした後はティルトパラメータをリセットするという感じで運用すると現実性が増すかもしれない。
まとめると、以下のファクターを集計してオールイン確率を計算、オールインにヒットしたら戦略にかかわらずオールインするという風に実装すればよいだろう。
- 残スタックによるオールイン確率(コールにとどめるか、オールインするかの比率)
- 手札毎(もしくはベット戦略毎)のオールイン確率
- フォールドしていないプレイヤーの数によるオールイン確率調整項(手札によって影響の有無がある)
- すでにベットされているチップの量によるオールイン確率調整項(スティールパラメータ)
- ティルトパラメータによるオールイン確率調整(手札によらずオールインするパラメータ)
各調整項の大きさはプレイヤーの特徴(強いハンドでオールインを好むか、スティールを頻繁に仕掛けるか、ティルトしやすいか)毎に設定できるようにすればよいだろう。
レーキとアンティ
以前の投稿で、アンティがある場合は0.1bb当たり4%ぐらいVPIPを上げるように調整するということを述べた。また、レーキがある場合はいかのようにVPIPを調整すればよいだろう。
レーキ | VPIP |
---|---|
レーキ5%, キャップ無し | 3~5%下げる |
レーキ2.5% or キャップあり(1bb, 2bbなど) | 1~2%下げる |
レーキなし | そのまま |
同一のゲーム内でアンティやレーキのルールを変更するということはふつうないと思われるため、最初から調整したVPIPをプレイヤーのデータに設定するか、プレイヤーのデータはアンティ・レーキ無しで設定しておいて、パラメータ調整するかのいずれかを選択すればよいだろう。
まとめ
ひとまず、プリフロップのプレイヤーモデルで考慮すべき項目は洗い出せたのではないだろうか。あとは実際に作ってみて試してみるしかないかもしれない。これはなるべく近いうちに実装してみようと思う。といいながら、最近Counterfactual Regret Minimizationが理解できた気がしたので、次回以降はこちらの内容を書いていこうかと思う。