見出し画像

ソルバーが表示するアクションごとのEVの読み方

note初投稿だった前回の記事「ソルバー開発者がGTO戦略という用語の濫用に物申す」ですが、ツイッターなどでも概ね好評に受け止めていただけたようで、記事自体にも170を超えるスキをいただけるなど想像を上回る反響をいただくことができました。時間を割いて記事を読んでくださった方全員に感謝していますが、特にサポートやスキをしてくださった方、記事を拡散してくださった方、感想を書いてくださった方、本当にありがとうございます!

筆者をフォローしてくださった方も何人かいらっしゃり、そうなっては前回の記事だけの一発屋になるのはもったいないだろうということで、2本目の記事をお届けしたいと思います。前回の記事のようなスケール感のネタはそうポンポン書けるものでもないので(実はアイデアが固まってからは2日で書き切ったのですが)、今回は小ネタでいこうと思います。

その内容はタイトルにもありますが「ソルバーが表示するアクションごとのEVの読み方」です。ソルバーを自分では回さないよという方でも、ソルバーに基づく何らかのソリューションを閲覧した経験のある方ならアクションごとのEVと言えばすぐに伝わるのではないかと思います。特にソルバー戦略を模倣するトレーニングアプリを使った経験のある方は、自分の選択したアクションのEVを確認した(させられた)ことが必ずあるでしょう。

PioSOLVERの「3betpotFAST」プリセットをベースに、オールインへの置き換えを含むベット額の調整オプションをすべて切った条件で揃えた上で、特定のスポット(OOPがフロップでベット94した直後の状況)のアクションごとのEVを、自作ソルバー、PioSOLVER、GTO+の3種類のソルバーに表示させた結果が次の画像です。

左から自作ソルバー/PioSOLVER/GTO+の計算結果。
レイズ260/コール/フォールドの3択の状況を想定。
赤枠で囲った部分がアクションごとのEV。
いずれも許容する exploitability は 0.05% に指定。

GTO+の結果は見切れてしまっていますが、どうやらこのスポットではAAを持っているときは100%コールが正解(どのソルバーも緑色が100%の領域を占めています)のようです。しかし、レイズのEVはコールのEVと比べてごくわずかしか劣っておらず、例えばPioSOLVERはAsAdでのレイズとコールのEVの差は 0.03 であるとも言っています。それならレイズも大きなミスプレイでは無いのではと思う方がいても仕方ないように思いますが、そこには罠が仕込まれていますよというのが今回伝えたい内容になります。座学上級者の方も「CFRアルゴリズムはサボる」の節だけでも見ていっていただけると嬉しいです。

アクション単体に対してEVは本来定義できない

さていきなり身も蓋もない話をすると、ポーカーのように不完全情報ゲームに分類されるゲームにおいては、アクション単体に対して評価値を定義することは本来できません

オセロ将棋といったようなすべてのプレイヤーがすべての情報にアクセスできる完全情報ゲームにおいては、アクションの良し悪しを定義することができます。例えばオセロにおいて初期盤面から黒番がf5に打ったとすると、白番にはd6、f4、f6という3つの選択肢が与えられます。ここでお互いが最善を尽くした場合、d6かf6に打つと引き分け、f4に打つと白番は6石差で負けるといったような厳然たる評価値が神の視点からは定まるのです。

ところが不完全情報ゲームの場合はそのようにはいきません。不完全情報ゲームの代表例として二人じゃんけんを考えてみましょう。二人じゃんけんにおけるグーというアクションの評価値って何でしょうか。そんなの相手によるとしか言いようがありませんし、こちらが必ずグーを出すとすると相手が最善を尽くすと必ず負け? でもそんなこと言ったらチョキパーも必ず負けじゃない? とか意味の分からないことになってしまいますよね。

つまり不完全情報ゲームにおいて良し悪しが評価できるのは「戦略」なのであって、アクション単体では良し悪しを評価できないのです。例えば「グーとチョキとパーを等確率で出す戦略」に関してであれば、どのような相手であっても期待値的に負け越すことはないなどといった評価ができます(勝ち越すこともありませんが)。先ほどの「グーもチョキもパーも相手が最善を尽くすと必ず負け?」というのも、「グー or チョキ or パーを必ず出す純粋戦略」を評価したためにそのような結論となってしまったわけです。

このあたりで話をEVに戻しましょう。EVもアクション単体に対して定義することは本来は不可能で、プレイヤー全員の戦略が定まって初めて計算することができる値です。

それではソルバーが表示するアクションごとのEVとは何なのかというと、

  • すべてのプレイヤーがソルバー戦略に従っているもとで、

  • アクションを起こすプレイヤーに特定のハンドが配られていたとき、

  • 今だけ特定のある1つのアクションのみを取る純粋戦略に変更した

