• 德州扑克AI


    德州扑克:

    1:outs数,就是所听的牌的数量。
      例子:
        1:听顺子      4567 outs数就是8,能够成顺子的牌为3和8。
                  5689 outs数就是4,能够成顺子的牌只有7。
        2:听同花        359J outs数就是9,能够成牌的是同一种花色的'A','2','4','6','7','8','10','Q','K'。
        3:听同花顺     4567 outs数就是2,能够成牌的是同一种花色的'3','8'。
                  5689 outs数就是1,能够成牌的是同一种花色的'7'。
        4:听同花或顺子   4567 outs数就是15,能够成牌的是同一种花色的'A','2','3'(4张),'8'(4张),'9','10','J','Q','K'。
        5:听对子        3  outs数就是3。
        6:听三条       33 outs数就是2。
        7:听四条       333 outs数就是1。
        6:听葫芦        332 outs数就是5('3','3','2','2','2)。



    2: 成牌率,就是成为某一种牌型的概率
       1:听顺子 4567 outs数就是8,1手成牌概率 不讨论(因为只有2张手牌)
                      2手成牌概率 (1 - (39 * 38 / 46 / 47)) * 100% ——>>解释:39是47-8获取的, 38是46-8
                      3手成牌概率 8 / (46) * 100%

            5689 outs数就是4,1手成牌概率 不讨论(因为只有2张手牌)
                      2手成牌概率 (1 - (43 * 42 / 46 / 47)) * 100% ——>>解释:43是47-4获取的, 42是46-4
                      3手成牌概率 4 / (46) * 100%

      2:听同花 359J outs数就是9,  1手成牌概率 不讨论(因为只有2张手牌)
                      2手成牌概率 (1 - (38 * 37 / 46 / 47)) * 100% ——>>解释:38是47-9获取的, 37是46-9
                      3手成牌概率 9 / (46) * 100%

    3:听同花顺 4567 outs数就是2,  1手成牌概率 不讨论(因为只有2张手牌)
                      2手成牌概率 (1 - (45 * 44 / 46 / 47)) * 100% ——>>解释:45是47-2获取的, 44是46-2
                      3手成牌概率 2 / (46) * 100%

          5689 outs数就是1,  1手成牌概率 不讨论(因为只有2张手牌)
                      2手成牌概率 (1 - (46 * 45 / 46 / 47)) * 100% ——>>解释:46是47-1获取的, 45是46-1
                      3手成牌概率 1 / (46) * 100%

    4:听同花或顺子 4567 outs数就是15 1手成牌概率 不讨论(因为只有2张手牌)
                      2手成牌概率 (1 - (32 * 31 / 46 / 47)) * 100% ——>>解释:32是47-15获取的, 31是46-15
                      3手成牌概率 15 / (46) * 100%

    5:听对子 3 outs数就是3。     1手成牌概率
                      2手成牌概率 (1 - (44 * 43 / 46 / 47)) * 100%
                      3手成牌概率 3 / (46) * 100%

    6:听三条 33 outs数就是2。     1手成牌概率
                      2手成牌概率 (1 - (45 * 44 / 46 / 47)) * 100%
                      3手成牌概率 2 / (46) * 100%

    7:听四条 333 outs数就是1。    1手成牌概率
                      2手成牌概率 (1 - (46 * 45 / 46 / 47)) * 100%
                      3手成牌概率 1 / (46) * 100%

    6:听葫芦 332 outs数就是5      1手成牌概率
                      2手成牌概率 1:差两张 (1 - (43 * 42 / 46 / 47)) * 100% * (1 - (43 * 42 / 46 / 47)) * 100%
                            2:差一张 (1 - (43 * 42 / 46 / 47)) * 100%
                      3手成牌概率 1:差两张 0%
                            2:差一张 4 / (46) * 100%



    3:德州扑克outs和成牌概率对照表 outs数 flop后未现张数 turn后未现张数 turn成牌概率 river成牌概率 turn+river成牌概率(不是加法)
    1 47 46 2.1% 2.2% 4.3%
    2 47 46 4.3% 4.3% 8.4%
    3 47 46 6.4% 6.5% 12.5%
    4 47 46 8.5% 8.7% 16.5%
    5 47 46 10.6% 10.9% 20.4%
    6 47 46 12.8% 13.0% 24.1%
    7 47 46 14.9% 15.2% 27.8%
    8 47 46 17.0% 17.4% 31.5%
    9 47 46 19.1% 19.6% 35.0%
    10 47 46 21.3% 21.7% 38.4%
    11 47 46 23.4% 23.9% 41.7%
    12 47 46 25.5% 26.1% 45.0%
    13 47 46 27.7% 28.3% 48.1%
    14 47 46 29.8% 30.4% 51.2%
    15 47 46 31.9% 32.6% 54.1%



    4:对其他玩家的outs数和成牌概率的计算和自己的算法一样,下边是对其他玩家的数据分析统计

    1:比如自己的手牌数是 '3'和'A', 公共牌是'4','5','6','7','K'。那么对于别人牌型的估计
    1:成顺子outs是7,需要去除自己手上的一张3。 成顺子的概率(1 - 38 * 37 / 45 / 44) * 100%

    2: 成对子的概率 = 对方手中是对子的概率 + 成'44', '55', '66', '77', 'kk' 的概率 - 同时成两个以及以上的概率

    对方手中是对子的概率,计算方法:从'A'到'K'一共13组牌,其中7组是3张,6组是4张
               2     2
    成牌种类有 M = 7 * C + 6 * C
               3     4
             2
    总共的总类 N = C
             45

    所以对方手中是对子的概率A = M / N * 100%

                1
    与公共牌成牌的概率B = C * (1 - 42 * 41 / 45 / 44)
                5

    所以总的成对子的概率是 A + B

    2:比如自己的手牌数是 '3'和'3', 公共牌是'4','5','6','7','K'。那么对于别人牌型的估计
    1:成顺子outs是6,需要去除自己手上的两张3。 成顺子的概率(1 - 37 * 33 / 45 / 44) * 100%

    2: 成对子的概率 = 对方手中是对子的概率 + 成'44', '55', '66', '77', 'kk' 的概率 - 同时成两个以及以上的概率

    对方手中是对子的概率,计算方法:从'A'到'K'一共13组牌,其中7组是3张,6组是4张
              2      2    2
    成牌种类有 M = 1 * C + 5 * C + 7 * C
              2     3     4
             2
    总共的总类 N = C
             45

    所以对方手中是对子的概率A = M / N * 100%

                1
    与公共牌成牌的概率B = C * (1 - 42 * 41 / 45 / 44)
                5

    所以总的成对子的概率是 A + B

    3:通过上边的可以分析出自己手牌的不同是对结果分析有一些差别的,自己的手牌是对其他玩家的牌型分析有一定的影响结果。
    有时候自己的手牌能够影响到对其他玩家成牌种类和成牌率的,实际情况远比举例子的复杂很多。

    5:德州扑克弃牌,下注
    1: 现在有3名玩家A,B,C,桌子内筹码6000,如果每一家的牌都差不多,那么2000以及一下就会下注,高于2000就会选择弃牌。
    这时候假如一家选择弃牌,还有两家选择跟进,这时候桌子内的筹码就是10000,如果低于5000选择跟,大于5000选择放弃牌。

    2: 选择弃牌还是下注,比如现在你能赢的概率是M(0<M<1),桌子内筹码N,如果需要筹码X>MN则弃牌,否则下注。

    3: 例子 :假设现在只有2个人,桌子内筹码N,自己是跟注,还是弃牌,还是allin
    自己手牌'K', '8'
    对方手牌未知
    公共牌是'6','6','7','9','Q'
    不考虑对方加注等其他因数,单从概率上分析:
    自己最大牌是'6','6','K','Q','9',为对子牌

    计算对方能够大于自己的概率 P = P1 + P2
                    2     2    2   2
    P1 = 对方手牌是对子的概率 (1 * C + 5 * C + 7 * C ) / C
                    2    3     4   45

    P2 = 对方手牌是高牌 只考虑大于自己的 4 / 45 {有一张'A'} + 3 / 45 {有一张'K',因为自己有一张'K',所以上标是3} * 16 / 45{小于自己最小牌'8',但非7非6 }
    + 2 / 45 {有一张'6'} + 3 / 45 {有一张'7'} + 3 / 45 {有一张'9'} + 3 / 45 {有一张'Q'}

    如果需要的筹码 M > N * (1 - P) 则弃牌,否则跟牌, 如果 P 小于某一个临界值就allin

    如果有同花是需要考虑的,下边会有详细讨论

    例子: 自己手牌'6', '6'
    对方手牌未知
    公共牌是'6','6','7','9','Q'

    此种牌型,已经知道自己是金刚了
    1:公共牌'6','7','9'如果不是一个花色 我们可以知道对方赢的概率P = 0
                                     2
    2:公共牌'6','7','9'如果是一个花色 我们可以知道对方赢的概率P = 1 / C = 0.001
                                     45
    3: 在P小于一个值的时候我们可以选择allin

    4:实际情况远远比现在举的例子复杂的多,很多时候是有多个条件相互影响的,这种情况下就需要分清主要影响和次要影响,对于影响的可能性做一个优先级。
    和人对战的时候还会参杂人的情绪等。

    4: 在编写德州机器人的过程中不要想着每一局,你需要的是抓住10%左右的机会....

    5: 后续...

    6: 德州的资金管理机制
    德州扑克的资金管理之所以那么重要,因为德州扑克除了各种知识、统计、打法等等可以学到的技术之外,最关键的心理部分,是来自人类对胜利的渴望,以及对财富得失的贪婪与恐惧。
    1:对于德州来说底注的筹码远远少于在牌桌上赢的筹码,有时候你赢100次底注筹码,可能就在一次加注或者allin全部输完、
    2:影响德州输赢是 分析+运气
    3:做好筹码调整即时避免不必要的损失(在你想跟又不敢跟,想弃牌有不舍得的时候,一个冲动的决定就...)
    4:对确定的牌型做好分析,根据确定的数据对不确定的做一些概率上的预测
    5:资金管理是一个好的德州扑克机器人应该做的,没有一个良好的资金管

    7: 现在德州中的数据基本都是理论值,与实际值可能相差较大,需要后续对数据的分析和优化。我们现在的德州机器人只完成了很小一部分,不过机器人的接口都是有预留的。

    8: 一个好的德州机器人需要长时间的去维护改进,很多参数的值都是在不断的分析中去接近真值。让机器人像人一样思考,大家一起努力。。。
    时间有限,文档整理大概只有30%左右。下边给一些文献,以方便查阅。

    9:参考文献 https://sanwen8.cn/p/601Ct7J.html
    http://www.poker90.com/3311.htm
    http://www.poker90.com/731.htm
    http://www.poker90.com/724.htm
    http://www.poker90.com/717.htm
    http://poker.sports.163.com/15/0504/15/AOPH4STU00050FOP.html
    http://www.360doc.com/content/16/0229/18/31089460_538337596.shtml
    http://www.cnblogs.com/ka200812/p/5852767.html
    http://cowboyprogramming.com/2007/01/04/programming-poker-ai/


  • 相关阅读:
    BloomFilter——读数学之美札记
    线性时间求最长回文子串
    python之装饰器详解
    多线程快速排序(思考)
    搬家
    webapp用户身份认证方案 JSON WEB TOKEN 实现
    Java多线程问题总结
    synchronized的4种用法
    线程池的工作原理及使用示例
    Http 请求 GET和POST的区别
  • 原文地址:https://www.cnblogs.com/hailong88/p/6897813.html
Copyright © 2020-2023  润新知