这个例子展示了如何训练q -学习代理来解决一般的马尔可夫决策过程(MDP)环境。有关这些代理的更多信息,请参见Q学习代理.
MDP环境具有以下图形。
这里:
每个圆形代表一个状态。
在每个州,有一个决定上升或下降。
代理从状态1开始。
代理接收奖励等于图表中每次转换的值的奖励。
训练的目标是收集最大的累积奖励。
使用八个状态和两个动作创建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学习代理,首先使用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 >
要培训代理,首先指定培训选项。对于本例,使用以下选项:
训练最多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');结尾
要验证培训结果,请使用该培训环境中的代理SIM
函数。代理成功找到了最佳路径,导致累积奖励13.
.
data = sim(qagent,env);CumulativeReward = Sum(Data.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