如今的强化学习研究大体分为了两个研究学派:一个是以Sutton,Sliver等人为代表的value-based学派,他们主要从值函数近似角度入手去研究强化学习,这也是强化学习早期最初发展起来时沿用的路线;第二个是以伯克利Sergey Levine为代表的policy-based学派,主要从策略近似角度出发研究强化学习。

今天我介绍的动态规划算法思想在value-based乃至整个强化学习领域都起到了至关重要的作用,有非常多的算法都从其中衍生而来。话不多说,请坐稳扶好,老司机要发车了,嘟嘟~

动态规划是一种优化算法,起源于最优控制领域,可以用来解决多阶段序列决策问题,或者离散时间动态自适应控制问题。一个问题可以用动态规划求解,需要满足一下几条基本性质:

  • 子问题最优性/最优子结构

原问题可以被分解为子问题,原问题的最优性可以通过子问题的最优性推导出

  • 子问题重叠性/重叠子问题

一个问题满足子问题重叠性,意味着当我们去求解一个较大问题的最优解时,会多次调用子问题的最优解,即子问题的解会被多次递归调用。实际编程中我们会把子问题的解存储起来,后续会多次访问。例如OI中的记忆化搜索等等。

—————————————————————————————————————

马尔可夫决策过程满足上述两条基本性质:

  • 贝尔曼期望方程给出了递归分解式,将原问题的求解分解为子问题的求解
  • 价值函数可以被存储和多次调用

MDPs产生的序列是有先后顺序的,对于这种序列决策问题,前驱状态可以看做子问题,后继状态可以看做原问题,通过backup即可利用

可达状态的价值函数推导出
的价值函数。

动态规划方法用于解决model-based reinforcement learning问题,假设可知环境的所有动态信息,例如状态之间的转移规律等等。这个要求实际是非常苛刻的,因此后续会有很多的变体,不要求已知一个环境的模型。

接下来先介绍一下prediction和control的区别:

prediction:

prediction过程主要在做policy evaluation,即输入

和policy
,输出是follow policy
得到的状态价值函数

control

control主要在solve一个optimal policy and optimal value function。输入是MDP

,输出:
  • optimal policy

  • optimal value function

接下来我们介绍利用动态规划解决Policy Evaluation的方法:

目标:评估一个Policy的好坏;

解决方法:不断迭代贝尔曼期望方程;

——————————————————————————————稍后继续更新

策略改进:

策略评估:

'''
动态规划之策略迭代实现
算法:Policy Iteration
策略评估 + 策略改进:Bellman Expectation Equation + Greedy Policy Improvement
'''
import gym
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inlineenv = gym.make('CliffWalking-v0') # 导入gym环境-悬崖寻路def play_once(env,q_table):total_reward = 0state = env.reset()action = np.argmax(q_table[state,:]) # greedy policy improvement 公式(1)while True:next_state, reward, done, _ = env.step(action)next_action = np.argmax(q_table[next_state,:])# 贝尔曼期望方程策略改进,公式(2)q_table[state,action] = reward + 0.9*q_table[next_state,next_action] total_reward += rewardif done:breakstate = next_stateaction = next_actionreturn total_rewardq_table = np.zeros((env.nS,env.nA))
ans = []
for i in range(30):total_reward = play_once(env,q_table)print("总奖励 = {}".format(total_reward))ans.append(total_reward)
plt.figure()
plt.plot(ans,'b-')
plt.show()

——————————————稍后继续更——————————————————

