PioSOLVER:全ノードまとめて集合分析

複数ボードについて戦略頻度を一括で見たい場合に,集合分析レポート(aggregation report)を用いるのはよく知られています.

「Flopで~」「Turnで~」など,調べたいノードが変わるたびに1から集合分析を実行する必要があり,面倒に感じる場合がありますよね.
そこで今回は,あらゆるノードでの戦略頻度を一気に集計する方法を解説します.

----------

Solverコマンドの「show_all_freqs」を用いると,全てのノードの発生頻度を一気に取得できます.引数には「global / local」の2種類があります.
global:そのノードに到達する確率
local:直前のノードに到達した場合にそのノードに進む条件付き確率

戦略を理解する上では,localの方が解釈がしやすいと思います.

bとかcが並んでいるのはノード名を表す文字列で,bがbet / raise,cがcall / checkを表します.例えば上の画像のように読み取ることになります.

一部 nan (not a number,欠損値)が出力されている部分があります.
今回はturnまでの戦略のみを保存したtreeを用いたため,riverにおける戦略が欠損しています.

戦略頻度を取得するためのコマンドが分かりました.

ーーーーーーーーーー


あとはPythonからPioSOLVERにコマンドを渡して,受け取った結果をうまく処理して集計表を作ります.
こんな感じでしょうか.

subprocessモジュールを使って、PioSOLVERにコマンドを渡し、出力を受け取って処理しています。

よく使うbet sizeなどの検出が全ノードに対して一気に行えますね。


全ボードについて平均化。頻度順にソート。
ほとんど使われない戦略が確認できます。不要なプレイラインを確認しておくと、今後solverを使う際に明らかに使われないbet sizeを削るなどして計算コストの節約をはかることもできるでしょう。

面白い記事だと思ったら少額でもサポートいただけると、記事執筆の大きな励みになります。