統計は冷酷だ

ポーカー、ゲーム、サッカーなどについて考えていきたい。自分の為にもブログを更新していこうと思う。

始めの挨拶みたいな

どうもこんにちは

ポーカー、ゲーム、サッカーとかについて思うことを書いていこうと思います。
現在22歳です多分

pokerstarsではtakoagematというIDでpokerしてます。
2016年にpokerを初めて知ったみたいです。(pokerstarsで始めたのが2016年夏でした。)

ポーカー勢の友達もいないのでブログでも書いてみることにしました
もし、コメントとかあったら気軽にして欲しいです。
絡んでくれる人いたらtwitterのDMとかくれると嬉しいです笑

最近ポーカー界隈にも頭いい人たくさん出現してきた気がするのでそうゆうのが敷居たかそうに感じる人とかはぜひ待ってます笑

簡易化したリバーのGTOに関しての考察①

どうもこんにちは
ここではThe Mathematics of PokerのChapter11の[0,1]game#2についてpiosolverの解析を含めて考察していきます。
結構長くなっちゃいました。
自分はこれ理解するのにかなり10時間ぐらいかかった気がするので皆さんにはそれをできるだけ効率的に理解してもらえたらと思います笑

まず[0,1]gameとはお互いのハンドの強さを[0,1]の実数で表すpokerのモデル化です。
[0,1]は0以上1以下の実数の閉区間です。
0に近い実数ほど強いハンドだとします。

今回の考察するモデルはお互い同じレンジを持ってリバーにいき、OOPは強制check、IPがbetかcheckを選択でき、IPのbetに対してOOPはcall or foldのみができます。
OOPがcheck-raiseすることができません。
potの大きさをPとし、ベットサイズは1のみとします。

随分pokerに比べて簡素なゲームだなあと思うかもしれませんがこれだけでも初めてみると難しいと自分は感じました。

①数学的にGTOを解く
②piosolverでもGTOを解いてみる
③その結果について感覚と異なる点はどこか、この他の戦略はどのようにexploitされてしまうのかをpiosolverのnodelockの機能などを利用して検証する

ということをやってみようと思います。

今回は①についてです。

①数学的にGTOを解いてみる。

まずIPがベットするレンジ、OOPがIPのベットに対してコールするレンジを考えてみるとこのようになります。

f:id:takoagemat:20180817185644p:plain

The Mathematics of Pokerでは、違う形のレンジの構造を考えて矛盾が生じることによりこの構造を導いていますがここでは省略します。
OOPのコールレンジがIPのベットレンジより広いことはわかると思います。


この二つの戦略の閾値(y_0,y_1,x^*_1)はどちらの戦略でも期待値が変わらないはずなので

\begin{eqnarray*}-y_1 + (P+1)(1-y_0) &=& 0\\
y_1 &=& \frac{x^*_1}{2}\\
Py_0 - (P + 1)x^*_1 &=& 0\end{eqnarray*}

がわかります。

未知数が3つで異なる式が3つ得られたのでこれらの式を用いて(y_0,y_1,x^*_1)を解くことができます。

\alpha = \frac{1}{P+1}

とすると答えは

\begin{eqnarray*}y_1 &=& \frac{1-\alpha}{(2-\alpha)(\alpha+1)}\\
x^*_1 &=& \frac{2(1-\alpha)}{(2-\alpha)(\alpha+1)}\\
1-y_0 &=& \frac{\alpha(1-\alpha)}{(2-\alpha)(\alpha+1)}\end{eqnarray*}

と求められます。
P=1、つまりポットが1でリバーでポットベットのみを打つ場合に関して
f:id:takoagemat:20180817185644p:plain



IPベットレンジ[0,\frac{2}{9}]
IPブラフレンジ[\frac{8}{9},1]
OOPコールレンジ[0,\frac{4}{9}]

になります。

ちなみにEVはIPが1/18得する計算になります。
下の図の領域分IPが得します。

f:id:takoagemat:20180818015232p:plain

IPは強いハンドでバリューが取れた時、弱いハンドでブラフが成功した時に得することがわかります。

次回は、piosolverでこのモデルを解いてみます。

PioSOLVER,GTOに関しての概要

そもそもpiosolverって何ができるの?

piosolverはホールデムでのGTO解を求めることができるsolver、つまり計算機械です。

こんな感じで計算結果を見ることができます。

f:id:takoagemat:20180813033351p:plain


