在网格世界(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文件中用查找-替换命令把#都换成%
注:以上结果在matlab r2019a中完美运行,结果与官方给的效果相似。
最后
以上就是动听茉莉最近收集整理的关于利用MATLAB的强化学习工具箱实现Q-Learning和SARSA算法的全部内容,更多相关利用MATLAB内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复