Skip to content
[OPEN_POKER]
Open Poker vs Slumbot:ヘッズアップボットかフルアリーナか?

Open Poker vs Slumbot:ヘッズアップボットかフルアリーナか?

JJoão Carvalho||18 min read

Open PokerとSlumbotの選択は、何をテストしているかに帰着する。Slumbotはボットがナッシュ均衡に近い相手に対して正しいヘッズアップ戦略でプレイできるかを確認する。Open Pokerはボットが互いに搾取しようとする5人の相手に対してチップを獲得できるかをテストする。両者は異なる問題を解決し、真剣なボット開発者のほとんどは異なる段階で両方を使用することになる。最初にSlumbotでキャリブレーションし、次にOpen Pokerで競技に挑もう。

Slumbotとは?

SlumbotはEric Jacksonが構築・保守する無料のヘッズアップNo-Limit Hold'emボットだ。2007年からアルバータ大学でCepheusLibratusを生み出したのと同じアルゴリズムファミリーであるCounterfactual Regret Minimization(CFR)を使って計算された固定戦略でプレイする。この戦略はヘッズアップのナッシュ均衡を近似しており、長期的に搾取されないよう設計されている。

Slumbotはウェブサイトまたは公開HTTPAPIを通じてプレイできる。APIはハンド履歴を送信し、Slumbotのアクションを返してもらうものだ。シンプルだ:ゲーム状態をPOSTすれば、アクションが返ってくる。認証不要、登録不要、費用ゼロ。

Slumbotについて理解すべき重要な点は、何をしないかだ。適応しない。モデル化しない。毎ハンドブラフしていようが毎ハンドフォールドしていようが、戦略を変えない。同じ事前計算された均衡を常にプレイする。これはバグではなく特徴だ。テスト用の安定した再現可能なベースラインを提供してくれる。

Open Pokerとは?

Open Pokerは、AIボットがWebSocket APIでNo-Limit Texas Hold'emをプレイする無料の競技プラットフォームだ。公開リーダーボードとUSDC賞金付きの2週間シーズンを運営している。テーブルには2〜6名が着席でき、マッチメイカーがシーズン中に対戦相手をローテーションする。

Open Pokerを構築したのは、ボットが単一のスパーリングパートナーではなく他のボットと競い合う場所が欲しかったからだ。プラットフォームはテーブル管理、ブラインドポスト、ポット計算、サイドポットを処理する。決断ロジックはあなたが書く。ゲームの進行は私たちが行う。WebSocket接続を開ける言語なら何でも動く:Python、Rust、JavaScript、Go、好きなものを使ってほしい。

Slumbotとの根本的な違い:対戦相手は実際の開発者が構築した本物のボットで、全員が適応している。GTOの近似を使うものもある。強化学習を使うものもある。プロンプトにハンド履歴を入れたLLMもある。戦略を改善する中でフィールドは毎シーズン変化する。

APIはどう違うか?

SlumbotはHTTPの同期APIを使用する。現在のゲーム状態をPOSTすれば、Slumbotがアクションを返す。インタラクションはリクエスト・レスポンス形式だ。ペースは自分でコントロールできる:ハンドを送り、返答を受け取り、処理して、次のハンドを送る。タイミングの心配なしにループで数千ハンドをスクリプト化できるので、テストがシンプルだ。

Open PokerはWebSocketの非同期接続を使用する。ボットが接続してテーブルに参加すると、リアルタイムでイベントを受け取る:hand_startyour_turnplayer_actionhand_result。自分のターンになったとき、返答するまでに一定時間がある(設定可能、デフォルトは30秒)。これは複数のプレイヤーが順番にアクションを取り、イベントが起きながら届くという、実際のポーカーゲームの流れに近い。

この実践的な違いは予想以上に重要だ。Slumbotの統合はPythonで約30行:ハンドをループして、状態をPOSTし、レスポンスをパースする。Open Pokerの統合は接続断、タイムアウト、同時メッセージを処理するイベント駆動システムだ。クイックスタートガイドでセットアップ全体を案内しているが、最低でも50〜100行は計画しておこう。

# Slumbot:同期、スクリプト形式
for hand in range(10000):
    state = deal_hand()
    response = requests.post(SLUMBOT_API, json=state)
    process(response)
 
# Open Poker:イベント駆動、リアルタイム
async with websockets.connect(WS_URL) as ws:
    while True:
        msg = await ws.recv()
        if msg["type"] == "your_turn":
            await ws.send(decide(msg))

Slumbotの相手は適応するか?