この記事では
①このGTOとはなんなのか
GTOを求めることが一体なにに繋がるのか
ということを自分の理解の範疇で述べていきたいと思います。

自分が頑張って理解できたと思ってることを読者の方に20分もかからず理解してもらうことが目的です。

①まずGTOとはGame Theory Optimalのことでゲーム理論に基づく最適の戦略のことです。

この最適な戦略とはナッシュ均衡のことです。GTOナッシュ均衡はポーカーにおいて同じ意味だと自分は認識しています。


(追記 2020/3/25)
(GTOナッシュ均衡は同じではありませんでした。
ナッシュ均衡は以下の通りの戦略の組み合わせ、GTOは戦略に対して定義されているものでした。)



ナッシュ均衡とは、他のプレイヤーの戦略を所与をした場合、どのプレーヤーも自分の戦略を変更することによって高い利得を得ることができない戦略の組み合わせです。

つまり、piosolverは、どのプレイヤーも相手の戦略を知っている状態で自身の戦略を変えるインセンティブを持たない戦略、の計算をしてくれるということです。


f:id:takoagemat:20180813033619j:plain



これだけでわかる人はすごいと思います。

これだけでみんなに分かられたらたまったものではないので分からない人多数という仮定のもと例をあげて自分なりにわかりやすく説明していきます。

例として二人でのグリコゲームを考えて見ようと思います。

グリコゲームは小さい頃やったことあるひと結構いると思います。
グーで勝ったら3歩、チョキとパーで勝ったら6歩進めるじゃんけんでのゲームです。
歩数は地域などによって違うのかもしれませんがここではこのルールのもとで考察してみます。

このグリコゲームにおけるナッシュ均衡はジャンケンのグー、チョキ、パーをそれぞれグーを40%、チョキを40%、パーを20%の確率で出す戦略です。

二人がお互いグーを40%、チョキを40%、パーを20%の確率で出す戦略を実行していれば、その戦略を変える利点がないということです。

この場合は手計算でも簡単に求められます。
計算方法は相手がどの手を出しても期待値が0を超えないようにするにはどうすればいいかを計算すればいいです。

しかし、ポーカーのような複雑でどのようにプレイすれば勝てるのかまるで分からないように感じてしまうゲームでナッシュ均衡を求めるのは人間には至難です。

それをこのpiosolverはできるということです。

②piosolverがそのGTO,ナッシュ均衡とやらが求められるのはわかった

で?

となるのが人間でしょう。

ナッシュ均衡を求めることが一体何に繋がるのか疑問です。これだけpiosolverが使われているのだからこのナッシュ均衡を求める作業に利点があるはずなのです。

まずひとつにこのナッシュ均衡を求めることで二人のゲームにおいて最低限の期待値を保障してくれるのです。

つまりpiosolverで求めたナッシュ均衡通りプレイすることでHUではレーキを考慮しないとEV0以上を必ず実現することができるのです。

0以上と言いましたがポーカーではこのGTO通りプレイすることで期待値が0より大きくなることが可能です。(これについては後述します。)

さらに、そのナッシュ均衡の戦略を知っていることで相手がどのようにナッシュ均衡から乖離していてどのようにその相手の弱みに漬け込んでお金をむしりとることができるのかもわかります。

まとめるとGTO,ナッシュ均衡を計算することで
①期待値が保障される戦略を知ることができる。
GTO,ナッシュ均衡を知ることで相手の弱みがわかる
ということです

ここまで読んでくれた読者の中で疑問に思ってくれた方もいるかもしれません。



それってそんなにすごいか?
べつにナッシュ均衡知らなくても弱い奴わかるし
しかも0以上ってなんだよ
0だったら意味ねえじゃん


そうなんですよ。0だったら意味ないですよね。

しかしGTOを知るということがどのようなことなのか先ほどのグリコを用いて解説していきます。
先ほどジャンケングリコゲームにおけるGTOはグーを40%、チョキを40%、パーを20%、出す戦略であると述べました。

このグリコゲームではこのGTO通りプレイすると相手がグーしか出さないようなボンクラ相手でもEVは0です。

は?
あーね、そのGTOとやらは負けたくないチキンがやる安全策みたいなやつか

このように思ってくれたらこの記事を書いた甲斐があります。

ポーカーのような複雑でどのようにプレイすれば勝てるのか教えてほしいように感じてしまうゲームではグリコとは違い相手がGTO通りプレイしていたら相手のEVがプラスになることがあり得るのです。

