一、基本概念
博弈分类:单人博弈(华容道)、双人博弈(象棋、围棋)、多人博弈(麻将、桥牌);完全信息博弈(象棋、围棋)、不完全信息博弈(麻将、桥牌、三国杀等)。
注:大一曾选修过一门课:博弈论,也在数模班做过一些博弈方面的研究,有一些基础,所以对机器博弈中博弈概念很容易就理解了。但博弈论(Game Theory)是经济学的一个重要分支(虽然我发现我们学校图书馆有关博弈论的书籍主要放在数学类书架,这也是有其原因的),主要研究的是社会两难问题(如经典的囚徒困境问题),通常是非零和博弈(即致力于出现双赢局面),而机器博弈(以棋类为代表)主要研究零和博弈(即博弈参与者一方获利另一方必然遭受损失,比如所有的棋类都以战胜对方为目的)。关于经济学中的博弈在此不做赘述。
二、机器博弈中的数据结构
关于数据结构的具体知识在此不做赘述,如果没有此方面知识根本没必要往下看。本学期刚刚学完数据结构,有些同学觉得都是很枯燥的理论,其实这枯燥与有趣之间缺德就是那么一点探索精神和自主学习意识,如果AI五子棋------------初探用的就是很基本的数组。以象棋为例,可以用数组存储棋盘,用布尔矩阵检查合法性。
排序、查找在机器博弈中也频繁使用,因为要对每一种策略的得分(这个概念下面解释)进行筛选,找出最优策略。
递归及回溯思想同样很重要。
在涉及图的存储是,邻接表是实际应用最广泛的。
三、着法
着法就是一个棋子从一个位置移动到另一个位置(象棋)或将不在棋盘上的棋子放在棋盘上某个位置(五子棋、围棋)。机器博弈要直接解决的问题就是如何做出最优着法。着法的最基本的要求是符合游戏规则,比如马走日,象飞田,马脚蹩子不能走,象眼堵住不能走等等。
四、博弈树
今年李世石和AlphaGo的人机大战让蒙特卡洛树搜索从一个高深的专业词汇变成了一个众口相传的科技热词。博弈树分支越多,该类博弈对于程序设计的要求就越高,因为是指数增长的,所以除非NP=P,否则博弈树存储及搜索永远是一个难题,也是左右机器博弈水平的关键因素。
五、评估函数
评估函数就是一个打分机制,通过评估函数,上文中贴出的连接中所使用的赢法数组就是一种简单的评估函数,评估函数是着法的基础,评估函数的合理性很大程度影响博弈水平。我猜想,机器学习很重要的一部分就是通过重复博弈来反复调整评估函数达到最佳状态。此外,专业棋手肯定比程序编写者更适合设计评估函数,因为他们的经验正是机器学习的目的。此外,已经启发式算法(模拟退火算法、遗传算法)也被广泛应用到机器博弈中,我曾经用模拟退火算法写过最短路径的程序021 模拟退火算法学习(一)-----求解最短连通路径,确实这种启发式算法能有效避免全局搜索的低效和爬山算法(一种贪心策略)局部最优解问题。
六、基本搜索方法
产生博弈树之后海妖搜索博弈树获得一个最优解,常用的搜索策略有DFS和BFS,但是DFS搜索整个博弈树显然是不现实的,所以都会认为设置深度,但是过浅则影响博弈水平,过深则影响时间效率。同样,启发式搜索也是一种不错的选择,如极大极小法,alpha-beta剪枝,负极大值搜索。
七、博弈程序设计
语言选择,面向对象语言在设计大型程序时优势明显。界面应该美观易用,交互性好。逻辑结构应该清晰,功能应该完备,包括基本设置,搜索策略设置,悔棋、打谱、存盘等基本功能。