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

2023-05-16

ps:四川麻将AI算法已经开发完毕,现已上线运营,有需要交流的朋友请留言交流讨论

转载请说明出处:by:wojiushi3344

我想现实生活中应该有很多朋友都在玩四川麻将,不知道你有没有发现其实四川麻将是否胡牌其实也是可以用数学公式来表达的。不知道你猜到了没有?? 好了,好了 不留悬念了我直接给出来。ABCxN+AAAxN+AAx1 这个是什么意思了,意思就是你想要胡牌 那么你的牌型必须要满足以上这个公式你才能胡牌。你手牌必须是有N个顺子,或者N个刻子和一个对子组成才能胡牌。那么你现在知道了胡牌公式,那你会计算当前手牌的向听数吗?(向听数:这手牌摸几张牌能够听牌)。我想很多人打了多年的麻将,都不一定第一时间能看出手牌的向听数。这个其实在你写程序的时候非常重要,如果没有这个你就不知道别人打一张牌来,你是碰不碰,杠不杠。我可以直接告诉你其实也是有公式可以找的。

胡牌数:当手牌有N张时,最多需要N/32+1手即可胡

向听数:代表听牌最多需要N/32手听牌

这个公式我们是怎么得来的来,我们一起来看下面一张图片

b874f076b78e39407885e648d6373b79.png

大家看上面这张图片,假设我们手牌有14张,最坏的情况我们摸9张牌就可以听牌。为什么是9张不是8张,不是10张了。这个就要根据我们前面的胡牌公式来了,因为如果你要胡牌手牌就必须是连子或者或者加一个对子。那么我们这个就很好推倒出来了,一个连子由三张牌组成,一个刻子由3张牌组成,我们假设你只有连子中得一张牌,那么你就只差2张可以组成一个连子,那么你组成连子就需要2手,依次类推,你就可以得到我们最多有几首牌可以胡牌的公式。我们每组成一个搭子就会降低进听数。 N/3*2+1 下面我们一起给一张图片来计算一下胡牌的步数。

c69f3a68d33849fb7b6f8e675c200b28.png

上面这张图片需要3张牌就可以胡牌,你算对了吗?为什么是三首了,1手:我们来看1,3差一张2万,2手:889差一张7或者一张8,

3手:2饼差一张2或者3条差一张3条 我们计算这个有什么用了,只要我们能快速的计算出来这个,我们就能知道我们现在牌型到了什么阶段了,我们需要怎么出牌了。还有一个特别重要的时刻就是,我们能够快速的分辨出牌,别人出一张牌,我们是否决定要碰牌。其实决定我们是否要碰牌,就是看我们有没有让牌型向听数量倒退,这个决定是否碰牌的算法,我们放到后面来讲。

可能现在很多人有一个疑问???为什么我们要把7拆成

72516893e4844ea685b6370416c36d38.png而不是

c782e4c5fc1180c05be85d164e0d4112.png了?如果你发现了这个问题,那么恭喜你可以进入我们今天将的最重要的环节,如果拆解一个最优的牌型。

我们怎么才能拆解出最优的牌型,我们第一步就得把所有牌能组成的可能全部拆解出来。我们还是以上一首牌为例子:

0e214e9b7ab3311a6639af07424841da.png

1万3万可以组成的牌:

16a4521adb40a60e2517ab1bf5d809e8.png

7,8,,9能组成的牌

b29b0436c20d6bf3b6e055251cd0dc41.png

5筒可能组成的3种牌型

702f76fb277cf812f97bf7ed88538dc3.png

132641e054362006523283e5d878eea2.png

89afa4af135de5d11f756a1a0f3b9744.png

6筒可能组成的牌型

2d611bf712c7a9b832e7c9599b985b8d.png

4f59911537ab8b1e36d059e531f2328c.png

ecb25d78a2bffb289b4c6b5f8f2229d3.png

92633801cff9f20d61f138b53739887b.png

7筒能组成的所有可能

