主要内容

用LSTM网络训练DQN代理控制住宅供暖系统

本示例展示了如何使用长短期记忆(LSTM)网络训练深度q学习网络(DQN)代理来控制在Simscape®中建模的房屋供暖系统。有关DQN代理的更多信息,请参见<一个href="//www.tatmou.com/es/es/help/reinforcement-learning/ug/dqn-agents.html" data-docid="rl_ug#mw_101bb08b-96e7-439b-a628-afff98ca3b6f" class="a">Deep Q-Network (DQN)代理商.

房屋供暖模型

本例中的强化学习(RL)环境使用了<一个href="//www.tatmou.com/es/es/help/simscape/ug/house-heating-system.html" data-docid="simscape_ug#example-ssc_house_heating_system" class="a">住宅供暖系统(Simscape).这个RL示例中的模型包含一个加热器、一个由RL代理控制的恒温器、一个房子、外部温度和一个奖励函数。热量通过墙壁、窗户和屋顶在室外环境和室内传递。使用马萨诸塞州纳蒂克MathWorks®校园的气象站数据来模拟2022年3月21日至4月15日之间的室外温度。使用ThingSpeak™来获取数据。数据为“温uremar21toapr15_20022”。Mat”,位于这个示例文件夹中。有关数据采集的详细信息,请参见<一个href="//www.tatmou.com/es/help/thingspeak/Compare-Temperature-Data-from-Three-Different-Days.html" data-docid="thingspeak#mw_6abd35e0-985e-40a9-8a17-c0b116d85d55" class="a">比较三天的温度数据(ThingSpeak)

代理人的训练目标是通过打开/关闭加热器来最大限度地减少能源成本,并最大限度地提高房间的舒适性。当室温降下来时,房子很舒服 T 房间 之间的是 T comfortMin T comfortMax

  • 观察是一个六维列向量,由室温( C )、室外温度( C )、最高舒适温度( C )、最小舒适温度( C ),最后一个动作,以及每千瓦时的价格(美元)。本例中的最大舒适温度、最小舒适温度和每千瓦时的价格不会随时间变化,没有必要使用它们来训练代理。但是,您可以通过随时间改变这些值来扩展这个示例。

  • 行动是离散的。要么开暖气,要么关暖气。A = {01}。我们使用0对于off和1对。

  • 奖励由三部分组成:能量消耗、舒适度奖励和切换惩罚。这三个单位是不同的,用户希望通过改变这些项的系数来取得平衡,特别是在能源成本和舒适度之间。奖励函数的灵感来自[1]。

奖励 comfortReward + switchPenalty - energyCost

comfortReward 0 1 如果 T comfortMin T 房间 T comfortMax - w | T 房间 - T comfortMin | 如果 T 房间 < T comfortMin - w | T 房间 - T comfortMax | 如果 T 房间 > T comfortMax

,在那里 w 0 1 T comfortMin 18 T comfortMax 23

switchPenalty - 0 01 如果 一个 t 一个 t - 1 在哪里 一个 t 当前的 行动 一个 t - 1 以前的 行动 0 否则

energyCost CostPerStep PricePerKwh ElectricityUsed

  • 结束的信号总是0,即不存在提前终止条件。

打开模型,设置采样时间。

%用于再现性rng (0);打开模型mdl =“rlHouseHeatingSystem”;open_system (mdl)分配代理块路径信息。agentBlk = [mdl .“/智能恒温器/RL代理”];sampleTime = 120;%秒maxStepsPerEpisode = 1000;

加载外部温度数据以模拟环境温度。

数据=负载(“temperatureMar21toApr15_2022.mat”);temperatureData = data.temperatureData;温库march21 =温库数据(1:60*24,:);%用于验证temperatureApril15 = temperatureData(end-60*24+1:end,:);%用于验证温库数据=温库数据(60*24+1:end-60*24,:);%用于培训

Simu金宝applink®模型加载以下变量作为观察的一部分。

outsideTemperature =温度数据;comfortMax = 23;comfortMin = 18;

定义观察和行动规范。

定义观察规格obsInfo = rlNumericSpec([6,1]);定义动作规格:0 -关,1 -开actInfo = rlFiniteSetSpec([0,1]);

使用LSTM网络创建DQN Agent

