主要内容

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转换到状态21(“上”)和奖励+3的过渡。

  • 接下来的两行指定通过执行操作从状态1转换到状态32(“向下”)和奖励+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-Learning Agent

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

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

接下来,使用这个表表示创建一个q学习代理,配置贪婪的探索。有关创建q学习代理的详细信息,请参见rlQAgent而且rlQAgentOptions

agentOpts = rlQAgentOptions;agentOpts。折扣因子= 1;agentopt . epsilongreedyexploration . epsilon = 0.9;agentopt . epsilongreedyexploration . epsilondecay = 0.01;agentOpts。关键优化选项= qOptions;qAgent = rlQAgent(qFunction,agentOpts);% #好< NASGU >

培训Q-Learning Agent

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

  • 训练最多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培训代理。trainingStats = train(qAgent,env,trainOpts);% #好< UNRCH >其他的为示例加载预训练的代理。负载(“genericMDPQAgent.mat”“qAgent”);结束

验证Q-Learning结果

为验证训练结果,在训练环境中使用sim卡函数。智能体成功地找到最优路径,从而获得累积奖励13

Data = sim(qAgent,env);累计奖励= sum(数据。奖励)
cumulative verward = 13

因为折现因子设为1,经过训练的智能体Q表中的值与环境的未贴现收益相匹配。

QTable = getLearnableParameters(get批评家(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

另请参阅

|

相关的话题