动态规划算法实验报告_强化学习之动态规划算法相关推荐

  1. 机器学习线性回归算法实验报告_从零实现机器学习算法(九)线性回归

    1. 回归简介 在客观世界中普遍存在着变量与变量之间的关系.变量之间的关系一般可以分为确定关系和不确定关系.确定关系是指变量之间的关系可以通过函数关系来表达.非确定关系即所谓的相关关系.而回归分析是研 ...

  2. 机器学习线性回归算法实验报告_机器学习之简单线性回归

    为了利用机器学习进行简单的线性回归,先理解机器学习和线性回归的概念,然后通过案例进行机器学习.本文主要目录如下: 一.机器学习的概念 二.线性回归的概念 三.机器学习线性回归模型 (一)导入数据集 ( ...

  3. 动态规划算法实验报告_搞懂这几点,动态规划算法就是那么简单

    动态规划(Dynamic programming,简称DP),是大家都觉得比较难以掌握的算法.为了应付面试,我们经常会背诵一下斐波那楔数列或者背包问题的源码,其实,只要理解了思想,掌握基本的模型,然后 ...

  4. 数据结构排序算法实验报告_数据结构与算法-堆排序

    堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点,堆排序的时间复杂度为O(nlogn).( ...

  5. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  6. 机器学习线性回归算法实验报告_机器学习笔记 线性回归

    一.线性回归找到最佳拟合直线 1. 定义 线性回归是通过现有数据,让训练模型生成一个拟合公式,从而计算目标数据的预测值. 在统计学中,线性回归(Linear Regression)是利用称为" ...

  7. 数据结构和算法学多久_重新学习数据结构和算法

    数据结构和算法学多久 为什么? 我记得在我第一次参加计算机科学算法课程时 伊丽莎白市州立大学(ECSU)认为:"我得到了什么 我自己变成了?!". 材料令人生畏,而且(大部分时间) ...

  8. 重拾强化学习的核心概念_强化学习的核心概念

    重拾强化学习的核心概念 By Hannah Peterson and George Williams (gwilliams@gsitechnology.com) 汉娜·彼得森 ( Hannah Pet ...

  9. java文件加密解密实验报告_《网络信息安全技术》_实验报告_破译vigenamp#232;re_密码加密的密文...

    <<网络信息安全技术>_实验报告_破译vigen&amp#232;re_密码加密的密文>由会员分享,可在线阅读,更多相关<<网络信息安全技术>_实验报 ...

最新文章

  1. CentOS 7源码安装httpd服务
  2. 前端浏览器兼容知识点整理
  3. 常见分数值归一化方法
  4. 猫哥教你写爬虫 005--数据类型转换-小作业
  5. python编程胡牌将是什么意思_python麻将和牌算法
  6. python两个csv表数据合并_怎么用python把一个*。csv 文件里面的数据整合成一个表格...
  7. SQL 2012安装、配置路径
  8. 《.NET应用架构设计:原则、模式与实践》新书博客-2.1.1-设计原则简述
  9. 知识,因为美丽而传播
  10. 疯狂ios讲义疯狂连载之图像控件(UIImageView)
  11. 太阳光轨迹软件_飞时达日照分析软件-FastSUN(日照分析软件)下载 v12.0中文版--pc6下载站...
  12. cfiledialog对话框大小_CFileDialog类 通用对话框
  13. mysql禁止明文密码_暂时在MySQL *中存储明文密码是否安全*?
  14. msvcr100.dll丢失怎么办?msvcr100.dll丢失的解决方法
  15. 2018年8月27日英语学习
  16. 威联通 nas mysql_威联通(NAS)应用篇:自建OwnCloud网盘(百度网盘,拜拜~~~)
  17. 怎么将hashmap的数据传递给js_将Excel数据信息传递给Powerpoint应用
  18. 2021-06-21指针与变量 和字符数组作业。
  19. ubuntu14.04 iso硬盘安装
  20. 这些手写代码会了吗?少年

热门文章

  1. platform_device和platform_driver的注册过程,及probe函数何时调用的分析
  2. 关于SQL数据库中cross join 和inner join用法上的区别?
  3. 知识点:Mysql 数据库索引优化实战(4)
  4. 使用eclipse以及Juint进行测试
  5. 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
  6. easyUI文本框textbox笔记
  7. hdu 4280 最大流sap
  8. poj 3469(网络流模版)
  9. 程序结束后去哪儿了?
  10. gcc和g++有什么区别?