From 7def5367871c07fbb3b2000726fcf65dc223351a Mon Sep 17 00:00:00 2001 From: "Radu C. Martin" Date: Fri, 25 Jun 2021 11:27:25 +0200 Subject: [PATCH] Final version of the report --- 10_Introduction.tex | 26 ++- 20_Previous_Research.tex | 26 ++- 30_Gaussian_Processes_Background.tex | 17 +- 40_CARNOT_model.tex | 191 +++++++++--------- 50_Choice_of_Hyperparameters.tex | 81 ++++---- 60_The_MPC_Problem.tex | 9 +- 70_Implementation.tex | 47 +++-- 80_Results.tex | 86 ++++---- 90_Further_Research.tex | 20 +- 95_Conclusion.tex | 30 +++ 99A_GP_hyperparameters_validation.tex | 16 +- 99C_hyperparameters_results.tex | 2 +- ...80pts_12_averageYear_model_performance.pdf | Bin 0 -> 86203 bytes references.bib | 34 +++- 14 files changed, 343 insertions(+), 242 deletions(-) create mode 100644 Plots/4_GP_480pts_12_averageYear_model_performance.pdf diff --git a/10_Introduction.tex b/10_Introduction.tex index 1e4db7e..46fc70f 100644 --- a/10_Introduction.tex +++ b/10_Introduction.tex @@ -1,9 +1,27 @@ \section{Introduction} -% TODO: [Introduction] Control for building regulation +Buildings are a major consumer of energy, with more than 25\% of the total +energy consumed in the EU coming from residential +buildings~\cite{tsemekiditzeiranakiAnalysisEUResidential2019}. Combined with a +steady increase in energy demand and stricter requirements on energy +efficiency~\cite{europeancommission.jointresearchcentre.EnergyConsumptionEnergy2018}, +this amplifies the need for more accessible means of regulating energy usage of +new and existing buildings. +Data-driven methods of building identification and control prove very useful +through their ease of implementation, foregoing the need of more complex +physics-based models. On the flip side, additional attention is required to the +design of these control schemes, as the results could vary greatly from one +implementation to another. -% TODO: [Introduction] Benefits of data-driven methods +Gaussian Processes have been previously used to model building dynamics, but +they are usually limited by a fixed computational budget. This limits the +approaches that can be taken for identification and update of said models. +Learning \acrshort{gp} models have also been previously used in the context of +autonomous racing cars, but there the Sparse \acrshort{gp} model was built on +top of a white-box model and only responsible for fitting the unmodeled +dynamics. - -% TODO: [Introduction] Big lines previous research and why +This project means to provide a further expansion of the use of black-box +\acrlong{gp} Models in the context of building control, through online learning +of building dynamics at new operating points as more data gets collected. diff --git a/20_Previous_Research.tex b/20_Previous_Research.tex index a60dc61..7674a6a 100644 --- a/20_Previous_Research.tex +++ b/20_Previous_Research.tex @@ -1,7 +1,7 @@ \section{Previous Research} -With the increase in computational power and availability of data over time the -accessibility of data-driven methods for System Identification and Control has -also risen significantly. +With the increase in computational power and availability of data over time, +the accessibility of data-driven methods for System Identification and Control +has also risen significantly. The idea of using Gaussian Processes as regression models for control of dynamic systems is not new, and has already been explored a number of times. A general @@ -16,25 +16,29 @@ jainLearningControlUsing2018}, where the buildings are used for their heat capacity in order to reduce the stress on energy providers during peak load times. -There are, however multiple limitations with these approaches. +There are, however, multiple limitations with these approaches. In~\cite{nghiemDatadrivenDemandResponse2017} the model is only identified once, -ignoring changes in weather or plant parameters which could lead to different +ignoring changes in weather or plant parameters, which could lead to different dynamics. This is addressed in \cite{jainLearningControlUsing2018} by re-identifying the model every two weeks using new information. Another limitation is that of the scalability of the \acrshort{gp}s, which become prohibitively expensive from a computational point of view when too much data is added. +Outside of the context of building control, Sparse \acrlong{gp}es have been used +in autonomous racing in order to complement the physics-based model by fitting +the unmodeled dynamics of the +system~\cite{kabzanLearningBasedModelPredictive2019}. The ability to learn the plant's behaviour in new regions is very helpful in -maintaining model performance over time as the behaviour of the plants starts -deviating and the original identified model goes further and further into the -extrapolated regions. +maintaining model performance over time, as its behaviour starts deviating and +the original identified model goes further and further into the extrapolated +regions. This project will therefore try to combine the use of online learning schemes -with \acrlong{gp}es by using \acrlong{svgp}es, which provide means of using -\acrshort{gp} Models on larger datasets, and re-training the models every day at -midnight to include all the historically available data. +with \acrlong{gp}es by implementing \acrlong{svgp}es, which provide means of +employing \acrshort{gp} Models on larger datasets, and re-training the models +every day at midnight to include all the historically available data. \clearpage diff --git a/30_Gaussian_Processes_Background.tex b/30_Gaussian_Processes_Background.tex index 7286e8e..d341e9d 100644 --- a/30_Gaussian_Processes_Background.tex +++ b/30_Gaussian_Processes_Background.tex @@ -84,7 +84,7 @@ which, for the rest of the section, will be used in the abbreviated form: "Training" a \acrshort{gp} is the process of finding the kernel parameters that best explain the data. This is done by maximizing the probability density -function for the observations $y$i, also known as the marginal likelihood: +function for the observations $y$, also known as the marginal likelihood: \begin{equation}\label{eq:gp_likelihood} p(y) = \frac{1}{\sqrt{(2\pi)^{n}\det{\left(K + \sigma_n^2I\right)}}} @@ -109,6 +109,9 @@ marginal likelihood: \subsection{Prediction} +Given the proper covariance matrices $K$ and $K_*$, predictions on new points +can be made as follows: + \begin{equation} \begin{aligned} \mathbf{f_*} = \mathbb{E}\left(f_*|X, \mathbf{y}, X_*\right) &= @@ -117,9 +120,9 @@ marginal likelihood: \end{aligned} \end{equation} - -Apply the zero mean \acrshort{gp} to the \textit{difference} between the -observations and the fixed mean function: +The extensions of these predictions to a non-zero mean \acrshort{gp} comes +naturally by applying the zero mean \acrshort{gp} to the \textit{difference} +between the observations and the fixed mean function: \begin{equation} \bar{\mathbf{f}}_* = \mathbf{m}(X_*) + K_*\left(K + @@ -310,9 +313,9 @@ lower bound of the log probability of observations. Systems}\label{sec:gp_dynamical_system} In the context of Dynamical Systems Identification and Control, Gaussian -Processes are used to represent multiple different model structures, ranging -from state space and \acrshort{nfir} structures, to the more complex -\acrshort{narx}, \acrshort{noe} and \acrshort{narmax}. +Processes are used to represent different model structures, ranging from state +space and \acrshort{nfir} structures, to the more complex \acrshort{narx}, +\acrshort{noe} and \acrshort{narmax}. The general form of an \acrfull{narx} model is as follows: diff --git a/40_CARNOT_model.tex b/40_CARNOT_model.tex index d19964d..de9898e 100644 --- a/40_CARNOT_model.tex +++ b/40_CARNOT_model.tex @@ -4,7 +4,7 @@ In order to better analyze the different model training and update methods it was decided to replace the physical \pdome\ building with a computer model. This allows for faster-than-real-time simulations, as well as perfectly reproducing the weather conditions and building response for direct comparison -of different control schemes over long periods of time. +of different control schemes over longer periods of time. The model is designed using the CARNOT toolbox~\cite{lohmannEinfuehrungSoftwareMATLAB} for Simulink. It is based on the @@ -29,7 +29,7 @@ the choice of all the necessary model parameters. \clearpage -The Simulink model is then completed by adding a \textit{Weather Data File} +Finally, the Simulink model is completed by adding a \textit{Weather Data File} containing weather measurements for a whole year, and a \textit{Weather Prediction} block responsible for sending weather predictions to the MPC.\@ The controller itself is defined in Python and is connected to Simulink via three @@ -56,7 +56,8 @@ skylights are measured to be squares of edge 2.5m. \begin{figure}[ht] \centering - \includegraphics[width = 0.8\textwidth]{Images/google_maps_polydome_skylights} + \vspace{-10pt} + \includegraphics[width = 0.75\textwidth]{Images/google_maps_polydome_skylights} \caption{Google Maps Satellite view of the \pdome\ building} \label{fig:Google_Maps_Skylights} \end{figure} @@ -70,9 +71,11 @@ as reference, after which the following measurements have been done in \citetitle{kimballGIMPGNUImage}~\cite{kimballGIMPGNUImage} using the \textit{Measure Tool}. -The chosen reference object is the \pdome\ HVAC system, the full description of -which is presented in Section~\ref{sec:HVAC_parameters}, and which has a known -height of 2061mm \cite{aermecRoofTopManuelSelection}. +The chosen reference object is the \pdome\ \acrshort{hvac} system, the full +description of which is presented in Section~\ref{sec:HVAC_parameters}, and +which has a known height of 2061mm \cite{aermecRoofTopManuelSelection}. + +\clearpage \begin{figure}[ht] \centering @@ -91,7 +94,7 @@ Table~\ref{tab:GIMP_measurements}: \hline Object & Size [px] & Size[mm] & Size[m]\\ \hline \hline - HVAC height & 70 & 2100 & 2.1 \\ + acrshort{hvac} height & 70 & 2100 & 2.1 \\ Building height & 230 & 6900 & 6.9 \\ Stem wall & 45 & 1350 & 1.35 \\ Dome height & 185 & 5550 & 5.55 \\ @@ -121,7 +124,7 @@ the model: The \pdome\ building has a structure that is mostly based on a dome shape, with the difference that the dome portion of the building does not reach the ground, -but stands above it at a height of $\approx 1.35m$ (cf. +but stands above it at a height of approximately $1.35$m (cf. Table~\ref{tab:GIMP_measurements}), with the large side windows extending to the ground and creating a \textit{stem wall} for the dome to sit on. @@ -177,7 +180,7 @@ therefore be calculated as: The total volume of the building is then given as: \begin{equation} - V = V_d + V_s = \frac{1}{6} \pi h (3r^2 + h^2) + l_s^2 + V = V_d + V_s = \frac{1}{6} \pi h (3r^2 + h^2) + l_s^2 * h_s \end{equation} Numerically, considering a dome diameter of 28m, a dome height of 5.55m and a stem @@ -187,7 +190,7 @@ wall edge of 25m, we get the approximate volume of the building: \end{equation} The value presented in Equation~\ref{eq:numerical_volume} is used directly in -the \textit{room\_node} of the CARNOT model (cf. +the \textit{room\_node} element of the CARNOT model (cf. Figure~\ref{fig:CARNOT_polydome}), as well as the calculation of the Air Exchange Rate, presented in Section~\ref{sec:Air_Exchange_Rate}. @@ -205,15 +208,15 @@ the chairs, tables, etc.\ but due to the restricted access to the building a simpler approximation has been made. \textcite{johraNumericalAnalysisImpact2017} present a methodology to model the -furniture in buildings for multiple different materials, as well as an -\textit{equivalent indoor content material} that is meant to approximate the -furniture content of an office building. These values for mass content, surface -area, material density and thermal conductivity have been taken as the basis for -the \pdome\ furniture content approximation, with the assumption that, since the -\pdome\ is still mostly empty, it has approximately a quarter of the furniture -present in a fully furnished office. +furniture in buildings for different materials, as well as an \textit{equivalent +indoor content material} that is meant to approximate the furniture content of +an office building. These values for mass content, surface area, material +density and thermal conductivity have been taken as the basis for the \pdome\ +furniture content approximation, with the assumption that, since the \pdome\ is +still mostly empty, it has approximately a quarter of the furniture present in a +fully furnished office. -The full set of furniture is therefore approximated in the CARNOT model as a +The full set of furniture is, therefore, approximated in the CARNOT model as a wall, with the numerical values for mass, surface, thickness and volume presented below. @@ -222,11 +225,11 @@ presented below. % 1/4 * 1.8 [m2/m2 of floor space] * 625 m2 surface = 140 m2 % 140 m2 = [7 20] m [height width] -The equivalent material is taken to have a surface of 1.8 $m^2$ per each $m^2$ -of floor area~\cite{johraNumericalAnalysisImpact2017}. With a floor area of 625 -$m^2$, and assuming the furnishing of the building is a quarter that of a -fully-furnished office, the \pdome\ furniture equivalent wall has a surface area -of: +The equivalent material is taken to have a surface of 1.8 $\text{m}^2$ per each +$\text{m}^2$ of floor area~\cite{johraNumericalAnalysisImpact2017}. With a floor +area of 625 $\text{m}^2$, and assuming the furnishing of the building is a +quarter that of a fully-furnished office, the \pdome\ furniture equivalent wall +has a surface area of: \begin{equation} S_f = \frac{1}{4} \cdot 1.8 \left[\frac{\text{m}^2}{\text{m}^2}\right] @@ -238,7 +241,8 @@ of: % 1/4 * 40 [kg/m2 of floor space] * 625 m2 surface = 6250 kg The mass of the furniture equivalent wall is computed using the same -methodology, considering 40 kg of furniture mass per $m^2$ of floor surface. +methodology, considering 40 kg of furniture mass per $\text{m}^2$ of floor +surface. \begin{equation} M_f = \frac{1}{4} \cdot 40 \cdot 625\ \left[\text{m}^2\right] = 6250\ @@ -273,9 +277,9 @@ volume by the surface: \subsection{Material properties} -In order to better simulate the behaviour of the real \pdome\ building it is +In order to better simulate the behaviour of the real \pdome\ building, it is necessary to approximate the building materials and their properties as close as -possible. This section goes into the details and arguments for the choice of +possible. This section goes into details and arguments for the choice of parameters for each of the CARNOT nodes' properties. \subsubsection{Windows} @@ -293,7 +297,7 @@ models~\cite{WhatAreTypical2018}. The US Energy Department states that the typical U-factor values for modern window installations is in the range of 0.2 ---- 1.2 \(\frac{W}{m^2K}\)\cite{GuideEnergyEfficientWindows}. +--- 1.2 \(\frac{W}{m^2K}\)~\cite{GuideEnergyEfficientWindows}. The European flat glass association claims that the maximum allowable U-factor value for new window installations in the private sector buildings in @@ -320,8 +324,8 @@ values of 2500 \(\frac{kg}{m^3}\) and 1008 \(\frac{J}{kgK}\) respectively. % Heat capacity for each material % Density for each material -The roof structure has been assumed to be made out of 10cm of insulation, -enclosed on each side by 5cm of wood. +The roof structure has been assumed to be made out of 10 cm of insulation, +enclosed on each side by 5 cm of wood. %%% Floor % [5cm wood, 10cm insulation, 20cm concrete] @@ -329,8 +333,8 @@ enclosed on each side by 5cm of wood. % Heat capacity for each material % Density for each material -The floor composition has been taken as consisting of, from top to bottom, 5cm -wood, 10cm insulation followed by 20cm of concrete. +The floor composition has been taken as consisting of, from top to bottom, 5 cm +wood, 10 cm insulation followed by 20 cm of concrete. All the necessary values to characterise these materials have been taken from~\cite{BuildingsHeatTransferData} and are presented in @@ -356,22 +360,22 @@ Table~\ref{tab:material_properties}: \subsection{HVAC parameters}\label{sec:HVAC_parameters} -The \pdome\ is equipped with an \textit{AERMEC RTY-04} HVAC system. According to -the manufacturer's manual~\cite{aermecRoofTopManuelSelection}, this HVAC houses -two compressors, of power 11.2 kW and 8.4 kW respectively, an external -ventilator of power 1.67 kW, and a reflow ventilator of power 2 kW. The unit has -a typical \acrlong{eer} (\acrshort{eer}, cooling efficiency) of 4.9 --- 5.1 and -a \acrlong{cop} (\acrshort{cop}, heating efficiency) of 5.0, for a maximum -cooling capacity of 64.2 kW. +The \pdome\ is equipped with an \textit{AERMEC RTY-04} \acrshort{hvac} system. +According to the manufacturer's manual~\cite{aermecRoofTopManuelSelection}, this +\acrshort{hvac} houses two compressors of power 11.2 kW and 8.4 kW respectively, +an external ventilator of power 1.67 kW, and a reflow ventilator of power 2 kW. +The unit has a typical \acrlong{eer} (\acrshort{eer}, cooling efficiency) of 4.9 +--- 5.1 and a \acrlong{cop} (\acrshort{cop}, heating efficiency) of 5.0, for a +maximum cooling capacity of 64.2 kW. -One particularity of this HVAC unit is that during summer only one of the two -compressors are running. This results in a higher \acrlong{eer}, in the cases -where the full cooling capacity is not required. +One particularity of this \acrshort{hvac} unit is that during summer, only one +of the two compressors are running. This results in a higher \acrlong{eer}, in +the cases where the full cooling capacity is not required. \subsubsection*{Ventilation} According to the manufacturer manual \cite{aermecRoofTopManuelSelection}, the -HVAC unit's external fan has an air debit ranging between 4900 +\acrshort{hvac} unit's external fan has an air debit ranging between 4900 $\text{m}^3/\text{h}$ and 7000 $\text{m}^3/\text{h}$. \subsubsection*{Air Exchange Rate}\label{sec:Air_Exchange_Rate} @@ -384,7 +388,8 @@ computed by dividing the air flow through the room by the room volume: \text{Air exchange rate} = \frac{\text{Air flow}}{\text{Total volume}} \end{equation} -In the case of the \pdome\ and its HVAC, this results in an airflow range of: +In the case of the \pdome\ and its \acrshort{hvac}, this results in an airflow +range of: \begin{equation} \begin{aligned} @@ -402,7 +407,7 @@ would require more precise measurements to estimate. \subsection{Validating against experimental data}\label{sec:CARNOT_experimental} -In order to confirm the validity of the model it is necessary to compare the +In order to confirm the validity of the model, it is necessary to compare the CARNOT models' behaviour against that of the real \pdome\ building. Section~\ref{sec:CARNOT_expdata} presents the available experimental data, @@ -421,8 +426,8 @@ The data has been collected in the time span of June to August 2017, and is divided in seven different experiments, as presented in Figure~\ref{tab:exp_dates}. The available measurements are the \textit{Outside Temperature}, \textit{Solar Irradiation}, \textit{Electrical power consumption} -of the HVAC, and two measurements of \textit{Inside Temperature} in different -parts of the room. +of the \acrshort{hvac}, and two measurements of \textit{Inside Temperature} in +different parts of the room. \begin{table}[ht] \centering @@ -445,27 +450,29 @@ parts of the room. \clearpage -As mentioned previously, the external fan of the HVAC is constantly running. -This can be seen in Figure~\ref{fig:Polydome_electricity} as the electricity -consumption of the HVAC has a baseline of 1.67 kW of power consumption. +As mentioned previously, the external fan of the \acrshort{hvac} is constantly +running. This can be seen in Figure~\ref{fig:Polydome_electricity} as the +electricity consumption of the \acrshort{hvac} has a baseline of 1.67 kW. \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/Fan_baseline.pdf} - \caption{Electrical Power consumption of the \pdome\ HVAC for Experiment 7} + \caption{Electrical Power consumption of the \pdome\ \acrshort{hvac} for Experiment 7} \label{fig:Polydome_electricity} \end{figure} Figure~\ref{fig:Polydome_electricity} also gives an insight into the workings of -the HVAC when it comes to the combination of the two available compressors. The -instruction manual of the HVAC~\cite{aermecRoofTopManuelSelection} notes that in -summer only one of the compressors is running. This allows for a larger -\acrshort{eer} value and thus better performance. We can see that this is the -case for most of the experiment, where the power consumption caps at around 6 -kW. There are, however, moments during the first part of the experiment where -the power momentarily peaks over the 6 kW limit, and goes as high as around 9 -kW. This most probably happens when the HVAC decides that the difference between -the set point temperature and the actual measured values is too large. +the \acrshort{hvac} when it comes to the combination of the two available +compressors. The instruction manual of the +\acrshort{hvac}~\cite{aermecRoofTopManuelSelection} notes that in summer only +one of the compressors is running. This allows for a larger \acrshort{eer} value +and thus better performance. We can see that this is the case for most of the +experiment, where the power consumption caps at around 6~kW. There are, however, +moments during the first part of the experiment where the power momentarily +peaks over the 6~kW limit, and goes as high as around 9~kW. This most probably +happens when the \acrshort{hvac} decides that the difference between the set +point temperature and the actual measured values is too large to compensate with +a single compressor. Figure~\ref{fig:Polydome_exp7_settemp} presents the values of the set point temperature and the measured internal temperature. @@ -473,7 +480,7 @@ temperature and the measured internal temperature. \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/Exp_settemp.pdf} - \caption{Measured vs set point temperature of the HVAC for Experiment 7} + \caption{Measured vs set point temperature of the \acrshort{hvac} for Experiment 7} \label{fig:Polydome_exp7_settemp} \end{figure} @@ -484,8 +491,8 @@ beginning of Experiment 7, as well as the majority of the other experiments, the set point temperature is the value that gets changed in order to excite the system, and since the \acrshort{hvac}'s controller is on during identification, it will oscillate between using one or two compressors. Lastly, it is possible -to notice that the HVAC is not turned on during the night, with the exception of -the external fan, which runs continuously. +to notice that the \acrshort{hvac} is not turned on during the night, with the +exception of the external fan, which continues running. \subsubsection{The CARNOT WDB weather data format}\label{sec:CARNOT_WDB} @@ -499,12 +506,12 @@ pressure, wind speed and direction, etc. A detailed overview of each measurement necessary for a simulation is given in the CARNOT user manual~\cite{CARNOTManual}. -In order to compare the CARNOT model's performance to that of the real \pdome\ +In order to compare the CARNOT model's performance to that of the real \pdome\, it is necessary to simulate the CARNOT model under the same set of conditions as the ones present during the experimental data collection. In order to do this, all the missing values that are required by the simulation have to be filled. In some cases, such as the sun angles it is possible to compute the exact values, -but in other cases the real data is not available, which means that is has to be +but in other cases the real data is not available, which means that it has to be inferred from the available data. The information on the zenith and azimuth solar angles can be computed exactly @@ -514,7 +521,7 @@ information available, the zenith, azimuth angles, as well as the \acrfull{aoi} are computed using the Python pvlib library~\cite{f.holmgrenPvlibPythonPython2018}. -As opposed to the solar angles which can be computed exactly from the available +As opposed to the solar angles, which can be computed exactly from the available information, the Solar Radiation Components (DHI and DNI) have to be estimated from the available measurements of GHI, zenith angles (Z) and datetime information. \textcite{erbsEstimationDiffuseRadiation1982} present an empirical @@ -535,33 +542,33 @@ are computed using the Python pvlib. The values that cannot be either calculated or approximated from the available data, such as the precipitation, wind direction, incidence angles in place of -vertical and main/secondary surface axis have been replaced with the default +vertical and main/secondary surface axis, have been replaced with the default CARNOT placeholder value of -9999. The relative humidity, cloud index, pressure and wind speed have been fixed to 50\%, 0.5, 96300 Pa, 0 $\text{m}/\text{s}$ respectively. \subsubsection{\pdome\ and CARNOT model comparison}\label{sec:CARNOT_comparison} -With the WDB data compiled, we can now turn to simulating the CARNOT model and -compare its behaviour to that of the real \pdome\ building. +With the \acrshort{wdb} data compiled, we can now turn to simulating the CARNOT +model and compare its behaviour to that of the real \pdome\ building. -Unfortunately, one crucial piece of information is missing: the amount of heat -the HVAC either pumps in or takes out of the building at any point in time. This -value could be approximated from the information of electrical power consumption -and the EER, COP values given that it is known if the HVAC is in either heating -or cooling mode. +Unfortunately, one crucial piece of information is still missing: the amount of +heat that the \acrshort{hvac} either pumps in or takes out of the building at +any point in time. This value could be approximated from the information of +electrical power consumption and the \acrshort{eer}/\acrshort{cop} values given +that it is known if the \acrshort{hvac} is in either heating or cooling mode. This information lacking in the existing experimental datasets, the heat supplied/ taken out of the system has been inferred from the electrical energy -use, measured building temperature and HVAC temperature set point, with the -assumption that the HVAC is in cooling mode whenever the measurements are -higher than the set point temperature, and is in heating mode otherwise. As it -can already be seen in Figure~\ref{fig:Polydome_exp7_settemp}, this is a very -strong assumption, that is not necessarily always correct. It works well when -the measurements are very different from the set point, as is the case in the -first part of the experiment, but this assumption is false for the second part -of the experiment, where the set point temperature remains fixed and it is purely -the HVAC's job to regulate the temperature. +use, measured building temperature and \acrshort{hvac} temperature set point, +with the assumption that the \acrshort{hvac} is in cooling mode whenever the +measurements are higher than the set point temperature, and is in heating mode +otherwise. As it can already be seen in Figure~\ref{fig:Polydome_exp7_settemp}, +this is a very strong assumption, that is not necessarily always correct. It +works well when the measurements are very different from the set point, as is +the case in the first part of the experiment, but this assumption is false for +the second part of the experiment, where the set point temperature remains fixed +and it is purely the \acrshort{hvac}'s job to regulate the temperature. \begin{figure}[ht] \centering @@ -575,23 +582,23 @@ the HVAC's job to regulate the temperature. The results of the seven simulations are presented in Figure~\ref{fig:CARNOT_simulation_validation}. Overall, the simulated temperature has the same behaviour as the real \pdome\ measurements. A more -detailed inspection shows that for most of the experiments the simulated +detailed inspection shows that for most of the experiments, the simulated temperature is much more volatile than the true measurements. This could be due to an overestimated value of the Air Exchange Rate, underestimated amount of -furniture in the building, or, more probably, miscalculation of the HVAC's -heating/cooling mode. Of note is the large difference in behaviour for the -Experiments 5 and 6. In fact, for these experiments, the values for the -electrical power consumption greatly differ in shape from the ones presented in -the other datasets, which could potentially mean erroneous measurements, or some -other underlying problem with the data. +furniture in the building or, more probably, miscalculation of the +\acrshort{hvac}'s heating/cooling mode. Of note is the large difference in +behaviour for the Experiments 5 and 6. In fact, for these experiments, the +values for the electrical power consumption greatly differ in shape from the +ones presented in the other datasets, which could potentially mean erroneous +measurements, or some other underlying problem with the data. Finally, it is possible to conclude that the CARNOT building behaves comparably to the real \pdome\, even if not perfectly simulates its behaviour. These -differences could come from multiple factors, missing information that had to -be inferred and/or approximated, such as the Air Exchange Ratio, the heat +differences could come from multiple factors --- missing information that had +to be inferred and/or approximated, such as the Air Exchange Ratio, the heat provided/extracted, the amount of furniture in the building, the overall shape and size of the building, as well as possibly errors in the experimental data used for validation. A more detailed analysis of the building parameters would -have to be done in order to find the reason and eliminate these discrepancies. +have to be done in order to find the reasons and eliminate these discrepancies. \clearpage diff --git a/50_Choice_of_Hyperparameters.tex b/50_Choice_of_Hyperparameters.tex index 68b0c29..e830e88 100644 --- a/50_Choice_of_Hyperparameters.tex +++ b/50_Choice_of_Hyperparameters.tex @@ -16,12 +16,12 @@ model hyperparameters: the number of regressors, the number of autoregressive lags for each class of inputs, the shape of the covariance function have to be taken into account when designing a \acrshort{gp} model. These choices have direct influence on the resulting model behaviour and where it can be -generalized, as well as indirect influence in the form of more expensive +generalized, as well as indirect influence in the form of more time consuming computations in the case of larger number of regressors and more complex kernel functions. As described in Section~\ref{sec:gp_dynamical_system}, for the purpose of this -project the \acrlong{gp} model will be trained using the \acrshort{narx} +project, the \acrlong{gp} model will be trained using the \acrshort{narx} structure. This already presents an important choice in the selection of regressors and their respective autoregressive lags. @@ -31,14 +31,14 @@ defined in Section~\ref{sec:mpc_problem}, where the goal is tracking as close as possible the inside temperature of the building. The input of the \acrshort{gp} model coincides with the input of the CARNOT -building, namely the \textit{power} passed to the idealized \acrshort{hvac}, -which is held constant during the complete duration of a step. +building, namely the \textit{heat} passed to the idealized \acrshort{hvac}, +which is held constant at each step. As for the exogenous inputs the choice turned out to be more complex. The CARNOT -WDB format (cf. Section~\ref{sec:CARNOT_WDB}) consists of information of all the -solar angles, the different components of solar radiation, wind speed and -direction, temperature, precipitation, etc. All of this information is required -in order for CARNOT's proper functioning. +\acrshort{wdb} format (cf. Section~\ref{sec:CARNOT_WDB}) consists of information +of all the solar angles, the different components of solar radiation, wind speed +and direction, temperature, precipitation, etc. All of this information is +required in order for CARNOT's proper functioning. Including all of this information into the \acrshort{gp}s exogenous inputs would come with a few downsides. First, depending on the number of lags chosen for the @@ -57,10 +57,10 @@ measurement of the outside temperature. This would also be a limitation when getting the weather predictions for the next steps during real-world experiments. -Last, while very verbose information such as the solar angles and the components -of the solar radiation is very useful for CARNOT, which simulated each node -individually, knowing their absolute positions, this information would not -always benefit the \acrshort{gp} model, at least not comparably to the +Last, while very verbose information, such as the solar angles and the components +of the solar radiation is very useful for CARNOT which simulates each node +individually knowing their absolute positions, this information would not +always benefit the \acrshort{gp} model at least not comparably to the additional computational complexity. For the exogenous inputs the choice has therefore been made to take the @@ -70,7 +70,7 @@ For the exogenous inputs the choice has therefore been made to take the The covariance matrix is an important choice when creating the \acrshort{gp}. A properly chosen kernel can impose a prior desired behaviour on the -\acrshort{gp} such as continuity of the function an its derivatives, +\acrshort{gp} such as continuity of the function and its derivatives, periodicity, linearity, etc. On the flip side, choosing the wrong kernel can make computations more expensive, require more data to learn the proper behaviour or outright be numerically unstable and/or give erroneous predictions. @@ -87,7 +87,7 @@ Kernel~\cite{pleweSupervisoryModelPredictive2020}, a combination of Kernel~\cite{jainLearningControlUsing2018}, Squared Exponential Kernel and Kernels from the M\`atern family~\cite{massagrayThermalBuildingModelling2016}. -For the purpose of this project the choice has been made to use the +For the purpose of this project, the choice has been made to use the \textit{\acrlong{se} Kernel}, as it provides a very good balance of versatility and computational complexity for the modelling of the CARNOT building. @@ -117,7 +117,7 @@ three lengthscales apart. From Table~\ref{tab:se_correlation} is can be seen that at 3 lengthscales apart, the inputs are already almost uncorrelated. In order to better visualize this -difference the value of relative lengthscale importance is introduced: +difference the value of \textit{relative lengthscale importance} is introduced: \begin{equation} \lambda = \frac{1}{\sqrt{l}} @@ -171,17 +171,19 @@ the past inputs, with the exception of the models with very high variance, where the relative importances stay almost constant across all the inputs. For the exogenous inputs, the outside temperature ($w2$) is generally more important than the solar irradiation ($w1$). In the case of more autoregressive lags for -the exogenous inputs, the more recent information is usually more important, -with a few exceptions {\color{red} Continue this sentence after considering the -2/1/3 classical GP model} +the exogenous inputs the more recent information is usually more important in +the case of the solar irradiation, while the second-to-last measurement is +preffered for the outside temperature. -% TODO: [Hyperparameters] Classical GP parameters choice +For the classical \acrshort{gp} model the appropriate choice of lags would be +$l_u = 1$ and $l_y = 3$ with $l_w$ taking the values of either 1, 2 or 3, +depending on the results of further analysis. As for the case of the \acrlong{svgp}, the results for the classical \acrshort{gp} (cf. Table~\ref{tab:GP_hyperparameters}) are not necessarily representative of the relationships between the regressors of the -\acrshort{svgp} model due to the fact that the dataset used for training is +\acrshort{svgp} model, due to the fact that the dataset used for training is composed of the \textit{inducing variables}, which are not the real data, but a set of parameters chosen by the training algorithm in a way to best generate the original data. @@ -249,7 +251,7 @@ suggests, it computes the root of the mean squared error: \end{equation} This performance metric is very useful when training a model whose goal is -solely to minimize the difference between the values measured, and the ones +solely to minimize the difference between the measured values, and the ones predicted by the model. A variant of the \acrshort{mse} is the \acrfull{smse}, which normalizes the @@ -263,8 +265,8 @@ A variant of the \acrshort{mse} is the \acrfull{smse}, which normalizes the While the \acrshort{rmse} and the \acrshort{smse} are very good at ensuring the predicted mean value of the Gaussian Process is close to the measured values of the validation dataset, the confidence of the Gaussian Process prediction is -completely ignored. In this case two models predicting the same mean values, but -having very different confidence intervals would be equivalent according to these +completely ignored. In this case, two models predicting the same mean values but +having very different confidence intervals, would be equivalent according to these performance metrics. The \acrfull{lpd} is a performance metric which takes into account not only the @@ -336,15 +338,15 @@ overconfident, either due to the very large kernel variance parameter, or the specific lengthscales combinations. The model with the best \acrshort{rmse}/\acrshort{smse} metrics \model{1}{2}{3} had very bad \acrshort{msll} and \acrshort{lpd} metrics, as well as by far the largest -variance of all the combinations. On the contrary the \model{3}{1}{3} model has +variance of all the combinations. On the contrary, the \model{3}{1}{3} model has the best \acrshort{msll} and \acrshort{lpd} performance, while still maintaining small \acrshort{rmse} and \acrshort{smse} values. The inconvenience of this set of lags is the large number of regressors, which leads to much more expensive computations. Other good choices for the combinations of lags are \model{2}{1}{3} and \model{1}{1}{3}, which have good performance on all four metrics, as well as being cheaper from a computational perspective. In order to -make a more informed choice for the best hyperparameters, the performance of all -three combinations has been analysed. +make a more informed choice for the best hyperparameters, the simulation +performance of all three combinations has been analysed. \clearpage @@ -376,7 +378,7 @@ The results for the \acrshort{svgp} model, presented in Table~\ref{tab:SVGP_loss_functions} are much less ambiguous. The \model{1}{2}{3} model has the best performance according to all four metrics, with most of the other combinations scoring much worse on the \acrshort{msll} and \acrshort{lpd} -loss functions. This has therefore been chosen as the model for the full year +loss functions. This has, therefore, been chosen as the model for the full year simulations. @@ -453,16 +455,21 @@ Appendix~\ref{apx:hyperparams_gp}, Figure~\ref{fig:GP_313_test_validation}, where the model has much worse performance on the testing dataset predictions than the other two models. -Overall, the performance of the three models in simulation mode is consistent -with the previously found results. It is of note that neither the model that -performed the best on the \acrshort{rmse}/\acrshort{smse}, \model{1}{2}{3}, nor -the one that had the best \acrshort{msll}/\acrshort{lpd}, perform the best under -a simulation scenario. In the case of the former it is due to numerical -instability, the training/ prediction often failing depending on the inputs. On -the other hand, in the case of the latter, only focusing on the -\acrshort{msll}/\acrshort{lpd} performance metrics can lead to over fitted -models, that give good and confident one-step ahead predictions, while still -unable to fit the true behaviour of the plant. +The performance of the three models in simulation mode is consistent with the +previously found results. It is of note that neither the model that scored the +best on the \acrshort{rmse}/\acrshort{smse}, \model{1}{2}{3}, nor the one that +had the best \acrshort{msll}/\acrshort{lpd}, perform the best under a simulation +scenario. In the case of the former it is due to numerical instability, the +training/ prediction often failing depending on the inputs. On the other hand, +in the case of the latter, only focusing on the \acrshort{msll}/\acrshort{lpd} +performance metrics can lead to very conservative models, that give good and +confident one-step ahead predictions, while still unable to fit the true +behaviour of the plant. + +Overall, the \model{2}{1}{3} performed the best in the simulation scenario, +while still having good performance on all loss functions. In implementation, +however, this model turned out to be very unstable, and the more conservative +\model{1}{1}{3} model was used instead. \clearpage diff --git a/60_The_MPC_Problem.tex b/60_The_MPC_Problem.tex index 9eec02e..30071ba 100644 --- a/60_The_MPC_Problem.tex +++ b/60_The_MPC_Problem.tex @@ -25,10 +25,11 @@ The optimization problem is therefore defined as follows: \end{align} \end{subequations} -where $y_{ref, t}$ is the reference temperature at time t, $\mathbf{x}_{t}$ is -the GP input vector at time t, composed of the exogenous autoregressive inputs -$\mathbf{w}_{t}$, the autoregressive controlled inputs $\mathbf{u}_{t}$ and the -autoregressive outputs $\mathbf{y}_{t}$. +where $y_{ref, t}$ is the reference temperature at time t, $\mathcal{U}$ is the +set of allowed inputs, $\mathbf{x}_{t}$ is the GP input vector at time t, +composed of the exogenous autoregressive inputs $\mathbf{w}_{t}$, the +autoregressive controlled inputs $\mathbf{u}_{t}$ and the autoregressive outputs +$\mathbf{y}_{t}$. \subsection{Temperature reference}\label{sec:reference_temperature} diff --git a/70_Implementation.tex b/70_Implementation.tex index 6b8a046..a10ce69 100644 --- a/70_Implementation.tex +++ b/70_Implementation.tex @@ -42,8 +42,8 @@ communicate over TCP, these elements can all be implemented completely separately, which is much more similar to a real-life implementation. With this structure, the only information received and sent by the Python -controller is the actual sampled data, without any additional information. And -while the controller needs information on the control horizon in order to read +controller is the actual sampled data, without any additional information. +While the controller needs information on the control horizon in order to read the correct amount of data for the weather predictions and to properly generate the optimization problem, the discrete/continuous transition and vice-versa happens on the Simulink side. This simplifies the adjustment of the sampling @@ -54,10 +54,10 @@ The weather prediction is done using the information present in the CARNOT \acrshort{wdb} object. Since the sampling time and control horizon of the controller can be adjusted, the required weather predictions can lie within an arbitrary time interval. At each sampling point, the weather measurements are -linearly interpolated for the span of time ranging from the most recent -measurement to the next measurement after the last required prediction time. -This provides a better approximation that pure linear interpolation over the -starting and ending points, while retaining a simple implementation. +piece-wise linearly interpolated for the span of time ranging from the most +recent measurement to the next measurement after the last required prediction +time. This provides a better approximation than pure linear interpolation over +the starting and ending points, while retaining a simple implementation. \subsection{Gaussian Processes} @@ -67,11 +67,11 @@ This means that naive implementations can get too expensive in terms of computation time very quickly. In order to have as smallest of a bottleneck as possible when dealing with -\acrshort{gp}s, a very optimized implementation of \acrlong{gp} Models was -used, in the form of GPflow~\cite{matthewsGPflowGaussianProcess2017}. It is -based on TensorFlow~\cite{tensorflow2015-whitepaper}, which has very efficient -implementation of all the necessary Linear Algebra operations. Another benefit of -this implementation is the very simple use of any additional computational +\acrshort{gp}s, a very fast implementation of \acrlong{gp} Models was used, in +the form of GPflow~\cite{matthewsGPflowGaussianProcess2017}. It is based on +TensorFlow~\cite{tensorflow2015-whitepaper}, which has very efficient +implementation of all the necessary Linear Algebra operations. Another benefit +of this implementation is the very simple use of any additional computational resources, such as a GPU, TPU, etc. \subsubsection{Classical Gaussian Process training} @@ -129,8 +129,8 @@ number of function calls by around an order of magnitude, which already drastically reduces computation time. Another significant speed improvement comes from transforming the Python calls -to TensofFlow into native tf-functions. This change incurs a small overhead the -first time the optimization problem is run since all the TensorFlow functions +to TensorFlow into native tf-functions. This change incurs a small overhead the +first time the optimization problem is run, since all the TensorFlow functions have to be compiled before execution, but afterwards speeds up the execution by around another order of magnitude. @@ -148,7 +148,7 @@ Equation~\ref{eq:optimal_control_problem} becomes very nonlinear quite fast. In fact, due to the autoregressive structure of the \acrshort{gp}, the predicted temperature at time t is passed as an input to the model at time $t+1$. A simple recursive implementation of the Optimization Problem becomes intractable after -only 3 --- 4 prediction steps. +only 3~---~4 prediction steps. In order to solve this problem, a new OCP is introduced. It has a much sparser structure, in exchange for a larger number of variables. This turns out to be @@ -183,20 +183,19 @@ the intermediate results for analysis. In the beginning of the experiment there is no information available on the building's thermal behaviour. For this part of the simulation, the controller -switches to a \acrshort{pi} controller until it gathers enough data to train a -\acrshort{gp} model. The signal is then disturbed by a random signal before -being applied to the CARNOT building. This ensured that the building is -sufficiently excited to capture its dynamics, while maintaining the -temperature within an acceptable range (~15 --- 25 $\degree$C). +switches to a \acrshort{pi} controller with random disturbances until it gathers +enough data to train a \acrshort{gp} model. This ensured that the building is +sufficiently excited to capture its dynamics, while maintaining the temperature +within an acceptable range (~15 --- 25 $\degree$C). -Once enough data has been captured, the Python controller trains the -\acrshort{gp} model and switches to tracking the appropriate SIA 180:2014 -reference temperature (cf. Section~\ref{sec:reference_temperature}). +Once enough data has been captured all the features are first scaled to the +range [-1, 1] in order to reduce the possibility of numerical instabilities. The +Python controller then trains the \acrshort{gp} model and switches to tracking +the appropriate SIA 180:2014 reference temperature (cf. +Section~\ref{sec:reference_temperature}). For the case of the \acrshort{svgp}, a new model is trained once enough data is gathered. The implementations tested were updated once a day, either on the whole historical set of data, or on a window of the last five days of data. -% TODO [Implementation] Add info on scaling - \clearpage diff --git a/80_Results.tex b/80_Results.tex index 30dfcb3..9cb6e53 100644 --- a/80_Results.tex +++ b/80_Results.tex @@ -1,10 +1,10 @@ \section{Results}\label{sec:results} -% TODO [Results] Add info on control horizon - This section focuses on the presentation and interpretation of the year-long -simulation of the control schemes present previously. +simulation of the control schemes present previously. All the control schemes +analysed in this Section have been done with a sampling time of 15 minutes and a +control horizon of 8 steps. Section~\ref{sec:GP_results} analyses the results of a conventional \acrlong{gp} Model trained on the first five days of gathered data. The models @@ -25,7 +25,7 @@ is then employed for the rest of the year. With a sampling time of 15 minutes, the model is trained on 480 points of data. This size of the identification dataset is enough to learn the behaviour of the -plant, without being too complex to solve from a numerical perspective, the +plant, without being too complex to solve from a numerical perspective. The current implementation takes roughly 1.5 seconds of computation time per step. For reference, identifying a model on 15 days worth of experimental data (1440 points) makes simulation time approximately 11 --- 14 seconds per step, or @@ -39,8 +39,8 @@ $\degree$C in the stable part of the simulation. The offset becomes much larger once the reference temperature starts moving from the initial constant value. The controller becomes completely unstable around the middle of July, and can only regain some stability at the middle of October. It is also possible to note -that from mid-October --- end-December the controller has very similar -performance to that exhibited in the beginning of the year, namely January --- +that from mid-October to end-December the controller has very similar +performance to that exhibited in the beginning of the year, namely January to end-February. \begin{figure}[ht] @@ -52,10 +52,10 @@ end-February. \end{figure} This very large difference in performance could be explained by the change in -weather during the year. The winter months of the beginning of the year and end -of year exhibit similar performance, the spring months already make the -controller less stable than at the start of the year, while the drastic -temperature changes in the summer make the controller completely unstable. +weather during the year. The winter months of the beginning and end of the year +exhibit similar performance. The spring months already make the controller less +stable than at the start of the year, while the drastic temperature changes in +the summer make the controller completely unstable. \clearpage @@ -76,14 +76,14 @@ occurring during the winter months. Figure~\ref{fig:GP_first_model_performance} analyses the 20-step ahead simulation performance of the identified model over the course of the year. At -experimental step 250 the controller is still gathering data. It is therefore +experimental step 250, the controller is still gathering data. It is therefore expected that the identified model will be capable of reproducing this data. At step 500, 20 steps after identification, the model correctly steers the internal temperature towards the reference temperature. On the flip side, already at experimental steps 750 and 1000, only 9 days into the simulation, the model is unable to properly simulate the behaviour of the plant, with the maximum -difference at the end of the simulation reaching 0.75 and 1.5 $\degree$C -respectively. +difference at the end of the simulation reaching 0.75 $\degree$C and 1.5 +$\degree$C respectively. \begin{figure}[ht] \centering @@ -144,9 +144,12 @@ The results of this setup are presented in Figure~\ref{fig:SVGP_fullyear_simulation}. It can already be seen that this setup performs much better than the initial one. The only large deviations from the reference temperature are due to cold --- when the \acrshort{hvac}'s limited -heat capacity is unable to maintain the proper temperature. +heat capacity is unable to maintain the proper temperature. Additionnaly, the +\acrshort{svgp} controller takes around 250-300ms of computation time for each +simulation time, decreasing the computational cost of the original \acrshort{gp} +by a factor of six. + -% TODO: [Results] Add info on SVGP vs GP computation speed \begin{figure}[ht] \centering @@ -194,7 +197,7 @@ starting at 107500 and 11000 points. \centering \includegraphics[width = \textwidth]{Plots/1_SVGP_480pts_inf_window_12_averageYear_first_model_performance.pdf} - \caption{GP first model performance} + \caption{SVGP first model performance} \label{fig:SVGP_first_model_performance} \end{figure} @@ -214,7 +217,7 @@ than the classical \acrshort{gp} model to capture the building dynamics. \centering \includegraphics[width = \textwidth]{Plots/1_SVGP_480pts_inf_window_12_averageYear_later_model_performance.pdf} - \caption{GP later model performance} + \caption{SVGP later model performance} \label{fig:SVGP_later_model_performance} \end{figure} @@ -229,7 +232,7 @@ respectively. \centering \includegraphics[width = \textwidth]{Plots/1_SVGP_480pts_inf_window_12_averageYear_last_model_performance.pdf} - \caption{GP last model performance} + \caption{SVGP last model performance} \label{fig:SVGP_last_model_performance} \end{figure} @@ -255,12 +258,12 @@ control scheme: closed-loop operation, will the performance deteriorate drastically if the first model is trained on less data? \item How much information can the model extract from closed-loop operation? - Would a model trained on only the last five days of closed-loop - operation data be able to perform correctly? + Would a model trained on a window of only the last five days of + closed-loop operation data be able to perform correctly? \end{itemize} -These questions will be further analysed in the Sections~\ref{sec:svgp_window} -and~\ref{sec:svgp_96pts} respectively. +These questions will be further analysed in the Sections~\ref{sec:svgp_96pts} +and~\ref{sec:svgp_window} respectively. \clearpage @@ -299,8 +302,8 @@ months. This might be due to the fact that during the colder months, the additional heat to the system. A similar trend can be observed for the evolution of the input's -hyperparameters, with the exception that the first lag of the controlled input, -$u1,1$ remains the most important over the course of the year. +hyperparameters, with the exception that the first lag of the controlled input +($u1,1$) remains the most important over the course of the year. For the lags of the measured output it can be seen that, over the course of the year, the importance of the first lag decreases, while that of the second and @@ -342,7 +345,7 @@ refinements being done as data is added to the system. One question that could be addressed given these mostly linear kernel terms is how well would an \acrshort{svgp} model perform with a linear kernel. Intuition would hint that it should still be able to track the reference -temperature, albeit not as precisely due to the correlation that diminished much +temperature, albeit not as precisely due to the correlation that diminishes much slower when the two points are closer together in the \acrshort{se} kernel. This will be further investigated in Section~\ref{sec:svgp_linear}. @@ -351,7 +354,7 @@ will be further investigated in Section~\ref{sec:svgp_linear}. \subsection{SVGP with one day of starting data}\label{sec:svgp_96pts} As previously discussed in Section~\ref{sec:SVGP_results}, the \acrshort{svgp} -model is able to properly adapt given new information, overtime refining it's +model is able to properly adapt given new information, overtime refining its understanding of the plant's dynamics. Analyzing the results of a simulation done on only one day's worth of initial @@ -381,26 +384,26 @@ for cumbersome and potentially costly initial experiments for gathering data. \subsection{SVGP with a five days moving window}\label{sec:svgp_window} -This section presents the result of running a different control scheme. Here, -as the base \acrshort{svgp} model, it is first trained on 5 days worth of data, -with the difference being that each new model is only identified using the last -five days' worth of data. This should provide an insight on whether the -\acrshort{svgp} model is able to understand model dynamics only based on -closed-loop operation. +This section presents the result of running a different control scheme. Here, as +was the case for the base \acrshort{svgp} model, it is first trained on 5 days +worth of data, with the difference being that each new model is only identified +using the last five days' worth of data. This should provide an insight on +whether the \acrshort{svgp} model is able to understand model dynamics only +based on closed-loop operation. \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/5_SVGP_480pts_480pts_window_12_averageYear_fullyear.pdf} - \caption{SVGP full year simulation} + \caption{Windowed SVGP full year simulation} \label{fig:SVGP_480window_fullyear_simulation} \end{figure} As it can be seen in Figure~\ref{fig:SVGP_480window_fullyear_simulation}, this model is unable to properly track the reference temperature. In fact, five days -after the identification the model forgets all the initial data and becomes +after the identification, the model forgets all the initial data and becomes unstable. This instability then generates enough excitation of the plant for the -model to again learn its behaviour. This cycle repeats every five days, when the +model, to again learn its behaviour. This cycle repeats every five days, when the controller becomes unstable. In the stable regions, however, the controller is able to track the reference temperature. @@ -422,7 +425,7 @@ nuanced details of the CARNOT model dynamics. \centering \includegraphics[width = \textwidth]{Plots/10_SVGP_480pts_inf_window_12_averageYear_LinearKernel_fullyear.pdf} - \caption{SVGP full year simulation} + \caption{Linear SVGP full year simulation} \label{fig:SVGP_linear_fullyear_simulation} \end{figure} @@ -430,9 +433,6 @@ nuanced details of the CARNOT model dynamics. \subsection{Comparative analysis} -This section will compare all the results presented in the previous Sections and -try to analyze the differences and their origin. - Presented in Table~\ref{tab:Model_comparations} are the Mean Error, Error Variance and Mean Absolute Error for the full year simulation for the three stable \acrshort{svgp} models, as well as the classical \acrshort{gp} model. @@ -467,12 +467,12 @@ The two \acrshort{svgp} models with \acrlong{se} kernels perform the best. They have a comparable performance, with very small differences in Mean Absolute Error and Error variance. This leads to the conclusion that the \acrshort{svgp} models can be deployed with less explicit identification data, but they will -continue to improve over the course of the year as the building passes through +continue to improve over the course of the year, as the building passes through different regions of the state space and more data is collected. -These results do not, however, discredit the use of \acrlong{gp} for use in a -multi-seasonal situation. As shown before, given the same amount of data and -ignoring the computational cost, they perform better than the alternative +These results do not, however, discredit the use of \acrlong{gp} for employment +in a multi-seasonal situation. As shown before, given the same amount of data +and ignoring the computational cost, they perform better than the alternative \acrshort{svgp} models. The bad initial performance could be mitigated by sampling the identification data at different points in time during multiple experiments, updating a fixed-size dataset based on the gained information, as diff --git a/90_Further_Research.tex b/90_Further_Research.tex index d41b07b..77d6a30 100644 --- a/90_Further_Research.tex +++ b/90_Further_Research.tex @@ -5,22 +5,22 @@ simulation for a classical \acrshort{gp} model, as well as a few incarnations of \acrshort{svgp} models. The results show that the \acrshort{svgp} have much better performance, mainly due to the possibility of updating the model throughout the year. The \acrshort{svgp} models also present a computational -cost advantage both in training and in evaluation due to several approximations +cost advantage both in training and in evaluation, due to several approximations shown in Section~\ref{sec:gaussian_processes}. Focusing on the \acrlong{gp} models, there could be several ways of improving its performance, as noted previously: a more varied identification dataset and -smart update of a fixed-size data dictionary according to information gain could -mitigate the present problems. +smart update of a fixed-size data dictionary according to information gain, +could mitigate the present problems. -Using a Sparse \acrshort{gp} without also replacing the maximum log likelihood +Using a Sparse \acrshort{gp} without replacing the maximum log likelihood with the \acrshort{elbo} could improve performance of the \acrshort{gp} model at the expense of training time. An additional change that could be made is inclusion of the most amount of prior information possible through setting a more refined kernel, as well as adding prior information on all the model hyperparameters when available. This approach -however goes against the "spirit" of black-box approaches since significant +however goes against the "spirit" of black-box approaches, since significant insight into the physics of the plant is required in order to properly model and implement this information. @@ -29,14 +29,14 @@ not properly addressed in this work. First, the size of the inducing dataset was chosen experimentally until it was found to accurately reproduce the manually collected experimental data. In order to better use the available computational resources, this value could be found programmatically in a way to minimize -evaluation time while still providing good performance. Another possibility is +evaluation time, while still providing good performance. Another possibility is the periodic re-evaluation of this value when new data comes in, since as more and more data is collected the model becomes more complex, and in general more inducing locations could be necessary to properly reproduce the training data. -Finally, none of the presented controllers take into account occupancy rates or adapt to -possible changes in the real building, such as adding or removing furniture, -deteriorating insulation and so on. The presented update methods only deals with -adding information on behaviour in different state space regions, i.e +Finally, none of the presented controllers take into account occupancy rates or +adapt to possible changes in the real building, such as adding or removing +furniture, deteriorating insulation and so on. The presented update methods only +deals with adding information on behaviour in different state space regions, i.e \textit{learning}, and their ability to \textit{adapt} to changes in the actual plant's behaviour should be further addressed. diff --git a/95_Conclusion.tex b/95_Conclusion.tex index db85c31..c1bc712 100644 --- a/95_Conclusion.tex +++ b/95_Conclusion.tex @@ -1,4 +1,34 @@ \section{Conclusion} +The aim of this project was to analyse the performance of \acrshort{gp} based +controllers for use in longer lasting implementations, where differences in +building behaviour become important compared to the initially available data. + +First, the performance of a classical \acrshort{gp} model trained on 5 days +worth of experimental data was analysed. This model turned out to be unable to +correctly extrapolate building behaviour as the weather changed throughout the +year. + +Several \acrshort{svgp} implementations were then analysed. They turned out to +provide important benefits over the classical models, such as the ability to +easily scale when new data is being added and the much reduced computational +effort required. They do however present some downsides, namely increasing the +number of hyperparameters by having to choose the number of inducing locations, +as well as performing worse than then classical \acrshort{gp} implementation +given the same amount of data. + +Finally, the possible improvements to the current implementations have been +addressed, noting that classical \acrshort{gp} implementations could also be +adapted to the \textit{learning control} paradigm, even if their implementation +could turn out to be much more involved and more computationally expensive than +the \acrshort{svgp} alternative. + +\section*{Acknowledgements} + +I would like to thank Koch Manuel Pascal for the great help provided during the +course of the project starting from the basics on CARNOT modelling, to helping +me better compare the performance of different controllers, as well as Professor +Jones, whose insights were always very guiding, while still allowing me to +discover everything on my own. \clearpage diff --git a/99A_GP_hyperparameters_validation.tex b/99A_GP_hyperparameters_validation.tex index 231b8da..4d426dd 100644 --- a/99A_GP_hyperparameters_validation.tex +++ b/99A_GP_hyperparameters_validation.tex @@ -7,14 +7,14 @@ \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/GP_113_training_performance.pdf} - \caption{} + \caption{Prediction performance of \model{1}{1}{3} on the training dataset} \label{fig:GP_train_validation} \end{figure} \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/GP_113_test_performance.pdf} - \caption{} + \caption{Prediction performance of \model{1}{1}{3} on the test dataset} \label{fig:GP_test_validation} \end{figure} @@ -25,14 +25,14 @@ \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/GP_213_training_performance.pdf} - \caption{} + \caption{Prediction performance of \model{2}{1}{3} on the training dataset} \label{fig:GP_213_train_validation} \end{figure} \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/GP_213_test_performance.pdf} - \caption{} + \caption{Prediction performance of \model{2}{1}{3} on the test dataset} \label{fig:GP_213_test_validation} \end{figure} @@ -43,14 +43,14 @@ \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/GP_313_training_performance.pdf} - \caption{} + \caption{Prediction performance of \model{1}{1}{3} on the training dataset} \label{fig:GP_313_train_validation} \end{figure} \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/GP_313_test_performance.pdf} - \caption{} + \caption{Prediction performance of \model{1}{1}{3} on the test dataset} \label{fig:GP_313_test_validation} \end{figure} @@ -64,14 +64,14 @@ \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/SVGP_123_training_performance.pdf} - \caption{} + \caption{Prediction performance of \model{1}{2}{3} on the training dataset} \label{fig:SVGP_train_validation} \end{figure} \begin{figure}[ht] \centering \includegraphics[width = \textwidth]{Plots/SVGP_123_test_performance.pdf} - \caption{} + \caption{Prediction performance of \model{1}{2}{3} on the test dataset} \label{fig:SVGP_test_validation} \end{figure} diff --git a/99C_hyperparameters_results.tex b/99C_hyperparameters_results.tex index 76527be..34dbd3f 100644 --- a/99C_hyperparameters_results.tex +++ b/99C_hyperparameters_results.tex @@ -4,7 +4,7 @@ \centering \includegraphics[width = \textwidth]{Plots/1_SVGP_480pts_inf_window_12_averageYear_evol_hyperparameters.pdf} - \caption{GP last model performance} + \caption{Evolution of SVGP hyperparameters} \label{fig:SVGP_evol_hyperparameters} \end{figure} diff --git a/Plots/4_GP_480pts_12_averageYear_model_performance.pdf b/Plots/4_GP_480pts_12_averageYear_model_performance.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d2ce9df1df267f1c95091038052ecb958c69da3d GIT binary patch literal 86203 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 literal 0 HcmV?d00001 diff --git a/references.bib b/references.bib index 178223a..5441df8 100644 --- a/references.bib +++ b/references.bib @@ -83,6 +83,18 @@ number = {4} } +@book{europeancommission.jointresearchcentre.EnergyConsumptionEnergy2018, + title = {Energy Consumption and Energy Efficiency Trends in the {{EU}}-28 for the Period 2000-2016.}, + author = {{European Commission. Joint Research Centre.}}, + date = {2018}, + publisher = {{Publications Office}}, + location = {{LU}}, + url = {https://data.europa.eu/doi/10.2760/574824}, + urldate = {2021-06-25}, + file = {/home/radu/Zotero/storage/6WCHIEUC/European Commission. Joint Research Centre. - 2018 - Energy consumption and energy efficiency trends in.pdf}, + langid = {english} +} + @article{f.holmgrenPvlibPythonPython2018, title = {Pvlib Python: A Python Package for Modeling Solar Energy Systems}, shorttitle = {Pvlib Python}, @@ -240,7 +252,7 @@ @article{kabzanLearningBasedModelPredictive2019, title = {Learning-{{Based Model Predictive Control}} for {{Autonomous Racing}}}, - author = {Kabzan, Juraj and Hewing, Lukas and Liniger, Alexander and Zeilinger, Melanie N.}, + author = {Kabzan, J. and Hewing, Lukas and Liniger, Alexander and Zeilinger, Melanie N.}, date = {2019-10}, journaltitle = {IEEE Robotics and Automation Letters}, volume = {4}, @@ -463,6 +475,26 @@ url = {https://www.tensorflow.org/} } +@article{tsemekiditzeiranakiAnalysisEUResidential2019, + title = {Analysis of the {{EU Residential Energy Consumption}}: {{Trends}} and {{Determinants}}}, + shorttitle = {Analysis of the {{EU Residential Energy Consumption}}}, + author = {Tsemekidi Tzeiranaki, Sofia and Bertoldi, Paolo and Diluiso, Francesca and Castellazzi, Luca and Economidou, Marina and Labanca, Nicola and Ribeiro Serrenho, Tiago and Zangheri, Paolo}, + date = {2019-01}, + journaltitle = {Energies}, + volume = {12}, + pages = {1065}, + publisher = {{Multidisciplinary Digital Publishing Institute}}, + doi = {10.3390/en12061065}, + url = {https://www.mdpi.com/1996-1073/12/6/1065}, + urldate = {2021-06-25}, + abstract = {This article analyses the status and trends of the European Union (EU) residential energy consumption in light of the energy consumption targets set by the EU 2020 and 2030 energy and climate strategies. It assesses the energy efficiency progress from 2000 to 2016, using the official Eurostat data. In 2016, the residential energy consumption amounted to 25.71\% of the EU\’s final energy consumption, representing the second largest consuming sector after transport. Consumption-related data are discussed together with data on some main energy efficiency policies and energy consumption determinants, such as economic and population growth, weather conditions, and household and building characteristics. Indicators are identified to show the impact of specific determinants on energy consumption and a new indicator is proposed, drawing a closer link between energy trends and policy and technological changes in the sector. The analysis of these determinants highlights the complex dynamics behind the demand of energy in the residential sector. Decomposition analysis is carried out using the Logarithmic Mean Divisia Index technique to provide a more complete picture of the impact of various determinants (population, wealth, intensity, and weather) on the latest EU-28 residential energy consumption trends. The article provides a better understanding of the EU residential energy consumption, its drivers, the impact of current policies, and recommendations on future policies.}, + file = {/home/radu/Zotero/storage/JFTJ9Z9Q/Tsemekidi Tzeiranaki et al. - 2019 - Analysis of the EU Residential Energy Consumption.pdf;/home/radu/Zotero/storage/RS4MYQ3A/1065.html}, + issue = {6}, + keywords = {energy efficiency policies,indicators,regression analysis,residential energy consumption}, + langid = {english}, + number = {6} +} + @online{WhatAreTypical2018, title = {What Are Typical {{U}}-{{Values}} on Windows and Doors? | {{Aspire Bifolds Surrey}}}, shorttitle = {What Are Typical {{U}}-{{Values}} on Windows and Doors?},