※ChatGPT画伯作、”A massive, impenetrable fortress built on a rocky cliff, surrounded by towering stone walls with iron gates.”
NITのNPCモデル
一旦は期待効用関数に基づいてテキサスホールデムのNPCプレイヤーを実装したものの、やはり人間のプレイヤーの挙動とは明らかに異なっているし、ブラフをうまく活用するように実装すべきだろう。いくつかのプレイヤータイプについて特徴を述べてきたが、最も実装が簡単そうにみえるのがNIT(ナイト)というプレイヤータイプである。頭に超が付くほどタイトなプレイヤーであると同時に、非常に憶病なプレイスタイルという意味でパッシブなプレイスタイルであると言える。ブラフもほとんど用いることがないため、プログラムによる実装が比較的容易である。アルゴリズムについて考察すると同時に、試しに実装してみようというのが本稿の趣旨である。ただ、おそらくテーブルのプレイヤーが全員NITである場合はそもそもゲームが成立し得ない可能性もあるので読者 vs. NIT8人みたいな感じでゲームを実装してみようかと思う。君は生き延びることができるか?(ガンダム風)
NITのベット戦略
プリフロップにおけるNITの行動パターンは以下の通りと推測する。
- ハンドレンジはAA,KK,QQ,AKs,AKoのいずれかであり、それ以外はフォールドする。混合戦略は用いない。
- ファーストレイザーの場合は一律で3倍を選択する。セカンドレイザーの場合は3-betして3倍を選択する。ファーストレイズで3-betレンジ以上である場合はコールを選択する。
- 一度エントリーしたら他のプレイヤーがレイズしても基本的にフォールドせず、3-betより上のレイズにはコールを選択する。
この通り実装すれば、NITのプリフロップ戦略は問題ないだろう。フロップ、ターンにおける戦略は以下の通りである。
- フロップで、(AKの場合のみ)ワンペア以上の役が出来ない場合はチェックorフォールド(レイズされたらフォールドする)を選択する。ターンでも同様である。
- 共通カードで自分がストレートにならないストレートドロー(オープンエンド、ガットショット)がある場合、自分がフラッシュ、もしくはフラッシュドローにならないバックドアフラッシュドローがある場合チェックorフォールドを選択する。
- 1.2.の状況に該当しない場合はポット50%のCBを打つ(ドンクベットはしないこととする。)。他のプレイヤーがレイズした場合はコールを選択する。
リバーにおける戦略は次の通りである。
- ワンペア以上の役が出来てない場合はチェックorフォールドする。
- 共通カードで自分がストレートにならないストレートドロー(オープンエンド、ガットショット)がある場合、自分がフラッシュにならないフラッシュドローやバックドアフラッシュドローがある場合チェックorフォールドを選択する。
- 1.2.の状況に該当しない場合はポット100%のCBを打つ。他のプレイヤーがレイズした場合はコールを選択する。
改良案
いやさすがにそれはプリフロップでレイズしてきたらフォールドすればいいだけだろ、あとはブラインドスティールし放題じゃね?となりそうなので、もう少し改良案を考えてみよう。
- ミドルペア(JJ,TT,99,88,77)、高ランク(AQo,AQs,AJs,ATs,KQs)の場合にも一定の確率(50%)でAA,KKなどの場合と同様のベットを行うようにする。
- SBやBBなどブラインドがあるポジションでは、ブラインド分だけ割り引いた勝利確率の手札についてもAA,KKなどの場合と同様のベットを行うようにする。ミドルペア(JJ,TT,99,88,77)、高ランク(AQo,AQs,AJs,ATs,KQs)を確定でレイズするようにするなど。
- フロップ、ターンでペアや役ができていなくても、オープンエンド、フラッシュドローが完成している場合、ペアができているのと同様にCBをベットするようにする(セミブラフを実行する)。リバーでのブラフは基本的にしない(滑った場合は素直にチェックorフォールドする)。
ルールが決まっているプレイであるし他のプレイヤーの手札を予想してこないが、ここまでやると倒すのが難しくなってくるのではないだろうか。比較的強いタイトパッシブなプレイヤー感がうまく出ていればよいが・・・リバーでの戦略が固定されているしまうのは難しいが、最初から手札が強いためポラライズとかしづらい気がするのである。やるのであれば、ストレートドロー、フラッシュドローが滑ったハイカードでも1/4ぐらいの確率でオールインする(ピュアブラフする)とかだろうか。ただ、ここまでやると、もはやNITではない感が出てしまうかもしれない。ひとまず、元のNITと改良版のNITを実装してみたので、倒してみてはどうだろうか?(勝てないかもしれないけど)