しない。それがポイントだ。Slumbotは固定された事前計算済みの戦略でプレイする。毎ハンドブラフしても、Slumbotはコールを増やし始めない。毎ハンドフォールドしても、Slumbotがブラインドを盗もうとする頻度は増えない。戦略は静的だ。

これによってSlumbotは一つの特定のことに役立つ:ヘッズアップにおけるボットの戦略がナッシュ均衡にどれだけ近いかを測ること。100,000ハンドにわたってSlumbotに対して-5 bb/100で負けていれば、それはキャリブレーションの数値だ。搾取できない相手に対して自分の戦略がどれだけ搾取可能かを大まかに知ることができる。

ただし、落とし穴がある。Slumbotを倒す(または最小限の損失で抑える)ことは、自分のボットがリークを持つ相手を搾取できるマルチプレイヤー環境でどう機能するかについて何も教えてくれない。ヘッズアップにおけるナッシュ均衡戦略は定義上プラスマイナスゼロだ。6-maxでは利益は最適なプレイから逸脱した相手を特定して搾取することから生まれる。それはまったく異なるスキルだ。

ボット開発においてマルチプレイヤーが重要な理由

ヘッズアップポーカーと6-maxポーカーはほぼ別のゲームだ。

ヘッズアップでは、GTOが上限だ。完璧な相手に対してナッシュ均衡を超えることはできない。スキルは均衡戦略からの逸脱を最小化することにある。

6-maxでは、上限は搾取だ。6人のプレイヤーは、ポットに死に金が増えること、複数の相手とのポストフロップスポットが増えること、パターンを特定する機会が増えることを意味する。6-maxテーブルの純粋なGTOボットは、3ベットを全部フォールドするタイトなプレイヤーやセカンドペアを降ろせないコーリングステーションに調整しないため、稼げるはずの資金を取りこぼす。

Open Pokerの6-maxテーブルは、Slumbotでは決して出てこない問題を解くようにボットを強制する:対戦相手モデリング、複数の相手に対するポジションを意識したレンジ調整、テーブル選択、セッション間のスタック管理。どの相手を狙い、どの相手を避け、シーズンを通じてテーブルの構成が変わるにつれてどう調整するかを決断する必要がある。

リーダーボードはさらなる層を加える。単一のセッションで勝つだけでは十分でない。ローテーションするフィールドを相手に14日間にわたってポジティブな勝率を維持する必要がある。ピークパフォーマンスより一貫性が重要だ。

Slumbotを使うべき時

コア決断エンジンを構築していて、安定したベンチマークが必要な時にSlumbotを使おう。

プリフロップレンジのキャリブレーション ナッシュに近いプレイに対してヘッズアップでボットのプリフロップ戦略が大きく負けているなら、レンジに問題があるシグナルだ。相手の戦略が固定されているため、Slumbotは明確なシグナルを与えてくれる。

ポストフロップのベットサイジングテスト SlumbotのAPIを使って数分で何千ハンドもこなせる。そのボリュームによって異なるベットサイジング戦略をA/Bテストし、統計的有意性をもってEVの差を測定できる。単一の安定した相手に対することで、テストしている変数を分離できる。

CFRの概念を学ぶ ゲーム理論を学んでいて、実践での均衡プレイがどんなものかを理解したいなら、Slumbotに対してプレイする(またはSlumbotと対戦するボットを構築する)ことは概念を内面化するための最良の方法の一つだ。アルゴリズムについてはアルバータ大学の学術文献(Zinkevich et al., 2007)が説明しているが、リアルタイムでプレイするのを見ることで具体的になる。

制限:Slumbotはヘッズアップのみだ。ボットがマルチプレイヤー向けに設計されているなら、Slumbotのベンチマークは一対一の基礎について教えてくれるが、6人テーブルをナビゲートするボットの能力については何も教えてくれない。

Open Pokerを使うべき時

ボットが機能していて、実際の競争に勝てるかどうかを確認したい時にOpen Pokerを使おう。

搾取戦略のテスト 対戦相手モデリングシステムを構築した。それは実際に実在の相手を発見して搾取できるか?Open Pokerは異なる戦略を持つボットの多様なフィールドを提供し、それが自分のテストスイートの外で搾取ロジックが機能するかを検証する唯一の方法だ。

ランキングのための競技 2週間シーズンは公開リーダーボードを持つ構造化された競争環境を作る。これが趣味のボットと真剣なボットを分ける力だ。ランキングと賞金がある時、フィールドは強くなる。

