对目前游戏王AI的一些想法

就在今天,把Windbot的基本实现思路看了一下,看完后自己也想了想,按目前的AI思路,游戏王AI模式永远达不到我们想要的结果,其实我觉得最主要的原因是少一个推测系统。
对比象棋、围棋这些棋类游戏的AI程序,其中很重要的一点是预测,在游戏王这个游戏中,对当前局势建立评价函数是可以实现的,但基于当前局势,我们采取何种策略来扩大优势就很难进行了,因为我们不知道这张卡片发动后的场面状况。另外,还有一个与象棋、围棋差别很大的点,那就是对方的动作难以预测,其实,可以先放下这个点,如果把预测系统做了,游戏王AI都会有很大的改进,因此,我稍微意淫了以下。。。。>_<

参考象棋、围棋等棋类AI程序,想法如下

①:建立评价函数:针对当前局面,我们对我方手牌、墓地、除外区域等资源进行综合评价,假设我方资源为正,对方资源为负,最后相加得当前局面的评价分数S0。
②:预测:预测包含很大的工作量,每一个可发动的效果、可进行的动作都是分析的一个分支,针对某个具体的分支,我们让其发动,可以得到发动后的局面,我们对发动后的局面也可以用评价函数进行评价,得到分数S1,这时我们已经预测了一步。
对于预测的实现,其实是可以做到的,就像YGOPRO的ocgcore一样,可以相同的写个ocgpredict,ocgpredict仅基于当前局面,在假设对方没有卡片效果可以连锁的条件下,让某个动作或者卡片效果发生,得到预测局面。当然,预测局面并不会对当前局面产生任何影响,当决策完成时,这些预测数据会被删除。
如果ocgpredict实现了,我们就可以在假设对方没有卡片效果可以连锁的条件下,预测一步得到局面E1,分数S1;在E1的基础上还可以继续预测一步,得到E2,分数S2;以此类推。
预测的出现会使当前AI的一些低级错误去除,例如:
魔王龙不能被效果破坏,在没有预测的情况下,AI看到对面有个3000的大怪自己打不动,肯定就黑洞了,但这就是浪费;预测出现后,发现黑洞发动后我方少了一张牌,对面没变化,分数降低了,就不用了。
③:剪枝:就是根据不同的情况将不必要分析的分支去除,这个在游戏王中真的很难做。。。。
不过就算不做剪枝,在时间允许的情况下,我觉得预测2到3步应该也行,这会导致游戏体验绝对提升很大。
④:决策:又是一个难题,目前的决策方法很多,简单的、复杂的一大堆,包括如今各种的神经网络、大数据,但其实,我们假设只能预测3步,依据3步后的分数我们也可以对众多分支进行一个简单的决策了,以上黑洞发动与否就是很好的例子。

其实,预测程序真的可以写,奈何笔者对YGOPRO真的不熟,只能看懂,写写DIY卡片的效果娱乐娱乐,例如一个YGOPRO有两个ocgcore,一个就是游戏的实时操作,一个就专门拿来预测(就是上述的ocgpredict),这个功能就实现了。
此外,其实如果我们需要预测2到3步,甚至以上,中间对方的连锁真的可以不用考虑。就拿我们自己来说,在考虑一个COMBO时,是不会考虑对方的打断的,就算真的要做,加入一个对方会发生某动作的概率P,结合评价函数,也可以做到考虑对方连锁的分析,但这是后话了。

啰嗦了一堆,希望有大大感兴趣。。。。。

1赞

ocgcore里面效果能否发动有时候都是个很大的坑,就在于预测方面。
复杂一点的就是各种各样的cost,还有灰流丽这些。
我想考虑写一个Card.GetFieldStatus这样的函数,获取一个某张卡已经移动到某个位置的状态下,场上的信息。
另,如果游戏王的AI能强大到一定程度的话,或许AI可能会被用来打比赛,甚至是代替人来挂机,造成一定的不好的影响。
还是坑太大。不过欢迎来参与我们的开发。

1赞

确实,COST种类实在太多,而且CONDITION也变得越来越复杂和奇怪,像PSY免CONDITION检测的效果都来了,没去看你们怎么实现的。。

沪ICP备14034452号-1