ee66d808fbe3f8e31a8d1e001b8b1016.png

4a9d238602defd521b6606cd2f3272eb.png

c6003da6a116dbb2af32fffc22241a4c.png

163b169190a3631a003abcf98e343f91.png

7e87d2d4ccc8b0c89ef65fe7805e07d9.png

8筒所有的可能

01439fb4e5c55efc526502ca55a22288.png

d8805dde4ffa73755e72577caef9e82e.png

b1e7347d04768d102bc87a7ed7c55dbd.png

389b3f2b22ad474563184921a413467b.png

9筒所有的可能

157bfa12189996ce24a0e154707eac31.png

72e37092b7afd58cfcab97cb58386824.png

我们通过这个计算就能完成第一步把这手牌所有能组成的搭子全部拆解出牌,我们知道一首牌胡牌为N/2*3+1,那么搭子的最大数量也就为N/3+1,这个大家下面可以自己去推算,我在这里就不一一讲解了,然后我们通过排列组合的方式至多组合5个搭子,看哪一个分数最大,听牌数量最少的。则为我们当前的最优拆牌方案,我们后面出牌就以这个为参考的标准出牌。后面有时间持续更新四川麻将的AI算法。这里我们可以给每一个搭子分配一个分数,为了后面计算。

75bb408508805da014da76aea3507654.png

