在基础网格世界中训练强化学习代理
这个例子展示了如何通过训练Q-learning和SARSA代理,使用强化学习来解决网格世界环境。有关这些代理的更多信息,请参见q学习的代理和撒尔沙代理。
这个网格世界环境有以下配置和规则:
网格世界是5乘5的,以边界为界,有四种可能的动作(北= 1,南= 2,东= 3,西= 4)。
代理从单元格[2,1](第二行,第一列)开始。
如果代理在单元格[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学习代理,首先要使用来自网格世界环境的观察和动作规范创建一个Q表。将优化器的学习率设置为0.01
。
qTable = rlTable (getObservationInfo (env),…getActionInfo (env));
要近似代理内的q值函数,请创建一个rlQValueFunction
逼近器对象,使用表和环境信息。
qFcnAppx = rlQValueFunction (qTable,…getObservationInfo (env),…getActionInfo (env));
接下来,使用q值函数创建一个q学习代理。
qAgent = rlQAgent (qFcnAppx);
配置代理选项,如epsilon-greedy探索和函数逼近器的学习率。
qAgent.AgentOptions.EpsilonGreedyExploration.Epsilon = .04点;qAgent.AgentOptions.CriticOptimizerOptions.LearnRate = 0.01;
更多关于创建q学习代理的信息,请参见rlQAgent
和rlQAgentOptions
。
火车q学习的代理
要培训代理,首先指定培训选项。对于本例,使用以下选项:
训练最多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”)结束
的事件管理器窗口打开,显示培训进度。
验证q学习的结果
为了验证训练结果,在训练环境中模拟agent。
在运行模拟之前,可视化环境并配置可视化以维护代理状态的跟踪。
plot(env) env. model . viewer . showtrace = true;env.Model.Viewer.clearTrace;
方法模拟环境中的代理sim卡
函数。
sim (qAgent env)
代理轨迹显示,代理成功找到了从cell[2,4]到cell[4,4]的跳转。
创建和训练SARSA代理
要创建SARSA代理,使用与Q学习代理相同的Q值函数和epsilon-greedy配置。有关创建SARSA代理的更多信息,请参见rlSARSAAgent
和rlSARSAAgentOptions
。
sarsaAgent = rlSARSAAgent (qFcnAppx);sarsaAgent.AgentOptions.EpsilonGreedyExploration.Epsilon = .04点;sarsaAgent.AgentOptions.CriticOptimizerOptions.LearnRate = 0.01;
方法来训练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学习代理相同的网格世界解决方案。