というか世界中のどの人間のプレイヤーもGTO相手にはレーキを考慮しなくてもEVがマイナスになるのです。つまり、GTO通りプレイできればどの相手にもかてます。

グリコで言えば、グーには引き分けでパー、チョキには負けるみたいな手があるとします。

そんなクソ手誰が出すんだよ
相手がそんなことしたらそりゃGTOで期待値上がるわ

f:id:takoagemat:20180813034624p:plain

と思うかもしれませんが、ポーカーのような複雑でどのようにプレイすれば勝てるのかまるで分からないように感じてしまうゲームではこのようなことが日常茶飯事に行われているのです。 自分も読者のあなたもどこかでこのようなクソ手みたいなものを頻度の差はあれど難しいポーカーではだしてしまっているのです。

ポーカーで言えば普通の場面でプリフロップでAAを降りるなどの行為ですね。

またGTOを知っていることでGTOから乖離している相手をexploit、搾取することができるのです。

グリコの例に戻ります。
二人でのグリコゲームで相手の戦略が全ての手を \frac{1}{3}の確率でだす戦略だと仮定します。

再度になりますがジャンケングリコゲームにおけるGTOはグーを40%、チョキを40%、パーを20%、出す戦略であると述べました。

グリコのGTO解を知っていることで相手はパーを出しすぎていることがわかります。
そのためこちらはGTO解よりチョキを多く出す、つまりチョキを40%以上の確率で出すことで相手を搾取することができると考えられます。

実際この相手には100%チョキを出すことで一回のじゃんけんあたり期待値+1歩になります。

このような相手の戦略を固定した時の最適戦略の計算もpiosolverは当然できます。

いかがでしょうか。グリコゲームではGTO解、ナッシュ均衡を知っているからこそ相手の戦略のなにが弱みでどのように搾取すればいいのか情報を得ることができます。
逆にナッシュ均衡をしらないと頼るものはセンスぐらいでしょうか

ネジタルネイチャーなどと機械との親和性が大事だといわれ、多くの分野で人工物が人間を凌駕している現在においてセンスだけで挑むのは大変だと思います。

まとめるとGTOを学ぶということはポーカーそのものを学んでいるに等しいと自分は考えています。


ポーカーする友達がいないのでポーカー雑談とかできる方いたらDMなど待ってます笑
何か間違っている、疑問な点などあればコメントなどもお待ちしています。

piosolverの使い方メモ

Piosolver

Preflop solutions
→色々ある。これだけでも強い
piocloud.weebly.com
今年2018年の始めあたりに無料で公開された。
cfrファイルなのでpiosolverで開ける。


Analysis
Runout EV comparison(Hotness)
→それぞれのターン、リバーでのEV,Equity,strategyをみることができる

Range Explorer
→それぞれのレンジのEV,Equityのグラフをみることができる。
→グラフによってCBの特徴など分類できるかも


Node locking
→Full treeでないとできない
GTOから乖離している相手をどのようにexploitするのか計算できる。
→また自分のGTOから乖離したplayがどのように搾取されうるのかわかる。

Save
Full tree
→Small tree riverなし ストレスなくリバーの結果見れる recommended
→Micro tree flopのみ 結構時間かかる

Range Arithmetic
Round
→適当な単位で丸める。メモリや計算速度に影響

Script, Aggregated reportの使用 スクリプトを生成しrun this script
→集合分析が可能、効率よくGTOを勉強できる、flop subsetを利用
スプレッドシートにまとめられる。Pio語でのスクリプトの使用も可能。
→piosolverの大きな機能の一つ

[0,1]game
→レンジの例
→the mathematics of pokerでの例を次回以降更新予定

Change only betting structure when loading configuration
→保存したパラメータの利用でベッティングパラメータのみ保存したものを再利用できる。

create subtree configuration
→riverの最適ベット戦略などの考察に、
→ブロックベットの活用などが見られるかも

Eliminate currently selected path from player’s strategy
→exploitの検証に利用場面多いか
→eliminateからのnodelockでexploit戦略の計算

戦略のパーセンテージ
→右の欄は自分のコンボ数によるパーセンテージ
→右上のはブロッキングエフェクトを考慮した数字
→これらの数字はコピーできる。

square size proportional to weight
→レンジに含まれるハンドの確率が面積の比率で表される

normalize squairs
→コンボごとの比率を大きくして見やすくする

bars width proportional to weight
→戦略の頻度を加重平均で表示(コンボ数に忠実に表現)

geometric betsize
→残りストリート数+e ex.2e,1eなど