德州扑克:

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. 2015/8/18 Python基本使用(2)

    关于判断和循环语句 Python的判断和循环语句非常直观,读起来很接近自然语言. 判断语句if标准的if语句是如下结构: if expression: if_suite 如果expression的表达 ...

  2. C11简洁之道:类型推导

    1.  概述 C++11里面引入了auto和decltype关键字来实现类型推导,通过这两个关键字不仅能方便的获取复杂的类型,还能简化书写,提高编码效率. 2.  auto 2.1 auto关键字的新 ...

  3. Maven -- 在进行war打包时用正式环境的配置覆盖开发环境的配置

    我们的配置文件一般都放在  src/main/resource 目录下. 假定我们的正式环境配置放在 src/main/online-resource 目录下. 那么打成war包时,我们希望用onli ...

  4. Type.IsAssignableFrom 方法

    方法: public virtual bool IsAssignableFrom ( Type c ) 1.如果 c 和当前 Type 表示同一类型2.当前 Type 在 c 的继承层次结构中3.当前 ...

  5. JavaScript字符串逆序

    如何对字符串进行倒序呢?你首先想到的方法就是生成一个栈,从尾到头依次取出字符串中的字符压入栈中,然后把栈连接成字符串. var reverse = function( str ){ var stack ...

  6. elementui table 多选 获取id

    //多选相关方法 toggleSelection(rows) { if (rows) { rows.forEach(row => { this.$refs.multipleTable.toggl ...

  7. Android跳转到拨打电话的页面

    在Android6.0之后,拨打电话需要用户授予动态权限,项目中有此需求,有一种简单的方法,直接携带电话号码跳转到系统拨打电话的页面,很多应用也是这么做的,这样可以减轻工作量 代码如下: Androi ...

  8. node启动服务

    npm install http-server -g http-server ipconfig查看当前ip 手机可访问第一个网址.

  9. 关于tcp连接对象在多进程中的错误:pickle.PicklingError

    如果需要在多进程中使用tcp连接的对象,那么不能再主进程中将这个对象创建好当做参数传给子进程,因为在创建子进程是需要序列化对象,然而socket对象是不能序列化的,会产生一个pickle.Pickli ...

  10. 应用程序有bug崩溃重启的案例

    1.程序主界面代码 using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;u ...