由于在这个学期的人工智能的课程,将原来从罗凯那拿过来的一些游戏拿来作为Project。
游戏的相关介绍可以上google查Roma II,在BGG上面能找到详细的介绍。
首先是这个游戏集成了卡片,对战,运气等成分在里面。
在设计AI的环节,由于这个游戏在一个player的环节里面可以做多个动作,而且动作的顺序和个数都不确定,并且由于卡片的效果的不同,所以在构造游戏的本身就非常有难度,而对于AI programming来说,则增加了minimax的搜索难度。
在刚开始的时候,使用了DFS的全搜索,有点类似于AIMA上面的CSP上面的backtracking,在所搜的叶节点的时候进行状态的评价,如果这个值大于目前的最好值,则将最优解设置成这个节点对应的动作序列。而这个评价函数我是使用了神经网络来做,对于神经网络的训练我使用了GA,因为这样可以形成非监督的一种学习。
在进行了一定次数的比赛之后,发现就算是在单一回合里面所搜本回合的最优动作序列都已经变得不可能。到目前位置,一个状态的最大分支数是78,最大深度是11,基本上这个数量级的搜索已经不可能使用普通的DFS搜索完成。
在这种情况下,如果使用GA来进行学习的话,效率非常低。在我的机器上跑,基本上一个generation就要2个小时以上,这样的训练效率实在是太慢了,而且产生的新一代的神经网络也具有很大的随机性,基本没有什么只能可言。