zoukankan      html  css  js  c++  java
  • 德州扑克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/


  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/hailong88/p/6897813.html
Copyright © 2011-2022 走看看