主要内容

在基础网格世界中训练强化学习代理

这个例子展示了如何通过训练Q-learning和SARSA代理,使用强化学习来解决网格世界环境。有关这些代理的更多信息,请参见q学习的代理撒尔沙代理

这个网格世界环境有以下配置和规则:

  1. 网格世界是5乘5的,以边界为界,有四种可能的动作(北= 1,南= 2,东= 3,西= 4)。

  2. 代理从单元格[2,1](第二行,第一列)开始。

  3. 如果代理在单元格[5,5](蓝色)处达到终端状态,则会获得+10的奖励。

  4. 环境包含从单元[2,4]到单元[4,4]的特殊跳跃,奖励为+5。

  5. 代理被障碍物(黑细胞)阻挡。

  6. 所有其他行动的结果都是-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学习代理的信息,请参见rlQAgentrlQAgentOptions

火车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代理的更多信息,请参见rlSARSAAgentrlSARSAAgentOptions

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学习代理相同的网格世界解决方案。

另请参阅

|

相关的话题

Baidu
map