游戏AI小试牛刀(1)

高扬

2017-05-23 发表于 2017-05-23 19:44 数据科学家


现在大家在各种领域使用机器人的事情是越来越多,包括在家政领域和教学领域等等这些在我们身边每天都能接触到的领域。而游戏中使用AI也是一件非常有趣的事情。
为此,我们也做了一些有趣的尝试,比如用它来玩斗地主。
首先是样本的准备,一部分样本是可以从某些平台上获取的,一部分样本也是可以通过程序来自动生成的——这并不新鲜,反正AlphaGo也是这么干的。
其次是建模。建模的方式有很多种,因为建模的本质是建立一种数据逻辑的假说,然后通过样本来进行验证和调整。在这个模型中当然我们首选还是使用基于深度学习模型的CNN网络和DQN网络了。
最后是训练与对抗。在这个过程中,当然还是有很多技巧存在的,在这个不断给予机器人越来越多样本的过程中,机器人也是在不断学习与进化。细节我们有机会再为大家展开。
任何机器人模型在最后训练完了都是一个偌大的权重矩阵,把那个东西给大家看显然不合适,也看明白是在做啥。那我们就不妨看看机器人加了人机接口以后的表现吧。
以我们目前做的这个机器人初级版本为例。首先是选择身份,即手动选择地主,还是下家农民或上家农民。

请选择角色:0为地主,1为先出牌农民,2为后出牌农民:
1

一旦选择以后就可以开始发牌了,这次我们选择了一个下家的农民,这样一来上家的地主,下家的农民就都由机器人来扮演,它们都希望自己能获胜,先来看看配合效果如何。

手牌
当前手牌 3 4 4 5 5 6 6 7 8 9 9 10 J Q Q K 2
地主牌数 20
农民2牌数 17
地主出牌
3 4 5 6 7 8 9

#

手牌
当前手牌 3 4 4 5 5 6 6 7 8 9 9 10 J Q Q K 2
地主牌数 13
农民2牌数 17


所有可选出牌
[‘4 5 6 7 8 9 10’, ‘5 6 7 8 9 10 J’, ‘6 7 8 9 10 J Q’, ‘7 8 9 10 J Q K’, ‘’]
出牌:

地主一下子出了一大串3~9,这时我们的选择也比较多4~10,5~J,6~Q,7~K。不过鉴于散牌比较多,这一把就先不出了。

农民2出牌
[]
地主出牌
5

#

手牌
当前手牌 3 4 4 5 5 6 6 7 8 9 9 10 J Q Q K 2
地主牌数 12
农民2牌数 17


所有可选出牌
[‘6’, ‘7’, ‘8’, ‘9’, ‘10’, ‘J’, ‘Q’, ‘K’, ‘2’, ‘’]
出牌:
10

地主出5,那么我们把10先垫出去。

农民2出牌
K
地主出牌
A

#

手牌
当前手牌 3 4 4 5 5 6 6 7 8 9 9 J Q Q K 2
地主牌数 11
农民2牌数 16


所有可选出牌
[‘2’, ‘’]
出牌:

最大就是2,在没有大小王出来前不能白白送死,还是过。

农民2出牌
2
地主出牌
B

#

手牌
当前手牌 3 4 4 5 5 6 6 7 8 9 9 J Q Q K 2
地主牌数 10
农民2牌数 15


所有可选出牌
[‘’]
出牌:

上家的农民还是挺不善的,直接出了2,把地主的大王斗了下来。

农民2出牌
[]
地主出牌
6

#

手牌
当前手牌 3 4 4 5 5 6 6 7 8 9 9 J Q Q K 2
地主牌数 9
农民2牌数 15


所有可选出牌
[‘7’, ‘8’, ‘9’, ‘J’, ‘Q’, ‘K’, ‘2’, ‘’]
出牌:
7

地主出了6,看来它散牌也不少,那我们赶紧把7打出去。

农民2出牌
S
地主出牌
[]

#

手牌
当前手牌 3 4 4 5 5 6 6 8 9 9 J Q Q K 2
地主牌数 9
农民2牌数 14


所有可选出牌
[‘’]
出牌:

木想到下家农民兄弟一下子出了小王,而且大家都没炸弹。

农民2出牌
7 8 9 10 J
地主出牌
[]

#

手牌
当前手牌 3 4 4 5 5 6 6 8 9 9 J Q Q K 2
地主牌数 9
农民2牌数 9


所有可选出牌
[‘’]
出牌:

