在网格环境中使用Q-learning and SARSA

  • 案例分析
  • 创建网格世界环境
  • 创建Q learning智能体
  • 训练Q learning 智能体
  • 验证Q learning结果
  • 创建和培训SARSA智能体
  • 验证SARSA训练

案例分析

网格世界环境具有以下配置和规则:

1.网格世界为5 x 5,并由边界界定,有四个可能的动作(北= 1,南= 2,东= 3,西= 4)。

2.智能体从单元格[2,1](第二行,第一列)开始。

3.如果智能体到达单元格[5,5]的最终状态(蓝色),则智能体会获得+10的奖励。

4.环境包含从单元格[2,4]到单元格[4,4]的特殊跳转,奖励为+5。

5.智能体被障碍物(黑格)阻塞。

6.所有其他动作都会导致–1奖励。

创建网格世界环境

创建基本的网格世界环境

env = rlPredefinedEnv("BasicGridWorld");

要指定智能体的初始状态始终为[2,1],请创建一个重置函数,以返回智能体的初始状态的状态号。每次训练和模拟开始时都会调用此功能。从位置[1,1]开始编号。当您向下移动第一列然后在随后的每一列中向下移动时,状态编号会增加。因此,创建一个将初始状态设置为的匿名函数句柄2。

env.ResetFcn = @() 2;

修复随机生成器种子以提高可重复性。

rng(0)

创建Q learning智能体

要创建Q学习智能体,请首先使用网格世界环境中的观察和操作规范创建Q表。将表示的学习率设置为1。

qTable = rlTable(getObservationInfo(env),getActionInfo(env));
qRepresentation = rlQValueRepresentation(qTable,getObservationInfo(env),getActionInfo(env));
qRepresentation.Options.LearnRate = 1;

接下来,使用此表表示创建Q学习智能体,并配置epsilon-greedy探索。

agentOpts = rlQAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = .04;
qAgent = rlQAgent(qRepresentation,agentOpts);

训练Q learning 智能体

要培训智能体,请首先指定培训选项。对于此示例,使用以下选项:

1.训练最多200集。指定每个情节最多持续50个时间步。

2.当代理在30个连续情节中获得的平均累积奖励大于10时,请停止训练。

trainOpts = rlTrainingOptions;
trainOpts.MaxStepsPerEpisode = 50;
trainOpts.MaxEpisodes= 200;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 11;
trainOpts.ScoreAveragingWindowLength = 30;

使用该train功能训练Q学习智能体。培训可能需要几分钟才能完成。为了节省运行本示例的时间,请通过将设置doTraining为来加载预训练的智能体false。要自己训练智能体,请设置doTraining为true。

doTraining = false;if doTraining% Train the agent.trainingStats = train(qAgent,env,trainOpts);
else% Load the pretrained agent for the example.load('basicGWQAgent.mat','qAgent')
end

将打开“情节管理器”窗口,并显示训练进度。

验证Q learning结果

要验证训练结果,请在训练环境中模拟座席。
在运行模拟之前,先对环境进行可视化并配置可视化以保持对智能体状态的跟踪。

plot(env)
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;

使用该sim功能在环境中模拟代理。

sim(qAgent,env)


代理跟踪显示智能体已成功找到从单元[2,4]到单元[4,4]的跳转。

创建和培训SARSA智能体

要创建SARSA智能体,请使用与Q学习智能体相同的Q table表示和epsilon-greedy配置。

agentOpts = rlSARSAAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = 0.04;
sarsaAgent = rlSARSAAgent(qRepresentation,agentOpts);

使用该train功能训练SARSA智能体。培训可能需要几分钟才能完成。为了节省运行本示例的时间,请通过将设置doTraining为来加载预训练的智能体false。要自己训练智能体,请设置doTraining为true。

doTraining = false;if doTraining% Train the agent.trainingStats = train(sarsaAgent,env,trainOpts);
else% Load the pretrained agent for the example.load('basicGWSarsaAgent.mat','sarsaAgent')
end

验证SARSA训练

要验证训练结果,请在训练环境中模拟座席。

plot(env)
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;

在环境中模拟代理。

sim(sarsaAgent,env)


SARSA智能体找到与Q学习智能体相同的网格世界解决方案。

