Skip to content
[OPEN_POKER]

ポーカーボットのポジション別レンジ: どの席からもオープンするのをやめる

JJoão Carvalho||更新済み |14 min read

ポーカー ボットは、すべての席で同じハンドをプレイするべきではありません。 6 マックス ノーリミット ホールデムでは、ボタンはフロップ後最後に動作し、ブラインドが最初に動作します。この 1 つの事実により、どのハンドがチップをプリントし、どのハンドが静かにスタックを排出す​​るかが変わります。

関連ガイド: 2026年版 AIポーカーボット構築完全ガイド。フレームワーク、意思決定ロジック、フェアネス、テスト、対戦環境までを網羅しています。

重要なポイント

  • ポジションレンジは、ハンドが高価になる前にプリフロップのミスを修正できるため、安価なエッジです。
  • 初期の座席はしっかりと開く必要があります。遅い席では残っているプレイヤーが少なくなるため、より頻繁に盗む可能性があります。
  • 最初にハンドコードセットとしてレンジを実装します。ベースラインが機能した後にのみ対戦相手のモデリングを追加します。

なぜポジションがそれほど重要なのでしょうか

遅いプレイヤーはより多くの情報に基づいて意思決定を行うため、位置が重要になります。Open Poker独自の戦略ドキュメントでは、アーリー ポジション、レイト ポジション、ブラインドを個別の決定コンテキストとして呼び出します (アクションと戦略ドキュメント)。 6 マックス ゲームでは、各オービットには 6 つのシートと 10/20 構造のブラインドで 30 の強制チップがあります。

銃の下で KTo を開くボットには、罰するプレイヤーが 5 人残っています。ボタン上で同じ手を開くボットには、行動できるブラインドが 2 つだけ残っています。同じカードです。リスクが違う。

ここで初心者ボットは静かに負けます。単一の hand_strength() 番号を作成し、それをすべての座席から使用します。これはエースのような明らかなハンドに有効です。スーテッドコネクター、弱いエース、スモールペア、そしてブロードウェイのゴミなど、ほとんどのシーズンを決定するハンドでは失敗します。

6 つの便利なポジション区分とは何ですか

UTG、HJ、CO、BTN、SB、BB の 6 つのバケットを使用します。Open Pokerは hand_startdealer_seat を送信します。ボットは table_joined から自身の座席を認識しており、これら 2 つの数値から相対位置を計算できます (WebSocket ドキュメント)。

POSITIONS_6MAX = ["SB", "BB", "UTG", "HJ", "CO", "BTN"]
 
 
def position_name(hero_seat, dealer_seat, active_seats):
    ordered = sorted(active_seats)
    dealer_index = ordered.index(dealer_seat)
    relative = ordered[(dealer_index + 1) % len(ordered):] + ordered[:dealer_index + 1]
 
    # relative[0] is small blind, relative[1] is big blind in a full hand.
    seat_to_position = {
        seat: POSITIONS_6MAX[i]
        for i, seat in enumerate(relative[: len(POSITIONS_6MAX)])
    }
    return seat_to_position[hero_seat]

実際のテーブルではハンドが不足する可能性があります。ボットが 3 つだけ着席している場合は、BTN、SB、BB ロジックに向かって折りたたみます。アクティブなプレーヤーが 3 人だけの場合、アンダー ザ ガンの席があるかのように振舞わないでください。

最初のボットはどのような開始レンジを使用する必要がありますか

最初は想像よりタイトに始めてください。実際の初心者のベースラインは、UTG から 12%、HJ から 16%、CO から 22%、BTN から 35%、および慎重なスモールブラインドレンジです。これらはソルバーとしては完璧ではありません。ポストフロップロジックが追いつくまでの間、最悪のリークを阻止するのに十分安全です。

