极小极大搜索(MiniMax)
极小极大搜索的算法原理很简单,主要基于以下两个思想:
(1) 轮到我方选择局面,选择最有利于我方的局面
(2) 轮到敌方选择局面,选择最不利于我方的局面
极小极大搜索需要有一个指标,用来衡量局面对我方的有利程度,值越大越有利。假设搜索树的根节点是我方选择局面,根节点在第0层,则每个偶数层的节点都会从其子节点中选择指标值最大的局面,每个奇数层的节点都会从其子节点中选择指标值最小的局面。
极小极大搜索有一个很有用的剪枝技巧,就是alpha-beta剪枝,主要运用于以下两个场景:
(1) 如果当前节点是min节点,则父节点是max节点,如果当前节点的值小于父节点的值,则当前节点无需继续搜索,因为这个节点的值不可能传递到其父节点了。
(2) 如果当前节点是max节点,则父节点是min节点,如果当前节点的值大于父节点的值,则当前节点无需继续搜索,理由同上。
蒙特卡洛树搜索(MCTS)
蒙特卡洛树搜索主要有四个步骤,分别是选择,扩展,模拟和反向传播。
选择
当前局面会根据先验的评价指标和节点访问次数以及搜索树统计的胜率综合选择一个局面作为下一步的局面。先验的评价指标值越大表示这个局面越有利,而访问次数在这里的作用是提高访问次数小的局面被访问的可能性,在搜索树中统计的胜率越高越有利。根据先验指标和访问次数以及统计的胜率可以得到一个概率分布,从这个概率分布采样一个局面作为下一个局面,这一步就是选择。
扩展
当选择到一个局面是不在搜索树中时,将这个局面加入到搜索树的叶节点,这一步就是扩展。
模拟
从扩展得到的新局面开始,通过一个走子分布模拟双方走子,直到分出胜负。模拟双方走子多次,统计这个局面的胜负关系。
反向传播
通过模拟,可以得到扩展的新局面的胜率,将这个胜率进行反向传播,沿着路径返回搜索树的根节点,更新路径中所有节点的胜率。
通过不断重复选择-扩展-模拟-反向传播的过程,搜索树的规模不断扩大,搜索树节点统计的胜率也会越来越准确。搜索树可以自动定位哪些局面更值得搜索,同时会兼顾到尝试新局面。通过加入先验的评价指标可以在初始搜索阶段给予搜索树发展方向,加快收敛。大名鼎鼎的Alpha-Go就是基于MCTS的。