强化学习第六章

1、上下文管理器(结合 yield使用)

@contextmanager   
def timer(name):
with timer('Timer PolicyEval'):

那么在with下的一段代码会自动生成上下文

2、策略迭代由策略评估和策略提升两部分组成,每一次迭代都会经过这两部分,策略评估的损失函数是当前的价值和之前算的价值的平方差,策略提升通过选择价值中高得那一个动作作为下一轮策略迭代的策略。    策略评估中就会把值函数收敛到一定程度,然后根据值函数的最大值改进策略。当策略不再发生变化的时候,停止迭代。

(策略评估部分:)

for i in range(1, agent.s_len): # for each state
ac = agent.pi[i]
transition = agent.p[ac, i, :]
   value_sa = np.dot(transition, agent.r + agent.gamma * agent.value_pi)
   new_value_pi[i] = value_sa# value_sas[agent.policy[i]]
diff = np.sqrt(np.sum(np.power(agent.value_pi - new_value_pi, 2)))

价值迭代是先使得价值函数收敛,没有管策略函数,它每次选的是最优价值(所有动作对应的价值最高的那一个)作为当前价值,和之前的价值构成损失函数进行反向更新的。当价值函数达到最优的时候,停止迭代,之后才会得出策略。它没有“一轮”策略迭代快的原因是,它去追求了价值函数的“最优”。

(价值迭代过程:)

for i in range(1, agent.s_len): # for each state
value_sas = []
for j in range(0, agent.a_len): # for each act
value_sa = np.dot(agent.p[j, i, :], agent.r + agent.gamma * agent.value_pi)
value_sas.append(value_sa)
new_value_pi[i] = max(value_sas)
diff = np.sqrt(np.sum(np.power(agent.value_pi - new_value_pi, 2)))

 有一张图很好,是强化学习精要第167页两张图。

还有一种泛化迭代,策略迭代和值函数迭代有几个共同点:(1)都最终求出策略函数和值函数 (2)最优策略函数都是通过收敛的值函数得到的 (3)值函数都是通过贝尔曼方程收敛的。  他们的侧重点不一样:策略函数的核心是策略,他为了提升策略,值函数可以不那么准确,价值迭代的核心是价值,它的核心部分并没有策略。

广义泛化迭代:在优化的前几轮进行策略迭代,然后进行价值迭代,如第170页两张图6-10\6-11.

猜你喜欢

转载自www.cnblogs.com/lin-kid/p/11520184.html
今日推荐