人在四川过年,免不了上桌打麻将,作为一个标准的麻将新手,上桌送钱是免不了的,当然在这个运七技三的游戏中,本民工居然还偶然有一天赢了一点点钱。

于是这个引起了本民工的好奇,实际上民工本人以前开发过斗地主外挂,还搞了三个麻将作弊APP还有配套的蓝牙硬件,有两个是用手机控制麻将出牌,有一个是用手机查看桌上所有人手上牌的(原理是用IC麻将牌)。

所以,一定要远离赌博,珍爱生命!

因为好奇加上正好过年有时间,本民工于是想用实现一个能够自打麻将的小程序,首先是使用图像识别的方法获取出牌和发牌信息,其实模拟按键操作出牌,理论这样种采用图像识别的外挂是封不了的,因为图像识别对本民工来说完全不是事儿,大概2007年时间,已经有一样的方法做了一个自动偷菜外挂。所以难点就只在麻将出牌AI和攻防AI上了,然后先查询了一下当前麻将AI的现况,好象当前基本是采用“有限状态机”和博弈树alpha-beta来,实现水平还没有达到人类顶级高手。当然既然已经有了在围棋上大杀四方的狗,麻将应该也不远了,当然狗用的是Deeplearning来做,正好Deeplearning也正好是本民工在玩的东西。所以想尝试弄一个AI玩一下。但是弄下为,实际情况是…

又掉坑里了。

首先是想Deeplearning一下,发现没有样本!

其次,找了很久,网上也没有什么像样的开源库可以直接用,好不容易找到一个算和牌(胡牌)的源码,结果一看,效率低得吓人。世上一切都是有代价的,计算机的基本代价就是空间与时间,算法不优化,很多玩法(主要是笨方法)没得搞。

算了,反正过年闲着,先发明一下轮子吧。

第一步,概率估算。

蒙特卡洛法。本来本民工是想用蒙特卡洛法去生成海量样本的,然后统计出一些有意思的概率,然后把相关概率形成参数表,供后面的博弈树alpha-beta搜索优化用。

蒙特卡洛法,原理在这里就不表述了,但是这个的确是一个非常非常优秀的搞法,在处理复合概率问题方面,特别适合本民工这样不喜欢动脑的人。

因此在样本生成的过程中,一些有意思的数据就出来了。

先看一下地胡的概率。

注意一点: 因为出牌AI还没有完成,目前还没有让程序开始自动对弈,本文给的地胡概率并不准确,这个概率只是上手就有可能胡的概率。

以下是三个数据

总体大概做了十几次发牌测试吧,因为每次要大概十分钟时间,太浪费宝贵时间,还不如多娱乐下别的,所以十几次也够了,出现地胡的概率是46W~116W次这样,抽样中值位置大约是80万。

需要说明的这不是一个严肃学术研究,只是一个有意思的测试。所以本民工的随机发牌程序实际是每家发了14张牌。所以真正有地胡的概率是320万(只有庄家是会起手拿14张牌)。

另外,这个是四川麻将,四川麻将是108张牌,只有万、条、筒。实际上概率大了很多。

结论就是:打四川麻将地胡的概率是320万分之一,这个概率… 比摸百万大奖还要难。简单算了一下,平均一天打10场麻将,大概平均要876年可能搞得上一次地胡。

好了地胡概率算出来了。下面是天胡。

不好意思天胡概率,还没有算出来。

本民工做了大概率四次每次3000万的抽样(每次要搞4个小时左右,太浪费时间),抽样样本是1.2亿次,因为只有庄家有条件天胡,所以实际是抽样4.8亿次没有出现一次天胡。

所以本民工算是明白了,为什么传说中会有老头摸到天胡,激动得那个…,这个概率真是太低了。因为这个概率本民工现在也没有算出来,现在还不敢乱说,那天把发牌和计和程序改成并发后,找台电脑让他去瞎算吧。

但是不论是地胡还是天胡它的实际概率,怎么说呢?远比本民工想象的要低非常多,因为我身边出现过两次,打牌时朋友和我说他的牌是摸了一张就上听,虽然没有地胡上,但实际上320万分之一这个就是四川麻将摸牌上听的概率。我怎么可能有这么好运气呢?当然需要说明的是,从小到大我没有听说身边有人地胡过,也许是身边没有人打作弊麻将吧。

另外,再分享一下,一个有意思的概率。

就是起手有一个对加上3副牌(含两个对)的概率,同时还缺了一门牌的概率,大概是6万分之一。平均一天打10场麻将,大概16年能搞得上来一次。这个似乎比较平民化,打麻将的人人都有机会,不过似乎也比我想象的要低。本民是不是应该检查一下算法的问题了?

说到最后,放个彩弹。

不知道大家没有仔细看图,实际上本民工已经随机抽样出来了天胡牌。请仔细看数据图2。因为只出现了一次,所以没有形成统计样本。