这里为什么有第一个对子99了,因为我们胡牌只需要一个对子,2个对子就不能胡牌,所以只能给一个对子99分。上面理论部分的东西基本已经全部讲完,不知道大家有没有思路,有没有想法了,下面我给出python的实现的代码,需要的朋友可以点击链接下载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四川麻将java_四川麻将纯AI算法------最优拆牌 的相关文章

  • 主机中修改docker 容器中的配置文件

    前言 最近在学习docker 过程中遇到这样一个问题 xff1a 在mysql容器中修改了mysql相关的配置 xff0c 重启mysql 服务时 xff0c docker中的mysql容器会关闭 这时候使用docker start 容器名
  • 打不开磁盘...或它所依赖的某个快照磁盘

    这主要是非正常关虚拟机造成的 xff0c 具体原因如下 xff1a 虚拟机为了防止有多虚拟机共用一个虚拟磁盘 xff08 就是后 缀为 vmdk那个文件 xff09 造成数据的丢失和性能的削弱 xff0c 每次启动虚拟机时会给每个虚拟磁盘加
  • shiro-cas------自定义登录页面

    我的自定义登录页 xff08 需要登录页面的 xff0c 推荐给你们一个登陆页面地址 xff09 我的项目结构 xff1a 学习过程参考官方文档https apereo github io cas 5 3 x installation Us
  • docker安装nacos

    这里我们安装单机nacos集群 Nacos的单节点模式 standalone xff0c 配置的数据是默认存储到内嵌的数据库derby中 如果我们要搭建集群的话 xff0c 数据需要共享 xff0c 此时内嵌数据库无法满足 xff0c 需要
  • Java从控制端输入一个未知长度的数组

    String str 61 sc next toString String arr 61 str split 34 34 int b 61 new int arr length for int j 61 0 j lt b length j
  • win10 安装db2 10.1 并使用DBserver连接db2数据库

    系统 xff1a win10 64 专业版 db2下载 xff1a 链接 xff1a https pan baidu com s 1IiAUdRUTIDcGAew7WbVTHQ 提取码 xff1a wzpg dbServer 链接 xff1
  • win10 安装 cognos 10.2.0

    安装包链接 xff1a 链接 xff1a https pan baidu com s 1z yMlvjd1fMHXOv gbCc8A 提取码 xff1a jcfd 这里我安装到d盘cognos下 bi svr 32b 10 2 win ml
  • CentOS 7的安装

    访问其官网 xff0c https www centos org xff0c 点击Get CentOS Now xff0c 点击alternative downloads xff0c 点击CentOS 7列表中的x86 64 xff0c 点
  • PowerDesigner16.5汉化破解版安装教程(含安装文件、汉化包、破解文件)

    一 软件安装 1 下载安装包 xff08 包含安装文件 汉化包 破解文件 xff09 xff0c 下载链接在文章最后 xff0c 失效请留言 2 下载后文件内容如下 3 进入安装文件中双击安装文件等待初始化完成后选择next 4 继续下一步
  • 数据库设计——评论回复功能

    1 概述 评论功能已经成为APP和网站开发中的必备功能 本文主要介绍评论功能的数据库设计 评论功能最主要的是发表评论和回复评论 xff08 删除功能在后台 xff09 评论功能的拓展功能体现有以下几方面 xff1a xff08 1 xff0
  • 问答社区竞品分析——知乎与悟空的较量

    1 产品定位 知乎 精英化 知乎的产品定位是知识分享性的社区平台 xff0c 面向各行业精英人群和广大网友 属于知乎大V的精英人群在此发表自己的见解 xff0c 寻找精神上的认同和物质上的奖励 而广大网友在此获得感兴趣的知识或作为娱乐消遣的
  • VirtualBox搭建CenterOS7-Docker,实现IntelliJ IDEA部署Springboot Docker镜像

    服务器安装 Docker 首选安装在Linux系统上 xff0c xff08 有钱的大佬可以直接在阿里云买服务器 xff0c 可以省略这个步骤 xff09 开始为了偷懒在 win7上安装了DockerToolbox xff08 win10安
  • 757计算机电子元件,飞行员的好帮手 波音757的发动机指示与机组报警系统简介...

    原标题 xff1a 飞行员的好帮手 波音757的发动机指示与机组报警系统简介 陈光 文 在以往的飞机中 需要驾驶员监测的发动机参数均是利用驾驶舱仪表板上的电子 机械仪表来显示的 再用一些声 光告警装置在飞机 发动机的某些系统与元件出现故障或
  • linux crontab 每隔10秒执行一次

    linux下定时执行任务的方法 在LINUX中你应该先输入crontab e xff0c 然后就会有个vi编辑界面 xff0c 再输入0 3 1 clearigame2内容到里面 wq 保存退出 在LINUX中 xff0c 周期执行的任务一
  • 生命的轨迹会沿着期望的方向走去

    生命的轨迹会沿着期望的方向走去 平凡的世界 飘 巴黎圣母院 我的苦难我的大学 活着 幸福了吗 痛并快乐着 大学期间 xff1a 狼图腾 我的大学 高尔基 读大学该读什么 霍乱时期的爱情 百年孤独 断舍离 穆斯林的葬礼 宋庆龄传 西班牙旅游日
  • MySQL [Err] 1241 - Operand should contain 1 column(s)

    Operand should contain 1 column s 翻译过来就是 xff1a 操作数应包含一列 xff1b 错误原因 往往是我们多出一列操作数 xff0c 或者给的参数格式不正确 xff1b 解决方法 xff1a Demo1
  • docker-compose开机自启动设置

    前提 需要设置docker开机自启动 xff1a systemctl enable docker docker compose开机自启动两种方式 第一种方式 主要步骤如下 xff1a xff08 1 xff09 创建docker compo
  • NFS使用详解之三.NFS传输速度优化

    十 nfs的传输速度优化 如果按 mount o nolock 192 168 1 220 假设为宿主机ip mnt nfs mnt nfs t 来mount xff0c 传输速度可能很慢 xff0c 只有几K到几十K左右 xff0c 所以
  • Auto-created primary key used when not defining a primary key

    When you define a model in Django without specifying a primary key Django will automatically create a primary key for yo
  • linux ed命令的使用

    ed 编辑器是 Linux 操作系统下最简单的文本编辑器 它是以行为单位对文件进行编辑的编辑器 xff0c 而不像 MS DOS 系统下的 edit 那样是以整个屏幕框架为单位对文件进行编辑的 因此 xff0c 如果你已经习惯了使用 edi

随机推荐