内容简介:德州扑克算法 用于带鬼牌的德州扑克的算法,目前支持两张鬼,包括以下功能 查表算法(内存占用十几M) 评估算法(内存占用300M) 使用 <dependency> <groupId>com.github.esrrhs</groupId> <artifactId>...
德州扑克算法
用于带鬼牌的德州扑克的算法,目前支持两张鬼,包括以下功能
- 查表算法(内存占用十几M)
- 评估算法(内存占用300M)
使用
<dependency> <groupId>com.github.esrrhs</groupId> <artifactId>texas_algorithm</artifactId> <version>1.0.12</version> </dependency>
// 获取2张手牌5张公牌的最大的5张牌 TexasAlgorithmUtil.getMax("黑2,黑3", "方2,方A,黑7,黑5,鬼"); // 获取7张牌的大小,用于比牌 int win = TexasAlgorithmUtil.getWinPosition("方4,方A,鬼,黑A,黑3,黑5,黑6"); // 获取2张手牌4张公牌的胜率,用于评估 float p = TexasAlgorithmUtil.getHandProbability("方3,鬼", "黑2,黑4,黑5,黑K");
测试玩玩
- 解压texas_algorithm.rar到当前文件夹
- 运行TestUtil.Main
生成表玩玩
- 解压 texas_algorithm.rar 到当前文件夹
- 运行 TexasAlgorithmUtil.Main,需要添加 vm 参数 -Xmx8000m
查表算法
查表算法,给定任意 7 张牌(5 张和 6 张也支持),查表给出 5 张最大牌的牌面以及大小、胜率、类型。查表方法很简单,下面讲一下生成表的算法。
算法实现
穷举 C(52, 7)的组合
52 张牌再加 2 张鬼牌里面选7张,一共有 1 亿多种组合,对7张牌进行编码变成 long 类型,得到一个 1 亿长度的数组。
- 给定 6 张和 5 张,也是同理生成
多线程快速排序
对这 1 亿长度的数组进行从小到大排序,排序依据就是 7 选 5 后的大小。使用多线程快速排序,在8核的机器上,排完大概需要 10 小时。
- 如果把最终的查表算法替换原始的比牌算法,速度可以缩短到2小时。
结果输出
数组已经排好序,现在按照顺序输出到一个文件,内容有 key、大小顺序、ma x牌的值、max 牌的类型、可阅读的牌面信息。最后文件大小差不多 12G。
- 注意到大小其实是阶梯状的,就是有很多牌是一样大,但是先后顺序不同,所以在输出的时候,要再做一下比牌处理。
结果去色
1 亿条数据如果直接用,内存会爆,使用去色算法缩减规模。分为有花色和无花色两个文件,最后文件总大小 18 M。实际加载到内存占用几十 M。
- 对于同花的类型,比如同花、同花顺、皇家同花顺,7张牌的分布肯定是比如红红红红红梅黑,就是至少 5 张牌是同花色的,于是可以转变花色成为方方方方方黑黑,节省 key 值
- 对于非同花的类型,花色毫无作用,那么只需要把花色全去掉,变成方方方方方方方即可
查询方法
给定 7 张牌,先去同花表里查,如果没有就去非同花表里查,两个都有就谁大选谁。
评估算法
评估算法,给定 2 张手牌,0-4 张公牌,大致估算出这手牌在 1v1 情况下的胜率。
算法实现
胜率计算
注意到前面已经生成了 7 张牌的大小顺序了,那么现在给定 N 张牌(2<=N<=6),只需要去 7 张牌的集合里遍历,看包含这 N 张牌的 7 张牌的胜率,做一下平均值就是平均胜率。顺便还会生出最大胜率最小胜率。5个输出文件最终大小是 2G。
结果去色
这个N张牌的胜率表同样存在重复的,采用类似的方法去掉花色,分为两张表,查询先查询原始表,没有再去查询去掉花色的表。通过这种方法,6 个文件可以缩减到 300 M。实际加载到内存差不多 200 M。
公牌查询
把公牌代入上面计算的胜率表中,查询得到公牌的胜率情况,也就是说对方用这个公牌去组成 7 张牌的平均胜率记为 P1,以及最大和最小胜率 P1Max 和 P1Min。
手牌公牌查询
把我的手牌和公牌加起来,代入上面的胜率表中,查询得到一个平均胜率 P2。注意这时候 P2 是不准确的,因为手牌被重复使用了。这里存在误差。
胜率预估
P1、P2 都已经拿到,根据 P1 和 P2 的关系用 P1Max 和 P1Min 做下差值即可得出胜率。这里假定分布是均匀的所以也会有误差。
预估误差
如果采用最原始的方法穷举所有组合,即固定手牌和固定公牌,穷举剩下公牌和对方手牌,并计算胜率,目前 2 张手牌 4 张公牌需要 20 多天才能计算完,并且数据量已经超标。通过和实际胜率比较,误差大部分在0.1 以内,比如实际胜率 0.5,预估 0.6。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- AS3.0 扑克牌乱序排列法洗牌
- 通俗易懂--决策树算法、随机森林算法讲解(算法+案例)
- 限流算法之漏桶算法、令牌桶算法
- 什么是Paxos算法?Paxos算法是区块链核心算法之一
- 一文读懂对称加密算法、非对称加密算法和Hash算法
- 算法(六):图解贪婪算法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML和XHTML权威指南(第五版)
Chuck Musciano、Bill Kennedy / 技桥 / 清华大学出版社 / 2004-6-1 / 72.00元
HTML!XHTML!级联样式表!编写网页的标准很难整理,因为各种版本的Netscape和Internet Explorer在其实现方式上千差万别。《HTML与XHTML权威指南》将这些标准全部介绍给了读者。本书作者找出了各种标准和浏览器特性,并在创建网页方面为读者提出了很多建议,以便能够被更广泛的浏览者和平台所接受。 学习HTML或XHTML和学习其他任何语言一样。大部分学生都是从......一起来看看 《HTML和XHTML权威指南(第五版)》 这本书的介绍吧!