德州扑克 - Preflop决策

Package: pokerai

[部分代码是从PyPokerEngine(MIT协议)拿来的。]

  • preflop: preflop轮决策的主要逻辑。

pokerai.engine

  • card: 实现Card类;
  • hand_evaluator: 判断牌型输赢。

pokerai.utils

  • action_utils: 关于行为的一些辅助方法;
  • card_utils: 关于牌的一些辅助方法(生成Card类数据,计算牌力等)。

Preflop决策实现: 表驱动

结构

构建一个环境表ENVS_TABLE来索引具体条件下,要执行的动作对应的手牌范围。索引结构为:

  • position: 玩家位置(SB, BB, EP1, ...);
  • previous action: 玩家上一个动作(call, raise nX, 若当前是第一个动作则为none);
  • opponents action: 对手动作(kb: kbet第k个bet,BB后第二个raise为3bet; c: call, ... 1caller + 3bet 为 1c3b);
  • pot range: 对手raise范围(raise多少倍,m-n, n+, m);
  • {action: card_range}: 动作 - 手牌范围键值对。

数据形式

将表存入文件envs_table.json,在决策时读取。

注: 1. 例中#后为相应解释,但在json格式数据中不存在注释这种说法,实际使用时不要把它写到文件里。 2. 需要检验在多线程使用时是否会发生冲突,如果发生写进python文件。

{
    # 玩家位置: EP1
    "EP1": {
        # 玩家上回合行为: none
        "none": {
            # 对手行为: none
            "none": {
                # 底池范围: 1.5BB (只有SB和BB下注)
                "1.5": {
                    # 作出动作 raise 4BB 时的手牌范围
                    "raise 4BB": ["88+", "ATs+", "KJs+", "QJs",
                                    "JTs", "T9s", "98s", "AQo+"]
                }
            }
        },
        # 玩家上回合行为: raise 4BB
        "raise 4BB":{
            # 对手行为: 3bet
            "3b": {
                # 底池范围: 8BB-12BB
                "8-12": {
                    # 作出动作 raise 2.5X 时的手牌范围
                    "raise 2.5X": ["AA", "AQo"],
                    # 作出动作 call 时的手牌范围
                    "call": ["KK-99", "AQs+", "AKo"]
                },
                # 底池范围: 12BB-15BB
                "12-15": {
                    "raise 2.1X": ["AA", "AQo"],
                    "call": ["KK-TT", "AQs+", "AKo"]
                },
            ...
        },
        # 玩家上回合行为: raise 2.5X
        "raise 2.5X": {
            # 对手行为: 5bet
            "5b": {
                # 底池范围: 任意
                "any": {
                    # 作出动作 all-in 时的手牌仅为 AA
                    "all-in": ["AA"]
                }
            }
        },
        "raise 2.1X": {
            "5b": {
                "any": {
                    "all-in": ["AA"]
                }
            }
        },
        ...
    },
    # 玩家位置: EP2-3
    "EP23" : {},
    "MP12" : {},
    ...
}

results matching ""

    No results matching ""