一个比较有意思的在离散情况下的 planning 方式。
之所以叫做tree search,我觉得就是因为这种方法就是像树杈一样从根部到树叶不断地搜索。就像下图这样:
要注意的是:
- 每个节点的含义,并不是每个state,而是采取某个特定的action后到达的state,这个state可以是不同的。比如说,从开始,我们如果执行action ,如图所示就会到达左边的,只要执行action ,就会到达左边的。
那么,既然是从根部开始,即我们在刚开始的时候只有一个s1,那么我们要怎么决定下一个采取什么动作呢?有两个原则:
- 选择Q值高的动作。也就是选择reward 高的动作。
- 选择没有选择过的动作。这里包含的意思,不仅是在某一个节点下如果有没有经历过的动作优先选择这个动作,而且是说,要选择N比较小的动作。(N是经历的次数)
为了更好的实现第二点,给出的每个state的是这样设计的,不光光看它的Q值:
这个式子也比较好理解,第一项就是每个节点所有的reward除以经历的次数,也就得到了Q的平均值,第二项就是考虑到上面说的第二点,C是我们自行设定的常数,第二项就随着N的增大而减小。
就像下图:
当我们某时刻经历了这些时,
虽然右边的节点看起来Q值平均值更大一些,但是因为左边并没有很好的探索完,也就是说,在一个比较好的C值下,我们应该会选择左边。如下图:
这样一来,左右的均值其实就是一样的了。一样的情况下再选的时候就是随机就好了。
有两篇相关的论文可以参考一下:
- A Survey of Monte Carlo Tree Search Methods
- 关于应用 Deep Learning for Real-Time Atari Game PlayUsing Offline Monte-Carlo Tree Search Planning