博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
强化学习第六章
阅读量:5337 次
发布时间:2019-06-15

本文共 1337 字,大约阅读时间需要 4 分钟。

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

你可能感兴趣的文章
Redis常用命令
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
IOS开发学习笔记026-UITableView的使用
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
界面交互之支付宝生活圈pk微信朋友圈
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
web.xml 中加载顺序
查看>>
pycharm激活地址
查看>>
hdu 1207 四柱汉诺塔
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
display:none与visible:hidden的区别
查看>>
我的PHP学习之路
查看>>