DQN代理使用矢量q值函数评论家来近似折现的累积长期奖励。为了在批评中近似q值函数,本例中的DQN代理使用LSTM,它可以捕获先前观察的效果。通过设置UseRNN选项rlAgentInitializationOptions,您可以使用LSTM网络创建缺省DQN代理。您也可以手动配置LSTM网络。看到这个<一个href="//www.tatmou.com/es/es/help/reinforcement-learning/ug/water-distribution-scheduling-system.html" data-docid="rl_ug#mw_7633fd83-38fa-4729-942c-04c392931137" class="a">基于强化学习的给水系统调度手动为DQN代理创建LSTM网络。有关LSTM层的更多信息,请参见<一个href="//www.tatmou.com/es/es/help/deeplearning/ug/long-short-term-memory-networks.html" data-docid="nnet_ug#mw_b9c3c9b2-62d9-47fa-8105-0e940fb4ac08" class="a">长短期记忆网络.注意,您必须设置SequenceLength大于1rlDQNAgentOptions.此选项在训练中用于确定用于计算梯度的小批的长度。

criticOpts = rlOptimizerOptions(...LearnRate = 0.001,...GradientThreshold = 1);agentOpts = rlDQNAgentOptions(...UseDoubleDQN = false,...TargetSmoothFactor = 1,...TargetUpdateFrequency = 4,...ExperienceBufferLength = 1e6,...CriticOptimizerOptions = criticOpts...MiniBatchSize = 64);agentopt . epsilongreedyexploration . epsilondecay = 0.0001;useRNN = true;initOpts = rlAgentInitializationOptions...UseRNN = UseRNN,...NumHiddenUnit = 64);如果useRNN agentOpts。SequenceLength=20;结束agent = rlDQNAgent(obsInfo, actInfo, initOpts, agentOpts);代理。SampleTime =采样时间;

定义Simul金宝appink环境

为房屋供暖环境创建一个环境接口。

定义simulin金宝appk环境env = rl金宝appSimulinkEnv(mdl,agentBlk,obsInfo,actInfo);

使用hRLHeatingSystemResetFcn在每一集开始时重置环境。hRLHeatingSystemResetFcn随机选择3月22日到4月14日之间的时间。环境用这个时间作为外界温度的初始时间。

env。ResetFcn = @(in) hrlheat systemresetfcn (in);validateEnvironment (env)

火车代理

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

  • 跑步训练最多150每一集都是持续的1000时间的步骤。

  • 设置情节选项“训练进步”在强化学习事件管理器中显示训练进度。

  • 设置详细的选项禁用命令行显示功能

  • 当代理收到的平均累积奖励大于855连续集。

有关更多信息,请参见<一个href="//www.tatmou.com/es/es/help/reinforcement-learning/ref/rltrainingoptions.html" data-docid="rl_ref#mw_1f5122fe-cb3a-4c27-8c80-1ce46c013bf0" class="a">rlTrainingOptions

maxEpisodes = 150;trainOpts = rlTrainingOptions(...MaxEpisodes = MaxEpisodes,...MaxStepsPerEpisode = MaxStepsPerEpisode,...ScoreAveragingWindowLength = 5,...Verbose = false,...情节=“训练进步”...StopTrainingCriteria =“AverageReward”...StopTrainingValue = 85);

培训代理使用<一个href="//www.tatmou.com/es/es/help/reinforcement-learning/ref/rl.agent.rlqagent.train.html" data-docid="rl_ref#mw_c0ccd38c-bbe6-4609-a87d-52ebe4767852" class="a">火车函数。训练这个代理是一个计算密集型的过程,需要几个小时才能完成。为了在运行此示例时节省时间,请通过设置加载预训练的代理doTraining.要亲自训练特工,请设置doTraining真正的

