【MATLAB强化学习工具箱】学习笔记--在基础网格环境训练强化学习智能体Train Reinforcement Learning Agent in Basic Grid World
2021/11/14 23:40:51
本文主要是介绍【MATLAB强化学习工具箱】学习笔记--在基础网格环境训练强化学习智能体Train Reinforcement Learning Agent in Basic Grid World,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【说明:这是强化学习工具箱的第一个基本示例,体系了大量设计要素。】
生成env
env是强化学习的环境、world、动力学、边界,定义了操作空间。
env = rlPredefinedEnv("BasicGridWorld"); plot(env)
【说明:plot(env)打开env图片之后,不要关闭,否则在train环节一直报错误。Error using matlab.graphics.primitive.Patch/set Invalid or deleted object.目前还不清楚原因,在本次学习过程中耽误了3个小时】
地图说明如下:
(1)地图由5×5网格组成,边界不可逾越。红色圆点是agent,可有四个基本动作(North = 1, South = 2, East = 3, West = 4);【说明:action】
(2)agent默认位置在[1,1];【说明:initial state】
(3)agent到达蓝色方块,可得10分;【说明:reward】
(4)地图中包含了特殊的动作,当从[2,4]直接跳到[4,4]可以得到5分;【说明:action,reward】
(5)黑色网格视为障碍不可逾越;【说明:action】
(6)除(3)(4)两种状态外的其他动作均减1分;【说明:action,reward】
初始化
环境初始化,确保每次重置后都从同一位置开始;
env.ResetFcn = @()1;
随机数种子初始化
rng(0)
生成Q-Learning Agent
生成Q表
从env中提取Observation和Action
qTable = rlTable(getObservationInfo(env),getActionInfo(env)); qRepresentation = rlQValueRepresentation(qTable,getObservationInfo(env),getActionInfo(env));
设置学习率为1
qRepresentation.Options.LearnRate = 1;
设置ε-greedy系数为0.04;
agentOpts = rlQAgentOptions; agentOpts.EpsilonGreedyExploration.Epsilon = .04; qAgent = rlQAgent(qRepresentation,agentOpts);
训练Q-Learing Agent
生成train配置
trainOpts = rlTrainingOptions;
设置每个迭代步最多运行步为50
trainOpts.MaxStepsPerEpisode = 50;
设置最大迭代次数为200
trainOpts.MaxEpisodes= 200;
设置停止训练判据为平均奖励;
trainOpts.StopTrainingCriteria = "AverageReward";
设置停止训练平均奖励为11分
trainOpts.StopTrainingValue = 11;
设置停止训练判据为连续30次平均奖励不小于11分
trainOpts.ScoreAveragingWindowLength = 30;
开始训练
trainingStats = train(qAgent,env,trainOpts);
训练过程如下所示:
训练结果展示
env.Model.Viewer.ShowTrace = true; env.Model.Viewer.clearTrace;
仿真结果路径
sim(qAgent,env)
由浅色至深色的路径为最佳路径。注意根据特殊奖励策略,翻越了一次障碍,多得了5分。
这篇关于【MATLAB强化学习工具箱】学习笔记--在基础网格环境训练强化学习智能体Train Reinforcement Learning Agent in Basic Grid World的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享