概要
- GTO Wizardにおいて、特定のプリフロップスポットを開くまでのボタンクリック回数が多く、復習が困難であるためにLaunchヘルパーを作成した
- 実装容易性を優先し、gemとしてglimmer-dsl-libuiを用いた
完成物
課題
GTO Wizardにおいて復習をする際
「bb数は20bbを選択して... UTG fold... UTG+1 fold... LJ Raise... HJ fold... BU fold... のレンジは?」
という具合に、ボタン操作をするのが大変億劫であるため、復習機会を逃してしまう
アプローチ
https://app.gtowizard.com/solutions?gametype=MTTGeneral&depth=17.125&soltab=strategy_ev&history_spot=6&preflop_actions=F-R2-RAI-C-F-F
GTO WizardにおけるURLのクエリパラメータは以下のようになっている
depth = bb数 + .125 (.125は謎)
history_spot = UTGから数えたアクションの順番のindex
preflop_actions = F-R2-RAI-C-F-F というような、アクションの履歴
このクエリパラメータを作るツールが作れればよい
今回の場合
- Raiseアクション (R2など)は、レイズサイズをツール側が把握していなければならず、マスタの作成が必要になる
- 主に20bb以下のトーナメントポーカーにおけるPreflopの復習が目的であったため、知りたいシチュエーションがAll-in or Fold であることが多い
という2点から、「AnyポジションにおけるAll-in、またそれに対するAnyポジションからのCallが入っている状況での各ポジションの振る舞いを復習するための簡易的なツール」 として作成するのが作業に対するコスパが良いと判断しました。
以下のように、特に難しいことはやっておらず単純な分岐のみのツールとなります。
# preflop_actionsのクエリパラメータの作成
# F-F-RAI-C-Fみたいな文字列を作る
def action_text(data)
action_text = ''
data.each_with_index do |d, index|
break if d.has_key?(:target)
if index > 0
action_text += '-' # アクションの連結文字
end
if d[:call]
action_text += 'C' # Call
elsif d[:allin]
action_text += 'RAI' # Raise All In
# elsif d[:raise] # Raiseを管理する場合、ポジションごとのRaise額をこのツール側が知っている必要があるので作業時間が必要
else
action_text += 'F' # Fold
end
end
action_text
end
また、glimmer-dsl-libuiではtable形式のUIの中にcheckboxを表示するオプションもありましたが、Mac OSでは表示専用 (チェックしているかどうかの値を動的に変更して、データとして取得することは出来ない)という制約があるため、今回は ボタンの上にチェックマークを表示すること で代用しました。
positions = ['UTG', 'UTG+1', 'LJ', 'HJ', 'CO', 'BU', 'SB', 'BB']
actions = { 'All-in': 1, 'Call': 2 }
settings = positions.map { |position| [position, '', '', "#{position} Open"] }
check_mark = "✓"
window('GTOWizard Opener', 500, 500) {
text_column('Position')
table {
actions.each do |k, v|
button_column(k.to_s) {
on_clicked do |row|
settings[row][v] = (settings[row][v] == '') ? check_mark : ''
end
}
end
cell_rows settings
}
}
使用感
シチュエーション:
14bbがeffのときに
UTG+1からのオールインが入っており、そこにHJとCOがコールしている状態でのSBのアクションを確認したい
いい感じ