腾讯人工智能挑战谷歌Alphago,以麻将决胜负
原标题:腾讯人工智能挑战谷歌Alphago,以麻将决胜负腾讯公司宣布,研究长达11年之久的人工智能系统「Betae」已结束封测,即将上线投入应用,并正式向谷歌公司的「Alphago」就麻将项目发起。
研发人员称,Betae内部开发代号为贝塔鹅,其主要工作原理为“深度学习”,通过合适的矩阵数量,多层组织链接一起,形成神经网络“大脑”进行精准复杂的处理。
依托腾讯云的强大技术能力,分散在全球各地的千万台智能终端共同构成了贝塔鹅的大脑神经元系统,运算能力已达全球最快“天河二号”超级计算机的5倍。而腾讯旗下QQ游戏各类棋牌的8亿局游戏记录,都已陆续输入贝塔鹅大脑中。
除了自有的TEG(技术工程事业群)研发力量外,腾讯与硅谷风投机构FelicisVentures共同领投A轮融资的人工智能创业公司QatarLab、Connie1982Inc均参与了贝塔鹅的研发与升级迭代。
此前谷歌Alphago以4:1大胜围棋人类世界冠军李世石,令舆论一度风声鹤唳。此番腾讯Betae选择了更具中国特色的麻将项目挑战对手,具体胜率仍在业内引发激辩。
“麻将的实际变化是1736978种,远远小于围棋的10的172次方,其主要格式可以归纳为:n*AAA+m*ABC+DD,mn可以等于0。”腾讯技术专家分析称,虽然数据测算结果并不乐观,但麻将这种牌类策略的特殊性在于随机,听牌、诈胡等影响概率空间的因素过多,麻将中各对局者间所掌握的信息不对称,这也给了我们很大的信心。
上述技术负责人进一步解释称,Alphago在围棋比赛中运用的是逻辑推导运算,但麻将更讲究心理战,类似科幻小说《三体》中尔虞我诈的猜疑链,这就要求人工智能洞察人类的主观情感。
为此,贝塔鹅对上亿局QQ麻将的比赛记录进行了复盘,通过一套复杂算法,推导每张牌背后的喜悦、暴怒、渴望、沮丧等人类情感,以标签化的归档方式来自我成长。在业界看来,贝塔鹅相当于背负了上亿人的真实情感与记忆,若以此将战胜Alphago,相当于为人类雪耻。
展开全文据了解,被誉为“雀坛魔女”的第四届世界麻将锦标赛冠军,今年73岁、来自四川自贡的孔金娣女士已担任贝塔鹅的特邀陪练,在过往的两个月内进行了数次血战。“老子还穿叉叉裤的时候就在打麻将了,整几天几夜都不虚!一个龟儿的只晓得下围棋的机器人,还会歪得过老子?”孔女士表示。
为以更好状态迎战Alphago,贝塔鹅已在QQ麻将游戏大厅中进行了数次模拟演练,胜率保持在100%。唯一一次险些失利,是遭遇另外三名麻坛猛将的合力喋血围攻。危急关头,贝塔鹅果断以尊贵的QQ蓝钻会员特权将其踢出房间,捍卫了尊严与胜利。
“无论海狗还是阿尔法狗,本鹅都没在怕的。”贝塔鹅表示。
据悉,这场人工智能间的“鹅狗大战”巅峰对决,将于今年6月31日在中国深圳上演,赌注是由腾讯提供的100万Q币。腾讯视频将提供全程线上直播。
腾讯将联合NASA发射WiFi卫星
2016年4月,腾讯正式宣布与NASA和CNSA合作,打造卫星WiFi计划。项目组准备通过卫星,让全球任何一个角落的用户都能连接免费WiFi。
“这会是一个很艰难的过程,但并非不可能。”腾讯MIG项目经理表示,项目需要数百个小型卫星,用低轨卫星组成卫星星座,以此提供互联网,覆盖偏远的地区,包括亚马逊丛林、塔克拉玛干沙漠、青藏高原、南极等任何地方。
不多说了,点开视频看看这个激动人心的项目吧。(腾讯科技)
投资潮http://www.investide.cn/是一家专注于TMT行业的创投服务平台,内容覆盖创业、产业、VC/PE、上市并购等领域,持续跟踪发布各行业的动态和重大交易,深度报道业内精英人士和草根创业者的创业投资故事,并与国内外顶尖投资机构及行业精英保持密切联系。返回搜狐,查看更多
责任编辑:IJCAI 2023 麻将人工智能比赛
比赛介绍欢迎来到IJCAI2022麻将人工智能比赛。在本次比赛中,你将在在线人工智能平台Botzone上开发一个能够与其他人工智能和人类玩家比赛的麻将人工智能。本次比赛中采用《中国麻将竞赛规则》,即俗称的国标麻将。我们为国标麻将初学者提供了样例程序和比赛使用的国标麻将裁判程序,方便你学习国标麻将的规则并调试你的程序。最终比赛的胜者经由两轮正式的竞赛角逐诞生。
点击观看比赛精彩回放!麻将是一款起源于中国、拥有超过3000年历史的四人不完全信息博弈游戏。1998年,中国国家体育总局制定了《中国麻将竞赛规则》(俗称国标麻将),也就是本次比赛中我们采用的规则。麻将既需要玩家的运筹帷幄,也需要玩家的运气相助,而这带来的不确定性也为麻将带来了更多的乐趣与挑战。与其他亚洲麻将不同(如日式麻将),国标麻将鼓励玩家使用更加激进的策略进行游戏,使得国标麻将比赛更具有吸引力与观赏性。
国标麻将需要玩家不断的根据手牌情况计算并选择可行的胡牌组合,选择每次打出的麻将牌。如果想在本次国标麻将比赛中崭露头角,参赛者可以尝试结合多种人工智能领域的方法,如规划、博弈论、启发式搜索、蒙特卡洛树搜索、对手建模和机器学习等——这也是当下人工智能领域最大的挑战之一。
赛制伪码公布点击查看大图立即参加比赛注册所有参赛者需要以队伍的形式注册,每支队伍只需要注册一次。点击此处注册Botzone。注册位于页面右上方。点击此处注册比赛小组。会议注册进入到决赛轮的参赛者需要注册IJCAI-ECAI2022。每名参赛者至多属于一支参赛队伍。点击进入比赛小组查看报名情况立即开始点击此处查看如何使用Botzone参加IJCAI2022麻将人工智能比赛。下载样例程序并提交,创建你的第一个麻将Bot!通过wiki中的麻将条目了解麻将基本规则以及提交程序的详细输入输出格式。常见问题想变得更强?通过官方手册详细学习国标麻将的规则。本次比赛使用的国标麻将裁判程序和国标麻将算番库已开源,可供比赛选手参考和使用。我们提供了强AI的对局数据,供比赛选手使用。赛程安排注册截止时间:2022年5月21日(北京时间)第0轮(模拟赛):2022年3月14日~2022年5月21日(北京时间)每周举行模拟赛,帮助参赛者熟悉平台的使用方法、国标麻将的游戏规则和本次比赛的赛制模拟赛的积分将不会计入比赛的成绩第1轮(积分赛):2022年5月22日(北京时间)积分赛使用瑞士轮及复式赛制,比赛进行128轮瑞士轮第1轮成绩前16名的队伍进入第2轮(决赛)赛制说明详见上方最迟在2022年5月29日公布第1轮最终成绩及邮件通知第2轮(决赛):2022年7月3日(北京时间)决赛使用瑞士轮及复式赛制决赛分为两阶段,共有16支队伍进入决赛第一阶段:16支队伍进行128轮瑞士轮,每轮瑞士轮均为复式赛,16支队伍被匹配成4组,每组匹配到的4位选手进行24盘对局(座次全排列)第二阶段:第一阶段中的前四名进入冠军争夺战。共进行512轮复式赛,每轮进行24盘对局(注:原定256轮,在决赛第一阶段后注意到比分接近,因此修改为512轮)决赛结果将于IJCAI会场公布第一阶段与第二阶段之间将不能修改代码注:复式赛制详情请参考Botzone维基。初赛结果公示以下是积分赛晋级的十六强队伍。根据代码检查及人工确认,已去除代码重复/具有小号行为的队伍。
排名队伍名账号排名分1ALONGyue353.00292Joeytribbiani337.00093菜鸡互助intellouis336.00124Suphxnamespace_bilibili334.00025每日坚果MCC_gameAI333.00306XYZTONY333.00267随机出牌样例zbww333.00198随机出牌样例程序Solitude21332.00089麻神理工metaphysics330.002110e史蒂夫胜多负少分dark329.000811放铳自动机TokisakiKurumi328.002212重在参与Louison327.002413缘督以为经zhmomo327.000514Hayasakallkkcc326.001415humanfyhumanfy325.999716pandaorangedavis0520324.0003决赛第一阶段结果公示以下是十六强队伍在决赛第一阶段中的结果表现。
排名队伍名账号排名分1Hayasakallkkcc345.00252缘督以为经zhmomo339.00293菜鸡互助intellouis338.00364随机出牌样例zbww337.00195ALONGyue336.00156e史蒂夫胜多负少分dark332.00207随机出牌样例程序Solitude21332.00078重在参与Louison331.00269XYZTONY331.002610Joeytribbiani330.003711每日坚果MCC_gameAI330.002512放铳自动机TokisakiKurumi330.001313麻神理工metaphysics329.001014Suphxnamespace_bilibili327.003715humanfyhumanfy325.002016pandaorangedavis0520弃权决赛第二阶段结果公示以下是决赛第一阶段的前四名在决赛第二阶段中的结果表现。
排名队伍名账号排名分1随机出牌样例zbww1345.00132Hayasakallkkcc1301.00043菜鸡互助intellouis1238.99934缘督以为经zhmomo1234.9990研讨会资料排名队伍名账号视频1随机出牌样例zbww点击下载2Hayasakallkkcc点击下载3菜鸡互助intellouis点击下载4缘督以为经zhmomo点击下载5ALONGyue6e史蒂夫胜多负少分dark点击下载7随机出牌样例程序Solitude21点击下载8重在参与Louison点击下载9XYZTONY点击下载10Joeytribbiani点击下载11每日坚果MCC_gameAI点击下载12放铳自动机TokisakiKurumi点击下载13麻神理工metaphysics点击下载14Suphxnamespace_bilibili15humanfyhumanfy点击下载16pandaorangedavis0520点击下载权威评审李文新北京大学教授邓小铁北京大学教授杨耀东北京大学助理教授张国川浙江大学教授高阳南京大学教授张海峰伦敦大学学院研究助理李文龙国际麻将联盟秘书长陈御天GoogleDeepMind研究科学家郑蓝舟微智娱CTO傅浩波腾讯游戏AI专家研究员相关资源麻将人工智能和Botzone平台的相关工作:
Zhou,Haoyu,etal."Botzone:anonlinemulti-agentcompetitiveplatformforAIeducation." Proceedingsofthe23rdAnnualACMConferenceonInnovationandTechnologyinComputerScienceEducation.2018.Zhou,Haoyu,etal."Botzone:acompetitiveandinteractiveplatformforgameaieducation." ProceedingsoftheACMTuring50thCelebrationConference-China.2017.Zhang,Haifeng,etal."Botzone:Agameplayingsystemforartificialintelligenceeducation." ProceedingsoftheInternationalConferenceonFrontiersinEducation:ComputerScienceandComputerEngineering(FECS).TheSteeringCommitteeofTheWorldCongressinComputerScience,ComputerEngineeringandAppliedComputing(WorldComp),2012.Li,Wenxin,etal."TeachingAIAlgorithmswithGamesIncludingMahjongandFightTheLandlordontheBotzoneOnlinePlatform." ProceedingsoftheACMConferenceonGlobalComputingEducation.2019.联系我们李文新(联合主席)lwx@pku.edu.cn张海峰(联合主席)haifeng.zhang@pku.edu.cn鲁云龙botzone@126.com主办单位北京大学信息科学技术学院计算机科学技术系网络与信息系统研究所人工智能研究室由李文新教授负责,主要致力于游戏中的人工智能研究,其他研究方向主要包括:计算机教育、生物特征识别。微智娱(北京)科技有限公司是一家专注于人工智能研发与游戏行业应用的公司。公司在互联网棋牌类游戏智能机器人领域技术水平、行业占有率领先。公司目前有30+人的技术团队,且核心成员均来自清华北大等著名高校,同时公司和清华大学、北京大学、北京信息科技大学、中科院等科研机构长期开展科研合作,研究前沿人工智能技术。赞助商创优天地是由中国互联网精英们一起创建的人工智能网络游戏公司,致力于将人工智能技术与游戏相结合,打造出有别于传统模式的网络游戏,让玩家在游玩的同时,获得由人工智能技术带来的全新体验。指导机构国际麻将联盟(MahjongInternationalLeague,简称MIL)是在世界智力运动最高管理机构IMSA(国际智力运动联盟)支持下成立的全球性麻将组织,会员包括来自全球五大洲52个国家和地区的正式麻将协会。MIL秉承智力运动理念,推动全球麻将规范化、竞技化、运动化发展,推动麻将进入智运会和奥运会。MIL在麻将竞技赛事中,创新地使用复式赛制,有效地降低了传统麻将项目中的因手牌随机性带来的运气成分,这符合国际竞技体育运动发展所要求的公平博弈的智力运动特征,将传统用于休闲娱乐的麻将活动提升到了竞技体育运动层面。过往比赛第十三届北京大学游戏对抗赛-校内赛.2021年春.游戏:叫分斗地主FightTheLandlord2IJCAI2020麻将人工智能比赛.2020年.游戏:国标麻将Chinese-Standard-Mahjong第十二届北京大学游戏对抗赛-校内赛.2020年春.游戏:国标麻将Chinese-Standard-Mahjong第十一届北京大学游戏对抗赛-校内赛.2019年春.游戏:坦克大战改Tank2第四届北京大学游戏对抗邀请赛.2018年秋.游戏:坦克大战Tank第十届北京大学游戏对抗赛-校内赛.2018年春.游戏:斗地主FightTheLandlord第三届北京大学游戏对抗邀请赛.2017年秋.游戏:俄罗斯方块改Tetris2第九届北京大学游戏对抗赛-校内赛.2017年春.游戏:俄罗斯方块Tetris第二届北京大学游戏对抗邀请赛.2016年秋.游戏:吃豆人改PacMan2第八届北京大学游戏对抗赛-校内赛.2016年春.游戏:吃豆人PacMan第一届北京大学游戏对抗邀请赛.2015年秋.游戏:贪吃蛇Snake第七届北京大学游戏对抗赛-校内赛.2015年春.游戏:贪吃蛇SnakeNOI2014团体赛.2014年夏.游戏:麻将(旧)Mahjong高性能麻将AI算法
想要一个高性能的麻将AI算法,这个问题我们拆解成2个子集来思考,“高性能”,“麻将AI算法”,我们先针对麻将AI算法来讨论。
麻将AI“麻将AI”,什么样的才叫AI,在很多项目中,并不严格要求可以与人类顶尖高手pk能力的AI,而是麻将选手陪玩机器人,基本做到一般人类选手的水平。那么这个问题我们可以继续修改“一般能力麻将AI”。现在我们来继续分解这个“一般能力麻将AI”,我们可以把这个AI变成”一个不懂得算桌子上牌,只会盯着自己牌的选手,然后可以得出我打出哪张牌后,我胡牌几率最大的人”。根据上篇的,麻将胡牌算法我们可以得出,如果想得出“胡牌”的概念可以用得到3N的牌面以及3N+2的说法替代。所以这个时候问题变成“只会盯着自己牌的选手,针对同一种花色,计算出这个花色的牌打出一张后,变成3N或者3N+2的几率多大”。此时就有一个问题了,针对一种花色在很多牌面中,我打出一张牌的张数并不是3N或者3N+2,这个时候怎么办?这里可以用到一个近似解,“在某个特定的array中,我需要补多少张,才可以得到3N或者3N+2的组合”,为了简单说明起见,后续只说明如何构造3N的牌型。这个时候还剩下最后一个问题了,概率问题如何结算,这个可以通过回溯来求去最大解,来了牌值大小为1到9的一个集合,每次抽取1张,然后可以构成3N,需要抽取多轮。这个就是个9叉树,然后通过一定的剪枝手段来控制树的总大小。伪代码如下//array表示手牌,level代表补的张数//1/chance表示概率,所以chance表示为概率的倒数//chance=chance*136/4。表示136张牌中来这张牌概率,这里可以优化下改成当前//牌里剩下的张数在出于牌堆总数,这里为了表达方便,直接用136/4,可以优化这个常量,//比如,136按照扣除自己手牌数136-13*4计算,//4可以用4-自己手牌的张数这个数来替代,这样AI就是个会算自己手牌//的机器人了,不会导致说自己手牌中有4个一万,还是来一万胡牌概率高的情况//发生了,如果优化136/4这个常量,会针对不可能不到的情况,会剪枝了,也减少会一定的运算。//计算牌的概率getchance(array,level,chance)//大于等于6一定要剪枝,不可能需要大于6的情况存在,补的最多的6张,要只有137这种情况if(level>=6)returnMAXifcheck3N(array)returnchancefori=1to9array[i]=array[i]+1//这里check3N直接用上篇用工具生成的3N的hash表来查询,所以本质是个O(1)的操作ifarray[i]=6)returnMAXifcheck3N(array)return1,0//表示该组合已经是3N了,不需要打出牌//定义maxchance=0fori=1to9left=4-array[i]array[i]=array[i]+1//这里check3N直接用上篇用工具生成的3N的hash表来查询,所以本质是个O(1)的操作//上述算法中的136这个稍微准确点改成83稍微更准确点,136-13*3-14=83,这个值只会小于83的,但是不论136//还是83都不影响本质ifarray[i]0chance=chance*left/83ifchance>maxchancemaxchance=chanceelsechance=dfs(array,level+1,chance*left/83)ifchance>maxchancemaxchance=chancearray[i]=array[i]+1returnmaxchanceleft还剩几张可以提供给我,这里没计算别人打出去的牌这个也是此算法不够智能的地方,因为别人打出去的牌是动态的,事先生成data只能看静态数据,这样可以选取一张打出去某张牌,获取胡牌概率可以做到O(1)。如果想智能高一点,可以服务器运行过程中跑这个算法,动态的计算出left以及83这个常量,就更能准确的提高AI智能了,但是换来了,服务器计算资源的牺牲,确实没有两全起美的办法。
高性能上述的代码中已经给我们生成好了组成当前牌组成3N以及3N2的概率的data,当服务器启动时,就可以把data读入内存,构建hash表。服务器判定到底出那张的伪代码如下//针对同一种花色的数组中,计算出打出某一张牌可以得到3n以及3n2的最大概率outcard(array)//定义最大3n概率以及最大概率下应出的牌max3nchancemax3n_i//定义最大3n2概率以及最大概率下应出的牌max3n2chancemax3n2_ifori=1to9ifarray[i]>0array[i]=array[i]-1//先扣掉出的牌//获取当前花色的牌构建出3n的概率直接从上述代码data文件中的哈希表查询chance3n=get3nchace(array)ifchance3n>max3nchancemax3nchance=chance3nmax3n_i=i//获取当前花色的牌构建出3n2的概率直接从上述代码data文件中的哈希表查询chance3n2=get3n2chace(array)ifchance3n2>max3n2chancemax3n2chance=chance3n2max3n_i=iarray[i]=array[i]+1//恢复returnmax3nchance,max3n_i,max3n2chance,max3n2_i最终计算胡牌,计算出选取一个3n2以及剩下花色3n的总体概率最大值即可,此时就找到了应该打出哪一张牌,其实针对碰杠吃的做法也一样碰了后能不能让我赢面最大,只是这里扣除一张牌,改成扣除碰的牌来判断而已。此时麻将AI已经有了非常高的性能以及智能,几乎模拟了“一个会算自己手牌,但是不会看桌子上牌的”人类玩家。因为很多项目中,对性能要求很高,并不是1V1的AI,可能需要几万个AI陪玩机器人来陪玩,所以高性能是必须的。
碾压李世石的人工智能在麻将领域能战胜人类吗?
很高兴能借着AlphaGo的东风,和大家分享一下麻将AI研究的现状。一.麻将和围棋有什么不同?
从博弈论的角度来讲,围棋是完全信息动态博弈,而麻将属于非完全信息动态博弈。围棋中对局双方所掌握的信息是对称的,而麻将中各对局者间所掌握的信息不对称。虽然大家都能看到每位牌手打过什么牌,但你不知道我的手牌是什么,我也不知道你的手牌是什么。这种信息不对称的产生的根本原因是牌墙的随机性。
围棋与麻将(或者说棋与牌,弈与博)的上述区别,决定了它们获胜策略的根本不同。棋类项目本质上就是蒙特卡洛树,获胜策略就是选择或迫使对手选择一个分支,这个分支下面所有的结局都是自己胜。只不过由于棋类变化很多,连AlphaGo也远不可能遍历整个树,所以AlphaGo会通过价值网络来估计某一分支下胜结局的概率。其实人类的思维也是类似的,在围棋里平白被对手屠掉一条大龙,或者在象棋里平白送给对手一个车总是不好的——在这些分支下,胜结局的概率大大降低了。
而牌类的获胜策略在于尽可能增大自己的得分期望(EV)。我并不知道我接下来要摸什么牌,或我的对手有什么牌,但所有可能的情形组成一个概率空间,我只需做出一个选择,使得自己的得分函数的期望最大。牌类策略的难点在于,影响这一概率空间的因素过多,且具体影响很难确定,比如对手打牌的习惯。
下图选自《科学化麻雀》,闲家愚形听牌打10%危险度的牌对攻,x轴为自己和牌时得分,y轴为牌局巡次,z轴为自己的得分期望。
二.何谓「获胜」?
选手的竞技水平如何衡量?麻将是否是「运七技三」的游戏?其实无论围棋还是麻将,区分选手的竞技水平都不可能只靠一局,就好比AlphaGo和李世乭要进行五番棋对决,AlphaGo赢第一盘时大家并不觉得AlphaGo一定比李世乭强一样。围棋有三番、五番、十番棋,对于竞技麻将(国标麻将、日本麻将)而言,区分顶尖选手的竞技水平至少需要2000~10000手牌(如果采用类似桥牌的复式赛制,这一数字会大幅降低)。
至于衡量一个竞技项目的竞技性,单纯用运气所占比例是没有意义的。随着对局数的增大,运气所占比例会越来越小,选手的长期成绩必然会向其真实水平收敛。一个竞技项目的竞技性应当用「区分选手竞技水平所需必要对局时间」来衡量。比如围棋需要三番棋,麻将需要2000手牌,围棋一盘平均需要4小时,三番棋约12小时,而麻将一手牌约3分钟(网络对局),2000手牌约100小时。麻将相比围棋有运气成分,并不意味着麻将选手的竞技水平无法衡量,而意味着麻将需要更多的对局时间来区分选手的竞技水平。
下图选自日本麻将平台天凤麻雀凤凰桌1000场以上玩家安定段位排行。这里的「试合」是指半庄,也就是两圈牌,考虑到连庄,平均一试合是10手牌,1000试合是10000手牌。可以看到牌手的竞技水平得到了很显著的区分,结果也与麻将圈内认知相似。
所以在这个问题下我们讨论麻将AI能否战胜人类,指的是麻将AI长期成绩(10000手牌以上)能否比人类更好,并不是单指一手牌。只打一手牌,谁都有可能和牌,这是牌类游戏的本质所决定的。
当然,这里也不考虑牌手或AI作弊的问题。如果通过作弊获得别人手牌的非法信息,麻将的竞技平衡就完全被打破了。再强的麻将AI成绩也不可能比作弊的人类好,反之亦然。事实上,现在很多单机麻将游戏的AI就是通过作弊来增加「智能」的。
三.麻将会成为人类面对人工智能的「最后壁垒」吗?
一言以蔽之,麻将AI不是做不了,而是没人做。之所以目前还没有能够战胜人类的麻将AI,主要原因还是人们在麻将AI研究方面的投入不够。目前的麻将AI基本都是麻将游戏制作团队为麻将游戏设计的,在单机上就可以运行,强度自然有限。如果像AlphaGo一样,世界顶级团队制作,背后庞大资金支持,使用1000个CPU运行,想要设计一个轻易战胜人类顶尖麻将牌手的AI没有任何难度。
首先,麻将的复杂度要远远小于围棋。单就自己的14张手牌来说(总牌数136张),组合共有326520504500种(计算方法详见麻雀の数学),远远小于围棋的2.08×10^170。不足10^12的手牌种类意味着麻将AI完全可以提前计算好每手牌的打法估值并储存在资料库中,打牌时调用即可。
下图选自日本麻将研究者らすかる的个人网站麻雀の数学。
当然,打麻将也要考虑别人打的牌以及各家的得分。各家分差的复杂度是很小的,而别人打的牌虽然复杂度会很高(136张牌的牌墙组合为4.3×10^185种,甚至超越了围棋的复杂度),但别人打的10张牌大多只有1~2张是有用的信息,AI只需要识别这种模式并搜索对比以往对局的牌谱即可。
其次,人类对麻将的研究远不及围棋,顶尖麻将牌手的训练水平很低。相比围棋研究几千年的历史,麻将诞生不过百余年,人们真正开始利用科学手段(统计学、大数据)来研究麻将只是近十年刚刚起步。例如「间四间」是上世纪流行的日本麻将理论,指的是别人打过中间相隔4张的2张同花色数牌,则这2张牌的内侧筋牌是危险牌。如别人打过三筒、八筒(中间相隔四五六七筒),则四七筒是危险牌,这是因为别人手里一开始可能是三五六八筒,三八筒效率较低被打掉,留下的五六筒要四七筒。这一理论在近十年的大数据研究中已被证明是完全错误的——别人要四七筒的概率并没有显著性的上升。
可见,目前人们对麻将的研究还处在很初级的阶段,通过别人打过的牌来分析别人想要的牌的科学研究才刚刚开始。麻将界也没有围棋那样3岁开始学棋,10几岁就和世界顶级高手过招,接受世界顶级指导的职业选手。麻将本身复杂度低,人类顶尖牌手水平又不高,被人工智能击败会比围棋要容易得多,不可能是「最后壁垒」。
四.现在有哪些比较强的麻将AI?
竞技麻将方面,目前国标麻将和日本麻将都有比较强的AI(高于人类平均水平)。日本麻将的AI目前最强的当然是「爆打」。
「爆打」是由东京大学工学系在读博士生水上直纪开发的日本麻将AI,他所在的课题组就是专门研究麻将AI的。爆打和AlphaGo一样,也具有自我对局和分析并学习人类牌谱的能力。水上发表过的论文题目为《RealizingaFour-PlayerComputerMahjongProgrambySupervisedLearningwithIsolatedMulti-PlayerAspects》,全文详见http://www.logos.ic.i.u-tokyo.ac.jp/~mizukami/paper/jousho_2014.pdf。
爆打从2015年开始在最大的日本麻将平台——天凤麻雀上开始运行,至2016年2月已经打了1.3万多场(约13万手牌)。2015年9月,爆打达到天凤麻雀四段,2015年12月更是一度冲进天凤七段,长期成绩显示平均为六段以上。这意味着什么呢?
上图是天凤麻雀平台2016年3月13日的段位成绩分布图(来源オンライン対戦麻雀天鳳/ランキング)。天凤平台具有非常科学的段位和EloRating体系,越是和高水平牌手对局,获胜后Rate增加越多,失败后Rate减少越少;越是和低水平牌手对局,获胜后Rate增加越少,失败后Rate减少越多。最终段位和Rate值的稳定值就代表了牌手的真实实力。
可以看到,天凤麻雀平台的活跃用户数约为17万人(不包括新人僵尸号),而六段以上的用户总数为5793人,约占3.4%。也就是说,爆打打麻将比96.6%的麻将玩家要好,全世界麻将打得比爆打好的人,数量仅有几万人左右(包含所有麻将规则的估算)。这只是一个课题组,用时一年多研究出的,在一台电脑上运行的麻将AI,就已经基本赶上AlphaGo早期版本所取得的成绩了。
国标麻将方面,目前最强的AI大概是我本人目前正在参与设计的国标麻将AI了。最初的版本只加入了最常用的十几个番种的分值判断,防守端几乎没有做,实测对随机牌手和牌率就已经达到24%左右,基本与国标麻将平均和牌率24.3%持平(国标麻将数据可见国标麻将、日本麻将对局时,「点炮、自摸、流局」的比例分别是多少?-段昊的回答)。实际水平大概处在所有牌手中上位10~20%左右的水平(低段位牌手多,大部分牌手的水平处在平均以下)。
五.麻将AI的算法应该是什么样子的?
最后,我来浅谈一下麻将AI的基本算法。
1.基础牌效率
麻将的牌效率指的是能使手牌更快和牌的打牌方法,是麻将的基本功。来简单举个例子:
下图牌画取自联众国标麻将(http://gbmj.lianzhong.com)。
这是一手13张牌的手牌,现阶段是一上听(差1张牌就可以听牌),那么哪些牌是有用的牌,或者说我摸到哪些牌会留下呢?这些有用的牌称为「有效牌」,最有用的当然是能让我直接听牌的牌,这类牌称为「第一类有效牌」。
第一类有效牌:能使手牌向和牌前进一步(上听数降低)的牌,包括:
除了第一类有效牌,有用的牌还有以下这些:
第二类有效牌:不能使上听数降低,但能使第一类有效牌增多的牌,包括:
情况下应该选择留下九索打掉三索,因为第一类有效牌变多了:
计算采用天凤牌理オンライン対戦麻雀天鳳/牌理。
第三类有效牌:不能使上听数降低,也不能使第一类有效牌增多,但能使第二类有效牌增多的牌,包括:
比如摸到五索,一般情况下应该选择留下三五索拆掉八九索,虽然第一类有效牌张数没变,但三五索相比八九索多了1种第二类有效牌——六索(原是第三类有效牌)。
(也许看到这里,你有点算不过来,或者感觉这和你平时打的麻将压根不是一个游戏。没关系,这很正常,你可以找张纸,在纸上仔细算一下每种第二类有效牌都新增了哪些第一类有效牌。)
可见,对于一开始一上听的13张手牌而言,除了七八九筒外的所有数牌都是有用的牌。麻将的牌效率就是这样——不断通过有效牌增大自己的进张面,最终使得和牌的概率越来越大。也许你已经发现,麻将牌效率的本质就是一个搜索树,最开始的手牌
经过多轮选择后可能对应多种结局(和牌),例如:
路径:摸到第一类有效牌八万或七索听牌,再自摸另一张和牌(最大概率结局)。
路径:先摸到第二类有效牌一万或七万后打掉三索,然后摸到一万或七万的另一张听七索,或者摸到七索选择听一万和七万对倒和牌。
路径:先摸到第三类有效牌三筒后打掉三索,然后摸到四筒后拆掉八九索,之后和牌。
对于一个两上听以内的手牌来说,这个树的深度最多也就是4~5步,每一步的分支平均在15种左右,也就是说复杂度最多在10^5数量级。由于每条路径都对应着一个确定的概率,一个好的麻将AI完全可以做到遍历这个树,比较两种或更多种打牌选择之间所对应结局的和牌期望之和。
对于三上听以外的手牌(由上文图中可知三上听以外的手牌约占手牌所有组合的80%),由于手牌中会存在大量的孤张或简单搭子,只需单独比较孤张或简单搭子的效率即可,计算量更小。
除了上述穷举手牌搜索树的方法,还可以采用模拟的方法。比如让麻将AI在短时间内模拟两种打法各1000手牌,哪个和牌率更高就选哪种打法。虽然这样不太精确但已经足够保证比人要强了。
2.和牌限制与番数价值
很多麻将规则对和牌有限制,比如国标麻将必须八番起和,四川麻将必须缺一门,太原麻将和牌必须包含指定牌张等等。我们只需在上述基础牌效率算法搜索树的基础上,「砍掉」那些结局不符合要求的分支即可。
有些时候我们不仅关注和牌的概率,也关注和牌的大小,比如有些牌我们宁可损失一些进张也想去做清一色,追求更高的和牌得分。我们只需为树的所有结果赋值(和牌得分),并用结局对应的值与路径对应的概率求出不同打法的得分期望并进行比较。
3.副露判断
「这个牌该不该碰」似乎是打麻将时比较令人头疼的问题。但其实副露判断只是计算量大,并不需要特殊的算法,依然是对比碰与不碰两种选择所对应的所有结局的得分期望即可。日本麻将中的立直(报听)判断也是同理。
只不过当我们在考虑「打哪张好」的时候,两种打牌选择之间所对应的路径和结局有大部分都是重合的;而我们在考虑「该不该碰」的时候,两种选择所对应的路径和结局基本是完全不同的,这无形中增大了计算量。其实人脑在做蒙特卡洛树搜索时,比较容易做到「想得很深」,比如职业棋手可以提前算到20甚至30步棋;但难以做到「想得很广」,通常情况下大脑只能做到从两种选择中找几个概率较大、有代表性的结局样本做比较。所以副露判断显得难,其实只是计算量的问题,而对于麻将AI来说,这不是问题。
4.防守端
防守端需要解决的是攻守判断和防守打法两个问题,即「什么时候要防守」和「要防守应该打什么」。解决这些问题最好的方法是让麻将AI自己通过大量的牌谱(千万场量级)进行自我学习。正如前文我所提到的,其实人们对于麻将应该如何科学防守的研究也才刚刚开始,想要分析一个打过三筒和八筒的人真正需要的是几筒,需要大量的牌谱作为样本进行研究。这部分研究现在还要等待电脑去完成,未来的麻将AI在这方面要比人类做得更好可以说是必然的。
对大量牌谱所做的出牌模式研究还可反过来应用于牌效率算法的改进中。比如早巡打过八万的人手牌中有九万的概率较小,那么牌墙中剩余九万的概率就有所上升,牌效率中利用九万的路径的概率就可以做出相应的修正。
5.状况判断
状况判断指的是麻将的「大局观」,如为了争取第一名或者为了规避第四名而采取不同的策略。状况判断其实就是对得分期望做进一步的修正。比如某状况下我必须自摸13番牌才能逆转,那么最终结果是13番以下的牌的得分期望可以进一步降低,而13番及以上的牌的得分期望则可以提高。
总之,麻将的复杂度较低,算法上可以用搜索树穷举法以及大量牌谱的自我学习来解决,只要有大量牌谱资料,有人肯花时间,有人愿意出资,开发一个能胜过人类的麻将AI,非常容易。
都说人工智能在围棋界已无敌手,那么去打麻将能成吗
围棋是很典型的完全信息博弈,也就是除了你脑子里的内容,双方的情况都是互相透明,没有隐瞒麻将则是不完全信息博弈这两个是不一样的决策策略但话说回来,麻将的复杂度较低,并且随着时间的推移,复杂度会越来越低打麻将不需要人工智能,只需要制订一整套麻将打法策略,并且记在脑子里完全应用每盘必胜不可能但输少赢多那是肯定的。本质上,这就是个数学问题。
只是这套策略可能很复杂,人脑记不太清楚但电脑就毫无问题了
围棋是很典型的完全信息博弈,也就是除了你脑子里的内容,双方的情况都是互相透明,没有隐瞒麻将则是不完全信息博弈这两个是不一样的决策策略但话说回来,麻将的复杂度较低,并且随着时间的推移,复杂度会越来越低打麻将不需要人工智能,只需要制订一整套麻将打法策略,并且记在脑子里完全应用每盘必胜不可能但输少赢多那是肯定的。本质上,这就是个数学问题。
只是这套策略可能很复杂,人脑记不太清楚但电脑就毫无问题了