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

2023-05-16

ps:四川麻将AI算法已经开发完毕,现已上线运营,有需要交流的朋友请留言交流讨论
在这里插入图片描述

转载请说明出处:by:wojiushi3344

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

胡牌数:当手牌有N张时,最多需要N/32+1手即可胡
向听数:代表听牌最多需要N/3
2手听牌
这个公式我们是怎么得来的来,我们一起来看下面一张图片

在这里插入图片描述

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

在这里插入图片描述

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

可能现在很多人有一个疑问???为什么我们要把7拆成在这里插入图片描述而不是
在这里插入图片描述了?如果你发现了这个问题,那么恭喜你可以进入我们今天将的最重要的环节,如果拆解一个最优的牌型。
我们怎么才能拆解出最优的牌型,我们第一步就得把所有牌能组成的可能全部拆解出来。我们还是以上一首牌为例子:
在这里插入图片描述

1万3万可以组成的牌:在这里插入图片描述

7,8,,9能组成的牌在这里插入图片描述

5筒可能组成的3种牌型
在这里插入图片描述在这里插入图片描述**加粗样式**

6筒可能组成的牌型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7筒能组成的所有可能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8筒所有的可能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
9筒所有的可能
在这里插入图片描述
在这里插入图片描述
我们通过这个计算就能完成第一步把这手牌所有能组成的搭子全部拆解出牌,我们知道一首牌胡牌为N/2*3+1,那么搭子的最大数量也就为N/3+1,这个大家下面可以自己去推算,我在这里就不一一讲解了,然后我们通过排列组合的方式至多组合5个搭子,看哪一个分数最大,听牌数量最少的。则为我们当前的最优拆牌方案,我们后面出牌就以这个为参考的标准出牌。后面有时间持续更新四川麻将的AI算法。这里我们可以给每一个搭子分配一个分数,为了后面计算。
在这里插入图片描述
这里为什么有第一个对子99了,因为我们胡牌只需要一个对子,2个对子就不能胡牌,所以只能给一个对子99分。上面理论部分的东西基本已经全部讲完,不知道大家有没有思路,有没有想法了,有想法的朋友可以一起交流。

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

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

  • c++应该怎样学习?c++服务器开发必备知识

    笔者从事软件开发工作5年 针对c 的特性 用途 整理的进阶式学习笔记 从浅入深地总结重点知识 本文旨在为c c 初学者 初中级开发者和意在转型c 服务器研发的同学们 对基础知识和进阶路线进行详细的整理 适合c 初学者 c 中高级开发岗的同学
  • Hadoop 安装与 HDFS 基础实践

    一 环境 xff08 1 xff09 操作系统 xff1a Linux Ubuntu 20 04 xff08 2 xff09 Hadoop 版本 xff1a 3 3 2 xff08 3 xff09 JDK 版本 xff1a 1 8 或者以上
  • select版的TCP通信

    编写代码之前 xff0c 大概先说一下利用select编写tcp的思路及select特点 select系统调用是用来让程序监视多个文件句柄的状态变化的 xff0c 程序会停在select这里等待 xff0c 直到被监视的句柄有一个或者多个发
  • ubuntu20.04上编译android 7.1

    一 安装 OpenJDK 8 sudo apt get install openjdk 8 jdk 提示 xff1a 安装 openjdk 8 jdk xff0c 会更改 JDK 的默认链接 xff0c 这时可用 xff1a sudo up
  • GIT介绍

    1 概述 对于软件版本管理工具 xff0c 酷讯决定摒弃CVS而转向Git了 为什么要选择Git xff1f 你真正学会使用Git时 xff0c 你就会觉得这个问题的回答是非常自然的 然而当真正需要用文字来回答时 xff0c 却觉得文字好像
  • 软件设计师-知识产权和标准化知识

    1 1 1 1 标准化的基本知识 什么是标准 xff1f 为在一定的范围内获得最佳秩序 xff0c 对活动或其结果规定共同的和重复使用的规则 导则 或特性的文件 xff0c 称为标准 该文件经协商一致制定并经一个公认机构的批准 标准应以科学
  • MAPREDUCE详解

    1 MAPREDUCE原理篇 xff08 1 xff09 Mapreduce是一个分布式运算程序的编程框架 xff0c 是用户开发 基于hadoop的数据分析应用 的核心框架 xff1b Mapreduce核心功能是将用户编写的业务逻辑代码
  • VNC如何连接远程服务器

    所有VPS均同时支持MSTSC VNC和手机远程控制 xff0c 本篇为VNC Viewer连接教程 1 运行已安装好的VNC Viewer xff0c 输入连接地址 xff08 如果没特别指定 xff0c 那么连接地址一般是VPS地址的端
  • 为什么硬盘只能最多有四个主分区

    主分区 xff0c 也称为主磁盘分区 xff0c 和扩展分区 逻辑分区一样 xff0c 是一种分区类型 主分区中不能再划分其他类型的分区 xff0c 因此每个主分区都相当于一个逻辑磁盘 xff08 在这一点上主分区和逻辑分区很相似 xff0
  • 查看ubuntu版本号

    转自 xff1a http www cnblogs com zero1665 archive 2010 05 24 1742962 html 方法一 xff1a cat etc issue 返回结果 xff1a Ubuntu 6 06 2
  • Android SDK聚合原理讲解(参考U8)

    想要实现一套聚合sdk框架 xff0c 我们来思考一下 xff0c 我们接入一个sdk xff0c 需要实现哪些东西 1 首先 xff0c 客户端需要接入多款SDK xff0c 为了能够多款游戏重用 xff0c 我们不可以在游戏里面直接去接
  • 高德地图POI数据2020年高德POI

    高德地图POI是Point of Interest 的缩写 xff0c 可以翻译成兴趣点 xff0c 一共有三级分类 xff08 大类 中类 小类 xff09 xff0c 其中一级分类有23个 涵盖餐饮服务 购物服务 生活服务 体育休闲服务
  • C++笔试题整理

    目录 1 笔试题1 1 1 链表反转 1 2 String 2 笔试题2 2 1 求下面函数的返回值 xff08 微软 xff09 2 2 什么是 引用 xff1f 申明和使用 引用 要注意哪些问题 xff1f 2 3 将 引用 作为函数参
  • C/C++程序实现通过http代理访问网页内容

    公司通过代理上网 xff0c C程序直接通过发http请求不能获取网页内容 xff0c 故实现了下通过代理访问http网页的一个测试程序 程序很简单 xff0c 有几个重点 先通过socket直接连接代理服务器 向代理服务器发送HTTP的C
  • Ubuntu搭建Apache+Svn+Submin环境

    1 环境搭建部分参考网站 xff1a 搭建Apache 43 Svn 43 Submin环境 2 使用submin最新版2 3 3 不通过邮件方式 xff0c 直接修改admin密码 xff1a vim passwd py 输入脚本如下 s
  • 磁力计如何用来计算姿态(2)

    上一篇 磁力计如何用来计算姿态 xff08 1 xff09 介绍了磁强计算姿态角的原理 本篇介绍 xff0c 在无人飞行器上 常用的 加速度计 43 磁强计 的定姿方法 静止状态 抑或 悬停状态 xff1a 利用加速度 计算横滚角 xff0
  • readdir_r()

    概述 xff1a 1 readdir r函数 xff0c 是readdir函数的可重入版本 xff0c 也就是线程安全的 2 readdir函数使用静态数据 xff0c 因而不可重入 xff0c 即不是线程安全的 readdir r 就是采
  • CSDN>>2011年重大IT安全事件回顾

    在2010年新年前夜 xff0c 由于无人知道密码 xff0c 旧金山无法获取其紧急行动中心上运行的备份系统 xff0c 这或许可以被视为一个不祥的预兆 2011年即将过去 xff0c 我们需要回顾并盘点一下这一年中发生的重大IT安全事件
  • FRP入门篇

    目录 一 前言 1 概述 2 原理 3 支持功能 4 适用场景 二 环境准备 三 使用 1 安装包下载 2 服务端部署 2 1 上传安装包 2 3 启动服务端 3 客户端部署 3 1 代理服务准备 3 2 上传安装包 3 3 客户端配置 3
  • Python 笔记(14)— 类对象及属性内置方法 classmethod、delattr、dir、hasattr、getattr、callable

    1 classmethod Python 使用关键字 class 定制自己的类 xff0c self 表示类实例对象本身 classmethod 修饰符对应的函数不需要实例化 xff0c 不需要 self 参数 第一个参数需要是表示自身类的

随机推荐