Skip to content

Commit

Permalink
add ex4.4
Browse files Browse the repository at this point in the history
  • Loading branch information
Ti-Ho committed Apr 1, 2021
1 parent 3469392 commit b94ef45
Showing 1 changed file with 38 additions and 1 deletion.
39 changes: 38 additions & 1 deletion 动态规划/习题解答.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,46 @@ $$

> 上面这个策略迭代算法存在一个小问题,即如果在两个或多个同样好的策略之间不断切换,则它可能永远不会终止。所以上面的算法对于教学没有问题,但不适用于实际应用。请修改伪代码以保证其收敛。
*解答:*存在的问题是$argmax_a$将终止条件限制,因为在伪代码中的**策略改进**中,同样的价值函数可能会产生不同的策略,导致两个或多个同样好的策略在迭代前后不断切换,价值函数没有提升,但是$old-action \neq \pi(s)$,仍然会使程序跳转至`2`继续运行。
*解答:*存在的问题是将$argmax_a$是否稳定作为终止条件,因为在伪代码中的**策略改进**中,同样的价值函数可能会产生不同的策略,导致两个或多个同样好的策略在迭代前后不断切换,价值函数没有提升,但是$old\_action \neq \pi(s)$,仍然会使程序跳转至`2`继续运行。

解决方式为通过增加一个每个状态的最优动作的集合(最优动作集合为让贝尔曼最优方程取到最大值的所有动作),通过判断每一步过后一个状态$s$的最优的动作集合是否改变以及策略$\pi$是否改变来作为终止条件。以下为修改后的伪代码:

1. 初始化

对$s \in S$,任意设定$V(s) \in \mathbb{R}$以及$\pi(s) \in A(s)$,$maxActionSet(s) \gets set()$

*(这里的每个$maxActionSet(s)$都是一个set集合)*

2. 策略评估

循环:

​ $\Delta \gets 0$

​ 对每一个$s \in S$循环:

​ $v \gets V(s)$

​ $V(s) \gets \sum_{s',r}p(s',r|s,\pi(s))[r + \gamma V(s')]$

​ $\Delta \gets max(\Delta, |v - V(s)|)$

​ 直到$\Delta < \theta$(一个决定估计精度的小正数)

3. 策略改进

$policy\_stable \gets true$

对每一个$s \in S$:

​ $old\_action \gets \pi(s)$

​ $old\_max\_action\_set \gets maxActionSet(s)$

​ $\pi(s) \gets argmax_a\sum_{s',r}p(s',r|s,a)[r + \gamma V(s')]$

​ $maxActionSet(s) \gets \sum_{s',r}p(s',r|s,a)[r + \gamma V(s')]$取到最大值的所有动作$a$的集合

​ 如果$old\_action \neq \pi(s)$并且$old\_max\_action\_set \neq maxActionSet(s)$,那么$policy\_stable \gets false$

如果$policy\_stable$为$true$,那么停止并返回$V \approx v_*$以及$\pi \approx \pi_*$;否则跳转到2

0 comments on commit b94ef45

Please sign in to comment.