我是靠谱客的博主 动听茉莉,这篇文章主要介绍利用MATLAB的强化学习工具箱实现Q-Learning和SARSA算法,现在分享给大家,希望可以做个参考。

在网格世界(Grid World)环境中训练强化学习Agent(代理人)

此示例显示了如何通过训练Q-learning和SARSA代理人来使用强化学习来解决网格世界环境。 有关这些代理的更多信息,请分别参阅Q-Learning代理和SARSA代理。
此网格世界环境具有以下配置和规则:

  • 一个由边界界定的5 x 5网格世界,有4种可能的动作(北= 1,南= 2,东= 3,西= 4)。
  • 代理从单元格[2,1](第二行,第一列)开始。
  • 如果代理人到达单元格[5,5]的最终状态(蓝色),则代理商会获得+10的奖励。
  • 该环境包含从单元格[2,4]到单元格[4,4]的特殊跳转,奖励为+5。
  • 代理被障碍物(黑格)阻塞。
  • 所有其他动作都会导致-1奖励。
    在这里插入图片描述
    matlab代码如下:
    (如下代码是从matlab的官方文档翻译的,经过我的校对,基本没有歧义,代码已实际运行通过!)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
###创建网格世界环境 #创建基础的网格世界环境 env = rlPredefinedEnv("BasicGridWorld"); #要指定代理的初始状态始终为[2,1],需指定一个重置函数以返回代理的初始状态。 每次训练和模拟开始时都会调用此功能。 #状态从位置[1,1]开始编号,并向下计数该列。 因此,创建一个将初始状态设置为2的匿名函数句柄。 env.ResetFcn = @() 2; #修复随机生成器种子以提高可重复性。 rng(0) ###创建Q-Learning代理人 #要创建Q学习代理,首先使用网格世界环境中的观察和操作规范创建Q表。 将表示的学习率设置为1。 qTable = rlTable(getObservationInfo(env),getActionInfo(env)); tableRep = rlRepresentation(qTable); tableRep.Options.LearnRate = 1; #接下来,使用此表表示形式创建Q-Learning代理,配置epsilon-greedy探索。 有关创建Q学习代理的更多信息,请参见rlQAgent和rlQAgentOptions。 agentOpts = rlQAgentOptions; agentOpts.EpsilonGreedyExploration.Epsilon = .04; qAgent = rlQAgent(tableRep,agentOpts); ###训练Q-Learning代理人 #要培训代理,请首先指定训练选项。 对于此示例,使用以下选项: #训练最多200个剧集,每个剧集最多持续50个时间步。 #当业务代表在30个连续情节中获得的平均累积奖励大于10时,请停止训练。 #有关更多信息,请参见rlTrainingOptions。 trainOpts = rlTrainingOptions; trainOpts.MaxStepsPerEpisode = 50; trainOpts.MaxEpisodes= 200; trainOpts.StopTrainingCriteria = "AverageReward"; trainOpts.StopTrainingValue = 11; trainOpts.ScoreAveragingWindowLength = 30; #使用train函数训练Q-Learning代理。 这可能需要几分钟才能完成。 为了节省运行本示例的时间,请通过将doTraining设置为false来加载预训练的代理。 #要自己培训代理,请将doTraining设置为true。 doTraining = false; if doTraining % Train the agent. trainingStats = train(qAgent,env,trainOpts); else % Load pretrained agent for the example. load('basicGWQAgent.mat','qAgent') end #可以通过Episode Manager窗口观看训练的进程,具体看下图。 ###评估Q-Learning的结果 #要验证训练结果,请在训练环境中模拟。 #在运行模拟之前,请对环境进行可视化并配置可视化以维护对代理状态的跟踪。 plot(env) env.Model.Viewer.ShowTrace = true; env.Model.Viewer.clearTrace; #在环境中模拟代理人可以使用sim函数 sim(qAgent,env) #模拟结果见下图 ###创建和训练SARSA代理人 #使用与Q-Learning代理相同的Q table表示和epsilon-greedy配置来创建SARSA代理。 有关创建SARSA代理的更多信息,请参见rlSARSAAgent和rlSARSAAgentOptions。 agentOpts = rlSARSAAgentOptions; agentOpts.EpsilonGreedyExploration.Epsilon = 0.04; sarsaAgent = rlSARSAAgent(tableRep,agentOpts); #使用train函数训练SARSA代理。 这可能需要几分钟才能完成。 为了节省运行本示例的时间,请通过将doTraining设置为false来加载预训练的代理。 #要自己培训代理,请将doTraining设置为true。 doTraining = false; if doTraining % Train the agent. trainingStats = train(sarsaAgent,env,trainOpts); else % Load 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) ###END!

注:平时写习惯了python代码,matlab注释使用的是%。导入matlab文件中用查找-替换命令把#都换成%

使用Q-Learning算法可以看到动态的收敛结果
SARSA算法
最终收敛的结果
注:以上结果在matlab r2019a中完美运行,结果与官方给的效果相似。

最后

以上就是动听茉莉最近收集整理的关于利用MATLAB的强化学习工具箱实现Q-Learning和SARSA算法的全部内容,更多相关利用MATLAB内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(111)

评论列表共有 0 条评论

立即
投稿
返回
顶部