四川麻将出现天胡与地胡的概率相关推荐

  1. C语言四川麻将算法,四川麻将中番种是如何计算的详细解析

    同城游中的四川麻将里都是有番数的,不过对新手玩家而言,计番是个头疼的问题,那么麻将中有都哪些番数呢?现在赶紧来看看四川麻将番种是如何计算的详细解析吧. 四川麻将中基础牌型(格)与基本番数 平胡:普通的 ...

  2. 检测四川麻将是否胡牌算法的实现

    自己写了一个四川麻将胡牌的算法,加入有两组牌让你判定是否胡牌,就只是最简单的那种胡法,非常不完善. 其中 char *as1 = "1W1W2T2D3W3W5W5W7W7W8W8W9W9W& ...

  3. 四川麻将必胜攻略笔记(入门篇1)

    四川麻将攻略 定义 搭子 :离成型的牌型缺一张的牌,如2378,是两搭,可以成两个顺子 起手 共13张牌,先快速计算自己多少搭 胡牌 四搭一对胡牌,所以只需要四搭,不需要太多 搭数练习 总结

  4. python 图像识别实现四川麻将回放牌面数据

    python 图像识别 自动获取麻将APP实时牌面数据 前面写了一篇文章,深度学习图像识别麻将APP数据,然后结合自己的算法实现自动打麻将demo!很多朋友感兴趣.最开始做这个也只是为了研究学习图像识 ...

  5. 四川麻将AI接口说明

                                                                                仙人掌四川麻将AI使用说明 最近整理一下前段时间 ...

  6. android棋牌类游戏之“四川麻将”

    [b]经过一段时间的摸索,公司准备走棋牌类精品路线.目前已有产品的有四川麻将,诈金花.[/b] :D :D [b][color=darkred]产品名[/color][/b]:四川麻将 [b][col ...

  7. 四川麻将纯AI算法------最优拆牌

    ps:四川麻将AI算法已经开发完毕,现已上线运营,有需要交流的朋友请留言交流讨论 转载请说明出处:by:wojiushi3344 我想现实生活中应该有很多朋友都在玩四川麻将,不知道你有没有发现其实四川 ...

  8. 基于Golang TCP 开发网络游戏 CLI四川麻将 - 1.选型与结构定义

    项目介绍 基于golang tcp 开发的命令行界面网络游戏 四川麻将血战到底:下图是初步效果界面 项目地址 https://github.com/mangenotwork/CLI-Sichuan-M ...

  9. 幼麒棋牌四川麻将的扩展

    幼麒棋牌四川麻将的扩展(1) 分布式game_serve的扩展 新的改变 分布式game_serve的扩展 前几天刚git下了一份代码,研究了下,考虑怎么加一个斗地主.于是修改了下game_serve ...

最新文章

  1. php取当前是pc还是手机号,利用PHP判断是手机移动端还是PC端访问的函数示例
  2. jQuery数组处理详解(含实例演示)
  3. Zabbix discoverer processes more than 75% busy
  4. Oracle 10.2.0.4和10.2.0.5 中 OEM bug 8350262
  5. Android基础——数据持久化存储
  6. 《视频直播技术详解》系列之三:处理
  7. 同盟与对抗:谈《少女杜拉的故事》中的治疗关系(转)
  8. java (lodop) 打印实例
  9. sql server累计求和函数_窗口函数 以及 储存过程 create procedure
  10. mysql数据还原命令_mysql数据备份和还原命令:mysqldump
  11. java 铁路的运费与路程_Java语言程序设计2(16)
  12. Linux静态库与动态库
  13. 服务器搭建成虚拟空间,服务器搭建虚拟空间
  14. mysql 性别以女生升序_MySql练习题
  15. System x 服务器制作ServerGuide U盘安装Windows Server 2012 R2操作系统
  16. oracle 中的.dbf,郑怡:请问各位大师:oracle中dbf文件是什么文件?
  17. 计算机无法加载这个项目,Windows系统中出现无法加载这个硬件的设备驱动程序(代码39)的解决方法介绍 win7...
  18. 魔窗研发副总裁沈哲:移动端SDK的优化之路
  19. powerbi使用说明_一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模
  20. burpSuite之安装+配置代理+安装证书抓取https

热门文章

  1. css属性之padding和margin
  2. 在MATLAB中调用 Python
  3. 如何激活和停用NVivo的许可证
  4. 计算机科学家证书,软件自动验证的追梦者——吴志林,2020年CCF-IEEE CS青年科学家奖获得者...
  5. catkin_make时出现‘CV_RETR_TREE’ was not declared in this scope
  6. 【linux中Telnet服务的安装】
  7. Python有什么用?Python 的 10 个实际用途
  8. java mapper找不到resources下的mapper
  9. linux多网卡配置ip地址(linux一个网卡配置多个ip)
  10. 数据结构 判断括号是否匹配