主要内容

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

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

MDP环境具有下图。

在这里:

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

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

  3. 代理从状态1开始。

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

  5. 培训目标是获得最大的累积奖励。

创建MDP环境

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

MDP=创建MDP(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的终端状态。

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

为此流程模型创建强化学习MDP环境。

env=rlMDPEnv(MDP);

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

env.ResetFcn=@()1;

修复随机生成器种子以获得再现性。

rng(0)

创建Q-Learning代理

要创建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-learning代理,配置epsilon贪婪探索。有关创建Q-learning代理的更多信息,请参阅rlQAgentrlQAgentOptions.

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

训练Q-学习代理

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

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

  • 当代理在连续30集中收到的平均累积奖励超过10时,停止训练。

有关详细信息,请参阅RL培训选项.

培训选项=RL培训选项;trainOpts.maxstepseprepisode=50;trainOpts.maxcates=500;列车选择.停止列车标准=“平均向上”; trainOpts.StopTrainingValue=13;trainOpts.Score平均间隔窗长=30;

使用火车作用这可能需要几分钟才能完成。要在运行此示例时节省时间,请通过设置溺爱错误的.要亲自培训特工,请设置溺爱符合事实的.

doTraining=false;如果溺爱%培训代理人。培训状态=列车(qAgent、env、trainOpts);%#好的其他的%为示例加载预训练代理。装载(“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 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 1 0 0 0 0

另见

|

相关话题