蒙特卡洛树搜索:
MCTS使用蒙特卡洛模拟来估计每个节点的价值. 其默认策略为贪婪算法, 即每次选择价值最高的节点进行模拟, 在每次模拟得到结果后, 将结果反馈回每个上级节点, 更新节点价值. 通常来讲, 每个访问到的节点都会加入到树中, 实际上为了节省内存每次只加入一个子节点, 可以通过对旧节点剪枝或多次模拟后再加入新节点来进一步节省内存.
贪婪算法的缺点在于对于一个节点, 如果产生了一次或几次不利的结果后, 搜索树就会避开访问这个节点, 这意味着搜索树的广度会降低, 可能会忽略更好的选择. 这时应该选择UCB1算法(Upper Confidence Bound), 对应节点产生的价值为:
其中C为搜索规模常数, 当C取值越大, 树越偏向广度搜索, 越小就越偏向深度搜索.
AMAF(all moves as first) 算法的核心思想是每一步落子有一个恒定的价值, 不管是什么时候落下的.
当给定状态s, 模拟出期望结果z, 选取a作为后续落子, AMAF value计算为:
当第i次模拟时, 动作a被执行, 得到状态s时返回1, 否则则返回0
RAVE(rapid action value estimation) 算法融合了蒙特卡洛树搜索和AMAF算法, 它不计算蒙特卡洛价值,