Skip to content

Commit

Permalink
docs: 8.4 优先扫描(一)
Browse files Browse the repository at this point in the history
  • Loading branch information
qiwihui committed Apr 27, 2019
1 parent f2d7b82 commit 8ce303c
Showing 1 changed file with 67 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,73 @@ Dyna个体的整体架构,其中Dyna-Q算法就是一个例子,如图8.1所
8.4 优先扫描
------------------

在前面部分中介绍的Dyna个体中,模拟转换是从所有先前经历过的状态-动作对中随机均匀选择的状态-动作对开始的。
但统一的选择通常不是最好的;如果模拟转换和更新专注于特定的状态-动作对,则规划可以更加有效。
例如,考虑在第一个迷宫任务的第二回合中发生的情况(图8.3)。
在第二回合开始时,只有直接进入目标的状态-动作对具有正值;所有其他对的价值仍为零。
这意味着对几乎所有转换执行更新毫无意义,因为它们将个体从一个零值状态转移到另一个零值状态,因此更新将不起作用。
只有在目标之前或之后转换到状态的更新才会更改任何价值。
如果统一生成模拟转换,那么在遇到其中一个有用转换之前,将会进行许多浪费的更新。
随着规划的进展,有用更新的区域也在增长,但如果重点放在能够做到最好的地方,那么规划的效果仍然远远不够。
在作为我们真正目标的更大问题中,状态的数量如此之大,以至于没有重点的搜索将极其低效。

这个例子表明,通过从目标状态 *向后* 工作,可以有效地集中搜索。
当然,我们并不真的想使用任何特定于“目标状态”概念的方法。我们希望方法适用于一般奖励函数。
目标状态只是一种特殊情况,便于刺激直觉。一般而言,我们希望不仅从目标状态而且从任何价值已发生变化的状态g开展工作。
假设在给定模型的情况下这些价值最初是正确的,因为它们在发现目标之前处于迷宫示例中。
现在假设个体发现环境中的变化并改变其一个状态的估计值,向上或向下。
通常,这意味着还应该更改许多其他状态的值,但唯一有用的一步更新是直接导致其价值已更改的一个状态的动作。
如果更新了这些动作的价值,则可以依次更改先前状态的价值。
如果是这样,那么导致它们的行为需要更新,然后 *它们的* 前任状态可能已经改变。
通过这种方式,可以从价值发生变化的任意状态向后工作,执行有用的更新或终止传播。
这个总体思路可能被称为规划计算的 *后向聚焦(backward focusing)*。

随着有用更新的前沿向后传播,它经常快速增长,产生许多可以有用地更新的状态-动作对。但并非所有这些都同样有用。
一些状态的价值可能已经发生了很大变化,而其他状态的变化可能很小。
那些已经发生了很大变化的前任对也更有可能发生很大变化。
在随机环境中,估计转移概率的变化也会导致变化大小的变化以及需要更新状态-动作对的紧迫性。
根据紧急程度的衡量标准对更新进行优先级排序是很自然的,并按优先级顺序执行。这是优先扫描背后的思想。
维护每个状态-动作对的队列,如果更新,其估计值将变化为非平凡的,由变化的大小区分优先级。
更新队列中的头部状态-动作对时,将计算对其每个前任状态-动作对的影响。
如果效果大于某个小阈值,则将该对插入具有新优先级的队列中
(如果队列中存在该状态-动作对的先前条目,则插入导致队列中仅剩余的较高优先级条目)。
通过这种方式,变化的影响被有效地向后传播直到静止。确定性环境的完整算法在下面框中给出。

.. admonition:: 确定环境优先扫描
:class: important

对所有 :math:`s, a`,初始化 :math:`Q(s,a)` 和 :math:`Model(s,a)`,初始化 :math:`PQueue` 为0

一直循环:

(a) :math:`S \leftarrow` 当前(非终端)状态

(b) :math:`A \leftarrow \text{策略}(S, Q)`

(c)执行动作 :math:`A`;观察结果奖励 :math:`R` 和状态 :math:`S^{\prime}`

(d) :math:`Model(S, A) \leftarrow R, S^{\prime}`

(e) :math:`P \leftarrow\left|R+\gamma \max _{a} Q\left(S^{\prime}, a\right)-Q(S, A)\right|`

(f)如果 :math:`P>\theta`,则将 :math:`S, A` 插入 :math:`PQueue`,优先级为 :math:`P`

(g)循环 :math:`n` 次,当 :math:`PQueue` 不为空时:

:math:`S, A \leftarrow \text { first }(PQueue)`

:math:`R, S^{\prime} \leftarrow Model(S, A)`

:math:`Q(S, A) \leftarrow Q(S, A)+\alpha\left[R+\gamma \max _{a} Q\left(S^{\prime}, a\right)-Q(S, A)\right]`

循环所有预计导向 :math:`S` 的 :math:`\overline{S], \overline{A}`:

:math:`\overline{R} \leftarrow` :math:`\overline{S}, \overline{A}, S` 的预测奖励

:math:`P \leftarrow\left|\overline{R}+\gamma \max _{a} Q(S, a)-Q(\overline{S}, \overline{A})\right|`

如果 :math:`P>\theta`,则将 :math:`\overline{S}, \overline{A}` 插入 :math:`PQueue`,优先级为 :math:`P`


8.5 预期与样本更新
---------------------
Expand Down

0 comments on commit 8ce303c

Please sign in to comment.