ような場合のEVを計算したものということになります。読み流されては困るのでもう一度強調しますが、ソルバーは戦略を変更した場合のEVをアクションごとのEVとして便宜的に表示しているのです。

ソルバーは最適な戦略を模索するとき、相手の戦略を搾取しようと試みると同時に、自分の戦略が相手に搾取され得ないように細心の注意を払ってアクションの頻度を割り振っています。ですから、アクションごとのEVの計算のために変更された戦略は、絶妙なバランスのもとに成り立っているソルバー戦略を崩しかねないもので、往々にして相手に搾取され得てしまいます。

よって、特にソルバー戦略が取らないアクションのEVが実用的かどうかというのは正直怪しくて、「こちらがソルバー戦略から外れていることが明らかなのにソルバー戦略を採用し続けてくれる相手」にのみ通用するものであることに注意する必要があります。ソルバー戦略が取らないアクションを取るということはリークになり得ますから、実際には相手にエクスプロイトされてしまう可能性があるわけです。

なお、ソルバー戦略が取り得るアクションのみを取る場合でも、混合戦略の頻度がソルバー戦略から外れている場合、その検出は難しくなりますがリークになり得ることに変わりはありません。

ナッシュ均衡のもとでの混合戦略のアクションのEV

ソルバー戦略が取らないアクションのEVの実用性は微妙という主張をしましたが、ソルバー戦略が取り得るアクションのEVについてはどうでしょうか。あるハンドを持っているときにソルバー戦略が取り得るアクションが1つの場合、すなわちソルバー戦略が純粋戦略となっている場合は、そのハンドのEVと完全に一致するためこれは有用な値と言えるでしょう。

問題はソルバー戦略が取り得るアクションが2つ以上の場合です。ところがよく考えると、実はナッシュ均衡のもとでは混合戦略が取り得るアクションのEVはすべて等しい値になるということが言えます。ですから、ソルバー戦略の組がナッシュ均衡ならばという条件はつきますが、ソルバー戦略が取り得るアクションのEVはやはりそのハンドのEVと完全に一致します。

ただ、前回の記事でGTOソルバーは厳密解を得られないと指摘したように、二人ゼロサムの条件であっても実際にはソルバー戦略の組は完全なナッシュ均衡とはなっていません。そのため、フォールドのEVは必ずゼロなのに、負のEVとなっているコールを特定の頻度で選択するなどといったことがよく起こります。

このような現象を見て「EVが負のコールは選択すべきではなく必ずフォールドすべき」などと考えるのは誤解です。ソルバーをより長時間回せば、コールのEVが正になってコールの純粋戦略に変化するかもしれませんし、コールのEVは負のままでフォールドの純粋戦略に変化するかもしれませんし、あるいはコールのEVがゼロになって混合戦略が維持されるかもしれません。少なくとも、EVが負のコールを特定の頻度で選択するのは相手に搾取され得ない戦略をソルバーが模索した結果なのであって、安易にEVが高い戦略を選べば良いというものではありません。

アクションごとのEVというのは、ソルバー戦略が十分に収束するまではその収束過程に左右されやすく、それなりの誤差を抱えているものとして考えた方が良いように思います。

異なる均衡ではハンドごとのEVは異なり得る

(追記: 本節は当初はハンドごとのEVが一致していないのは収束が不十分であるためだと主張する内容でしたが、そもそもの前提が誤っていたために内容を変更しています)

ところで、自作ソルバー、PioSOLVER、GTO+の3種類のソルバーに特定のスポットのアクションごとのEVを表示させた結果の画像をちゃんと見てみると、概ね近い値ではあるもののそもそもハンドごとのEV(=ここではコールのEV)が微妙に一致していないことが見て取れます。

これについては、計算結果が十分に収束していないためというのも理由の一つに挙げられますが、異なるナッシュ均衡においてはハンドごとのEVが一致することがそもそも保証されないという問題も関係している可能性があります。前回の記事で紹介したように、レンジ全体での利得の期待値はすべてのGTO戦略で共通していますが、ハンドごとの利得の期待値については異なり得るということです。

相手のGTO戦略を固定した条件では、自分のすべてのGTO戦略におけるハンドごとのEVは一致します。しかし、筆者は当初この点について勘違いしていたのですが、相手がGTO戦略を変更すると自分のハンドごとのEVは変化する場合があります。ツイッターで複数の方からご指摘をいただき修正いたしました、本当にありがとうございます。

CFRアルゴリズムはサボる

さて、ここまでの内容は正直な話をすると、知っている人は知っているような内容であって特に目新しさはありませんでした。ある意味ここからが本記事の本題で、これも気付いている方は何となく気付いている内容かもしれませんが、レンジ全体での頻度が0%であるアクションのEVはまったく無価値であるという主張をしていきたいと思います。

