北大学生给大家讲解一下今天很火的alphago进军炉石




今天在营地看到了这个帖子,感觉挺有意思的。然后去关注了一下,看了一下deepmind发的paper,我尽量用比较通俗的语言给大家解释一下。

楼主 caoyc001  发布于 2016-03-26 12:43:00 +0800 CST  
本质上来说,这个项目并不是研究炉石的AI,也就是并不是让人工智能去下围棋一样研究炉石的玩法。它其实是一个NLP的项目,也就是自然语言处理。通俗点来讲,就是让计算机理解人类的语言。在这个项目中的主要工作,就是把炉石的卡牌信息作为输入,然后由计算机处理,生成相应的代码。

楼主 caoyc001  发布于 2016-03-26 12:50:00 +0800 CST  


这次的研究选取了两个卡牌游戏,分别是万智牌和炉石传说。至于为什么选取卡牌游戏进行分析,我个人的理解是
1.首先卡牌游戏现在比较热门,可以引起比较大的关注度。
2.卡牌游戏的词缀比较少,可以简化模型。
3.样本总量比较大
上面的数据就是万智牌和炉石卡牌数据的一些信息。

楼主 caoyc001  发布于 2016-03-26 12:54:00 +0800 CST  


下面举一个翻译成功的例子。这张牌大家都很熟悉,骑士的神恩术。
如果对编程比较熟悉的应该可以看出来这个是python代码。
我们简单分析一下这个构造函数。
super().__init__("Divine Favor", 3,CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE)
"Divine Favor"第一个参数,卡牌的名字
3,消耗的法力水晶数
CHARACTER_CLASS.PALADIN,,圣骑士职业卡
CARD_RARITY.RARE 表示稀有度为蓝卡。
然后下面:difference = len(game.other_player.hand)- len(player.hand
定义了一个变量,数值等于双方手牌数之差。
然后通过一个循环,进行抽牌。
for i in range(0, difference):player.draw()
我们可以看出来这个翻译还是比较成功的,基本已经表达出来卡牌的意思,由此也可以看出来deepmind技术的强大。

楼主 caoyc001  发布于 2016-03-26 13:06:00 +0800 CST  


下面是基本模型,具体的内容比较复杂这里先不说,后面视情况再更。
简单的说下,这里的x是输入,也就是卡牌的内容。y是输出的结果。很多关键词会事先存入。

楼主 caoyc001  发布于 2016-03-26 13:40:00 +0800 CST  


楼主 caoyc001  发布于 2016-03-26 19:45:00 +0800 CST  
准备继续更,还有人在看吗

楼主 caoyc001  发布于 2016-03-26 19:50:00 +0800 CST  


文中用佛丁作为例子,解释了程序是如何读取卡牌信息的。
首先可以看出来,866分别作为前三个输入,也就是卡牌的身材,第四五个输入Tirion Fordring,为卡牌名称。
然后是圣盾,嘲讽,亡语等效果。可以看出如果是固定的词缀还是比较好理解的,但像亡语这种描述性词缀的难度会大大增加

楼主 caoyc001  发布于 2016-03-26 20:26:00 +0800 CST  




刚才有吧友提出了代码类似于github中的开源项目hearthbreaker,然后我仔细对比了一下,疯狂爆破者的代码等同于编译结果,伺机待发的代码差别比较大,然后格式基本一样的,所以我的推测是deepmind复用了这个卡牌模拟器中对于卡牌的描述,如果编译结果接近于hearthbreaker中的代码则认为编译正确。
@飘零如雪VIP

楼主 caoyc001  发布于 2016-03-27 12:30:00 +0800 CST  


楼主 caoyc001  发布于 2016-03-27 13:46:00 +0800 CST  

楼主:caoyc001

字数:1177

发表时间:2016-03-26 20:43:00 +0800 CST

更新时间:2016-11-20 21:41:27 +0800 CST

评论数:325条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看