博弈大赛心得体会
开发周期
开发总共历时 三个星期 ,主要分为前期查阅资料时期、中期阅读网上相关棋类源码时期,后期开发及优化时期。前期资料查询
一开始对于亚马逊棋的了解并不多,只是知道规则,自己能下,但是对于这个棋的一些核心思想了解得并不多,但是经过网上一些资料及论文的学习后,发现亚马逊棋其实作为一个单棋种类的棋,主要涉及的就是圈地思想,但是怎么圈地呢,这就需要去涉及一些对于当前棋盘内的空格处的评估值
(即自由度)来决定,只要保证己方的棋能够把对方的棋困在他们的一小块地盘里,然后保证自己能够有尽可能大的活动区域,就基本上能够获得赢面。
这里贴一个链接,对亚马逊棋的相关信息说的很清楚:亚马逊棋相关信息
中期源码阅读
在中期时,由于我在队伍中负责的是算法部分,所以我开始大量阅读网上能够找到的对于亚马逊棋或其他相似棋类的算法源码。
Ⅰ、首先,我开始仔细读的算法代码是基于贪心算法的一种评估算法(因为还是想着先通过相对简单的算法对亚马逊棋的整体进行深入了解),总体来说,这个算法的思想很简单:
总的来说,就是“设置多个评估函数” 和 “一个根据回合数权重发生变化的总评估函数” ,
以此对模拟走棋中的多种合法的走棋进行评估得出评估值最高的一种走法。
而模拟走棋则是需要 一个走棋函数 和 一个回退函数
在我完成这个算法(并且修了一天半天的bug后),队友负责的与对战平台进行通信的板块也完成了,正好能够加载上去和测试程序对打一下比赛,结果发现这个算法很笨,某些情况甚至主动把自己陷入一种把自己困在“围墙”内的境地,看来该算法在某种意义上还存在弊端,所以我开始了对于极大极小评估算法的探索。
附带一个当时看的贪心算法实现的亚马逊棋:亚马逊贪心实现
Ⅱ、然后就在这时,我的队友,自己凭借网上的一些参考代码以及自己的理解完成了一个贪心评估2.0,并且打败了测试程序以及我的贪心1.0,然后我们就开始分工学习极大极小算法和αβ剪枝(提高模拟效率),总的来说,配合αβ剪枝的极大极小算法的思想,可以被概括为:
在博弈的模拟走棋的选择中,尽可能地使自己的利益最大化,
也就是想将自己分数得的尽可能的高,而假设对手是尽可能的去选取最小的,
给我方留下最不利的局面来选择。
而由于极大极小搜索的结果集太大了,如果仅仅是这样的话,效率会很低,
因为查找的节点实在是太多了,而且这样就相当于对于每一种走法情况的分支都是查找到了叶节点,
所以便需要剪枝,而剪枝中的一种剪枝————αβ剪枝,则起到的作用就是提高搜索效率,
对于没有必要去搜索的节点就直接跳过,即无需对于每个分支都搜索到叶节点