MATLAB强化学习工具箱(一)-在网格环境中使用Q-learning and SARSA相关推荐

  1. 【MATLAB强化学习工具箱】学习笔记--actor网络和critic网络的结果放在哪里?

    原算例见 [MATLAB强化学习工具箱]学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent_bear_miao的博客- ...

  2. 什么是强化学习,强化学习在控制系统中的应用以及matlab强化学习工具箱的介绍

    一.Reinforcement Learning Toolbox介绍 强化学习工具箱使用强化学习算法(包括DQN,A2C和DDPG)为训练策略(policy)提供函数和模块.您可以使用这些策略为复杂的 ...

  3. MATLAB强化学习工具箱(十二)强化学习智能体创建总览

    强化学习智能体创建总览 强化学习介绍 内置智能体 选择智能体类型 自定义智能体 关于强化学习的更多介绍 强化学习介绍 强化学习的目标是训练智能体在不确定的环境中完成任务.智能体从环境中接收观察和奖励, ...

  4. MATLAB强化学习工具箱(十三)创建策略和价值函数表示

    创建策略和价值函数表示 行动者和评论者表示 表近似器 深度神经网络近似器 网络的输入和输出维度 构建深度神经网络 创建和配置表示 递归神经网络 自定义基础函数逼近器 创建智能体或指定智能体表示 强化学 ...

  5. MATLAB强化学习工具箱(十一)训练DDPG智能体控制飞行机器人

    训练DDPG智能体控制飞行器 飞行机器人模型 创建集成模型 动作与观察 创建环境接口 重置函数 创建DDPG智能体 训练智能体 DDPG智能体仿真 本示例说明如何训练深度确定性策略梯度(DDPG)智能 ...

  6. 强化学习4——无模型控制model-free control (On-Policy learning:Sarsa和Off-policy learning:Q-learning)

    文章目录 前言 无模型控制 问题 思路 方法 On-Policy learning MC Sarsa Off-policy learning Q-learning On-Policy learning ...

  7. matlab强化学习DDPG算法改编/菜鸟理解2——航天器三轴姿态稳定器学习算例

    目录 写在前面 matlab强化学习库简介 航天器三轴姿态稳定器介绍 算法流程 代码/simulink 结果展示与分析 一些心得 写在最后 写在前面 %写在前面: 本人大四狗一名,不是计算机专业,所以 ...

  8. matlab强化学习算例理/菜鸟理解1——双足机器人行走算例

    目录 matlab双足机器人强化学习算例介绍 强化学习的一些基础理解 菜鸟对一些名词的理解 matlab强化学习库介绍 双足机器人算例逻辑盘点 如何改写算例做自己的强化学习. %写在前面: 本人大四狗 ...

  9. 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的数据结构】

    原文链接如下 [MATLAB深度学习工具箱]学习笔记--体脂估计Body Fat Estimation_bear_miao的博客-CSDN博客介绍本示例展示一个函数拟合神经网络如何根据解剖学测量结果估 ...

最新文章

  1. java 按格式输出时间_java格式输出时间
  2. Matlab数据的可视化 -- 饼图
  3. 【Spring】【JUnit】单元测试
  4. JVM 配置常用参数
  5. 深入理解int a[5];
  6. 【PAT乙级】1075 链表元素分类 (25 分)
  7. 笔记-知识产权与标准化知识-软件质量模型(重)
  8. Java IO流总结
  9. Uncaught TypeError: this.canvas.getContext is not a function
  10. 西安集训B层Day1 test 问题 A: 旅行日记
  11. 华为面试题目:一头牛重800kg,一座桥承重700kg,牛如何过河?天秀回答秒通过...
  12. java 四级联动,省市区镇四级联动附代码和数据库
  13. RainMeter学习4
  14. Beetl的基本用法
  15. 提醒专注:既往不恋,未来不迎,当下不杂
  16. Qt Creator 报错 moc_mainwindow.cpp:-1: error: undefined reference to `MainWindow::mouseDoubleClickEven
  17. PMP分享|不在挣扎中蜕变,就在安逸中消亡
  18. matlab 冲激响应不变法,matlab实验七冲激响应不变法IIR数字滤波器设计.doc
  19. 如何给电脑加装硬盘?
  20. AGS01DA VOC传感器 MSP430 单片机 程序 AGS01DB

热门文章

  1. mysql dump -a -b_MySQL数据导出工具 mysqldump
  2. 五十四、SAP中LVC表格每列的宽度自适应
  3. JS实现图片幻灯片效果
  4. MySQL索引分析扩展理解
  5. JavaWeb基于老杜课程笔记的完善
  6. canvas电子画板 涂鸦、橡皮擦、保存图片,图片放大缩小
  7. 理解accuracy/precision_score、micro/macro
  8. 栽培员工,让他强大到可以离开!
  9. BigDecimal和DecimalFormat
  10. Jquery ajax, Axios, Fetch区别之我见 Axios中文说明