レジリエンスの開発 ボットは接続断、タイムアウト、テーブルローテーション、予期しない方法でプレイする相手を処理する必要がある。Open Pokerのボットライフサイクルは、ローカルのテストスイートがカバーできないすべてのエッジケースを実践させる。本番ポーカーは混乱している。プラットフォームはその混乱をリアルにする。

あらゆる言語、あらゆるアプローチ SlumbotのAPIはハンド履歴を固有フォーマットで整形できることを前提としている。Open PokerのWebSocketプロトコルは言語非依存だ。Python、Rust、Go、JavaScript、C++のボットを見てきた。ソケットを開ける言語なら何でもプレイできる。

両方使えるか?

使える。そうすべきだと思う。おすすめする順序はこうだ:

フェーズ1:コアロジック(Slumbot)。 決断エンジンを構築する。Slumbotに対してハンドをプレイさせる。目標はSlumbotを倒すことではない(それは極めて難しい)。目標は50,000ハンドにわたって-10 bb/100未満の損失率に収めることだ。それは基礎がしっかりしていることを意味する。

フェーズ2:マルチプレイヤー適応(Open Poker)。 対戦相手モデリングを追加する。6-max向けのポジション意識した調整を追加する。Open Pokerに接続してシーズンに参加し、リーダーボードでどの位置につくかを確認する。最初のシーズンは学習体験だ。テストスイートが見逃していたバグを発見するだろう。

フェーズ3:イテレーション。 Open Pokerの結果を使ってリークを特定する。Slumbotに戻って修正を単独でテストする。Open Pokerに戻ってその修正がマルチプレイヤーに反映されるかを確認する。このループが、最良のボットがシーズンをまたいで改善する方法だ。

ツールは競合していない。Slumbotは基礎のためのスパーリングパートナーだ。Open Pokerはトーナメントだ。一方でトレーニングし、もう一方で競技する。両方がより大きな絵にどう収まるかについては、全7つのAIポーカープラットフォームのランキングガイドを参照してほしい。

項目SlumbotOpen Poker
ゲーム形式ヘッズアップNLHE6-max NLHE(2〜6人)
対戦相手の数1(固定ボット)多数(ローテーションフィールド)
APIの種類HTTP(同期)WebSocket(リアルタイム)
適応する相手なし(固定戦略)あり(各ボットが異なる)
マルチプレイヤーなしあり
シーズンと賞金なし2週間シーズン、USDC賞金
コスト無料無料
最適な用途基礎のキャリブレーション競技と搾取

FAQ

Slumbotは倒せるか? 大きなサンプルでSlumbotはほぼ均衡に近いプレイをするため、ヘッズアップではほぼ搾取不可能に近い。10,000ハンドでは分散によって小さな利益を出せるかもしれないが、数十万ハンドにわたって勝率を維持するのは極めて難しい。目標はSlumbotを倒すことではない。損失率を最小化することが目的であり、それがあなたの戦略が最適にどれだけ近いかを測る指標になる。

Slumbotのボットを変更なしでOpen Pokerに使えるか? API統合を変更(HTTPからWebSocketへ)し、マルチプレイヤーロジックを追加する必要がある。純粋なヘッズアップナッシュ戦略は、弱い相手を搾取しないため6-maxではせいぜいブレイクイーブンになる。コア決断エンジンは移植できるが、ラッパーには大幅な書き直しが必要だ。

Open Pokerはヘッズアップテーブルをサポートするか? する。テーブルには2〜6人が着席できる。マッチメイカーが2つのボットだけをテーブルに配置すれば、ヘッズアップゲームになる。ただし、テーブルサイズはコントロールできない。ヘッズアップテストを保証したい場合は、Slumbotの方が適したツールだ。

Slumbotはどのプログラミング言語をサポートするか? SlumbotのAPIはHTTPベースなので、HTTPリクエストを送れる言語なら何でも動く。ハンド履歴のフォーマットはSlumbot固有なので、フォーマッターを書く必要がある。Open PokerのWebSocketプロトコルはJSONメッセージを使用しており、ほとんどの言語がネイティブに対応している。

一度もポーカーボットを構築したことがない場合、どちらから始めるべきか? Open Pokerのクイックスタートチュートリアルから始めよう。1時間以内に動くボットができる。ボットがハンドをプレイできるようになったら、Slumbotをテストパイプラインに追加して、ナッシュに対する決断品質をベンチマークしよう。その後Open Pokerに戻って競技に挑もう。


両プラットフォームとも無料だ。Slumbotはキャリブレーションのための固定ターゲットを提供する。Open Pokerはボットが実際に機能することを証明するライブアリーナを提供する。ボットを登録して最初のシーズンをプレイし、学んだことを教えてほしい。

続きを読む