动态规划算法实验报告_强化学习之动态规划算法
如今的强化学习研究大体分为了两个研究学派:一个是以Sutton,Sliver等人为代表的value-based学派,他们主要从值函数近似角度入手去研究强化学习,这也是强化学习早期最初发展起来时沿用的路线;第二个是以伯克利Sergey Levine为代表的policy-based学派,主要从策略近似角度出发研究强化学习。
今天我介绍的动态规划算法思想在value-based乃至整个强化学习领域都起到了至关重要的作用,有非常多的算法都从其中衍生而来。话不多说,请坐稳扶好,老司机要发车了,嘟嘟~
动态规划是一种优化算法,起源于最优控制领域,可以用来解决多阶段序列决策问题,或者离散时间动态自适应控制问题。一个问题可以用动态规划求解,需要满足一下几条基本性质:
- 子问题最优性/最优子结构
原问题可以被分解为子问题,原问题的最优性可以通过子问题的最优性推导出
- 子问题重叠性/重叠子问题
一个问题满足子问题重叠性,意味着当我们去求解一个较大问题的最优解时,会多次调用子问题的最优解,即子问题的解会被多次递归调用。实际编程中我们会把子问题的解存储起来,后续会多次访问。例如OI中的记忆化搜索等等。
—————————————————————————————————————
马尔可夫决策过程满足上述两条基本性质:
- 贝尔曼期望方程给出了递归分解式,将原问题的求解分解为子问题的求解
- 价值函数可以被存储和多次调用
MDPs产生的序列是有先后顺序的,对于这种序列决策问题,前驱状态可以看做子问题,后继状态可以看做原问题,通过backup即可利用
动态规划方法用于解决model-based reinforcement learning问题,假设可知环境的所有动态信息,例如状态之间的转移规律等等。这个要求实际是非常苛刻的,因此后续会有很多的变体,不要求已知一个环境的模型。
接下来先介绍一下prediction和control的区别:
prediction:
prediction过程主要在做policy evaluation,即输入
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. 回归简介 在客观世界中普遍存在着变量与变量之间的关系.变量之间的关系一般可以分为确定关系和不确定关系.确定关系是指变量之间的关系可以通过函数关系来表达.非确定关系即所谓的相关关系.而回归分析是研 ...
- 机器学习线性回归算法实验报告_机器学习之简单线性回归
为了利用机器学习进行简单的线性回归,先理解机器学习和线性回归的概念,然后通过案例进行机器学习.本文主要目录如下: 一.机器学习的概念 二.线性回归的概念 三.机器学习线性回归模型 (一)导入数据集 ( ...
- 动态规划算法实验报告_搞懂这几点,动态规划算法就是那么简单
动态规划(Dynamic programming,简称DP),是大家都觉得比较难以掌握的算法.为了应付面试,我们经常会背诵一下斐波那楔数列或者背包问题的源码,其实,只要理解了思想,掌握基本的模型,然后 ...
- 数据结构排序算法实验报告_数据结构与算法-堆排序
堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点,堆排序的时间复杂度为O(nlogn).( ...
- 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)
我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...
- 机器学习线性回归算法实验报告_机器学习笔记 线性回归
一.线性回归找到最佳拟合直线 1. 定义 线性回归是通过现有数据,让训练模型生成一个拟合公式,从而计算目标数据的预测值. 在统计学中,线性回归(Linear Regression)是利用称为" ...
- 数据结构和算法学多久_重新学习数据结构和算法
数据结构和算法学多久 为什么? 我记得在我第一次参加计算机科学算法课程时 伊丽莎白市州立大学(ECSU)认为:"我得到了什么 我自己变成了?!". 材料令人生畏,而且(大部分时间) ...
- 重拾强化学习的核心概念_强化学习的核心概念
重拾强化学习的核心概念 By Hannah Peterson and George Williams (gwilliams@gsitechnology.com) 汉娜·彼得森 ( Hannah Pet ...
- java文件加密解密实验报告_《网络信息安全技术》_实验报告_破译vigenamp#232;re_密码加密的密文...
<<网络信息安全技术>_实验报告_破译vigen&#232;re_密码加密的密文>由会员分享,可在线阅读,更多相关<<网络信息安全技术>_实验报 ...
最新文章
- CentOS 7源码安装httpd服务
- 前端浏览器兼容知识点整理
- 常见分数值归一化方法
- 猫哥教你写爬虫 005--数据类型转换-小作业
- python编程胡牌将是什么意思_python麻将和牌算法
- python两个csv表数据合并_怎么用python把一个*。csv 文件里面的数据整合成一个表格...
- SQL 2012安装、配置路径
- 《.NET应用架构设计:原则、模式与实践》新书博客-2.1.1-设计原则简述
- 知识,因为美丽而传播
- 疯狂ios讲义疯狂连载之图像控件(UIImageView)
- 太阳光轨迹软件_飞时达日照分析软件-FastSUN(日照分析软件)下载 v12.0中文版--pc6下载站...
- cfiledialog对话框大小_CFileDialog类 通用对话框
- mysql禁止明文密码_暂时在MySQL *中存储明文密码是否安全*?
- msvcr100.dll丢失怎么办?msvcr100.dll丢失的解决方法
- 2018年8月27日英语学习
- 威联通 nas mysql_威联通(NAS)应用篇:自建OwnCloud网盘(百度网盘,拜拜~~~)
- 怎么将hashmap的数据传递给js_将Excel数据信息传递给Powerpoint应用
- 2021-06-21指针与变量 和字符数组作业。
- ubuntu14.04 iso硬盘安装
- 这些手写代码会了吗?少年
热门文章
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析
- 关于SQL数据库中cross join 和inner join用法上的区别?
- 知识点:Mysql 数据库索引优化实战(4)
- 使用eclipse以及Juint进行测试
- 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
- easyUI文本框textbox笔记
- hdu 4280 最大流sap
- poj 3469(网络流模版)
- 程序结束后去哪儿了?
- gcc和g++有什么区别?