主要内容

在MDP环境中列车加固学习代理

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

MDP环境具有以下图形。

这里:

  1. 每个圆形代表一个状态。

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

  3. 代理从状态1开始。

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

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

创建MDP环境

使用八个状态和两个动作创建MDP模型(“向上”和“向下”)。

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

要从上述图形模拟转换,修改MDP的状态转换矩阵和奖励矩阵。默认情况下,这些矩阵包含零。有关创建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,请指定返回初始代理状态的重置函数。在每个训练剧集和仿真开始时调用此函数。创建一个匿名功能句柄,将初始状态设置为1。

env。ResetFcn = @() 1;

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

RNG(0)

创建q学习的代理

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

ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);QTable = RLTable(ObsInfo,Actinfo);qrepresentation = rlqvaluerepresentation(QTable,Obsinfo,Actinfo);qrepresentation.options.learnrate = 1;

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

代理= rlqagentoptions;Adstopts.discountfactor = 1;agentopts.epsilongredyexpliation.epsilon = 0.9;Adjeropts.epsilongredyexpliation.epsilondecay = 0.01;QAGENT = RLQAGENT(QREPRESENTATION,AGENSOPTS);% #好< 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学习的结果

要验证培训结果,请使用该培训环境中的代理SIM函数。代理成功找到了最佳路径,导致累积奖励13.

data = sim(qagent,env);CumulativeReward = Sum(Da​​ta.Reward)
CumilativeReward = 13.

由于折扣系数设置为1,培训代理的Q表中的值匹配环境的未贴积返回。

QTable = GetLearnableParameters(accrite(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]
truetablevalues =8×213 12 5 10 11 9 3 2 1 9 5 10 0

也可以看看

|

相关的话题