主要内容

MDP环境下强化学习Agent的训练

这个例子展示了如何训练q -学习代理来解决一般的马尔可夫决策过程(MDP)环境。有关这些代理的更多信息,请参见Q-学习代理

MDP环境具有下图。

在这里:

  1. 每个圆圈代表一种状态。

  2. 在每个州都有一个上升或下降的决定。

  3. 代理从状态1开始。

  4. 代理收到的奖励等于图中每次转换的值。

  5. 训练的目标是收集最大的累积奖励。

创建MDP环境

创建一个包含八个状态和两个操作(“向上”和“向下”)的MDP模型。

MDP = createMDP (8,《飞屋环游记》“向下”]);

要从上图对转换进行建模,请修改MDP的状态转换矩阵和奖励矩阵。默认情况下,这些矩阵包含零。有关创建MDP模型和MDP对象属性的详细信息,请参阅创建MDP

指定MDP的状态转换和奖励矩阵。例如,在以下命令中:

  • 前两行通过执行操作指定从状态1到状态2的转换1.(“上”),奖励+3。

  • 接下来的两行通过执行操作指定从状态1到状态3的转换2.(“向下”)和此转换的+1奖励。

MDP.T(1,2,1)=1;MDP.R(1,2,1)=3;MDP.T(1,3,2)=1;MDP.R(1,3,2)=1;

类似地,为图中其余规则指定状态转换和奖励。

%国家2过渡和奖励MDP.T(2,4,1)=1;MDP.R(2,4,1)=2;MDP.T(2,5,2)=1;MDP.R(2,5,2)=1;%国家3过渡和奖励MDP.T(3,5,1)=1;MDP.R(3,5,1)=2;MDP.T(3,6,2)=1;MDP.R(3,6,2)=4;状态4转换和奖励MDP.T(4,7,1)=1;MDP.R(4,7,1)=3;MDP.T(4,8,2)=1;MDP.R(4,8,2)=2;%国家5过渡和奖励MDP.T(5、7、1)= 1;MDP.R(5、7、1)= 1;MDP.T(5、8、2)= 1;MDP.R (5 8 2) = 9;%国家6过渡和奖励MDP.T(6、7、1)= 1;MDP.R(6、7、1)= 5;MDP.T (6 8 2) = 1;MDP.R (6 8 2) = 1;状态7过渡和奖励MDP.T(7,7,1)=1;MDP.R(7,7,1)=0;MDP.T(7,7,2)=1;MDP.R(7,7,2)=0;状态8转换和奖励MDP.T (8 8 1) = 1;MDP.R (8 8 1) = 0;MDP.T (8 8 2) = 1;MDP.R (8 8 2) = 0;

指定的国家“s7”“s8”作为民主党的终点站。

MDP。TerminalStates = [“s7”“s8”];

为这个过程模型创建强化学习MDP环境。

env=rlMDPEnv(MDP);

要指定代理的初始状态始终为状态1,请指定返回初始代理状态的重置函数。此函数在每次训练和模拟开始时调用。创建将初始状态设置为1的匿名函数句柄。

env。ResetFcn = @() 1;

修复随机生成器种子的再现性。

rng(0)

创建q学习的代理

要创建Q-learning agent,首先使用MDP环境中的观察和操作规范创建一个Q表。将表示的学习速率设置为1.

obsInfo=获取观测信息(env);actInfo=getActionInfo(env);qTable=rlTable(obsInfo,actInfo);qRepresentation=rlQValueRepresentation(qTable、obsInfo、actInfo);qRepresentation.Options.LearnRate=1;

接下来,使用这个表表示创建一个q -学习代理,配置贪婪探索。有关创建q -学习代理的更多信息,请参见rlQAgentrlQAgentOptions

agentOpts=rlQAgentOptions;agentOpts.DiscountFactor=1;agentOpts.epsilongreedexploration.Epsilon=0.9;agentOpts.epsilongreedexploration.EpsilonDecay=0.01;qAgent=rlQAgent(qRepresentation,agentOpts);% #好< NASGU >

火车q学习的代理

要培训代理,首先指定培训选项。对于本例,使用以下选项:

  • 训练最多500集,每集最多持续50个时间步。

  • 当经纪人在30次连续训练中获得超过10次的平均累积奖励时,停止训练。

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions;trainOpts。MaxStepsPerEpisode = 50;trainOpts。MaxEpisodes = 500;trainOpts。StopTrainingCriteria =“AverageReward”;trainOpts。StopTrainingValue = 13;trainOpts。ScoreAveragingWindowLength = 30;

训练代理人使用火车函数。这可能需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理溺爱错误的.自己训练代理人,设置溺爱真正的

doTraining = false;如果溺爱%培训代理人。env, trainingStats =火车(qAgent trainOpts);% #好< UNRCH >其他的%为示例加载预训练代理。装载(“genericMDPQAgent.mat”,“qAgent”);终止

验证q学习的结果

要验证培训结果,请在培训环境中使用模拟代理成功地找到了最佳路径,从而获得了13

数据=sim卡(qAgent、env);累积向上=总和(数据奖励)
累积向上=13

由于折扣系数设置为1.,经过培训的代理的Q表中的值与环境的未贴现回报相匹配。

QTable=getLearnableParameters(getCritic(qAgent));QTable{1}
ans=8×212.9874 7.0759 -7.6425 9.9990 10.7193 0.9090 5.9128 -2.2466 6.7830 8.9988 7.5928 -5.5053 0 0 0
TrueTableValues=[13,12;5,10;11,9;3,2;1,9;5,1;0,0;0,0]
真实值=8×213 12 5 10 11 9 3 2 1 9 5 10 0

另见

|

相关的话题