ポジションオープン率の目安ハンド例
UTG12%77+、AJ+、KQ、AQo+
HJ16%66+、AT+、KJ+、QJ、AJo+
CO22%55+、A8s+、KTs+、QTs+、JTs、ATo+、KQo
BTN35%22+、最も適したエース、ブロードウェイ、スーテッド コネクタ
SB28%上手にプレイする手を挙げてヘッズアップ、ジャンクをフォールド
BBポットオッズに応じてディフェンスポット オッズとハンド プレイアビリティに基づくコール

正確なパーセンテージは形状よりも重要です。早めのタイト。ボタン幅広め。ブラインドが変です。このシェイプは、別のポストフロップ ヒューリスティックよりも多くの初心者ボットを修正します。

スタックの深さについては、これらのレンジを ポーカー ボット スタック管理 と組み合わせます。 50bb ボットと 250bb ボットは、小さなペアを同じように扱うべきではありません。

Pythonでレンジをエンコードするにはどうすればよいですか

手を短い文字列としてエンコードします: AAAKsAQo。ペアには 2 つの文字が含まれます。スーテッドハンドは s で終わります。オフスーツのハンドは o で終了します。これは手作業で定義するレンジに十分コンパクトで、ログでのデバッグが簡単です。

RANK_ORDER = "23456789TJQKA"
 
 
def hand_code(cards):
    r1, s1 = cards[0][0], cards[0][1]
    r2, s2 = cards[1][0], cards[1][1]
 
    if r1 == r2:
        return r1 + r2
 
    high, low = sorted([r1, r2], key=RANK_ORDER.index, reverse=True)
    suited = "s" if s1 == s2 else "o"
    return high + low + suited
 
 
OPEN_RANGES = {
    "UTG": {"77", "88", "99", "TT", "JJ", "QQ", "KK", "AA", "AJs", "AQs", "AKs", "KQs", "AQo", "AKo"},
    "HJ": {"66", "77", "88", "99", "TT", "JJ", "QQ", "KK", "AA", "ATs", "AJs", "AQs", "AKs", "KJs", "KQs", "QJs", "AJo", "AQo", "AKo"},
    "CO": {"55", "66", "77", "88", "99", "TT", "JJ", "QQ", "KK", "AA", "A8s", "A9s", "ATs", "AJs", "AQs", "AKs", "KTs", "KJs", "KQs", "QTs", "QJs", "JTs", "ATo", "AJo", "AQo", "AKo", "KQo"},
    "BTN": {"22", "33", "44", "55", "66", "77", "88", "99", "TT", "JJ", "QQ", "KK", "AA", "A2s", "A3s", "A4s", "A5s", "A6s", "A7s", "A8s", "A9s", "ATs", "AJs", "AQs", "AKs", "K9s", "KTs", "KJs", "KQs", "Q9s", "QTs", "QJs", "J9s", "JTs", "T9s", "98s", "87s", "A9o", "ATo", "AJo", "AQo", "AKo", "KTo", "KJo", "KQo", "QJo"},
}
 
 
def should_open(position, cards):
    return hand_code(cards) in OPEN_RANGES.get(position, set())

見た目が粗雑に見えるのが特徴です。ボットがスタックをパントするときに、position=CO hand=KTo open=False を出力すると、その決定をすぐに理解できます。

有効なアクションでレンジをどのように使用しますか

未払いのベットがなく、レイズが合法な場合にのみオープンします。 Open Poker は、最小金額と最大金額の raise など、どのアクションが有効であるかを正確に示します。レイズ額は増額ではなく、レイズトゥです。これはよくあるボットのバグです (アクション ドキュメント)。

def preflop_decision(msg, hole_cards, position):
    actions = {a["action"]: a for a in msg["valid_actions"]}
 
    # Free option in the big blind.
    if "check" in actions:
        return "check", None
 
    if "raise" in actions and should_open(position, hole_cards):
        return "raise", actions["raise"]["min"]
 
    # Facing a raise: use a tighter continue range for now.
    if "call" in actions and hand_code(hole_cards) in {"TT", "JJ", "QQ", "KK", "AA", "AQs", "AKs", "AKo"}:
        return "call", None
 
    return "fold", None

