4. 总结
在本程序中的井字棋程序使用了极大极小值算法,这种算法的思想是“考虑双方
对弈若干步之后,从可能的走法中选一步相对较好的走法来走”,并且“在有限
的搜索深度范围内进行求解”。
最大最小值算法的核心是将搜索树的层分为 层和 层, 层和
层交替相邻(即,一个节点如果在 层,则其子女节点在 层;如果在
层,则其子女节点在 层),在 层的节点的评估函数值取其子女
节点中的最大者,在 层的节点的评估函数值取其子女节点中的最小者。
此外,需要定义一个评估函数来计算叶节点的评估函数值,要注意将某方获胜
的状态节点的评估函数值设为计算机能表示的最大数(无穷大)或最小数(无
穷小)以表明在该状态下有一方获胜。
最后,还要“在有限的搜索深度范围内进行求解”,如果搜索深度太大,则在状
态数较多的情况下会使时间耗费或空间耗费达到无法忍受的程度。
5. 改进建议
本程序中的程序的博弈算法采用的是极大极小值算法,如果采用 剪枝算法,
则可以在一定程度上减少博弈树的节点数。假设一棵树的深度为 ,且每个非
叶节点的分支系数为 ,则在最佳情况下, 剪枝算法生成深度为 的叶节
点数大约相当于极大极小值算法所生成的深度为 的博弈树的节点数。也就
是说,为了得到最佳的一步, 剪枝算法只需要检测 个节点,而
不是极大极小值算法的 。从另一个角度看,在相同的代价下, 剪
枝算法向前看走的步数是极大极小值算法向前看走的步数的两倍(见参考文献
第 页)。
参考文献:
林尧瑞等,《人工智能导论》,清华大学出版社,北京,。
王文杰等,《人工智能原理与应用》,人民邮电出版社,北京,。
附:字符界面的井字棋源代码
代码作者:ÞÞ周翔
代码功能:Þ基于字符界面的井字棋人机交互程序。
说明:ÞÞ对状态空间采用最大最小值搜索技术。计算机在生成的子节点中选择评
估函数值最大的节点;
而计算机在选择着数时使“人”选择评估函数值最小的节点,也就是对计算机一
方最不利的节点。
!"#$%&!'()
$*'(!$+'!$%,