论文部分内容阅读
麻将是中国人民的传统娱乐项目,平时有人打麻将,节假日有人打麻将,甚至发生洪水这种天灾时,也时常能见到媒体刊发“某省某市人民泡在水里打麻将”这类照片来调侃人们乐天任命的达观情绪……这样说起来,尊麻将一声国民娱乐一点也不为过。
说到麻将,它的前身马吊牌的历史至少可以追溯到一干年前。北宋年间便有名儒杨大年写过《马吊经》,而在民国名士徐珂的《清稗类钞》中更是给马吊牌找了一个冠冕堂皇的象征意义:“筒、阴象也,索、阳象也,万、数之极也,盖本乎饮食男女之意也。”和围棋千年来玩法规则基本不变相比,麻将是一个锐意进取的娱乐项目。四十张马吊纸牌在干年演变中已经进化为一百三十六块麻将。
相比于我国悠久的麻将历史,西方是直到17世纪才由传教士将这个游戏引入的。然而在世界上举行的大大小小的麻将比赛中,中国队取得的成绩并没有大家期待的那么理想——2013年举行的法国麻将锦标赛由法国人揽下前三;2014年第五届欧洲麻将锦标赛上,中国队仅获得了个人最好名次第30名,团体第37名的成绩……好在今年7月份在奥地利举行的第十一届麻将公开赛上,一位中国大妈总算一雪前耻夺得冠军。
由此看来,麻将可不是想打就能打得好的,任凭平时水平再高,到了竞技场上也要凭实力见分晓。其实,要认真分析起来,打麻将可是蕴含着很多数学原理的。
初级——如何计算牌
网上曾经流行过一个简单的麻将和牌公式:n×AAA+m×ABC+DD=14,AAA指的是“刻子”,即三个同样数值的条/筒/万,有的时候可以扩展为AAAA的“杠”;ABC指的是“顺子”,即三个相连数值的条/筒/万;DD指的是“将”,即两个相同的牌。在各种规则中这个公式需要做出不同的修正,例如某些规则中DD只能是二、五、八,而也有少数和牌牌型不在这个公式中,例如七对子的“7×DD=14”,即7组相同的牌。但是大体上这个公式是没错的啦,这就是麻将的基本玩法。
知道了和牌公式可不够,具体在打牌的时候也有讲究,这就涉及到一些简单的概率论知识了。举个简单的例子:
我们手中的牌除了一组“一条、六条、六条、八条”之外,其余的牌组已经都凑好了和牌公式中的牌型,这时摸到了一条。很明显,通常来说有两种打法:打掉八条,听一条或六条;或是打掉六条,听七条。那么哪个打法更好呢?
即使是麻将小白,只要会一点简单的数学,对这个问题也可以用概率论来判断。排除掉手里已知的牌(假设手里没有一条、六条或者七条),剩下的牌里七条有4张,一条和六条各2张,加起来一共4张。减去其他人吃碰时亮出来的牌、牌桌上已经打出来的牌,七条以及一条与六条牌数之和中剩下的牌张较多的显然出现的概率更高。
延伸这种思路,就自然产生了牌效率理论。在牌效率理论中,一副手牌的向听数定义为这副手牌离听牌还差几张,而能减少这个张数的牌就称为有效牌。打牌时需要不断减少向听数或在保持向听数不变的情况下尽量增加有效牌数以便增加和牌的概率。
虽说如此,但要计算整副手牌打哪张牌效率最高不是一件容易的事。实际计算的时候会把手牌分成若干组合,并从有效张数和改良机会着手判断计算各种组合的价值。单独的孤张价值最低,类似1、2或者8、9的边张次之,对子又次,类似2、4或者3、5一类的嵌张价值更高一些,3、4或者4、5这样的两面搭价值最高。张数更多的组合是在简单组合的基础上进行分析,打牌时则从价值最低的组合开始舍弃。这个理论对任何麻将规则都适用。
中级——如何计算复杂的牌
接下来我们把问题更深入一点,引入一些新的变量。无论是哪种规则的麻将,都有计分(算番)之说。如果你有两种打法,一种分数高而听牌数低,一种分数低而听牌数高,又该怎么选呢?这就不是很容易了。为了比较两种方案,我们可以计算它们的期望收益,也就是和牌率×和牌时得分-(1-和牌率)×其他人和牌时自己的期望失分。其中,只有和牌得分这一项是已知的。和牌率和期望失分则很难以排列组合的公式算出。这时最好的做法就是请统计学来帮忙。以期望失分为例,我们并不知道其他人的手牌具体有什么,但是我们可以通过足够多麻将牌谱的最终和牌型算出平均的和牌分数,并以此估算自己无法和牌时产生的失分。和牌率则需要在牌谱中使用适当的筛选条件——不能过大也不能过小——找出和当前听牌形势类似的牌谱来求平均值。
这种研究方法是近年来在日本麻将界产生的,中国的类似研究还是空白。他们通过切实的牌谱统计证实或证伪了很多此前的经验规律,并提出了一些新的麻将准则。因为麻将规则的差异性,日本麻将的研究结果很难直接移植到中国麻将上,但我们可以用同样的研究方法研究中国麻将的牌谱。
高级——从深蓝变成AlphaGo
如果以计算机作比,以上的这些研究方法其实有点像深蓝:通过经验或统计得出大量判断原则,并根据实际盘面判断出该打哪张牌。那么,如果这些判断原则本身就不是最优的呢?事实上,上述的统计方法也为问题的复杂度做出了一定简化。例如一个常见的反对意见是,它以期望得分作为判断依据,而无视了名次的影响—很多时候分数低一些的第一名比分数高一些的第二名好,因此当名次落后时即使风险更大也应该选择和牌分数更高的打法。
为了解决这个问题,我们就只能展望一下未来了。把AlphaGo的神经网络算法移植到麻将上并没有什么理论上的难度。它不需要为了减少复杂度而简化判定条件,同时也可以更为直接地以争胜为目标。或许AlphaGo可以跳出目前的框架,帮助我们找到新的判断原则。(关于AlphaGo神经网络算法的具体介绍,敬请回顾我们的5月号杂志。)
终极——计算有用么?
说了这么多,让我们回到一开始的问题——用数学计算麻将对胜利有帮助么?
答案是有也没有。一方面来说,正确的打法必然会提高胜率,但另一方面则是胜率的提升只有在大量牌局里才能体现出来:按一小时一圈计算,打一整晚也不过只能打十几圈。能提高2%胜率的一条原则对你这一晚的战绩恐怕没什么影响。只有按照正确的打法坚持打下去,才能在长期的对战中观察到更高的胜率。对于大多数人而言,其实不要管这么多,单纯地玩一玩麻将,享受一下才是最重要的。
说到麻将,它的前身马吊牌的历史至少可以追溯到一干年前。北宋年间便有名儒杨大年写过《马吊经》,而在民国名士徐珂的《清稗类钞》中更是给马吊牌找了一个冠冕堂皇的象征意义:“筒、阴象也,索、阳象也,万、数之极也,盖本乎饮食男女之意也。”和围棋千年来玩法规则基本不变相比,麻将是一个锐意进取的娱乐项目。四十张马吊纸牌在干年演变中已经进化为一百三十六块麻将。
相比于我国悠久的麻将历史,西方是直到17世纪才由传教士将这个游戏引入的。然而在世界上举行的大大小小的麻将比赛中,中国队取得的成绩并没有大家期待的那么理想——2013年举行的法国麻将锦标赛由法国人揽下前三;2014年第五届欧洲麻将锦标赛上,中国队仅获得了个人最好名次第30名,团体第37名的成绩……好在今年7月份在奥地利举行的第十一届麻将公开赛上,一位中国大妈总算一雪前耻夺得冠军。
由此看来,麻将可不是想打就能打得好的,任凭平时水平再高,到了竞技场上也要凭实力见分晓。其实,要认真分析起来,打麻将可是蕴含着很多数学原理的。
初级——如何计算牌
网上曾经流行过一个简单的麻将和牌公式:n×AAA+m×ABC+DD=14,AAA指的是“刻子”,即三个同样数值的条/筒/万,有的时候可以扩展为AAAA的“杠”;ABC指的是“顺子”,即三个相连数值的条/筒/万;DD指的是“将”,即两个相同的牌。在各种规则中这个公式需要做出不同的修正,例如某些规则中DD只能是二、五、八,而也有少数和牌牌型不在这个公式中,例如七对子的“7×DD=14”,即7组相同的牌。但是大体上这个公式是没错的啦,这就是麻将的基本玩法。
知道了和牌公式可不够,具体在打牌的时候也有讲究,这就涉及到一些简单的概率论知识了。举个简单的例子:
我们手中的牌除了一组“一条、六条、六条、八条”之外,其余的牌组已经都凑好了和牌公式中的牌型,这时摸到了一条。很明显,通常来说有两种打法:打掉八条,听一条或六条;或是打掉六条,听七条。那么哪个打法更好呢?
即使是麻将小白,只要会一点简单的数学,对这个问题也可以用概率论来判断。排除掉手里已知的牌(假设手里没有一条、六条或者七条),剩下的牌里七条有4张,一条和六条各2张,加起来一共4张。减去其他人吃碰时亮出来的牌、牌桌上已经打出来的牌,七条以及一条与六条牌数之和中剩下的牌张较多的显然出现的概率更高。
延伸这种思路,就自然产生了牌效率理论。在牌效率理论中,一副手牌的向听数定义为这副手牌离听牌还差几张,而能减少这个张数的牌就称为有效牌。打牌时需要不断减少向听数或在保持向听数不变的情况下尽量增加有效牌数以便增加和牌的概率。
虽说如此,但要计算整副手牌打哪张牌效率最高不是一件容易的事。实际计算的时候会把手牌分成若干组合,并从有效张数和改良机会着手判断计算各种组合的价值。单独的孤张价值最低,类似1、2或者8、9的边张次之,对子又次,类似2、4或者3、5一类的嵌张价值更高一些,3、4或者4、5这样的两面搭价值最高。张数更多的组合是在简单组合的基础上进行分析,打牌时则从价值最低的组合开始舍弃。这个理论对任何麻将规则都适用。
中级——如何计算复杂的牌
接下来我们把问题更深入一点,引入一些新的变量。无论是哪种规则的麻将,都有计分(算番)之说。如果你有两种打法,一种分数高而听牌数低,一种分数低而听牌数高,又该怎么选呢?这就不是很容易了。为了比较两种方案,我们可以计算它们的期望收益,也就是和牌率×和牌时得分-(1-和牌率)×其他人和牌时自己的期望失分。其中,只有和牌得分这一项是已知的。和牌率和期望失分则很难以排列组合的公式算出。这时最好的做法就是请统计学来帮忙。以期望失分为例,我们并不知道其他人的手牌具体有什么,但是我们可以通过足够多麻将牌谱的最终和牌型算出平均的和牌分数,并以此估算自己无法和牌时产生的失分。和牌率则需要在牌谱中使用适当的筛选条件——不能过大也不能过小——找出和当前听牌形势类似的牌谱来求平均值。
这种研究方法是近年来在日本麻将界产生的,中国的类似研究还是空白。他们通过切实的牌谱统计证实或证伪了很多此前的经验规律,并提出了一些新的麻将准则。因为麻将规则的差异性,日本麻将的研究结果很难直接移植到中国麻将上,但我们可以用同样的研究方法研究中国麻将的牌谱。
高级——从深蓝变成AlphaGo
如果以计算机作比,以上的这些研究方法其实有点像深蓝:通过经验或统计得出大量判断原则,并根据实际盘面判断出该打哪张牌。那么,如果这些判断原则本身就不是最优的呢?事实上,上述的统计方法也为问题的复杂度做出了一定简化。例如一个常见的反对意见是,它以期望得分作为判断依据,而无视了名次的影响—很多时候分数低一些的第一名比分数高一些的第二名好,因此当名次落后时即使风险更大也应该选择和牌分数更高的打法。
为了解决这个问题,我们就只能展望一下未来了。把AlphaGo的神经网络算法移植到麻将上并没有什么理论上的难度。它不需要为了减少复杂度而简化判定条件,同时也可以更为直接地以争胜为目标。或许AlphaGo可以跳出目前的框架,帮助我们找到新的判断原则。(关于AlphaGo神经网络算法的具体介绍,敬请回顾我们的5月号杂志。)
终极——计算有用么?
说了这么多,让我们回到一开始的问题——用数学计算麻将对胜利有帮助么?
答案是有也没有。一方面来说,正确的打法必然会提高胜率,但另一方面则是胜率的提升只有在大量牌局里才能体现出来:按一小时一圈计算,打一整晚也不过只能打十几圈。能提高2%胜率的一条原则对你这一晚的战绩恐怕没什么影响。只有按照正确的打法坚持打下去,才能在长期的对战中观察到更高的胜率。对于大多数人而言,其实不要管这么多,单纯地玩一玩麻将,享受一下才是最重要的。