そのコールレンジは意図的に狭いです。ワイドすぎるコールは、まともなプリフロップ ボットを負けるポストフロップ ボットに変える最も早い方法の 1 つです。 モンテカルロ・エクイティ を取得したら、価格と相手の傾向に基づいてコールを広げます。

レンジはいつ変更する必要がありますか

スタックの深さ、テーブルのサイズ、対戦相手が変わると、範囲も変わるはずです。Open Pokerのバイインは 1,000 から 5,000 チップの範囲ですが、各シーズンは 5,000 チップと固定 10/20 ブラインドで始まります (シーズン ドキュメント)。つまり、同じボットで 50bb、100bb、または 250bb のポーカーをプレイできるということです。

次の 3 つの調整を使用します。

コンテキスト調整
60bb未満のショートスタック投機的なスーテッド コネクタと小さなペアを削除
150bbを超えるディープスタック適切なコネクタとペアを後期位置に追加する
ルーズブラインドスティールを厳しくし、バリューベットを厳しくする
タイトブラインドボタンを広げるとカットオフが開きます

初日に 4 つすべてを追加しないでください。まず、ベースラインレンジが古い単一スコア戦略を上回ることを証明します。次に、相手のモデリング にボタンとブラインドのレンジを調整してもらいます。

新しいレンジをテストするにはどうすればよいですか

レンジを一度に 1 つずつ変更してテストします。プリフロップの編集は小さく見えますが、ボットが異なるハンドの組み合わせでフロップに到達するため、後のストリートごとに変更されます。 1 回のデプロイでボタンを広げ、ビッグブラインド ディフェンスを緩め、ベット サイズを変更すると、どの変更が役に立ったかわかりません。

このテスト ループを使用します。

  1. ポジションを 1 つ選択します (通常は BTN または BB)。
  2. そのレンジで5から10ハンドを変更します。
  3. 少なくとも 300 ハンドを実行します。
  4. チップのトレンド、リバイ、大負けハンドを比較します。
  5. ログで結果が説明される場合にのみ、変更を保存してください。

最も早く異常を見つけられる指標は勝率ではありません。それは「プリフロップに入って 20bb 以上負けたハンド」です。まず該当ハンドを確認してください。新しいボタンレンジにより 5つのマージナルなオフスートハンドが追加され、それらのハンドが肥大化したポットを失い続ける場合は、それらを元に戻します。そのハンドでブラインドを獲得でき、ショーダウンまで進むことが少ない場合は、テストを続けてください。

レンジ調整では地道な検証が成果につながります。優れたボットには、奇抜なプリフロップ戦略は必要ありません。アーリーポジションではドミネートされやすいハンドを減らし、レイトポジションではよりコントロールされたプレッシャーを必要とします。

よくある質問

ポーカー ボットはソルバーパーフェクト レンジを使用する必要がありますか

最初はそうではありませんでした。ソルバーレンジは、特定のゲーム ツリーと対戦相手の反応を想定しています。シンプルな 6-max レンジ テーブルはテストもログも簡単で、通常はボットがポストフロップでプレイできないそのまま転用したチャートよりも優れています。

ビッグブラインドはどのように防御しますか

ビッグ ブラインドはプライスで防御する必要があります。 90 チップ ポットに 20 をコールする場合、200 を 300 にコールする場合よりもはるかに少ないエクイティが必要です。ポット オッズから始めて、ポスト フロップでプレイが悪いハンドを除外します。

ノーコード ボットにはどのレンジを使用する必要がありますか

「Shark」テンプレートから始めます。 Bot Builder のドキュメントには、これが 0.30 のタイトネスと 0.75 の攻撃性を持つタイト アグレッシブとして記載されており、これはほとんどの新規ユーザーにとってルーズなテンプレートよりも優れたベースラインです。

ポジションレンジはハンドの評価に代わることができますか

いいえ、レンジによってハンドのプリフロップに入るかどうかが決まります。ボードが現れた後に何をすべきかはハンド評価とエクイティによって決まります。両方を使用してください。

続きを読む