【说明:这是强化学习工具箱的第一个基本示例,体系了大量设计要素。】
生成env
env是强化学习的环境、world、动力学、边界,定义了操作空间。
env = rlPredefinedEnv("BasicGridWorld");
plot(env)
【说明:plot(env)打开env图片之后,不要关闭,否则在train环节一直报错误。Error using matlab.graphics.primitive.Patch/set Invalid or deleted object.目前还不清楚原因,在本次学习过程中耽误了3个小时】
地图说明如下:
(1)地图由5×5网格组成,边界不可逾越。红色圆点是agent,可有四个基本动作(North = 1, South = 2, East = 3, West = 4);【说明:action】
(2)agent默认位置在[1,1];【说明:initial state】
(3)agent到达蓝色方块,可得10分;【说明:reward】
(4)地图中包含了特殊的动作,当从[2,4]直接跳到[4,4]可以得到5分;【说明:action,reward】
(5)黑色网格视为障碍不可逾越;【说明:action】
(6)除(3)(4)两种状态外的其他动作均减1分;【说明:action,reward】
初始化
环境初始化,确保每次重置后都从同一位置开始;
env.ResetFcn = @()1;
随机数种子初始化
rng(0)
生成Q-Learning Agent
生成Q表
从env中提取Observation和Action
qTable = rlTable(getObservationInfo(env),getActionInfo(env));
qRepresentation = rlQValueRepresentation(qTable,getObservationInfo(env),getActionInfo(env));
设置学习率为1
qRepresentation.Options.LearnRate = 1;
设置ε-greedy系数为0.04;
agentOpts = rlQAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = .04;
qAgent = rlQAgent(qRepresentation,agentOpts);
训练Q-Learing Agent
生成train配置
trainOpts = rlTrainingOptions;
设置每个迭代步最多运行步为50
trainOpts.MaxStepsPerEpisode = 50;
设置最大迭代次数为200
trainOpts.MaxEpisodes= 200;
设置停止训练判据为平均奖励;
trainOpts.StopTrainingCriteria = "AverageReward";
设置停止训练平均奖励为11分
trainOpts.StopTrainingValue = 11;
设置停止训练判据为连续30次平均奖励不小于11分
trainOpts.ScoreAveragingWindowLength = 30;
开始训练
trainingStats = train(qAgent,env,trainOpts);
训练过程如下所示:
训练结果展示
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;
仿真结果路径
sim(qAgent,env)
由浅色至深色的路径为最佳路径。注意根据特殊奖励策略,翻越了一次障碍,多得了5分。