德州扑克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/
德州扑克AI的更多相关文章
- 德州扑克AI实现 TexasHoldem Poker
参考了一下这篇文献,http://cowboyprogramming.com/2007/01/04/programming-poker-ai/ 自己用go实现了一个德州扑克AI,效果还可以. 正常和它 ...
- 德州扑克AI WEB版
继续之前的德州扑克话题,上次的DOS界面确实没法看,我女朋友说这是什么鬼.哈哈,估计只有自己能玩了 这两天重构了一下界面,基于web服务器和浏览器来交互. 服务器和客户端之间用websocket通信, ...
- 德州扑克AI--Programming Poker AI(译)
前言: 最近在研究德州扑克的AI, 也想由浅入深的看下, 在网上找了一圈, 发现很多文章都提到了一篇文章: Programming Poker AI. 仔细拜读了一下, 觉得非常不错. 这里作下简单的 ...
- java和h5 canvas德州扑克开发中(二)
德州扑克网页源码在github上分享 https://github.com/lxr1907/pokers 感兴趣的可以上去看下. 1.通讯使用websocket,主要在message.js中. 2.用 ...
- java和h5 canvas德州扑克开发中(一)
先附上我的德州扑克测试地址 http://120.26.217.116:8080/LxrTexas/texasIndex.html 我和一个朋友的德州扑克历时一个多月开发,目前已经基本可玩. 前端主要 ...
- [swustoj 1088] 德州扑克
德州扑克(1088) 问题描述 德州扑克是一款风靡全球的扑克游戏.德州扑克一共有52张牌,没有王牌.每个玩家分两张牌作为“底牌”,五张由荷官陆续朝上发出的作为公共牌.开始的时候,每个玩家会有两张面朝下 ...
- 2015华为德州扑克入境摘要——软体project
直到6一个月2号下午12时00,华为长达一个月的德州扑克锦标赛落下帷幕也被认为是. 我们的团队一直共同拥有3民,间.一个同学(吴)负责算法设计,一个同学(宋)负责分析消息,而我负责的实现框架设计和详细 ...
- 德州扑克AK打法攻略
AK是所有德扑网游中最受争议的底牌,也是一副令人又爱又恨的底牌.<德州扑克培训大师>根据国内德州扑克网游特性,为大家制作了第一套AK打法攻略,希望所有玩家从今天开始能正确认识AK,发挥AK ...
- 实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS
实现简易版德州扑克 1.先上达到网页效果图(简易版德州扑克) 网页分为发牌区和牌池,上面为发牌区,下面是牌池区 2. 代码实现 2.1 HTML和JS代码 ` <link rel="s ...
随机推荐
- C11简洁之道:lambda表达式
1. 定义 lambda表达式是C++11非常重要也是很常用的特性之一,来源于函数式编程的概念,也是现代编程语言的一个特点.它有如下特点: 声明式编程风格:就地匿名定义目标函数或者函数,不需要额外写 ...
- MyBatis框架的使用及源码分析(四) 解析Mapper接口映射xml文件
在<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 一文中,我们知道mybat ...
- HDFS fs 基本命令
https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#Overvie ...
- Join vs merge vs lookup
The obvious benefit of merge over join is the ability to add reject links. I can't upload pictures. ...
- TCP之Nagle算法与延迟ACK
(一)Nagle算法 为了减少网络中小分组的数目,减少网络拥塞的情况.Nagle算法要求在一条TCP连接上最多只能有一个未被确认的未完成小分组,在该分组ACK到达之前不能够发送其他的小分组,发送端需要 ...
- device tree --- #interrupt-cells property
device tree source Example1 interrupt-controller@e000e100 { ... ... #interrupt-cells = <0x1>; ...
- 【设计模式】原型模式(Prototype)
摘要: 1.本文将详细介绍原型模式的原理和实际代码中特别是Android系统代码中的应用. 纲要: 1. 引入原型模式 2. 原型模式的概念及优缺点介绍 3. 原型模式对拷贝的使用 4. 原型模式在A ...
- java===java基础学习(9)---方法参数
方法参数注意三要点: 一个方法不能修改一个基本数据类型的参数(数值型或者布尔型). 一个方法可以改变一个对象参数的状态. 一个方法不能让对象参数引用一个新的对象. package testbotoo; ...
- python基础===利用PyCharm进行Python远程调试(转)
原文链接:利用PyCharm进行Python远程调试 背景描述 有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是 ...
- ftrace 的使用【转】
转自:http://blog.csdn.net/wang6077160/article/details/7814279 ftrace 的使用 ftrace 在内核态工作,用户通过 debugfs 接口 ...