後出しの情報で恐縮なのですが、実は画像で紹介したスポットにおけるレイズの頻度はレンジ全体で0%になっていたのでした。ソルバー戦略がレイズをまったく行わない以上、そのアクションのEVがアテにならなかったとしても不思議ではないよねという感覚の方も少なくないとは思いますが、ソルバー開発者としてその理由をちゃんと説明していきましょう。

前回の記事でGTOソルバーの大黒柱はCFRアルゴリズムであると述べましたが、そのCFRとは counterfactual regret (minimization) の略で、ここでキーワードとなるのは日本語で「後悔」を意味する regret という単語です。

これもまた前回の記事で述べましたが、CFRアルゴリズムは反復解法であって、解の近似を徐々に改善していくアルゴリズムです。雰囲気をつかんでもらうために正確でない表現をしますが、実はCFRアルゴリズムにはアクションごとのEVが本質的に関わっていて、現在の時刻における戦略のEVを超えるEVのアクションがあったら「そのアクションをもっと取れば良かったという後悔」を蓄積させて、以降の時刻に活かすような枠組みになっています。

いま、手番がIPであるような特定のスポットにおけるソルバー戦略のレイズ頻度がレンジ全体で0%であるとしましょう。それでも、各時刻においてIPはレイズというアクションを取らなかったことに対して後悔が無いかどうかをきちんと確認します。

そのため、実際にはIPのレイズ率は0%であるにも関わらず、IPがレイズした後の状況に対してOOPも何らかの戦略を用意しなければなりません。ここで、重要な観察が2点あります。

  • IPはレイズというアクションのEVを確認するときのみレイズを行う。ここで、アクションのEVというのは「特定のハンドが配られていたとき、今だけそのアクションのみを取る純粋戦略に変更した」場合におけるEVであった。つまりOOPは、IPに個々のハンドが配られていた条件でレイズしてくる状況に対してそれを咎める戦略を用意することになる。

  • OOPは、レイズというアクションのEVを確認しにきたIPに対して、常にIPを後悔させずにやはりレイズは駄目だったと思わせることができれば、IPは十分に合理的なので以降の時刻においてもレイズを選択しない。

このうち、より重要なのは2点目の方でしょう。OOPがなすべき仕事はIPを後悔させないことであって、それがいかに微差であっても、後悔さえさせなければIPは将来にわたってレイズを選択することは無いのです。そしてその仕事が達成された場合、どうせIPはレイズを選択してこないのですから、その微差をなるべく大きな差に広げるインセンティブはOOPにはありません

最初にお見せした画像のような「一見してレイズのEVがコールのEVと比べてごくわずかしか劣らない」という状況は、このような背景のもとに成り立っていたわけです。レイズが大きなミスプレイでは無いように思えたのは、相手が別ゲーをしていて本気を出していなかったからだったのですね。

最後に、IPのレイズに対するOOPの戦略の取り方には任意性があり、IPのレイズのEVがソルバー間で異なっている、すなわち役に立たない値であることを実際に示したいと思います。今度は許容する exploitability を 0.01% にまで追い込んだ上で、AToとA9oでのアクションごとのEVを自作ソルバーとPioSOLVERの2種類のソルバーに算出させた結果を比較できる画像を用意しましたのでご覧ください。

AToにおける自作ソルバーとPioSOLVERの比較。
許容する exploitability は 0.01% に指定。
コールのEVは完璧に一致する一方、自作ソルバーはレイズのEVを高めに見積もっている。
A9oにおける自作ソルバーとPioSOLVERの比較。
こちらもコールのEVはほぼ一致する一方、今度はPioSOLVERがレイズのEVを高めに見積もる。
取り得るアクションはフォールドのみであるが、コールのEVが一致している点に注意。
IPのレイズに対するOOPの戦略 (PioSOLVER)。
取り得るアクションのEVは一致するというGTO戦略の原則に当てはまらないことが見て取れる。

終わりに

今回は小ネタでいこうと思いますとか言っておきながら6,000字を超す内容になってしまいました。終わりに本記事の要旨を箇条書きでまとめて結びとすることにしましょう。

  • EVはプレイヤー全員の戦略が定まって初めて計算できるようになる。

  • アクションのEVとは、前提としている戦略はそのままに、今だけそのアクションのみを取る純粋戦略に変更したときのEVのことを指す。

  • 相手がこちらの戦略の変更に気付いた場合、実際には相手にエクスプロイトされてしまう可能性がある。

  • ナッシュ均衡のもとでは、混合戦略が取り得る複数のアクションのEVは一致する。

  • ソルバー戦略が十分に収束していない場合は、アクションごとのEVはそれなりに計算誤差が生じる。

  • 異なるナッシュ均衡においてはハンドごとのEVはそもそも一致することが保証されない。

  • レンジ全体での頻度が0%であるようなアクションのEVについては、CFRアルゴリズムは意味のある値をもたらさない。

この記事が気に入ったらサポートをしてみませんか?