doTraining = false;如果doTraining培训代理。trainingStats = train(agent,env,trainOpts);其他的为示例加载预训练的代理。负载(“HeatControlDQNAgent.mat”“代理”结束

模拟DQN Agent

为了验证训练过的智能体的性能,在住宅供暖系统中进行了仿真。有关代理模拟的详细信息,请参见<一个href="//www.tatmou.com/es/es/help/reinforcement-learning/ref/rlsimulationoptions.html" data-docid="rl_ref#mw_983bb2e9-0115-4548-8daa-687037e090b2" class="a">rlSimulationOptions和<一个href="//www.tatmou.com/es/es/help/reinforcement-learning/ref/rl.env.abstractenv.sim.html" data-docid="rl_ref#mw_e6296379-23b5-4819-a13b-210681e153bf" class="a">sim卡

我们首先使用2022年3月21日的温度数据评估剂的性能。特工在训练过程中没有使用这些温度数据。

使用3月21日起的数据验证代理maxSteps = 720;validationTemperature =温度3月21日;env。ResetFcn = @ hRLHeatingSystemValidateResetFcn(in);simOptions = rlSimulationOptions(MaxSteps = MaxSteps);experience1 = sim(env,agent,simOptions);

使用localPlotResults脚本末尾提供的函数用于分析性能。

localPlotResults(experience1, maxSteps, comfortMax, comfortMin, sampleTime,1)

图中包含3个轴对象。标题为“温度”的Axes对象1包含4个类型为line、constantline的对象。这些对象分别代表T_{room}, T_{outside}, T_{comfortMin}, T_{comfortMax}。标题为Total Cost的Axes对象2包含一个类型为line的对象。标题为Cost per step的坐标轴对象3包含一个类型为line的对象。

温度违章:0/1440分钟,费用:8.038489美元

其次,我们利用2022年4月15日的温度数据来评估代理剂的性能。特工在训练过程中没有使用这些温度数据。

使用4月15日起的数据验证代理validationTemperature = 4月15日;experience2 = sim(env,agent,simOptions);localPlotResults (...experience2,...maxSteps,...comfortMax,...comfortMin,...sampleTime, 2)

图中包含3个轴对象。标题为“温度”的Axes对象1包含4个类型为line、constantline的对象。这些对象分别代表T_{room}, T_{outside}, T_{comfortMin}, T_{comfortMax}。标题为Total Cost的Axes对象2包含一个类型为line的对象。标题为Cost per step的坐标轴对象3包含一个类型为line的对象。

温度违章:0/1440分钟,费用:8.088640美元

在温度较温和时,评价药剂的性能。从4月15日开始,温度增加了8度,以创建温和温度的数据。

%验证代理使用数据从4月15日+ 8度validationTemperature = 4月15日;validationTemperature(:,2) = validationTemperature(:,2) + 8;experience3 = sim(env,agent,simOptions);localPlotResults (experience3...maxSteps,...comfortMax,...comfortMin,...sampleTime,...3)

图中包含3个轴对象。标题为“温度”的Axes对象1包含4个类型为line、constantline的对象。这些对象分别代表T_{room}, T_{outside}, T_{comfortMin}, T_{comfortMax}。标题为Total Cost的Axes对象2包含一个类型为line的对象。标题为Cost per step的坐标轴对象3包含一个类型为line的对象。

温度违章:0/1440分钟,费用:1.340312美元

本地函数

函数localPlotResults(经验,maxSteps, comfortMax, comfortMin, sampleTime, figum)% localPlotResults绘制验证结果计算舒适温度违例minutesViolateComfort =...sum(experience.Observation.obs1.Data(1,:,1:maxSteps) < comfortMin)...+ sum(experience.Observation.obs1.Data(1,:,1:maxSteps) > comfortMax);%能源成本totalCosts = experience.SimulationInfo(1).househeat_output{1}.Values;totalCosts。Time = totalCosts.Time/60; totalCosts.TimeInfo.Units=“分钟”;totalCosts。Name =“总能源成本”;finalCost = experience.SimulationInfo(1).househeat_output{1}.Values.Data(end);%每步消耗的能量costPerStep = experience.SimulationInfo(1).househeat_output{2}.Values;costPerStep。Time = costPerStep.Time/60; costPerStep.TimeInfo.Units=“分钟”;costPerStep。Name =“每步能源成本”;minutes = (sampleTime/60)*[0:maxSteps];%绘图结果fig = figure(figum);%改变图形的大小;fig.Position = fig.Position + [0,0,0,200];%的温度layoutResult = tiledlayout(3,1);nexttile情节(分钟...重塑(experience.Observation.obs1.Data (1::)...(1、长度(experience.Observation.obs1.Data))),“k”)举行情节(分钟...重塑(experience.Observation.obs1.Data (2::)...(1、长度(experience.Observation.obs1.Data))),‘g’) yline (comfortMin“b”) yline (comfortMax“r”LGD =传说(“T_{房间}识别”“T_{外}识别”“T_ {comfortMin}识别”...“T_ {comfortMax}识别”“位置”“northoutside”);乐金显示器。NumColumns = 4;标题(“温度”) ylabel (“温度”)包含(的时间(分钟))举行总成本%nexttile plot(totalCosts)标题(“总成本”) ylabel (“能源成本”每步成本%nexttile plot(costPerStep)“每一步成本”) ylabel (“能源成本”)流(“舒适温度违反:”+...“%d/1440分钟,成本:%f美元\n”...minutesViolateComfort finalCost);结束

参考

[1]。Y. Du, F. Li, K. Kurte, J. Munk和H. Zandi,“深度强化学习的智能暖通空调负荷管理演示:机器学习在需求控制中的实际经验”,在IEEE电力与能源杂志,第20卷,no。3, pp. 42-53, 2022年5月- 6月,doi: 10.1109/MPE.2022.3150825。