上家农民兄弟果然是想搞事情,出了7~J,地主是木有的压,我们是压根没有能压的,好尴尬……

农民2出牌
3 3 A A A
地主出牌
[]

#

手牌
当前手牌 3 4 4 5 5 6 6 8 9 9 J Q Q K 2
地主牌数 9
农民2牌数 4


所有可选出牌
[‘’]
出牌:

上家的农民兄弟更猛了,直接出了3个A带2个3,地主还有9张牌,我们还有4张。看来这次胜利在望。

农民2出牌
4
地主出牌
7

#

手牌
当前手牌 3 4 4 5 5 6 6 8 9 9 J Q Q K 2
地主牌数 8
农民2牌数 3


所有可选出牌
[‘8’, ‘9’, ‘J’, ‘Q’, ‘K’, ‘2’, ‘’]
出牌:
8

刚说完,这农民兄弟就打了一个4,估计刚才那么猛是这张小4给憋的。那我们跟着地主的7出个8。

农民2出牌
J
地主出牌
2

#

手牌
当前手牌 3 4 4 5 5 6 6 9 9 J Q Q K 2
地主牌数 7
农民2牌数 2


所有可选出牌
[‘’]
出牌:

上家农民果断打了J,地主出了当前最大的2。好吧,算你狠,你走牌。

农民2出牌
[]
地主出牌
8

#

手牌
当前手牌 3 4 4 5 5 6 6 9 9 J Q Q K 2
地主牌数 6
农民2牌数 2


所有可选出牌
[‘9’, ‘J’, ‘Q’, ‘K’, ‘2’, ‘’]
出牌:
J

一张8而已,看来地主也是一堆散牌,我们出个J看能不能放上家农民走。

农民2出牌
[]
地主出牌
2

#

手牌
当前手牌 3 4 4 5 5 6 6 9 9 Q Q K 2
地主牌数 5
农民2牌数 2


所有可选出牌
[‘’]
出牌:

我去,居然不出,什么情况。倒是把地主的2给勾搭下来了。好,我忍。

农民2出牌
[]
地主出牌
Q Q

#

手牌
当前手牌 3 4 4 5 5 6 6 9 9 Q Q K 2
地主牌数 3
农民2牌数 2


所有可选出牌
[‘’]
出牌:

地主一对Q,大牌啊!

农民2出牌
[]
地主出牌
K K

#

手牌
当前手牌 3 4 4 5 5 6 6 9 9 Q Q K 2
地主牌数 1
农民2牌数 2


所有可选出牌
[‘’]
出牌:

地主一对K,还是大牌啊!

农民2出牌
[]
地主出牌
J
地主胜利

木办法,眼睁睁看着地主走掉。

这一局斗地主虽然看上去平淡无奇,但是却是应用了基于深度学习的模型,可以在对抗中进化。这种技术的意义更在于其实现可以进行迁移,可以应用于其它棋牌类游戏和博弈类场景中,这已经带给我们足够的想象力了。我们期待着它的逐步进化。关于实现原理的讨论,以后在相关场合我们再做分享。

读者评论

相关博文

  • 数据科学家节选(1)

    数据科学家节选(1)

    高扬 2017-06-19

    【节选自即将由电子工业出版社出版的《数据科学家养成手册》第一章】 什么是科学家 从我们每个人上学前班的时候,我们就开始受到各种各样的启蒙教育,哪怕是捏橡皮泥、跳皮筋、玩弹球这些最最普通最最不起眼的游艺项目,都是我们在锻炼协调性和认识...

    高扬 2017-06-19
    76 0 0 0
  • 九章算术

    九章算术

    高扬 2017-06-12

    本文节选自即将由电子工业出版社出版的《数据科学家养成手册》第三章 中国最早的数学专著是《周髀算经》——原名《周髀》,是算经十书之一。它们是汉、唐一千多年间来民间数学研究方面的专业著作,也曾经一度作为隋唐时代国子监算学科的教科书。 ...

    高扬 2017-06-12
    523 0 0 0
  • 游戏AI小试牛刀(2)

    游戏AI小试牛刀(2)

    高扬 2017-06-05

    上次我们说到用深度学习来做斗地主游戏AI的一个实验项目,这次我们来说说技术实现层面的一些问题。 对于这样一个应用场景来说,我们是可以把它当做类似于图片分类的场景去做的。玩家的手牌、牌池里的牌、上下家打出的牌,这些都可以向量化成为用...

    高扬 2017-06-05
    384 1 0 0