强化学习和ADP(下)
强化学习在连续时间系统问题上求解相比于离散时间系统而言更加的困难,因此发展受到了延迟。下面讨论一下原因
考虑到一个连续时间的非线性动态规划系统
目标导向的最优行为的概念是通过定义与反馈控制策略相关联的性能度量或成本函数来捕获的
其中性能度量\(r(x,u)=Q(x)+u^TRu\),\(Q(x)\)是正定的,也就是对于所有的\(x\)不为零,则\(Q(x)>0\),并且当\(x=0\)时,\(Q(x=0)\),\(R\in R^{m\times m}\)为正定对称矩阵。
如果一个策略是连续的,使系统稳定,并且具有有限的相关代价,则该策略被称为可容许策略。如果代价是平滑的,则等于无穷小(84)可以通过微分得到为非线性李雅普诺夫方程
这是CT贝尔曼方程。它是基于CT哈密顿函数定义的
比较CT Bellman哈密顿量(86)和DT哈密顿量(9),前者包含了整个系统动力学,而DT哈密顿量不包含。这意味着没有希望使用CT Bellman方程(85)作为强化学习的基础,除非完整的动力学是已知的。
Baird采用欧拉方法离散CT Bellman方程。
用欧拉方法将其离散化得到
采样周期是\(T\),所以是\(t=kT\)。离散的采样效用是\(r_S(x_k,u_k)=r(x_k,u_k)T\),其中重要的是将CT效用乘以样本周期。
现在注意到离散CT Bellman方程(88)与DT Bellman方程(8)具有相同的形式。因此,刚才描述的所有强化学习方法都可以应用。基于此,Baird将优势学习定义为一种改进采样CT系统强化学习条件的方法。他指出,如果没有适当地离散,那么当T变小时,DT解决方案不会收敛到CT解决方案。
然而,这只是一个近似值。[Vrabie 2009]给出了CT强化学习的另一种精确方法。可以用间隔强化表来填写成本
对于任意的\(T>0\). 这正是DT Bellman方程(8)的形式。根据Bellman原理,最优值根据这种结构给出为
其中\(\bar{u}(t:t+T)=(u(\mu):t\le \tau \le t+T)\),最优控制为:
[Vrabie 2009]表明,非线性Lyapunov方程(85)与区间强化学习形式(89)完全等价。也就是说,两者的正定解都是策略\(u=\mu(x)\)的值(84)。
区间强化学习形式为CT系统的Bellman方程,作为不动点方程。因此,可以将CT系统的时间差误差定义为
这并不涉及系统动力学。
目前,CT系统的策略迭代和价值迭代的制定已成为当务之急。
(1) CT 策略迭代算法
- 初始化:选择一个可行的控制策略\(\mu^{(0)}(x)\)
- 策略苹果:求解\(V^{\mu^{(i)}}(x(t))\)
- 策略改进:获取一个改进策略
明确的是
(2) CT 价值迭代算法
- 初始化:选择一个控制策略\(\mu^{(0)}(x)\),不要求可行性
- 策略苹果:求解\(V^{\mu^{(i)}}(x(t))\)
- 策略改进:获取一个改进策略
明确的是
注意,这两种算法都不需要关于内部系统动力学函数\(f\)的知识。也就是说,它们为部分未知的系统工作。
这两种算法都可以使用上述的强化学习技术在线实现。每一次迭代的时间增量为周期\(T\)。每一次迭代的测量数据为\((x(t),x(t+T),\rho(t:t+T))\)
每次迭代时,强化学习的时间区间\(T\)不一定相同。\(T\)可以根据从观察中获得有意义的信息所需的时间而改变。
在LQR的情况下,Policy Iteration与求解CT Riccati方程的Kleinman算法完全相同。然而,这些RL方法允许只使用关于\(g(\cdot)\)的信息(例如\(B\)矩阵)来实现算法。关于\(f(\cdot)\)(矩阵)的信息是不需要的。即,CT PI在不知道系统内部动力学的情况下,利用沿系统轨迹测量的数据,在线求解CT Riccati方程。
原文地址:https://www.cnblogs.com/kzin/p/15175390.html
- Ubuntu 16.04 安装VNC
- 使用Feign实现Form表单提交
- Ubuntu 16.04 Install OpenCV
- Spring Cloud各组件调优参数
- 手把手教你设置 IntelliJ IDEA 的彩色代码主题
- 实用技巧:Hystrix传播ThreadLocal对象(两种方案)
- OpenDaylight与Mininet应用实战之流表操作
- 使用Spring Cloud Feign上传文件
- 用 TensorFlow 让你的机器人唱首原创给你听
- Spring Cloud限流详解(附源码)
- 手动安装Docker 17.06
- 详述使用 IntelliJ IDEA 解决 jar 包冲突的问题
- Spring Cloud各组件重试总结
- js或者php浮点数运算产生多位小数的理解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用VSCode和SSH进行远程开发
- Android利用CountDownTimer实现倒计时功能 Android实现停留5s跳转到登录页面
- Android开发之对话框案例详解(五种对话框)
- Linux下一只五颜六色的「猫」
- Android编程实现自定义ImageView圆图功能的方法
- Android开启闪光灯的方法 Android打开手电筒功能
- Android 中ActionBar+fragment实现页面导航的实例
- Android编程之下拉菜单Spinner控件用法示例
- Android控件Tween动画(补间动画)实现方法示例
- Android顶部(toolbar)搜索框实现的实例详解
- Linux下tcpdump命令解析及使用详解
- react native中的聊天气泡及timer封装成的发送验证码倒计时
- 如何卸载linux自带openjdk并安装sun jdk
- Android中实现密码的隐藏和显示的示例
- CentOS8出现-bash:乱码问题及解决方法