概要
プリフロップにおけるポジション毎のVPIPの調整について一旦の説明をしたが、実際にプログラムを作ろうという段階で気になる問題が出てきてしまった。その問題と具体的な取り扱い、プログラム上でどう表現すればよいかについて考えたことをまとめておく。相変わらず試行錯誤的であり、悩ましいのであるが、NPCの行動アルゴリズムを考える上では考慮が必要と思われるので議論しておこう。
プレイヤーの数とVPIP
テキサスホールデムにおける標準的なルールでのVPIPは20~25%ぐらいであると言われるが、この20%という数値はおそらく参加しているプレイヤーの数が6人の場合の数値と思われる。もし、参加しているプレイヤーが2人であるならば、VPIP20%はあきらかにフォールドしすぎであり、2人の場合は60~70%のゲームで参戦可能であると言われる。このように考えると適正なVPIPは勝利確率に紐づいていると推測できるだろう、2人で対戦する場合は勝利確率が50%であるのに対して、6人の場合は16.67%であるから、その差異が適正なVPIPの水準に反映されていると考えることができる。
このように考えると、参加しているプレイヤーの人数を\(\small n\)と表すとき、適正なVPIPの水準を
\[ \small \text{VPIP}(n) = \frac{120}{n}\% \]
などと計算すれば、それっぽくなるかもしれない。現実には、参加人数が6人を超えるともう少しVPIPは高めであると推測されるため、
\[ \small \text{VPIP}(n) = \frac{120}{n-0.5\times\max\{n-6,0\}}\% \]
のような式で調整すると良いかもしれない。このときの\(\small n\)に対応するVPIPは以下の通りである。
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|
VPIP | 60% | 40% | 30% | 24% | 20% | 18.5% | 17.1% | 16% | 15% |
プレイヤーの行動をモデリングする際のパラメータとして、プレイヤー6人のときの平均VPIPを与えてそれを基準に人数ごとのVPIPを算出するようにすれば、任意の人数のゲームについてプレイヤーの行動をモデリングできるだろう。この基準になるVPIPのことをベースラインVPIPと呼ぶことにする。例えば、ベースラインVPIPを20%の代わりに25%(VPIPの計算式で120を150で置き換えた場合と等価)とすると
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|
VPIP | 75% | 50% | 37.5% | 30% | 25% | 23.1% | 21.4% | 20% | 18.8% |
のように計算できる。
加えて、プレイヤーの熟練度や好みに応じて、この参加人数に応じた参加率の調整が行われる程度が異なるものと推測できる。ありがちなのは、プレイヤーが2人しかいないのに手堅いレンジでのみ参加してフォールドしすぎてしまうということだろう。反対に、人数が多いゲームであるにもかかわらず参加率を高いままにしてしまうということもあるだろう。プレイヤーのこういった性質を反映するため、参加人数によるVPIPの調整度合いをコントロールするパラメータを導入しよう。テーブルファクター\(\small \tau\)ということにして、この値が1である場合は上記と同じ補正を行う一方で、0である場合は調整を行わない、0.5の場合は半分だけ調整を行うというように取り扱うことにする。すなわち
\[ \small \text{VPIP}(n, \tau) = \text{VPIP}(6) + \tau(\text{VPIP}(n)-\text{VPIP}(6)) \]
と計算する。例えば、ベースラインVPIPが25%の場合は
τ | n=2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
0 | 25% | 25% | 25% | 25% | 25% | 25% | 25% | 25% | 25% |
0.25 | 37.5% | 31.2% | 28.1% | 26.2% | 25% | 24.5% | 24.1% | 23.7% | 23.4% |
0.5 | 50% | 37.5% | 31.2% | 27.5% | 25% | 24% | 23.2% | 22.5% | 21.9% |
1 | 75% | 50% | 37.5% | 30% | 25% | 23.1% | 21.4% | 20% | 18.8% |
1.25 | 87.5% | 56.2% | 40.6% | 31.2% | 25% | 22.6% | 20.5% | 18.8% | 17.2% |
のように計算できる。ベースラインVPIPを高い値に設定する場合100%を超えてしまう場合もあるが、その場合は100%に丸めるか、テーブルファクターの値に上限を設ければよいだろう。NPCごとにベースラインVPIPとテーブルファクターを指定することで、テーブルの人数ごとにベット戦略を指定する必要性が無くなるだろう。
実際のゲームでは6人固定にするとか、9人固定にするとか人数を固定してしまえば、こういった考慮は不要であろうし、テーブルの人数ごとにNPCを作ってしまうという方法もある。上記のような簡略が良いのか、多少面倒でもNPCの設定データを増やして対応するかはゲームの性質次第かもしれない。筆者が最初に考えていたプレイヤーの人数が動的に変化するようなゲームではこのような対応が必要になりそうということである。
ポジション毎のVPIPと標準テーブル
プレイヤーの性質(Loose or Tight)を表すVPIPと参加人数による調整をベースラインVPIPとテーブルファクターで調整するということを説明した。現実には、同じプレイヤーであってもポジションによってVPIPが異なる。一般的には、BTNが最も有利なポジションであるため参加率が高くなる一方で、UTGなどプリフロップにおいて先に行動を決定を行うポジションは参加率が低くなるようにプレイされる傾向があるだろう。この参加率に関する比率について、以下のような比率を標準テーブルとして定義しよう(この値は現在の筆者の感覚で定義したものであり、将来的にはもっと理論的な精度を上げた数値に置き換えるかもしれない)。
n= | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
UTG | 0.5 | ||||||||
EP1 | 0.55 | 0.6 | |||||||
EP2 | 0.6 | 0.65 | 0.7 | ||||||
MP | 0.65 | 0.7 | 0.75 | 0.8 | |||||
LJ | 0.7 | 0.75 | 0.8 | 0.85 | 0.9 | ||||
HJ | 0.75 | 0.8 | 0.85 | 0.9 | 0.95 | 1 | |||
CO | 0.85 | 0.9 | 0.9 | 0.95 | 1 | 1.05 | 1.1 | ||
BTN | 1.2 | 1.3 | 1.4 | 1.55 | 1.65 | 1.75 | 1.85 | 1.9 | |
SB | 1.25 | 0.95 | 1 | 1.05 | 1.1 | 1.2 | 1.25 | 1.3 | 1.4 |
BB | 0.75 | 0.85 | 0.85 | 0.9 | 0.95 | 0.95 | 1 | 1.05 | 1.1 |
ベースラインVPIPとテーブルファクターから計算されたVPIPにこの標準テーブルの掛け目を掛けた値が、そのポジションにおけるNPCのVPIPになるということである。具体的に、ベースラインVPIPが20%、テーブルファクターが\(\small \tau=1\)であるときに各ポジションのVPIPは以下のように計算できる。
n= | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
UTG | 7.5% | ||||||||
EP1 | 8.8% | 9% | |||||||
EP2 | 10.3% | 10.4% | 10.5% | ||||||
MP | 12% | 12% | 12% | 12% | |||||
LJ | 14% | 13.8% | 13.7% | 13.6% | 13.5% | ||||
HJ | 18% | 16% | 15.7% | 15.4% | 15.2% | 15% | |||
CO | 25.5% | 21.6% | 18% | 17.5% | 17.1% | 16.8% | 16.5% | ||
BTN | 48% | 39% | 33.6% | 31% | 30.5% | 30% | 29.6% | 28.5% | |
SB | 75% | 38% | 30% | 25.2% | 22% | 22.1% | 21.4% | 20.8% | 21% |
BB | 45% | 34% | 25.5% | 21.6% | 19% | 17.5% | 17.1% | 16.8% | 16.5% |
Avg. | 60% | 40% | 30% | 24% | 20% | 18.5% | 17.1% | 16% | 15% |
テーブルファクター\(\small \tau\)と同様に、プレイヤーの熟練度や好みに応じて、このポジションに応じた参加率の調整が行われる程度も異なるものと推測できる。ポジションの影響を全く考慮しなかったり、反対にポジションの影響を受けすぎてしまったりという事象が生じる。プレイヤーのこういった性質を反映するため、ポジションによるVPIPの調整度合いをコントロールするパラメータを導入する。ポジションファクター\(\small \pi\)ということにして、この値が1である場合は標準テーブルと同じ補正を行う一方で、0である場合は調整を行わない、0.5の場合は半分だけ調整を行うというように取り扱うことにする。すなわち、テーブルファクターが\(\small \tau\)、ポジションファクターが\(\small \pi\)であるときのVPIPを
\[ \small \text{VPIP}(n, \tau, \pi) = \text{VPIP}(n, \tau, 0) + \pi(\text{VPIP}(n, \tau, 1)- \text{VPIP}(n, \tau, 0)) \]
と計算する。\(\small \text{VPIP}(n, \tau, 1)\)は標準テーブルのVPIPであり、\(\small \text{VPIP}(n, \tau, 0)\)はポジションの考慮を行わない場合のVPIPを表す。\(\small \pi\)は負の値を設定することもできる。本来、調整すべき方向と逆方向にVPIPを調整するということで、OOPの場合に参加率が上昇するようなプレイヤーも表現することができるだろう。100%を超える場合や0%を下回る場合は適宜丸め処理を行えばよいだろう。丸め処理を行った場合、各ポジションのVPIPの平均値を計算した値と元の平均値は一致しないことになるが、あまり重要ではないので特に気にしないことにする。
プレイヤーの戦略パラメータ
ここまでの議論から
- ベースラインVPIP \(\small \varphi\)(記号を定義していなかったが以下では\(\small \varphi\)にする)
- テーブルファクター \(\small \tau\)
- ポジションファクター \(\small \pi\)
で、様々なシチュエーションにおけるプレイヤーのVPIPを定めることができる。プレイヤーのプリフロップにおける行動モデルの投稿ではVPIPを直接指定していたが、これらのパラメータによって変化するVPIP毎のプリフロップ戦略を定められるように修正する必要がある。
例えば、VPIP20%の場合に
- 選好順位上位5%を3bet / 3bet
- 選好順位上位5-10%を2bet / 3bet
- 選好順位上位10-20%を2bet / 2bet
としていた場合に、VPIPを10%に調整したいという場合どのように調整すればよいだろうか?一つの方法は
- 選好順位上位5%を3bet / 3bet
- 選好順位上位5-10%を2bet / 3bet
と調整して、VPIPに満たない戦略を切り捨てる方法だろう。もう一つの方法は比率を調整するというものであり、
- 選好順位上位2.5%を3bet / 3bet
- 選好順位上位2.5-5%を2bet / 3bet
- 選好順位上位5-10%を2bet / 2bet
と調整する方法だろう。
現実にはいずれの調整方法も極端に見えるため、これらの間になるように調整していると推測される。具体的な調整方法として、戦略ファクター\(\small \sigma\)を定義して以下のように計算する。各戦略のレンジの大きい方のVPIPの値を\(\small \varphi_1,\varphi_2,\cdots,\varphi_m\)と表す。最もVPIPが高い戦略のVPIP\(\small \varphi_m\)を\(\small \hat{\varphi}\)に調整するのであるから、調整後の値を\(\small \hat{\varphi}_1,\hat{\varphi}_2,\cdots,\hat{\varphi}_m\)と表すと、\(\small \hat{\varphi}_m=\hat{\varphi}\)である。各戦略のVPIPは
\[ \small \hat{\varphi}_i = \varphi_i+\sigma\varphi_i \left(\frac{\hat{\varphi}}{\varphi_m}-1\right) \]
と計算することで調整できる。ただし、\(\small \hat{\varphi}_1 \leq\hat{\varphi}_2 \leq\cdots \leq\hat{\varphi}_m\)が成り立たなければならないことに注意する。
ここまでの内容を反映したNPCのハンドレンジを表現したツールを作成したので、以下にリンクを貼っておく。以上により、プレイヤーの人数と各ポジションに対して、すべての手札の戦略を定めることができることになる。
SBのリンプイン
ここまでの議論で、SBやBBのVPIPが低すぎるように感じた読者もいるかもしれない。実際は、10人プレイであっても、SBまでのすべてのプレイヤーがFoldを選択する確率が30%(6人では40%)ぐらいあるため、SBまですべてのプレイヤーがFoldした場合の戦略は上記の選択とは異なるものになるのが通常だろう。この場合、SBはそれほど強い手札でなくても、BBの手札が弱い可能性もあるため、ひとまずリンプインするという戦略が比較的有効である。具体的には、SBまでのプレイヤーがすべてFoldした場合、二人対戦の場合のテキサスホールデムと等価であるから、SBのVPIPは60~80%ぐらいに調整されることになる。したがって、SBのときのVPIPは上記のモデルの値より20~30%ぐらい高い水準が適切な水準になるだろう。BBについても、VPIPに計上されないが、SBのリンプインにコールしてフロップを開く比率が20~30%ぐらいあることになる。重要なのは、SBのリンプインを特殊処理として組み込んでおくことだろう(BBはフォールドの手札でも自動的にコールになるのでそのままでよい)。
一つの方法としては、二人対戦の場合のVPIPを流用して、その水準に一致するようにリンプインの手札を追加してしまう方法である。ただし、1bet/1betにするとBBがレイズした場合の反応が適切でなくなってしまうかもしれないため、BBのレイズのコールするか、フォールドするかも含めてレンジをしてしておく方が良いだろう。最終的にゲームに組み込む際はこれも要素として考慮する必要があることだけ書き留めておく。
応用
本稿のモデルの論点は、参加人数やポジションによってVPIPをどのように調整するかであった。これを実際のゲームに実装して、現実のプレイヤーのように行動するか確認したいが、通常のテキサスホールデムではフロップ以降のプレイもあるため、フロップ以降の行動モデルの考察も完了してから挙動を確かめることにする。代わりに、プリフロップでオールインするかフォールドするかの2択のゲームを考えて、参加人数やポジション毎の手札の選択がそれっぽく行われるかの確認ができるゲームを開発してみたい。次回以降、一旦このゲームの開発を進めてみよう。うまく出来れば、トーナメントにおけるショートスタック時のpush or holdの練習とかに使えるゲームになるかもしれない。