Skip to content
[OPEN_POKER]

पोकर बॉट पोज़िशन रेंज: हर सीट से ओपन करना बंद करें

JJoão Carvalho||अपडेटेड |9 min read

आपके पोकर बॉट को हर सीट से वही हाथ नहीं खेलने चाहिए। 6-max No-Limit Hold'em में फ्लॉप के बाद बटन सबसे आखिर में चलता है और ब्लाइंड्स सबसे पहले। यही एक तथ्य तय करता है कि कौन से हाथ चिप्स कमाते हैं और कौन से चुपचाप आपका स्टैक घटाते हैं।

इस श्रृंखला का भाग: 2026 में AI पोकर बॉट बनाने की संपूर्ण गाइड - फ्रेमवर्क, निर्णय-तर्क, इक्विटी, परीक्षण और प्रतिस्पर्धी मंचों की मुख्य गाइड।

मुख्य बातें

  • पोज़िशन रेंज सस्ता फायदा देती हैं, क्योंकि हाथ महंगा होने से पहले ही प्रीफ्लॉप गलतियां ठीक हो जाती हैं।
  • शुरुआती सीटों से टाइट ओपन जरूरी हैं। बाद की सीटें ज्यादा स्टील कर सकती हैं क्योंकि कम खिलाड़ी बाकी होते हैं।
  • पहले रेंज को hand-code sets के रूप में लागू करें। बेसलाइन काम करने के बाद ही opponent modeling जोड़ें।

पोज़िशन इतनी महत्वपूर्ण क्यों है?

पोज़िशन मायने रखती है क्योंकि बाद वाले खिलाड़ी अधिक जानकारी के साथ निर्णय लेते हैं। Open Poker के अपने strategy docs भी early position, late position और blinds को अलग decision contexts मानते हैं (actions and strategy docs)। 6-max गेम में हर चक्र में छह सीटें और 10/20 संरचना पर ब्लाइंड्स के रूप में 30 अनिवार्य चिप्स होते हैं।

जो बॉट under the gun से KTo ओपन करता है, उसे सजा देने के लिए पांच खिलाड़ी बचे रहते हैं। वही हाथ बटन पर ओपन करने वाले बॉट के बाद केवल दो ब्लाइंड्स को चलना होता है। वही कार्ड, अलग जोखिम।

यहीं शुरुआती बॉट चुपचाप हारते हैं। वे एक ही hand_strength() संख्या बनाते हैं और उसे हर सीट से इस्तेमाल करते हैं। यह aces जैसे स्पष्ट हाथों के लिए काम करता है। लेकिन जिन हाथों से अधिकांश सीज़न तय होते हैं, उनमें विफल होता है: suited connectors, weak aces, small pairs और कमजोर broadway हाथ।

छह उपयोगी सीट bucket कौन से हैं?

UTG, HJ, CO, BTN, SB और BB, इन छह buckets का उपयोग करें। Open Poker hand_start में dealer_seat भेजता है; आपका बॉट table_joined से अपनी सीट जानता है और इन दोनों संख्याओं से relative position निकाल सकता है (WebSocket docs)।

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]

असल टेबल short-handed हो सकते हैं। केवल तीन बॉट बैठे हों तो BTN, SB और BB तर्क की ओर सीमित करें। जब केवल तीन खिलाड़ी सक्रिय हों, तब under-the-gun सीट होने का दिखावा न करें।

पहले बॉट के लिए कौन सी opening ranges उपयोग करें?

अपनी अपेक्षा से ज्यादा टाइट शुरुआत करें। व्यावहारिक शुरुआती बेसलाइन UTG से 12%, HJ से 16%, CO से 22%, BTN से 35%, और सावधान small blind range है। ये solver-perfect नहीं हैं। पोस्टफ्लॉप तर्क के बेहतर होने तक सबसे बुरे leaks रोकने के लिए पर्याप्त सुरक्षित हैं।

PositionOpen targetउदाहरण हाथ
UTG12%77+, AJs+, KQs, AQo+
HJ16%66+, ATs+, KJs+, QJs, AJo+
CO22%55+, A8s+, KTs+, QTs+, JTs, ATo+, KQo
BTN35%22+, अधिकतर suited aces, broadways, suited connectors
SB28%heads-up में अच्छे चलने वाले हाथ raise करें, junk fold करें
BBकीमत के अनुसार defendpot odds और हाथ की playability के आधार पर call करें

सटीक प्रतिशत से ज्यादा इसका आकार मायने रखता है। शुरुआती पोज़िशन टाइट। बटन वाइड। ब्लाइंड्स अलग तरह के। यही आकार कई शुरुआती बॉट्स को एक और पोस्टफ्लॉप heuristic से ज्यादा सुधारता है।

स्टैक depth के लिए इन रेंज को poker bot stack management के साथ मिलाएं। 50bb बॉट और 250bb बॉट को small pairs एक जैसे नहीं मानने चाहिए।

Python में ranges कैसे encode करें?

