主要内容

在MDP环境中训练强化学习代理

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

MDP环境有以下图。

在这里:

  1. 每个圆代表一个州。

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

  3. 代理从状态1开始。

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

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

创造MDP的环境

创建一个具有8个状态和2个动作(“上”和“下”)的MDP模型。

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

为了从上图中建立跃迁模型,修改MDP的状态跃迁矩阵和奖励矩阵。默认情况下,这些矩阵包含0。有关创建MDP模型和MDP对象属性的更多信息,请参见createMDP

为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,请指定一个返回初始代理状态的reset函数。这个函数在每个训练集和模拟开始时被调用。创建一个匿名函数句柄,将初始状态设置为1。

env。ResetFcn = @()

固定随机生成器种子的再现性。

rng (0)

创建q学习的代理

要创建Q学习代理,首先要使用来自MDP环境的观察和操作规范创建Q表。设置表示的学习率为1

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);qTable = rlTable(obsInfo, actInfo);qFunction = rlQValueFunction(qTable, obsInfo, actInfo);qOptions = rlOptimizerOptions (“LearnRate”1);

接下来,使用这个表表示创建一个q学习代理,配置epsilon-greedy探测。有关创建q学习代理的更多信息,请参见rlQAgent而且rlQAgentOptions

agentOpts = rlQAgentOptions;agentOpts。DiscountFactor = 1;agentOpts.EpsilonGreedyExploration.Epsilon = 0.9;agentOpts.EpsilonGreedyExploration.EpsilonDecay = 0.01;agentOpts。CriticOptimizerOptions = qOptions;qAgent = rlQAgent (qFunction 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.亲自训练探员,设doTraining真正的

doTraining = false;如果doTraining培训代理。env, trainingStats =火车(qAgent trainOpts);% #好< UNRCH >其他的为示例加载经过训练的代理。负载(“genericMDPQAgent.mat”“qAgent”);结束

验证q学习的结果

为验证训练结果,在训练环境中使用sim卡函数。代理成功地找到最优路径,其结果是累积奖励13

Data = sim (qAgent env);cumulativeReward =总和(Data.Reward)
cumulativeReward = 13

因为折现系数设为1,训练过的agent的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)
TrueTableValues =8×213 12 5 10 11 9 3 2 1 9 5 10 0 0 0

另请参阅

|

相关的话题

Baidu
map