一周前从学长那得知了北京大学计算概论的大作业黑白棋AI,正好最近从炉石脱坑,去凑了个热闹
网站上有规则和交互方式,在此不再赘述
游戏界面大概长这样,支持bot间或者人机对战
每回合要求程序读入局面信息,输出落子位置
1.一开始熟悉一下给出的样例程序的框架,做一些小测试。
因为之前没怎么接触黑白棋,也不懂有什么策略。样例给出的是随机落子,就把样例修改了一下,比如每次选择能占有最多格子的落子处,结果打不过样例……
2.AI框架
(1)极大极小搜索与AlphaBeta剪枝
一般AI的框架是把局面做一个估价,反应某一方的情况,数值越大代表优势越大,然后构建博弈树通过搜索得到较优策略。
比方说上面就是把占有的格子数当做一方的估价
假设博弈的两方叫做A和B,不妨设当前轮到A
如果A只考虑走一步,那么当然是走到一个对A估价最大的局面
如果A能往后考虑到B的下一步,B要走一个对A估价最小的局面,那A的落子就要使得下一步B落子后局面对A估价尽量大
A往后考虑若干步,以此类推,要使得A若干步后到达的局面对A估价尽量大。
局面之间形成一个树形结构,因为每一方每次有约10种走法,我们将博弈树限制在7-10层。
叶结点局面直接估价,其余结点用上述思路在树上深搜得出估价。
还有一个AlphaBeta剪枝,是说搜索一个结点的一些子节点一定不会改变这个结点的估价,就考虑剪枝
(2)
可以通过