हाथों को छोटे strings के रूप में encode करें: AA, AKs, AQo। Pairs में दो letters होते हैं। Suited हाथ s पर खत्म होते हैं; offsuit हाथ o पर। यह हस्तलिखित ranges के लिए पर्याप्त संक्षिप्त और logs में debug करने में आसान है।

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 प्रिंट करके फैसला तुरंत समझ सकते हैं।

valid actions के साथ ranges कैसे उपयोग करें?

केवल तब ओपन करें जब कोई बकाया bet न हो और raise वैध हो। Open Poker आपको minimum और maximum रकम वाले raise सहित बिल्कुल बताता है कि कौन से actions वैध हैं। Raise amount raise-to होता है, increment नहीं, और यही बॉट्स की आम गलती है (actions docs)।

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

यह calling range जानबूझकर संकरी है। बहुत चौड़ा call करना एक अच्छा प्रीफ्लॉप बॉट भी जल्दी हारने वाला पोस्टफ्लॉप बॉट बना देता है। Monte Carlo equity होने पर कीमत और opponent tendencies के अनुसार calls चौड़े करें।

ranges कब बदलनी चाहिए?

स्टैक depth, टेबल आकार या opponents बदलने पर ranges बदलनी चाहिए। Open Poker buy-ins 1,000 से 5,000 chips तक हो सकते हैं, जबकि हर season 5,000 chips और fixed 10/20 blinds से शुरू होता है (season docs)। यानी वही बॉट 50bb, 100bb या 250bb पोकर खेल सकता है।

तीन adjustments अपनाएं:

ContextAdjustment
60bb से कम short stackspeculative suited connectors और small pairs हटाएं
150bb से ज्यादा deep stacklate position में suited connectors और pairs जोड़ें
Loose blindssteals टाइट करें, value-bet ज्यादा करें
Tight blindsbutton और cutoff opens चौड़े करें

पहले दिन चारों न जोड़ें। सबसे पहले साबित करें कि baseline range आपकी पुरानी single-score strategy से बेहतर है। फिर opponent modeling को button और blind spots समायोजित करने दें।

नई range का परीक्षण कैसे करें?

एक बार में एक बदलाव के साथ ranges जांचें। प्रीफ्लॉप बदलाव छोटे लगते हैं, लेकिन बाद की हर street बदल देते हैं क्योंकि आपका बॉट अलग मिश्रण के हाथों के साथ फ्लॉप तक पहुंचता है। यदि एक deploy में बटन चौड़ा करें, big-blind defense loose करें और bet sizing बदलें, तो पता नहीं चलेगा कि किस बदलाव ने मदद की।

यह testing loop अपनाएं:

  1. एक पोज़िशन चुनें, आम तौर पर BTN या BB।
  2. उस range में 5 से 10 हाथ बदलें।
  3. कम से कम 300 hands चलाएं।
  4. chip trend, rebuys और बड़े losing hands की तुलना करें।
  5. बदलाव केवल तब रखें जब log परिणाम समझाए।

सबसे तेज संकेत win rate नहीं है। यह है: "वे हाथ जो प्रीफ्लॉप में आए और 20bb से अधिक हारे।" पहले उन्हीं hands को निकालें। यदि नई button range पांच marginal offsuit hands जोड़ती है और वे हाथ बार-बार बड़े pots हारते हैं, तो उन्हें वापस लें। यदि वे blinds चुराते हैं और शायद ही showdown देखते हैं, तो परीक्षण जारी रखें।

रेंज पर काम करते समय लगातार अनुशासन का लाभ मिलता है। अच्छे बॉट को दिखावटी प्रीफ्लॉप रचनात्मकता नहीं चाहिए। उन्हें शुरुआती पोज़िशन में कम dominated hands और बाद की पोज़िशन में अधिक नियंत्रित दबाव चाहिए।

FAQ

क्या पोकर बॉट को solver-perfect ranges उपयोग करनी चाहिए?

शुरुआत में नहीं। Solver ranges किसी खास game tree और opponent response को मानती हैं। सरल 6-max range table का परीक्षण और logging आसान है, और वह अक्सर उस copied chart से बेहतर है जिसे आपका बॉट पोस्टफ्लॉप नहीं खेल सकता।

big blind कैसे defend करता है?

big blind को कीमत के अनुसार defend करना चाहिए। 90-chip pot में 20 call करने के लिए, 300 में 200 call करने की तुलना में बहुत कम equity चाहिए। pot odds से शुरू करें, फिर उन हाथों को हटाएं जो पोस्टफ्लॉप खराब चलते हैं।

no-code bot के लिए कौन सी range उपयोग करूं?

The Shark template से शुरू करें। Bot Builder docs इसे 0.30 tightness और 0.75 aggression के साथ tight-aggressive बताती है, जो अधिकतर नए उपयोगकर्ताओं के लिए loose templates से बेहतर baseline है।

क्या position ranges hand evaluation की जगह ले सकती हैं?

नहीं। Ranges तय करती हैं कि प्रीफ्लॉप हाथ में प्रवेश करना है या नहीं। बोर्ड आने के बाद hand evaluation और equity तय करती हैं कि क्या करना है। दोनों का उपयोग करें।

और पढ़ो