强化学习第六章

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.

 

转载于:https://www.cnblogs.com/lin-kid/p/11520184.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值