Added README file

This commit is contained in:
Radu C. Martin 2021-08-01 00:18:09 +02:00
parent 6144c9cd56
commit fbd6a3da23

128
README.md Normal file
View file

@ -0,0 +1,128 @@
# Inter-seasonal GP MPC control for buildings
## Identification and control code
This repository contains the code of the Notebooks and the server implementation
of the GP-based MPC used as part of my Master Project
> *Inter-seasonal Performance of Gaussian Process-based
> Model Predictive Control of Buildings*
which was done under the supervision of Prof. Colin Jones at the EPFL's
[Automatic Control Laboratory](https://www.epfl.ch/labs/la/)
## Folder structure
The most important parts of the repository are presented in the tree below:
```shell
Master-Project
├── Data
│   ├── Experimental_data_WDB
│   ├── Good_CARNOT
│   ├── Luca_experimental_data
│   ├── Miscellaneous
│   └── Simulation_results
│   ├── First batch (explorative)
│   ├── Second batch
│   └── Third batch
│   ├── 10_SVGP_480pts_inf_window_12_averageYear_LinearKernel
│   ├── 1_SVGP_480pts_inf_window_12_averageYear
│   ├── 2_SVGP_480pts_inf_window_12_extremeSummer
│   ├── 3_SVGP_480pts_inf_window_12_extremeWinter
│   ├── 4_GP_480pts_12_averageYear
│   ├── 5_SVGP_480pts_480pts_window_12_averageYear
│   └── 6_SVGP_96pts_inf_window_12_averageYear
├── Literature
├── Matlab_scripts
├── Notebooks
│   ├── Images
│   └── Results
├── server
└── Simulink
```
### `Data` folder
The `Data` folder contains all the experimental datasets
(`Luca_experimental_data`), the CARNOT simulations using the experimental
weather data (`Experimental_data_WDB`, used for validation of the CARNOT
building), as well as the models and optimization results for the full-year
simulations (in the sub-folder `Simulation_results/Third batch`)
### `Notebooks` folder
The `Notebooks` folder contains all the relevant jupyter notebooks written while
figuring out the structure of the MPC controller, the CARNOT system and their
interface. These notebooks are also used to generate most of the plots used in
the [Master Project Report](https://github.com/Radu-C-Martin/Master-Thesis).
A quick summary of each notebook's uses is presented in the following list:
- `10_wdb_from_experimental_data.ipynb`
- Transforming experimental weather data to WDB
- `21_CARNOT_experimental_comparison.ipynb`
- Graphing external temp/ internal temp/ setpoint for all exps
- `30_gaussiandome_identification.ipynb`
- Gaussian Process identification for real building based on exp. data
- `38_gp_hyperparameter_estimation.ipynb`
- Gaussian Process identification on CARNOT experimental data
- Error table generation
- Training/test error plots
- Multi-step ahead prediction + plots
- `39_svgp_hyperparameter_estimation.ipynb`
- SVGP model identification on CARNOT data
- Error table generation
- Training/test error plots
- Multi-step ahead prediction + plots
- `42_casadi_callback_speed.ipynb`
- CasADi GP with callback on a GP of the CARNOT building
- `50_mpc_formulation.ipynb`
- Test of sample MPC with CasADi on a CARNOT GP
- `70_Server_result_analysis.ipynb`
- Plots for analyzing year-long simulation performance
Experiments:
- `31_gpflow_first_test.ipynb`
- Test of GPflow on a simple function
- `41_casadi_gp_test.ipynb`
- CasADi GP with callback on a simple function
### `server` folder
The `server` folder contains the code for the Python server serving as the
interface between the Simulink model and the MPC controller. The `server.py`
script is responsible of reading the measurement values/weather forecast and
sending the control signal to the CARNOT model. The measurement and control
values are passed to/from and MPC object. The MPC itself is defined in
`controllers.py`.
## Required libraries
The python code uses several libraries for GP models, as well as general
math/data operations:
- `pandas` and `numpy` are used for operating on arrays of data
- `TensorFlow` and `GPflow` are used for the GP model implementations and
to wrap the CasADi callbacks as tf-functions.
- `CasADi` is the algorithmic differentation framework used to implement
the Optimization Problem
There are also several libraries that are optional, and are not required for
running the server code:
- `matplotlib` is used in the jupyter notebooks to plot the results
- `bokeh` is used in the jupyter notebooks where interactive plots were
useful
- `tqdm` is used to display a progress bar in the notebooks where a lot of
data is processed.