德州扑克:

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/

德州扑克AI的更多相关文章

  1. 德州扑克AI实现 TexasHoldem Poker

    参考了一下这篇文献,http://cowboyprogramming.com/2007/01/04/programming-poker-ai/ 自己用go实现了一个德州扑克AI,效果还可以. 正常和它 ...

  2. 德州扑克AI WEB版

    继续之前的德州扑克话题,上次的DOS界面确实没法看,我女朋友说这是什么鬼.哈哈,估计只有自己能玩了 这两天重构了一下界面,基于web服务器和浏览器来交互. 服务器和客户端之间用websocket通信, ...

  3. 德州扑克AI--Programming Poker AI(译)

    前言: 最近在研究德州扑克的AI, 也想由浅入深的看下, 在网上找了一圈, 发现很多文章都提到了一篇文章: Programming Poker AI. 仔细拜读了一下, 觉得非常不错. 这里作下简单的 ...

  4. java和h5 canvas德州扑克开发中(二)

    德州扑克网页源码在github上分享 https://github.com/lxr1907/pokers 感兴趣的可以上去看下. 1.通讯使用websocket,主要在message.js中. 2.用 ...

  5. java和h5 canvas德州扑克开发中(一)

    先附上我的德州扑克测试地址 http://120.26.217.116:8080/LxrTexas/texasIndex.html 我和一个朋友的德州扑克历时一个多月开发,目前已经基本可玩. 前端主要 ...

  6. [swustoj 1088] 德州扑克

    德州扑克(1088) 问题描述 德州扑克是一款风靡全球的扑克游戏.德州扑克一共有52张牌,没有王牌.每个玩家分两张牌作为“底牌”,五张由荷官陆续朝上发出的作为公共牌.开始的时候,每个玩家会有两张面朝下 ...

  7. 2015华为德州扑克入境摘要——软体project

    直到6一个月2号下午12时00,华为长达一个月的德州扑克锦标赛落下帷幕也被认为是. 我们的团队一直共同拥有3民,间.一个同学(吴)负责算法设计,一个同学(宋)负责分析消息,而我负责的实现框架设计和详细 ...

  8. 德州扑克AK打法攻略

    AK是所有德扑网游中最受争议的底牌,也是一副令人又爱又恨的底牌.<德州扑克培训大师>根据国内德州扑克网游特性,为大家制作了第一套AK打法攻略,希望所有玩家从今天开始能正确认识AK,发挥AK ...

  9. 实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS

    实现简易版德州扑克 1.先上达到网页效果图(简易版德州扑克) 网页分为发牌区和牌池,上面为发牌区,下面是牌池区 2. 代码实现 2.1 HTML和JS代码 ` <link rel="s ...

随机推荐

  1. 【bzoj1774-过路费】floyd+排序

    题意:n个点,m条双向边,每个点有权值c[i],每条边有权值a[i].d,一条路径的费用=每条边的权值和+各个点的权值的最大值,即sigma(a[i].d)+max(c[i]).q个询问,问x到y的最 ...

  2. bzoj3716/4251 [PA2014]Muzeum

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3716 http://www.lydsy.com/JudgeOnline/problem.ph ...

  3. bzoj 4552: [Tjoi2016&Heoi2016]排序——二分+线段树

    Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...

  4. hdu 4190 Distributing Ballot Boxes(贪心+二分查找)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4190 Distributing Ballot Boxes Time Limit: 20000/1000 ...

  5. 空间数据库系列一:geomesa&sparksql 分析环境搭建

    geomesa sparksql 分析环境搭建 1.安装hbase-1.3.2.1 standlone版本,作为geomesa的store a.修改配置文件:hbase-1.3.2.1/conf/hb ...

  6. Vue组件-组件的属性

    在html中使用元素,会有一些属性,如class,id,还可以绑定事件,自定义组件也是可以的.当在一个组件中,使用了其他自定义组件时,就会利用子组件的属性和事件来和父组件进行数据交流. 比如,子组件需 ...

  7. selenium===介绍

    selenium 是支持java.python.ruby.php.C#.JavaScript . 从语言易学性来讲,首选ruby ,python 从语言应用广度来讲,首选java.C#.php. 从语 ...

  8. 菜鸟进阶之:VC++之Visual Studio中DLL调用实现

    C++写的DLL,用C++调用其实是一个比较简单的事情,调用DLL函数的方法其实有很多,说一个最普通的方法: 1.新建一个解决方案,文件->新建项目->Visual c++->win ...

  9. vue做购物车

    写一点废话,昨天敲代码找bug,找了好久都没找到,后来一哥们找到他说,找代码的bug就像男女朋友吵架,女问男你错了没,男说错啦,女再问错哪了,男傻眼了不知道错哪.在找代码的过程中一直知道我错啦就是找不 ...

  10. Makefile系列之二 : 命令

    一.显示命令 echo “@”字符可以控制命令是否在屏幕上显示,如 @echo 正在编译XXX模块......  输出: 正在编译XXX模块...... 如果没有“@"则输出 : echo ...