MATLAB强化学习工具箱(一)-在网格环境中使用Q-learning and SARSA

案例分析

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

1.网格世界为5 x 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],请创建一个重置函数,以返回智能体的初始状态的状态号。每次训练和模拟开始时都会调用此功能。从位置[1,1]开始编号。当您向下移动第一列然后在随后的每一列中向下移动时,状态编号会增加。因此,创建一个将初始状态设置为的匿名函数句柄2。

env.ResetFcn = @() 2;

修复随机生成器种子以提高可重复性。

rng(0)

创建Q learning智能体

要创建Q学习智能体,请首先使用网格世界环境中的观察和操作规范创建Q表。将表示的学习率设置为1。

qTable = rlTable(getObservationInfo(env),getActionInfo(env));
qRepresentation = rlQValueRepresentation(qTable,getObservationInfo(env),getActionInfo(env));
qRepresentation.Options.LearnRate = 1;

接下来,使用此表表示创建Q学习智能体,并配置epsilon-greedy探索。

agentOpts = rlQAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = .04;
qAgent = rlQAgent(qRepresentation,agentOpts);

训练Q learning 智能体

要培训智能体,请首先指定培训选项。对于此示例,使用以下选项:

1.训练最多200集。指定每个情节最多持续50个时间步。

2.当代理在30个连续情节中获得的平均累积奖励大于10时,请停止训练。

trainOpts = rlTrainingOptions;
trainOpts.MaxStepsPerEpisode = 50;
trainOpts.MaxEpisodes= 200;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 11;
trainOpts.ScoreAveragingWindowLength = 30;

使用该train功能训练Q学习智能体。培训可能需要几分钟才能完成。为了节省运行本示例的时间,请通过将设置doTraining为来加载预训练的智能体false。要自己训练智能体,请设置doTraining为true。

doTraining = false;

if doTraining
    % Train the agent.
    trainingStats = train(qAgent,env,trainOpts);
else
    % Load the pretrained agent for the example.
    load('basicGWQAgent.mat','qAgent')
end

将打开“情节管理器”窗口,并显示训练进度。
在这里插入图片描述

验证Q learning结果

要验证训练结果,请在训练环境中模拟座席。
在运行模拟之前,先对环境进行可视化并配置可视化以保持对智能体状态的跟踪。

plot(env)
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;

使用该sim功能在环境中模拟代理。

sim(qAgent,env)

在这里插入图片描述
代理跟踪显示智能体已成功找到从单元[2,4]到单元[4,4]的跳转。

创建和培训SARSA智能体

要创建SARSA智能体,请使用与Q学习智能体相同的Q table表示和epsilon-greedy配置。

agentOpts = rlSARSAAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = 0.04;
sarsaAgent = rlSARSAAgent(qRepresentation,agentOpts);

使用该train功能训练SARSA智能体。培训可能需要几分钟才能完成。为了节省运行本示例的时间,请通过将设置doTraining为来加载预训练的智能体false。要自己训练智能体,请设置doTraining为true。

doTraining = false;

if doTraining
    % Train the agent.
    trainingStats = train(sarsaAgent,env,trainOpts);
else
    % Load the 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)

在这里插入图片描述
SARSA智能体找到与Q学习智能体相同的网格世界解决方案。

猜你喜欢

转载自blog.csdn.net/wangyifan123456zz/article/details/109395054