这个例子展示了如何通过训练Q-learning和SARSA代理来使用强化学习来解决网格世界环境。有关这些代理的更多信息,请参见q学习的代理和撒尔沙代理。
这个网格世界环境有以下配置和规则:
这个网格世界是5乘5的,有4种可能的行动(北= 1,南= 2,东= 3,西= 4)。
代理从单元格[2,1](第二行,第一列)开始。
如果agent在单元格[5,5](蓝色)到达终端状态,它将获得+10的奖励。
该环境包含从细胞[2,4]到细胞[4,4]的特殊跳跃,奖励为+5。
代理被障碍物阻挡(黑色单元格)。
所有其他行动的结果是-1奖励。
创建基本的网格世界环境。
env = rlPredefinedEnv (“BasicGridWorld”);
要指定代理的初始状态总是[2,1],需要创建一个reset函数,该函数返回代理初始状态的状态号。在每次训练和模拟开始时调用此函数。状态从位置[1,1]开始编号。当您向下移动第一列和随后的每一列时,状态数会增加。因此,创建一个匿名函数句柄,将初始状态设置为2
。
env。ResetFcn = @() 2;
修复随机生成器种子的再现性。
rng (0)
要创建Q学习代理,首先使用来自网格世界环境的观察和操作规范创建一个Q表。设置表示的学习速率为1。
qTable = rlTable (getObservationInfo (env) getActionInfo (env));qRepresentation = rlQValueRepresentation (qTable getObservationInfo (env) getActionInfo (env));qRepresentation.Options.LearnRate = 1;
接下来,使用这个表表示创建一个q -学习代理,并配置贪钻研。有关创建q -学习代理的更多信息,请参见rlQAgent
和rlQAgentOptions
。
agentOpts = rlQAgentOptions;agentOpts.EpsilonGreedyExploration.Epsilon = .04点;qAgent = rlQAgent (qRepresentation agentOpts);
要培训代理,首先指定培训选项。对于本例,使用以下选项:
训练最多200集。指定每一集持续最多50个时间步骤。
当经纪人在30次连续训练中获得超过10次的平均累积奖励时,停止训练。
有关更多信息,请参见rlTrainingOptions
。
trainOpts = rlTrainingOptions;trainOpts。MaxStepsPerEpisode = 50;trainOpts。MaxEpisodes = 200;trainOpts。StopTrainingCriteria =“AverageReward”;trainOpts。StopTrainingValue = 11;trainOpts。ScoreAveragingWindowLength = 30;
训练q学习代理使用火车
函数。训练可能需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理doTraining
来假
。自己训练代理人,设置doTraining
来真正的
。
doTraining = false;如果doTraining培训代理商。env, trainingStats =火车(qAgent trainOpts);其他的%加载示例的预训练代理。负载(“basicGWQAgent.mat”,“qAgent”)结束
的事件管理器窗口打开并显示训练进度。
为了验证训练结果,在训练环境中模拟agent。
在运行模拟之前,可视化环境并配置可视化以维护代理状态的跟踪。
plot(env) env. model . viewer . showtrace = true;env.Model.Viewer.clearTrace;
控件在环境中模拟代理sim卡
函数。
sim (qAgent env)
代理跟踪显示,代理成功地找到了从单元[2,4]到单元[4,4]的跳转。
要创建SARSA代理,请使用与Q-learning代理相同的Q表表示和贪心配置。有关创建SARSA代理的详细信息,请参见rlSARSAAgent
和rlSARSAAgentOptions
。
agentOpts = rlSARSAAgentOptions;agentOpts.EpsilonGreedyExploration.Epsilon = 0.04;sarsaAgent = rlSARSAAgent (qRepresentation agentOpts);
训练SARSA特工使用火车
函数。训练可能需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理doTraining
来假
。自己训练代理人,设置doTraining
来真正的
。
doTraining = false;如果doTraining培训代理商。env, trainingStats =火车(sarsaAgent trainOpts);其他的%加载示例的预训练代理。负载(“basicGWSarsaAgent.mat”,“sarsaAgent”)结束
为了验证训练结果,在训练环境中模拟agent。
plot(env) env. model . viewer . showtrace = true;env.Model.Viewer.clearTrace;
在环境中模拟代理。
sim (sarsaAgent env)
SARSA代理与Q-learning代理找到相同的网格世界解。