Repository: intelligent-environments-lab/CityLearn (language: python)

Issue:
AttributeError
I have an error when I run example module for RBC and SAC showing AttributeError: type object 'CostFunction' has no attribute 'net_electricity_consumption'

When I run quickstart example it's run fine without any error.

Thank you


Allen performance
Further improvements can be made for runtime, but this decreases the running time on the quickstart file by 20s for both models


Discussion / hints:

Fix patch:
diff --git a/.gitignore b/.gitignore
index 999751337..6e9b06bdd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -116,6 +116,7 @@ celerybeat.pid
 .venv
 env/
 test_env/
+examples_env/
 venv/
 ENV/
 env.bak/
diff --git a/assets/images/citylearn_systems.png b/assets/images/citylearn_systems.png
new file mode 100644
index 000000000..9098f8858
Binary files /dev/null and b/assets/images/citylearn_systems.png differ
diff --git a/assets/images/duck_curve-denholm.png b/assets/images/duck_curve-denholm.png
new file mode 100644
index 000000000..ce318781f
Binary files /dev/null and b/assets/images/duck_curve-denholm.png differ
diff --git a/assets/images/grid_interactive_building-neukomm.png b/assets/images/grid_interactive_building-neukomm.png
new file mode 100644
index 000000000..c2585e884
Binary files /dev/null and b/assets/images/grid_interactive_building-neukomm.png differ
diff --git a/assets/images/grid_interactive_building_profile-neukomm.png b/assets/images/grid_interactive_building_profile-neukomm.png
new file mode 100644
index 000000000..28d7c39b3
Binary files /dev/null and b/assets/images/grid_interactive_building_profile-neukomm.png differ
diff --git a/assets/images/reinforcement_learning.png b/assets/images/reinforcement_learning.png
new file mode 100644
index 000000000..1cd982d4f
Binary files /dev/null and b/assets/images/reinforcement_learning.png differ
diff --git a/assets/images/supervised_vs_unsupervised_vs_rl.png b/assets/images/supervised_vs_unsupervised_vs_rl.png
new file mode 100644
index 000000000..b273c7475
Binary files /dev/null and b/assets/images/supervised_vs_unsupervised_vs_rl.png differ
diff --git a/citylearn/__init__.py b/citylearn/__init__.py
index 618528c70..ad95fc7b6 100644
--- a/citylearn/__init__.py
+++ b/citylearn/__init__.py
@@ -1,1 +1,1 @@
-__version__ = '1.5.0'
\ No newline at end of file
+__version__ = '1.7.0'
\ No newline at end of file
diff --git a/citylearn/agents/marlisa.py b/citylearn/agents/marlisa.py
index d572bb6d8..dcb03de8f 100644
--- a/citylearn/agents/marlisa.py
+++ b/citylearn/agents/marlisa.py
@@ -143,8 +143,8 @@ def add_to_buffer(self, observations: List[List[float]], actions: List[List[floa
                 pass
 
             if self.regression_flag[i] > 1:
-                o = np.array(self.get_encoded_observations(i, o), dtype=float)
-                n = np.array(self.get_encoded_observations(i, n), dtype=float)
+                o = self.get_encoded_observations(i, o)
+                n = self.get_encoded_observations(i, n)
 
                 # Only executed during the random exploration phase. Pushes unnormalized tuples into the replay buffer.
                 if self.information_sharing:
@@ -156,9 +156,9 @@ def add_to_buffer(self, observations: List[List[float]], actions: List[List[floa
 
                 # Executed during the training phase. States and rewards pushed into the replay buffer are normalized and processed using PCA.
                 if self.pca_flag[i]:
-                    o = np.array(self.get_normalized_observations(i, o), dtype=float)
+                    o = self.get_normalized_observations(i, o)
                     o = self.pca[i].transform(o.reshape(1, -1))[0]
-                    n = np.array(self.get_normalized_observations(i, n), dtype=float)
+                    n = self.get_normalized_observations(i, n)
                     n = self.pca[i].transform(n.reshape(1, -1))[0]
                     r = self.get_normalized_reward(i, r)
                 else:
@@ -193,7 +193,7 @@ def add_to_buffer(self, observations: List[List[float]], actions: List[List[floa
                     X = np.array([j[0] for j in self.replay_buffer[i].buffer], dtype=float)
                     self.norm_mean[i] = np.nanmean(X, axis=0)
                     self.norm_std[i] = np.nanstd(X, axis=0) + 1e-5
-                    X = np.array(self.get_normalized_observations(i, X), dtype=float)
+                    X = self.get_normalized_observations(i, X)
                     self.pca[i].fit(X)
 
                     R = np.array([j[2] for j in self.replay_buffer[i].buffer], dtype=float)
@@ -202,10 +202,10 @@ def add_to_buffer(self, observations: List[List[float]], actions: List[List[floa
 
                     # update buffer with normalization
                     self.replay_buffer[i].buffer = [(
-                        np.hstack(self.pca[i].transform(np.array(self.get_normalized_observations(i, o), dtype=float).reshape(1,-1))[0]),
+                        np.hstack(self.pca[i].transform(self.get_normalized_observations(i, o).reshape(1,-1))[0]),
                         a,
                         self.get_normalized_reward(i, r),
-                        np.hstack(self.pca[i].transform(np.array(self.get_normalized_observations(i, n), dtype=float).reshape(1,-1))[0]),
+                        np.hstack(self.pca[i].transform(self.get_normalized_observations(i, n).reshape(1,-1))[0]),
                         d
                     ) for o, a, r, n, d in self.replay_buffer[i].buffer]
                     self.pca_flag[i] = True
@@ -302,9 +302,9 @@ def get_post_exploration_actions_with_information_sharing(self, observations: Li
             capacity_dispatched = 0.0
 
             for c, n, o, o_ in zip(action_order, next_agent_ixs, observations, observations):
-                o = np.array(self.get_encoded_observations(c, o), dtype=float)
+                o = self.get_encoded_observations(c, o)
                 o = np.hstack(np.concatenate((o, coordination_variables[c])))
-                o = np.array(self.get_normalized_observations(c, o), dtype=float)
+                o = self.get_normalized_observations(c, o)
                 o = self.pca[c].transform(o.reshape(1,-1))[0]
                 o = torch.FloatTensor(o).unsqueeze(0).to(self.device)
                 result = self.policy_net[i].sample(o)
@@ -330,8 +330,8 @@ def get_post_exploration_actions_without_information_sharing(self, observations:
         coordination_variables = [[0.0, 0.0] for _ in range(agent_count)]
 
         for i, o in enumerate(observations):
-            o = np.array(self.get_encoded_observations(i, o), dtype=float)
-            o = np.array(self.get_normalized_observations(i, o), dtype=float)
+            o = self.get_encoded_observations(i, o)
+            o = self.get_normalized_observations(i, o)
             o = self.pca[i].transform(o.reshape(1,-1))[0]
             o = torch.FloatTensor(o).unsqueeze(0).to(self.device)
             result = self.policy_net[i].sample(o)
diff --git a/citylearn/agents/sac.py b/citylearn/agents/sac.py
index e6157265b..83dadd29d 100644
--- a/citylearn/agents/sac.py
+++ b/citylearn/agents/sac.py
@@ -1,5 +1,6 @@
 from typing import List
 import numpy as np
+import numpy.typing as npt
 
 try:
     import torch
@@ -71,12 +72,12 @@ def add_to_buffer(self, observations: List[List[float]], actions: List[List[floa
         # Normalize all the observations using periodical normalization, one-hot encoding, or -1, 1 scaling. It also removes observations that are not necessary (solar irradiance if there are no solar PV panels).
 
         for i, (o, a, r, n) in enumerate(zip(observations, actions, reward, next_observations)):
-            o = np.array(self.get_encoded_observations(i, o), dtype = float)
-            n = np.array(self.get_encoded_observations(i, n), dtype = float)
+            o = self.get_encoded_observations(i, o)
+            n = self.get_encoded_observations(i, n)
 
             if self.normalized[i]:
-                o = np.array(self.get_normalized_observations(i, o), dtype = float)
-                n = np.array(self.get_normalized_observations(i, n), dtype = float)
+                o = self.get_normalized_observations(i, o)
+                n = self.get_normalized_observations(i, n)
                 r = self.get_normalized_reward(i, r)
             else:
                 pass
@@ -95,10 +96,10 @@ def add_to_buffer(self, observations: List[List[float]], actions: List[List[floa
                     
                     # update buffer with normalization
                     self.replay_buffer[i].buffer = [(
-                        np.hstack(np.array(self.get_normalized_observations(i, o), dtype = float).reshape(1,-1)[0]),
+                        np.hstack(self.get_normalized_observations(i, o).reshape(1,-1)[0]),
                         a,
                         self.get_normalized_reward(i, r),
-                        np.hstack(np.array(self.get_normalized_observations(i, n), dtype = float).reshape(1,-1)[0]),
+                        np.hstack(self.get_normalized_observations(i, n).reshape(1,-1)[0]),
                         d
                     ) for o, a, r, n, d in self.replay_buffer[i].buffer]
                     self.normalized[i] = True
@@ -187,13 +188,12 @@ def get_post_exploration_actions(self, observations: List[List[float]]) -> List[
         actions = []
 
         for i, o in enumerate(observations):
-            o = np.array(self.get_encoded_observations(i, o), dtype = float)
-            o = np.array(self.get_normalized_observations(i, o), dtype = float)
+            o = self.get_encoded_observations(i, o)
+            o = self.get_normalized_observations(i, o)
             o = torch.FloatTensor(o).unsqueeze(0).to(self.device)
             result = self.policy_net[i].sample(o)
             a = result[2] if self.time_step >= self.deterministic_start_time_step else result[0]
-            a = list(a.detach().cpu().numpy()[0])
-            actions.append(a)
+            actions.append(a.detach().cpu().numpy()[0])
 
         return actions
             
@@ -212,11 +212,11 @@ def get_exploration_actions(self, observations: List[List[float]]) -> List[List[
     def get_normalized_reward(self, index: int, reward: float) -> float:
         return (reward - self.r_norm_mean[index])/self.r_norm_std[index]
 
-    def get_normalized_observations(self, index: int, observations: List[float]) -> List[float]:
-        return ((np.array(observations, dtype = float) - self.norm_mean[index])/self.norm_std[index]).tolist()
+    def get_normalized_observations(self, index: int, observations: List[float]) -> npt.NDArray[np.float64]:
+        return (np.array(observations, dtype = float) - self.norm_mean[index])/self.norm_std[index]
 
-    def get_encoded_observations(self, index: int, observations: List[float]) -> List[float]:
-        return np.array([j for j in np.hstack(self.encoders[index]*np.array(observations, dtype=float)) if j != None], dtype = float).tolist()
+    def get_encoded_observations(self, index: int, observations: List[float]) -> npt.NDArray[np.float64]:
+        return np.array([j for j in np.hstack(self.encoders[index]*np.array(observations, dtype=float)) if j != None], dtype = float)
 
     def set_networks(self, internal_observation_count: int = None):
         internal_observation_count = 0 if internal_observation_count is None else internal_observation_count
diff --git a/citylearn/citylearn.py b/citylearn/citylearn.py
index ed50a9f78..dea26dfc0 100755
--- a/citylearn/citylearn.py
+++ b/citylearn/citylearn.py
@@ -1,8 +1,9 @@
 import importlib
+import logging
 import os
 from pathlib import Path
 from typing import Any, List, Mapping, Tuple, Union
-from gym import Env, spaces
+from gym import Env, spaces, Wrapper
 import numpy as np
 import pandas as pd
 from citylearn.agents.base import Agent
@@ -12,6 +13,10 @@
 from citylearn.data import DataSet, EnergySimulation, CarbonIntensity, Pricing, Weather
 from citylearn.utilities import read_json
 
+LOGGER = logging.getLogger()
+logging.getLogger('matplotlib.font_manager').disabled = True
+logging.getLogger('matplotlib.pyplot').disabled = True
+
 class CityLearnEnv(Environment, Env):
     def __init__(self, 
         schema: Union[str, Path, Mapping[str, Any]], root_directory: Union[str, Path] = None, buildings: List[Building] = None, simulation_start_time_step: int = None, simulation_end_time_step: int = None, 
@@ -461,7 +466,7 @@ def get_default_shared_observations() -> List[str]:
         ]
 
 
-    def step(self, actions: List[List[float]]) -> Tuple[List[List[float]], List[float], bool, Mapping[Any, Any]]:
+    def step(self, actions: List[List[float]]) -> Tuple[List[List[float]], List[float], bool, dict]:
         """Apply actions to `buildings` and advance to next time step.
         
         Parameters
@@ -482,7 +487,7 @@ def step(self, actions: List[List[float]]) -> Tuple[List[List[float]], List[floa
             A boolean value for if the episode has ended, in which case further :meth:`step` calls will return undefined results.
             A done signal may be emitted for different reasons: Maybe the task underlying the environment was solved successfully,
             a certain timelimit was exceeded, or the physics simulation has entered an invalid observation.
-        info: Mapping[Any, Any]
+        info: dict
             A dictionary that may contain additional information regarding the reason for a ``done`` signal.
             `info` contains auxiliary diagnostic information (helpful for debugging, learning, and logging).
             Override :meth"`get_info` to get custom key-value pairs in `info`.
@@ -653,7 +658,7 @@ def next_time_step(self):
         super().next_time_step()
         self.update_variables()
 
-    def reset(self):
+    def reset(self) -> List[List[float]]:
         r"""Reset `CityLearnEnv` to initial state.
         
         Returns
@@ -728,7 +733,7 @@ def __load(self, **kwargs) -> Tuple[List[Building], int, float, 'citylearn.rewar
             Number of simulation time steps.
         seconds_per_time_step: float
             Number of seconds in 1 `time_step` and must be set to >= 1.
-        reward_function : RewardFunction
+        reward_function : citylearn.reward_function.RewardFunction
             Reward function class instance.
         central_agent : bool, optional
             Expect 1 central agent to control all building storage device.
@@ -878,6 +883,39 @@ def __load(self, **kwargs) -> Tuple[List[Building], int, float, 'citylearn.rewar
 
         return root_directory, buildings, simulation_start_time_step, simulation_end_time_step, seconds_per_time_step, reward_function, central_agent, shared_observations
 
+class StableBaselines3Wrapper(Wrapper):
+    def __init__(self, env: CityLearnEnv):
+        super().__init__(env)
+
+        if not self.env.central_agent:
+            logging.warning('The StableBaselines3Wrapper wrapper is compatible only when env.central_agent=True.'\
+                ' Note that env.central_agent has been set to True for compatibility.')
+            self.env.central_agent = True
+        
+        else:
+            pass
+        
+    @CityLearnEnv.observation_space.getter
+    def observation_space(self) -> spaces.Box:
+        return self.env.observation_space[0]
+
+    @CityLearnEnv.action_space.getter
+    def action_space(self) -> spaces.Box:
+        return self.env.action_space[0]
+
+    def step(self, actions: List[float]) -> Tuple[np.ndarray, float, bool, dict]:
+        actions = [actions]
+        observations, reward, done, info = self.env.step(actions)
+        observations = np.array(observations[0], dtype='float32')
+        reward = reward[0]
+
+        return observations, reward, done, info
+
+    def reset(self) -> np.ndarray:
+        observations = np.array(self.env.reset()[0], dtype='float32')
+
+        return observations
+
 class Error(Exception):
     """Base class for other exceptions."""
 
diff --git a/citylearn/reward_function.py b/citylearn/reward_function.py
index d32afccf2..d8c6e688e 100755
--- a/citylearn/reward_function.py
+++ b/citylearn/reward_function.py
@@ -1,4 +1,4 @@
-from typing import Any, List, Mapping
+from typing import List
 import numpy as np
 from citylearn.citylearn import CityLearnEnv
 
diff --git a/docs/source/citylearn_challenge/2020.rst b/docs/source/citylearn_challenge/2020.rst
index d73a1bc9d..c8ed8d87d 100644
--- a/docs/source/citylearn_challenge/2020.rst
+++ b/docs/source/citylearn_challenge/2020.rst
@@ -8,7 +8,7 @@ The CityLearn Challenge 2020
 
 .. note::
 
-    The CityLearn Challenge 2020 used The CityLearn Challenge 2020 dataset :cite:p:`T8/ZQKK6E_2020` and `CityLearn v1.0.0 <https://github.com/intelligent-environments-lab/CityLearn/tree/v1.0.0>`_. To install this CityLearn version, run:
+    The CityLearn Challenge 2020 :cite:p:`10.1145/3408308.3431122` used The CityLearn Challenge 2020 dataset :cite:p:`T8/ZQKK6E_2020` and `CityLearn v1.0.0 <https://github.com/intelligent-environments-lab/CityLearn/tree/v1.0.0>`_. To install this CityLearn version, run:
 
     .. code-block:: bash
 
diff --git a/docs/source/citylearn_challenge/2021.rst b/docs/source/citylearn_challenge/2021.rst
index 2f4a968ab..e129876a2 100644
--- a/docs/source/citylearn_challenge/2021.rst
+++ b/docs/source/citylearn_challenge/2021.rst
@@ -8,7 +8,7 @@ The CityLearn Challenge 2021
 
 .. note::
 
-    The CityLearn Challenge 2021 used The CityLearn Challenge 2021 dataset :cite:p:`T8/Q2EIQC_2021` and `CityLearn v1.0.0 <https://github.com/intelligent-environments-lab/CityLearn/tree/v1.0.0>`_. To install this CityLearn version, run:
+    The CityLearn Challenge 2021 :cite:p:`10.1145/3486611.3492226` used The CityLearn Challenge 2021 dataset :cite:p:`T8/Q2EIQC_2021` and `CityLearn v1.0.0 <https://github.com/intelligent-environments-lab/CityLearn/tree/v1.0.0>`_. To install this CityLearn version, run:
 
     .. code-block:: bash
 
diff --git a/docs/source/references.bib b/docs/source/references.bib
index d5deb85a7..39df0735a 100644
--- a/docs/source/references.bib
+++ b/docs/source/references.bib
@@ -241,4 +241,21 @@ @inproceedings{10.1145/3408308.3431122
 keywords = {Reinforcement learning, demand response, microgrid},
 location = {Virtual Event, Japan},
 series = {BuildSys '20}
+}
+
+@inproceedings{10.1145/3486611.3492226,
+author = {Nagy, Zoltan and V\'{a}zquez-Canteli, Jos\'{e} R. and Dey, Sourav and Henze, Gregor},
+title = {The Citylearn Challenge 2021},
+year = {2021},
+isbn = {9781450391146},
+publisher = {Association for Computing Machinery},
+address = {New York, NY, USA},
+url = {https://doi.org/10.1145/3486611.3492226},
+doi = {10.1145/3486611.3492226},
+abstract = {We present the results of The CityLearn Challenge 2021. Five teams competed over six months to design the best multi-agent reinforcement learning agent for the energy management of a microgrid of nine buildings.},
+booktitle = {Proceedings of the 8th ACM International Conference on Systems for Energy-Efficient Buildings, Cities, and Transportation},
+pages = {218–219},
+numpages = {2},
+location = {Coimbra, Portugal},
+series = {BuildSys '21}
 }
\ No newline at end of file
diff --git a/examples/citylearn_ccai_tutorial.ipynb b/examples/citylearn_ccai_tutorial.ipynb
new file mode 100644
index 000000000..b7a4442b0
--- /dev/null
+++ b/examples/citylearn_ccai_tutorial.ipynb
@@ -0,0 +1,1647 @@
+{
+  "cells": [
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "colab_type": "text",
+        "id": "view-in-github"
+      },
+      "source": [
+        "<a href=\"https://colab.research.google.com/github/intelligent-environments-lab/CityLearn/blob/master/examples/citylearn_ccai_tutorial.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 1,
+      "metadata": {
+        "id": "dzeHYa5GCxN7"
+      },
+      "outputs": [],
+      "source": [
+        "# MIT License\n",
+        "#\n",
+        "#@title Copyright (c) 2021 CCAI Community Authors { display-mode: \"form\" }\n",
+        "#\n",
+        "# Permission is hereby granted, free of charge, to any person obtaining a\n",
+        "# copy of this software and associated documentation files (the \"Software\"),\n",
+        "# to deal in the Software without restriction, including without limitation\n",
+        "# the rights to use, copy, modify, merge, publish, distribute, sublicense,\n",
+        "# and/or sell copies of the Software, and to permit persons to whom the\n",
+        "# Software is furnished to do so, subject to the following conditions:\n",
+        "#\n",
+        "# The above copyright notice and this permission notice shall be included in\n",
+        "# all copies or substantial portions of the Software.\n",
+        "#\n",
+        "# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n",
+        "# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n",
+        "# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n",
+        "# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n",
+        "# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n",
+        "# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n",
+        "# DEALINGS IN THE SOFTWARE."
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "13i7KQ9t-CV8"
+      },
+      "source": [
+        "# CityLearn Tutorial\n",
+        "---\n",
+        "\n",
+        "Authors:\n",
+        "*   [Kingsley Nweye](https://kingsleynweye.com), The University of Texas at Austin, [nweye@utexas.edu](mailto:nweye@utexas.edu)\n",
+        "*   [Allen Wu](https://www.linkedin.com/in/allenjeffreywu), The University of Texas at Austin, [allen.wu@utexas.edu](mailto:allen.wu@utexas.edu)\n",
+        "*   [Zoltan Nagy](https://www.caee.utexas.edu/people/faculty/faculty-directory/nagy), The University of Texas as Austin, [nagy@utexas.edu](mailto:nagy@utexas.edu)\n",
+        "\n",
+        "This tutorial notebook will help users get acquainted with the [CityLearn](https://www.citylearn.net) OpenAI Gym environment, developed for the easy implementation and benchmarking of control algorithms, e.g., rule-based control, model predictive control (MPC) or deep reinforcement learning (RL) in the demand response, building energy and grid-interactive community domain. By the end of the tutorial, participants will learn about intelligent control algorithms to provide energy flexibility, and acquire familiarity with CityLearn environment for extended use in personal projects."
+      ]
+    },
+    {
+      "attachments": {},
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "yNv0ANr5WcD_"
+      },
+      "source": [
+        "# Table of Contents\n",
+        "---\n",
+        "\n",
+        "> Coming soon 🙂\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "QH81wjfsJsv1"
+      },
+      "source": [
+        "<a name=\"overview\"></a>\n",
+        "# Overview\n",
+        "---\n",
+        "\n",
+        "<!-- In this section, kindly provide a summary of the main contributions of the tutorial notebook. Note that the tutorial should introduce or demonstrate the use of a method, dataset, tool, or technology to address a problem related to climate change. Be clear on the goal of the tutorial and the expected learning outcomes for the users. \n",
+        "\n",
+        "Example contributions include:\n",
+        "*   Leveraging existing libraries, packages, or frameworks to tackle a real-world climate-related challenge using machine learning.\n",
+        "*   Introducing a new climate-related benchmark dataset, applying machine learning methods, and presenting baseline results.\n",
+        "*   Developing new tools or libraries and demonstrating its application to a specific problem in climate change. -->\n",
+        "This workshop will consist of a presentation of the underlying background for CityLearn and its relevance to climate change mitigation. We provide a walk-through tutorial on how to set up and interact with the simulation environment using a realworld dataset from a grid-interactive residential community in Fontana, California. \n",
+        "\n",
+        "This notebook will provide a guide on how to use a simple rule-based control architecture and advanced reinforcement control algorithms to manage batteries in each home in the community with a goal of minizing the cost of purchased electricity, carbon emissions associated with consuming electricity from the grid, as well as improve on ther grid-level KPIs e.g. peak demand, load factor and ramping that are critical for the long-term sustainability of decarbonizing existing power generation sources on the supply side and electrification of buildings on the demand side.\n",
+        "\n",
+        "## Contributions\n",
+        "The primary contribution of the CityLearn Workshop is to introduce the software tool CityLearn to model and benchmark simple and advanced control strategies in grid-interactive smart communities, e.g., demand response and load shaping in buildings. The secondary contribution is to bring awareness to datasets for controls research that are provided within the CityLearn environment.\n",
+        "\n",
+        "## Learning Outcomes\n",
+        "The primary learning outcome for participants is to gain familiarity with CityLearn environment, its API and dataset offerings for extended use in personal projects. Other secondary outcomes are to:\n",
+        "\n",
+        "1. Understand how electrification, distributed energy resources e.g. battery, PV and smart controls provide a promising pathway for decarbonization and energy flexibility.\n",
+        "2. Learn how to design and optimize their own expert RBC for battery management using readily available knowledge of a building's energy use.\n",
+        "3. Identify the challenges surrounding the generalizability of expert systems e.g. RBC and how RL can mitigate these challenges.\n",
+        "4. Optimize their own RL tabular Q-Learning algorithm.\n",
+        "5. Evaluate the performance of standard model-free deep RL algorithms in optimizing KPIs that are targeted at quantifying the have learn about the \n",
+        "6. Learn the effect of different control algorithms in improving KPIs\n",
+        "\n"
+      ]
+    },
+    {
+      "attachments": {},
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "99jkSa_KmrDH"
+      },
+      "source": [
+        "<a name=\"climate-impact\"></a>\n",
+        "# Climate Impact\n",
+        "---\n",
+        "\n",
+        "<!-- In this section, describe in more detail how the methods or tools introduced in this tutorial could have pathways to positive impact regarding climate change. The problem should be clearly explained and motivated for non-experts. Feel free to discuss relevant research works, real-world examples of successful applications, and/or climate startups or organizations that are making an impact using similar methods or tools to address climate-related challenges. \n",
+        "\n",
+        "We also ask that authors emphasize the real-world impact of the methods, specifically: Who will be using the models/outputs and how will they be used? What decisions will be made based on these models? How will they impact existing systems/the environment/affected communities on the ground? -->\n",
+        "\n",
+        "The residential building stock in the United States is responsible for 21% ([Energy Information Administration, 2022](https://www.eia.gov/totalenergy/data/monthly/archive/00352211.pdf)) of energy consumption and 20% of greenhouse gas emissions ([Goldenstein et al., 2020](https://doi.org/10.1073/pnas.1922205117)). Electrification of end-uses, as well as decarbonizing the electrical grid through renewable energy sources such as solar and wind, constitutes the pathway to zero-emission buildings ([Leibowicz et al., 2018](https://doi.org/10.1016/j.apenergy.2018.09.046)). However, electrifying fossil-fueled building end-uses in fact could increase the demand on the existing electricity power grid and if power generation sources are not decarbonized at a similar rate as electrification happening on the demand side, will in fact result in adverse effects of increased green house gas emissions! Also, new grid infrastructure constitutes a significant capital investment and requires extensive planning and execution.\n",
+        "\n",
+        "Through distributed energy resources (DER), buildings can provide flexibility services to the existing grid infrastructure in demand response events. On-site solar photovoltaic systems can also reduce dependence on the grid through self-generation. Yet, the intermittency of renewable energy sources introduces additional challenges of grid instability due to a mismatch between electricity generation (supply) and demand ([Suberu et al., 2014](https://doi.org/10.1016/j.rser.2014.04.009)). \n",
+        "\n",
+        "<!-- The California so-called duck-curve is a good illustration of the mismatch in renewable supply and demand, and shows effect of increased PV penetration that may lead to high ramp rate after the sun sets in the evening which the electric power grid may bit be able to handle ([Denholm et al., 2008](https://www.nrel.gov/docs/fy08osti/42305.pdf)). -->\n",
+        "\n",
+        "Advanced control algorithms including model-predictive control (MPC) and reinforcement learning control (RLC) are thus, critical to properly manage DERs and even out the supply-demand imbalance brought about by renewable energy sources. However, a major challenge for the adoption of reinforcement learning in grid-interactive efficient buildings is the ability to benchmark control algorithm performance to accelerate their deployment on live systems.\n",
+        "\n",
+        "CityLearn ([Vazquez-Canteli et al., 2019](https://doi.org/10.1145/3360322.3360998)) provides a platform for such benchmarking tasks. The different stakeholder in the energy and real-estate market including, utility companies, grid-operators, home-owners and policy makers can utilize CityLearn to make decisions on what control policies are viable and provide the best performance as more controllable distributed energy resources become available.\n",
+        "\n",
+        "<!-- Thus, flexible however, these services have to be properly coordinated in execution. When all the electrical loads react simultaneously to the same signals adverse effects can occur such that aggregated electricity peaks are shifted rather than shaved ([Gelazanskas et al., 2014](https://doi.org/10.1016/j.scs.2013.11.001)). Therefore, there is a need for more efficient and effective ways of coordinating the response of building energy systems. -->\n",
+        "\n",
+        "\n",
+        "<!-- Advanced control systems such as model predictive control (MPC) ([Drgona et al., 2020](https://doi.org/10.1016/j.arcontrol.2020.09.001)) and reinforcement learning control (RLC) ([Wang et al., 2020](https://doi.org/10.1016/j.apenergy.2020.115036)) can be a major driver for demand response by automating the operation of energy systems, while adapting to individual characteristics of occupants and buildings. However, a major challenge for the adoption of reinforcement learning in grid-interactive efficient buildings is the ability to benchmark control algorithm performance.  -->\n",
+        "\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "o5sbM_JPpdMR"
+      },
+      "source": [
+        "<a name=\"target-audience\"></a>\n",
+        "# Target Audience\n",
+        "---\n",
+        "\n",
+        "<!-- Kindly specify the intended target audience for this tutorial notebook. Please be as specific as possible, and feel free to elaborate on their expected background. \n",
+        "\n",
+        "Examples:\n",
+        "\n",
+        "*   Climate scientists seeking to explore ML tools, technologies, and resources to tackle a domain-specific problem in climate change. \n",
+        "*   Data scientists with prior background in deep learning looking for concrete examples on how to tackle climate change using AI. -->\n",
+        "\n",
+        "The target audience for this tutorial includes the following:\n",
+        " - Academic, private and commercial researchers or professionals that are interested in sustainable AI-related pathways to electrification and building decarbonization.\n",
+        " - AI enthusiasts at any level of expertise whom are drawn to solving control problems or are interested in learning about a new RL environment that deviates from popularized simpler problems to real-world problems with urgency like climate change mitigation and decarbonization of the power infrastructure and building end-uses."
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "gQgijl46pYzn"
+      },
+      "source": [
+        "<a name=\"prereqs\"></a>\n",
+        "# Prerequisites\n",
+        "---\n",
+        "\n",
+        "> ⚠️ **NOTE**:\n",
+        "> This CityLearn tutorial has a fairly low entry level and participants do not need to have prior experience in RL nor use of the OpenAI-Gym environment standard.\n",
+        "\n",
+        "The [BOPTEST tutorial](https://colab.research.google.com/drive/1WeA_3PQeySba0MMRRte_oZTF7ptlP_Ra?usp=sharing#scrollTo=Ae18iXNKWV5I) provides a very good overview on some of the topics and methods that we will discuss and apply in this tutorial. While we will briefly provide background on some of these topics and methods, it is encouragedm but not required, that participant in this tutorial first read up the following sections in the [BOPTEST tutorial](https://colab.research.google.com/drive/1WeA_3PQeySba0MMRRte_oZTF7ptlP_Ra?usp=sharing#scrollTo=Ae18iXNKWV5I):\n",
+        "\n",
+        "- [Introduction to Reinforcement Learning](https://colab.research.google.com/drive/1WeA_3PQeySba0MMRRte_oZTF7ptlP_Ra#scrollTo=Fas232CyMX6_)\n",
+        "- [The OpenAI-Gym Standard](https://colab.research.google.com/drive/1WeA_3PQeySba0MMRRte_oZTF7ptlP_Ra#scrollTo=7YnuNAQdM_L2)\n",
+        "\n",
+        "Other prerequisites that are technical in nature are:\n",
+        "- Beginner knowledge in Python.\n",
+        "- Some familiarity with the Jupyter Notebook environment."
+      ]
+    },
+    {
+      "attachments": {},
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "LCeaK9CEngV5"
+      },
+      "source": [
+        "<a name=\"background\"></a>\n",
+        "# Background\n",
+        "---\n",
+        "\n",
+        "## Grid-Interactive Buildings and Energy Flexibility\n",
+        "\n",
+        "As buildings become electrified and the penetration of renewable energy source increases, a smart approach to manage and control building loads to ensure that these developments do not bring about grid insecurity is needed. The Department of Energy, introduced the Grid-Interactive Efficient Building (GEB) Initiative to promote the integration of distributed energy resources such as PVs, EVs, active and passive storage systems in buildings that can provide the grid with energy flexibility. A GEB is defined by [[Neukomm et al., 2019](https://www1.eere.energy.gov/buildings/pdfs/75470.pdf)] as:\n",
+        "\n",
+        "> [...] an energy-efficient building that uses smart technologies and on-site DERs to provide demand flexibility while co-optimizing for energy cost, grid services, and occupant needs and preferences, in a continuous and integrated way.\n",
+        "\n",
+        "GEBs are characterized by their energy efficiency, interconnectivity, smartness and energy flexibility as highlighted in the figure below:\n",
+        "\n",
+        "<figure class=\"image\">\n",
+        "  <img src=\"https://github.com/intelligent-environments-lab/CityLearn/blob/master/assets/images/grid_interactive_building-neukomm.png?raw=true\"  width=\"400\" alt=\"The characteristics of a Grid-Interactive Efficient Building (GEB)\">\n",
+        "  <figcaption>Figure: The characteristics of a Grid-Interactive Efficient Building (GEB) (<a href=\"https://www1.eere.energy.gov/buildings/pdfs/75470.pdf\">Neukomm et al., 2019</a>).</figcaption>\n",
+        "</figure>\n",
+        "\n",
+        "The energy efficiency of GEBs by means of tighter envelopes and high-quality construction that minimize heat losses lead to reduced loads without the need to make changes to a building's function or for changes in occupan preferences. PV adoption in GEBs provides self-generation capabilities which reduce the net load that will otherwise all be satisfied by the electric grid alone. To then solve the duck-curve problem that is introduced by renewable adoption GEBs are able to shed and/or shift their loads. \n",
+        "\n",
+        "The figure below shows the changes in a building profile as it becomes more efficient, incorporates self generation and provides load shedding and shifting grid services.\n",
+        "\n",
+        "<figure class=\"image\">\n",
+        "  <img src=\"https://github.com/intelligent-environments-lab/CityLearn/blob/master/assets/images/grid_interactive_building_profile-neukomm.png?raw=true\"  width=\"400\" alt=\"GEB load profiles\">\n",
+        "  <figcaption>Figure: GEB load profiles (<a href=\"https://www1.eere.energy.gov/buildings/pdfs/75470.pdf\">Neukomm et al., 2019</a>).</figcaption>\n",
+        "</figure>\n",
+        "\n",
+        "Load shedding and shifting services could be achieved through control of storage systems and other distributed energy resources (DER). These smart controls may adapt to changes in occupant behaviour, weather conditions or respond to external signals e.g. temperature set-point as in the case of demand-response, while maintaining energy efficiency and without causing discomfort to occupants. This adaptability is often referred to as energy flexibility of a building [CITE].\n",
+        "\n",
+        "Expert systems e.g. rule-based controller (RBC) are commonly used in to control energy systems. They make use of simple if-else statements in their decision making process. Advanced control systems such as model predictive control (MPC) ([Drgona et al., 2020](https://doi.org/10.1016/j.arcontrol.2020.09.001)) and reinforcement learning control (RLC) ([Wang et al., 2020](https://doi.org/10.1016/j.apenergy.2020.115036)) can be a major driver for executing grid services by automating the operation of energy systems, while adapting to individual characteristics of occupants and buildings. Comparatively, RBC and RLC are inexpensive to implement as they have a lower entry bar for domain knowledge of the systems to be controlled. RBC and RLC may perform sub-optimally compared to MPC as they are not modeled after the system under control. However, RL is a data-driven solution and as more training data become available, it achieves comparable performance as MPC. The greatest strength of RLC however, its ability to adapt to changes in the system of building it controls as the dynamics e.g. thermal, occupancy change. We provide more context on reinforcement learning in the following section.\n",
+        "\n",
+        "## Reinforcement Learning Control in the context of Grid-Interactive Efficient Buildings\n",
+        "\n",
+        "Here we provide a simplified desription of reinforcement learning in the context of GEBs without diving into its theory. For an wider overview of RL, refer to the [BOPTEST Tutorial Introduction to Reinforcement Learning](https://colab.research.google.com/drive/1WeA_3PQeySba0MMRRte_oZTF7ptlP_Ra#scrollTo=Fas232CyMX6_) and for a thorough introduction, refer to [Sutton and Barto, 2018](http://www.incompleteideas.net/book/the-book.html).\n",
+        "\n",
+        "<figure class=\"image\">\n",
+        "  <img src=\"https://github.com/intelligent-environments-lab/CityLearn/blob/master/assets/images/supervised_vs_unsupervised_vs_rl.png?raw=true\"  width=\"400\" alt=\"Overview of the three machine learning techniques.\">\n",
+        "  <figcaption>Figure: Overview of the three machine learning techniques (<a href=\"https://www.taylorfrancis.com/chapters/edit/10.4324/9781315142074-37/reinforcement-learning-intelligent-environments-zoltan-nagy-june-young-park-josé-ramón-vázquez-canteli\">Nagy et al., 2018</a>).</figcaption>\n",
+        "</figure>\n",
+        "\n",
+        "Machine learning techniques are generally characterized as either supervised and unsupervised learning. In supervised learning, the observations, otherwise called samples, and their response, otherwise called target are known. Supervised learning is further classified into regression and classification models where the former learns to predict a continuous variable and the latter learns to predict a discrete class. The supervised machine learning model must then learn the mapping of samples and targets by minimizing a loss function that evaluates the error between predicted targets and actual targets. An example of regression modelling in the context of GEBs is the prediction of a building's electricity consumption (target) when the the weather conditions e.g. dry-bulb temperature and relative humidity, as well as their associated timestamps (samples) are known. An example of a classification model in the context of GEBs is the prediction of if a binary variable such as if building is occupied or not (target) given the same samples as in the regression example. It so happens that these kinds of problems are common in the building energy domain where predicting of a buildings electricity consumption and occupancy can help with scheduling and occupant-centric control to balance efficiency and comfort.\n",
+        "\n",
+        "Unsupervised learning on the other hand differs from supervised learning in the sense that the associated targets for the samples are unknown but models can be used to find common patterns amongst samples. This is important especially in exploratory data analysis to draw preliminary conclusions about a new data set and also in situations where the class labels are unknown. An unsupervised model can then be used to infer data-driven class labels that opens on the discussion for new classification models. An example of such application in buildings is the classification of customer load profiles to determine and allocate appropriate tariff plans.\n",
+        "\n",
+        "Reinforcement learning (RL) is similar to both supervised and unsupervised learning such that it follows the same idea of learning from observations. However in contrast to supervised learning, there are no known labeled targets. Instead, a model (agent) influences the targets by acting in an environment that rewards actions that have desirable outcomes but penalizes those that lead to adverse outcomes. An example of RL in GEBs is the hourly charging/discharging of a battery (action) with the objective of minimizing the cummulative electricity consumption of a building over a control horizon e.g. a year, given the same sample variables in the supervised learning example (observations) in hourly time steps. These actions affect the hourly electricity consumption of the building (reward). RL is thought of as a trial an error approach because typically, the agent starts off with no prior knowledge of the environment it acts in but learns from experience to associate observations with actions that maximize its rewards. The association is called a control policy.\n",
+        "\n",
+        "<figure class=\"image\">\n",
+        "  <img src=\"https://github.com/intelligent-environments-lab/CityLearn/blob/master/assets/images/reinforcement_learning.png?raw=true\"  width=\"400\" alt=\"Basic structure of reinforcement learning.\">\n",
+        "  <figcaption>Figure: Basic structure of reinforcement learning (<a href=\"https://www.taylorfrancis.com/chapters/edit/10.4324/9781315142074-37/reinforcement-learning-intelligent-environments-zoltan-nagy-june-young-park-josé-ramón-vázquez-canteli\">Nagy et al., 2018</a>).</figcaption>\n",
+        "</figure>\n",
+        "\n",
+        "The experiential learning characteristic of RL is very promising for GEBs because it provides a scalable solution to controls as it can adapt to each building's unique conditions and occupant interactions that make up the observations. It also means that the agent need not have a building's dynamics model that can involve a level of complexity that is expensive to design for. [Vazquez-Canteli et al., 2019](https://doi.org/10.1016/j.apenergy.2018.11.002) provide a comprehensive overview of reinforcement learning in the built environment.\n",
+        "\n",
+        "<!-- - formalized trial and error with learning\n",
+        "- Refer to BOPTEST tutorial for more details.\n",
+        "- highlight difference from more familiar supervised learning and unsupervised learning (use figure from paper)\n",
+        "- the challenge of rl in buildings as a result of large state and action space.\n",
+        "- introduce DRL. -->\n",
+        "\n",
+        "## CityLearn\n",
+        "\n",
+        "[CityLearn](https://doi.org/10.1145/3360322.3360998) is an open source OpenAI Gym environment targeted at the easy implementation and benchmarking of simple and advanced control algorithms e.g. rule-based control (RBC) model predictive control (MPC) or deep reinforcement learning control (RLC). It has been utilized in demand response, energy management, voltage regulation and algorithm benchmarking applications (see [references](https://www.citylearn.net/#applications) in the official documention).\n",
+        "\n",
+        "<figure class=\"image\">\n",
+        "  <img src=\"https://github.com/intelligent-environments-lab/CityLearn/blob/master/assets/images/citylearn_systems.png?raw=true\"  width=\"400\" alt=\"An overview of the power sources, energy systems and end-uses in CityLearn v1.7.0 that is used in this tutorial.\">\n",
+        "  <figcaption>Figure: An overview of the power sources, energy systems and end-uses in CityLearn v1.7.0 that is used in this tutorial.</figcaption>\n",
+        "</figure>\n",
+        "\n",
+        "CityLearn includes simplified energy models of buildings and distributed energy resources (DER) including air-to-water heat pumps, electric heaters and batteries. A collection of buildings energy models make up a virtual district (a.k.a neighborhood or community). In each building, space cooling, space heating and domestic hot water end-use loads may be independently satisfied through air-to-water heat pumps. Alternatively, space heating and domestic hot water loads can be satisfied through electric heaters.\n",
+        "\n",
+        "Buildings may have a combination of thermal storage tanks and batteries to store energy that may be used at peak, high carbon intensity or expensive periods to meet space cooling, space heating, domestic hot water and non-shiftable (plug) loads. These storage devices are charged by the electric device (heat pump or electric heater) that satisfies the end-use the stored energy is for. All electric devices as well as plug loads consume electricity from the main grid. Photovoltaic (PV) arrays may be included in the buildings to offset all or part of the electricity consumption from the grid by allowing the buildings to generate their own electricity.\n",
+        "\n",
+        "An RBC, RL or MPC agent(s) control the thermal storage tanks and batteries by determining how much energy to store or release at any given time. CityLearn guarantees that, at any time, the space cooling, space heating, domestic hot water and non-shiftable building loads are satisfied regardless of the actions of the controller by utilizing pre-computed or pre-measured demand of the buildings. An internal backup controller guarantees that the electric devices prioritize satisfying the building loads before storing energy in the storage devices. The backup controller also guarantees that the storage devices do not discharge more energy than is needed to meet the unsatisfied building loads.\n",
+        "\n",
+        "CityLearn has been used in the 2020-2022 annual The CityLearn Challenge. The challenge is an opportunity to compete in investigating the potential of AI and distributed control systems to tackle multiple problems within the built-environment domain. It attracts a multidisciplinary participation audience including researchers, industry experts, sustainability enthusiasts and AI hobbyists as a means of crowd-sourcing solutions to these multiple problems.\n",
+        "\n",
+        "### CityLearn Aternatives: Similarities and Differences\n",
+        "\n",
+        "> Coming soon 🙂\n",
+        "\n",
+        "## Other References\n",
+        " - [CityLearn Documentation](https://www.citylearn.net/index.html)\n",
+        " - [CityLearn Related References](https://www.citylearn.net/references.html)"
+      ]
+    },
+    {
+      "attachments": {},
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "rSRCNgYzUwaf"
+      },
+      "source": [
+        "<a name=\"software-requirements\"></a>\n",
+        "# Software Requirements\n",
+        "---\n",
+        "\n",
+        "<!-- Include in this section the software requirements, setup instructions, and library imports. Kindly specify the Python version at the time of submission along with the specific package versions upon installing (e.g. using pip). -->\n",
+        "\n",
+        "The Python version at the time of this submission in Colab is ``Python 3.8.10``. The Python version of this environment is:"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 2,
+      "metadata": {},
+      "outputs": [
+        {
+          "name": "stdout",
+          "output_type": "stream",
+          "text": [
+            "Python 3.7.7\n"
+          ]
+        }
+      ],
+      "source": [
+        "!python --version"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "The following Python packages are required:"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 3,
+      "metadata": {
+        "id": "jObV5LtDk0Vm"
+      },
+      "outputs": [
+        {
+          "name": "stdout",
+          "output_type": "stream",
+          "text": [
+            "Requirement already satisfied: CityLearn==1.7.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (1.7.0)\n",
+            "Requirement already satisfied: simplejson in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from CityLearn==1.7.0) (3.18.3)\n",
+            "Requirement already satisfied: numpy==1.21.6 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from CityLearn==1.7.0) (1.21.6)\n",
+            "Requirement already satisfied: pandas==1.3.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from CityLearn==1.7.0) (1.3.5)\n",
+            "Requirement already satisfied: scikit-learn==1.0.2 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from CityLearn==1.7.0) (1.0.2)\n",
+            "Collecting gym==0.25.1 (from CityLearn==1.7.0)\n",
+            "Requirement already satisfied: torchvision==0.13.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from CityLearn==1.7.0) (0.13.0)\n",
+            "Requirement already satisfied: torch==1.12.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from CityLearn==1.7.0) (1.12.0)\n",
+            "Requirement already satisfied: python-dateutil>=2.7.3 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from pandas==1.3.5->CityLearn==1.7.0) (2.8.2)\n",
+            "Requirement already satisfied: pytz>=2017.3 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from pandas==1.3.5->CityLearn==1.7.0) (2022.7.1)\n",
+            "Requirement already satisfied: joblib>=0.11 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from scikit-learn==1.0.2->CityLearn==1.7.0) (1.2.0)\n",
+            "Requirement already satisfied: scipy>=1.1.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from scikit-learn==1.0.2->CityLearn==1.7.0) (1.7.3)\n",
+            "Requirement already satisfied: threadpoolctl>=2.0.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from scikit-learn==1.0.2->CityLearn==1.7.0) (3.1.0)\n",
+            "Requirement already satisfied: cloudpickle>=1.2.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from gym==0.25.1->CityLearn==1.7.0) (2.2.1)\n",
+            "Requirement already satisfied: gym-notices>=0.0.4 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from gym==0.25.1->CityLearn==1.7.0) (0.0.8)\n",
+            "Requirement already satisfied: importlib-metadata>=4.8.0; python_version < \"3.10\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from gym==0.25.1->CityLearn==1.7.0) (4.13.0)\n",
+            "Requirement already satisfied: typing-extensions in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from torchvision==0.13.0->CityLearn==1.7.0) (4.5.0)\n",
+            "Requirement already satisfied: requests in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from torchvision==0.13.0->CityLearn==1.7.0) (2.28.2)\n",
+            "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from torchvision==0.13.0->CityLearn==1.7.0) (9.4.0)\n",
+            "Requirement already satisfied: six>=1.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from python-dateutil>=2.7.3->pandas==1.3.5->CityLearn==1.7.0) (1.16.0)\n",
+            "Requirement already satisfied: zipp>=0.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from importlib-metadata>=4.8.0; python_version < \"3.10\"->gym==0.25.1->CityLearn==1.7.0) (3.14.0)\n",
+            "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from requests->torchvision==0.13.0->CityLearn==1.7.0) (1.26.14)\n",
+            "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from requests->torchvision==0.13.0->CityLearn==1.7.0) (3.0.1)\n",
+            "Requirement already satisfied: idna<4,>=2.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from requests->torchvision==0.13.0->CityLearn==1.7.0) (3.4)\n",
+            "Requirement already satisfied: certifi>=2017.4.17 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from requests->torchvision==0.13.0->CityLearn==1.7.0) (2022.12.7)\n",
+            "\u001b[31mERROR: stable-baselines3 1.7.0 has requirement gym==0.21, but you'll have gym 0.25.1 which is incompatible.\u001b[0m\n",
+            "Installing collected packages: gym\n",
+            "  Found existing installation: gym 0.21.0\n",
+            "    Uninstalling gym-0.21.0:\n",
+            "      Successfully uninstalled gym-0.21.0\n",
+            "Successfully installed gym-0.25.1\n",
+            "\u001b[33mWARNING: You are using pip version 19.2.3, however version 23.0.1 is available.\n",
+            "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n",
+            "Requirement already satisfied: ipywidgets==7.7.2 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (7.7.2)\n",
+            "Requirement already satisfied: widgetsnbextension~=3.6.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipywidgets==7.7.2) (3.6.2)\n",
+            "Requirement already satisfied: jupyterlab-widgets<3,>=1.0.0; python_version >= \"3.6\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipywidgets==7.7.2) (1.1.2)\n",
+            "Requirement already satisfied: ipython>=4.0.0; python_version >= \"3.3\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipywidgets==7.7.2) (7.34.0)\n",
+            "Requirement already satisfied: traitlets>=4.3.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipywidgets==7.7.2) (5.9.0)\n",
+            "Requirement already satisfied: ipykernel>=4.5.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipywidgets==7.7.2) (6.16.2)\n",
+            "Requirement already satisfied: ipython-genutils~=0.2.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipywidgets==7.7.2) (0.2.0)\n",
+            "Requirement already satisfied: notebook>=4.4.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (6.5.2)\n",
+            "Requirement already satisfied: pickleshare in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (0.7.5)\n",
+            "Requirement already satisfied: decorator in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (5.1.1)\n",
+            "Requirement already satisfied: jedi>=0.16 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (0.18.2)\n",
+            "Requirement already satisfied: pygments in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (2.14.0)\n",
+            "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (3.0.37)\n",
+            "Requirement already satisfied: setuptools>=18.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (41.2.0)\n",
+            "Requirement already satisfied: appnope; sys_platform == \"darwin\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (0.1.3)\n",
+            "Requirement already satisfied: matplotlib-inline in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (0.1.6)\n",
+            "Requirement already satisfied: backcall in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (0.2.0)\n",
+            "Requirement already satisfied: pexpect>4.3; sys_platform != \"win32\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (4.8.0)\n",
+            "Requirement already satisfied: pyzmq>=17 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets==7.7.2) (25.0.0)\n",
+            "Requirement already satisfied: debugpy>=1.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets==7.7.2) (1.6.6)\n",
+            "Requirement already satisfied: tornado>=6.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets==7.7.2) (6.2)\n",
+            "Requirement already satisfied: jupyter-client>=6.1.12 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets==7.7.2) (7.4.9)\n",
+            "Requirement already satisfied: nest-asyncio in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets==7.7.2) (1.5.6)\n",
+            "Requirement already satisfied: packaging in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets==7.7.2) (23.0)\n",
+            "Requirement already satisfied: psutil in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets==7.7.2) (5.9.4)\n",
+            "Requirement already satisfied: nbformat in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (5.7.3)\n",
+            "Requirement already satisfied: jinja2 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (3.1.2)\n",
+            "Requirement already satisfied: terminado>=0.8.3 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.17.1)\n",
+            "Requirement already satisfied: Send2Trash>=1.8.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (1.8.0)\n",
+            "Requirement already satisfied: nbclassic>=0.4.7 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.5.2)\n",
+            "Requirement already satisfied: prometheus-client in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.16.0)\n",
+            "Requirement already satisfied: nbconvert>=5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (7.2.9)\n",
+            "Requirement already satisfied: jupyter-core>=4.6.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (4.12.0)\n",
+            "Requirement already satisfied: argon2-cffi in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (21.3.0)\n",
+            "Requirement already satisfied: parso<0.9.0,>=0.8.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jedi>=0.16->ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (0.8.3)\n",
+            "Requirement already satisfied: wcwidth in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (0.2.6)\n",
+            "Requirement already satisfied: ptyprocess>=0.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from pexpect>4.3; sys_platform != \"win32\"->ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets==7.7.2) (0.7.0)\n",
+            "Requirement already satisfied: python-dateutil>=2.8.2 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets==7.7.2) (2.8.2)\n",
+            "Requirement already satisfied: entrypoints in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets==7.7.2) (0.4)\n",
+            "Requirement already satisfied: jsonschema>=2.6 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (4.17.3)\n",
+            "Requirement already satisfied: importlib-metadata>=3.6; python_version < \"3.8\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (4.13.0)\n",
+            "Requirement already satisfied: fastjsonschema in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (2.16.2)\n",
+            "Requirement already satisfied: MarkupSafe>=2.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jinja2->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (2.1.2)\n",
+            "Requirement already satisfied: jupyter-server>=1.8 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (1.23.6)\n",
+            "Requirement already satisfied: notebook-shim>=0.1.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.2.2)\n",
+            "Requirement already satisfied: pandocfilters>=1.4.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (1.5.0)\n",
+            "Requirement already satisfied: mistune<3,>=2.0.3 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (2.0.5)\n",
+            "Requirement already satisfied: jupyterlab-pygments in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.2.2)\n",
+            "Requirement already satisfied: nbclient>=0.5.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.7.2)\n",
+            "Requirement already satisfied: bleach in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (6.0.0)\n",
+            "Requirement already satisfied: defusedxml in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.7.1)\n",
+            "Requirement already satisfied: tinycss2 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (1.2.1)\n",
+            "Requirement already satisfied: beautifulsoup4 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (4.11.2)\n",
+            "Requirement already satisfied: argon2-cffi-bindings in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (21.2.0)\n",
+            "Requirement already satisfied: typing-extensions; python_version < \"3.8\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (4.5.0)\n",
+            "Requirement already satisfied: six>=1.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from python-dateutil>=2.8.2->jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets==7.7.2) (1.16.0)\n",
+            "Requirement already satisfied: attrs>=17.4.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (22.2.0)\n",
+            "Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.19.3)\n",
+            "Requirement already satisfied: pkgutil-resolve-name>=1.3.10; python_version < \"3.9\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (1.3.10)\n",
+            "Requirement already satisfied: importlib-resources>=1.4.0; python_version < \"3.9\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (5.12.0)\n",
+            "Requirement already satisfied: zipp>=0.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from importlib-metadata>=3.6; python_version < \"3.8\"->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (3.14.0)\n",
+            "Requirement already satisfied: websocket-client in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (1.5.1)\n",
+            "Requirement already satisfied: anyio<4,>=3.1.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (3.6.2)\n",
+            "Requirement already satisfied: webencodings in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from bleach->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (0.5.1)\n",
+            "Requirement already satisfied: soupsieve>1.2 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (2.4)\n",
+            "Requirement already satisfied: cffi>=1.0.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (1.15.1)\n",
+            "Requirement already satisfied: sniffio>=1.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from anyio<4,>=3.1.0->jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (1.3.0)\n",
+            "Requirement already satisfied: idna>=2.8 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from anyio<4,>=3.1.0->jupyter-server>=1.8->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (3.4)\n",
+            "Requirement already satisfied: pycparser in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.2) (2.21)\n",
+            "\u001b[33mWARNING: You are using pip version 19.2.3, however version 23.0.1 is available.\n",
+            "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n",
+            "Requirement already satisfied: matplotlib==3.5.3 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (3.5.3)\n",
+            "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib==3.5.3) (1.4.4)\n",
+            "Requirement already satisfied: python-dateutil>=2.7 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib==3.5.3) (2.8.2)\n",
+            "Requirement already satisfied: pyparsing>=2.2.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib==3.5.3) (3.0.9)\n",
+            "Requirement already satisfied: packaging>=20.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib==3.5.3) (23.0)\n",
+            "Requirement already satisfied: pillow>=6.2.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib==3.5.3) (9.4.0)\n",
+            "Requirement already satisfied: numpy>=1.17 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib==3.5.3) (1.21.6)\n",
+            "Requirement already satisfied: fonttools>=4.22.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib==3.5.3) (4.38.0)\n",
+            "Requirement already satisfied: cycler>=0.10 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib==3.5.3) (0.11.0)\n",
+            "Requirement already satisfied: typing-extensions; python_version < \"3.8\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib==3.5.3) (4.5.0)\n",
+            "Requirement already satisfied: six>=1.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from python-dateutil>=2.7->matplotlib==3.5.3) (1.16.0)\n",
+            "\u001b[33mWARNING: You are using pip version 19.2.3, however version 23.0.1 is available.\n",
+            "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n",
+            "Requirement already satisfied: stable-baselines3==1.7.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (1.7.0)\n",
+            "Collecting gym==0.21 (from stable-baselines3==1.7.0)\n",
+            "  Using cached https://files.pythonhosted.org/packages/4b/48/920cea66177b865663fde5a9390a59de0ef3b642ad98106ac1d8717d7005/gym-0.21.0.tar.gz\n",
+            "Requirement already satisfied: typing-extensions<5,>=4.0; python_version < \"3.8.0\" in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from stable-baselines3==1.7.0) (4.5.0)\n",
+            "Requirement already satisfied: matplotlib in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from stable-baselines3==1.7.0) (3.5.3)\n",
+            "Requirement already satisfied: numpy in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from stable-baselines3==1.7.0) (1.21.6)\n",
+            "Requirement already satisfied: pandas in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from stable-baselines3==1.7.0) (1.3.5)\n",
+            "Requirement already satisfied: torch>=1.11 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from stable-baselines3==1.7.0) (1.12.0)\n",
+            "Requirement already satisfied: cloudpickle in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from stable-baselines3==1.7.0) (2.2.1)\n",
+            "Requirement already satisfied: importlib-metadata~=4.13 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from stable-baselines3==1.7.0) (4.13.0)\n",
+            "Requirement already satisfied: cycler>=0.10 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib->stable-baselines3==1.7.0) (0.11.0)\n",
+            "Requirement already satisfied: packaging>=20.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib->stable-baselines3==1.7.0) (23.0)\n",
+            "Requirement already satisfied: pillow>=6.2.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib->stable-baselines3==1.7.0) (9.4.0)\n",
+            "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib->stable-baselines3==1.7.0) (1.4.4)\n",
+            "Requirement already satisfied: python-dateutil>=2.7 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib->stable-baselines3==1.7.0) (2.8.2)\n",
+            "Requirement already satisfied: fonttools>=4.22.0 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib->stable-baselines3==1.7.0) (4.38.0)\n",
+            "Requirement already satisfied: pyparsing>=2.2.1 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from matplotlib->stable-baselines3==1.7.0) (3.0.9)\n",
+            "Requirement already satisfied: pytz>=2017.3 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from pandas->stable-baselines3==1.7.0) (2022.7.1)\n",
+            "Requirement already satisfied: zipp>=0.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from importlib-metadata~=4.13->stable-baselines3==1.7.0) (3.14.0)\n",
+            "Requirement already satisfied: six>=1.5 in /Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/examples_env/lib/python3.7/site-packages (from python-dateutil>=2.7->matplotlib->stable-baselines3==1.7.0) (1.16.0)\n",
+            "\u001b[31mERROR: citylearn 1.7.0 has requirement gym==0.25.1, but you'll have gym 0.21.0 which is incompatible.\u001b[0m\n",
+            "Installing collected packages: gym\n",
+            "  Found existing installation: gym 0.25.1\n",
+            "    Uninstalling gym-0.25.1:\n",
+            "      Successfully uninstalled gym-0.25.1\n",
+            "  Running setup.py install for gym ... \u001b[?25ldone\n",
+            "\u001b[?25hSuccessfully installed gym-0.21.0\n",
+            "\u001b[33mWARNING: You are using pip version 19.2.3, however version 23.0.1 is available.\n",
+            "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n"
+          ]
+        }
+      ],
+      "source": [
+        "# Uncomment line 2 to see progress of installed packages\n",
+        "# %%capture\n",
+        "\n",
+        "# The environment we will be working with\n",
+        "!pip install CityLearn==1.7.0\n",
+        "\n",
+        "# For participant interactions (buttons)\n",
+        "!pip install ipywidgets==7.7.2\n",
+        "\n",
+        "# To generate static figures\n",
+        "!pip install matplotlib==3.5.3\n",
+        "\n",
+        "# Provide standard RL algorithms\n",
+        "!pip install stable-baselines3==1.7.0"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "wEW_ldpKOXDA"
+      },
+      "source": [
+        "We can now import the relevant modules, classes and functions for the remainder of the tutorial:"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 4,
+      "metadata": {
+        "id": "xVzk4V7qUu2R"
+      },
+      "outputs": [],
+      "source": [
+        "# type hinting\n",
+        "from typing import List\n",
+        "from gym import spaces\n",
+        "\n",
+        "# Data visualization\n",
+        "import matplotlib.pyplot as plt\n",
+        "import matplotlib.ticker as ticker\n",
+        "\n",
+        "# User interaction\n",
+        "from IPython.display import clear_output\n",
+        "from ipywidgets import Button, Checkbox, FloatSlider, FloatText, HBox, IntProgress, ToggleButton\n",
+        "\n",
+        "# Data manipulation\n",
+        "import math\n",
+        "import numpy as np\n",
+        "import pandas as pd\n",
+        "import random\n",
+        "\n",
+        "# CityLearn\n",
+        "from citylearn.citylearn import CityLearnEnv, StableBaselines3Wrapper\n",
+        "from citylearn.data import DataSet\n",
+        "from citylearn.preprocessing import Normalize, OnehotEncoding, PeriodicNormalization\n",
+        "\n",
+        "# baseline RL algorithms\n",
+        "from stable_baselines3 import SAC"
+      ]
+    },
+    {
+      "attachments": {},
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "jXoiLncsU3pe"
+      },
+      "source": [
+        "<a name=\"data-description\"></a>\n",
+        "# Data Description\n",
+        "\n",
+        "\n",
+        "In this tutorial, we will make use of the [CityLearn Challenge 2022 dataset](https://doi.org/10.18738/T8/0YLJ6Q).\n",
+        "\n",
+        "<!-- In this section, kindly provide a brief description of the dataset that you will use in this tutorial. Specify information such as the data type or file format (e.g. text, image, video, tabular), size, spatial resolution, temporal resolution, labels or categories, etc. If you are introducing a new dataset, feel free to include additional information (e.g. field survey sampling methods, dataset annotation efforts, etc.) or provide external links and resources that discuss the specific details of the dataset. -->\n",
+        " "
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "PoF-BxSM5Jkc"
+      },
+      "source": [
+        "## Data Download\n",
+        "Provide instructions on how to retrieve the necessary data. \n",
+        "\n",
+        "This may include bash scripts, Python scripts, or other means of downloading the data."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 5,
+      "metadata": {
+        "id": "Qh5FKi6Nopbr"
+      },
+      "outputs": [],
+      "source": [
+        "dataset_name = 'citylearn_challenge_2022_phase_1'\n",
+        "schema = DataSet.get_schema(dataset_name)\n",
+        "schema['central_agent'] = True"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "bSt6h_Q-oqjK"
+      },
+      "source": [
+        "## Data Preprocessing\n",
+        "Additionally, you can include any data preprocessing steps and exploratory data analyses (e.g. visualize data distributions, impute missing values, etc.) in this section to allow the users to better understand the dataset. \n",
+        "\n",
+        "In this section, you might also want to describe the different input and output variables, the train/val/test splits, and any data transformations."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 6,
+      "metadata": {
+        "id": "0aBJ5aLZosk-"
+      },
+      "outputs": [],
+      "source": [
+        "# Insert data pre-processing and exploratory data analysis\n",
+        "# code here. Feel free to break this up into several code\n",
+        "# cells, interleaved with explanatory text."
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "qa9Iuu2GU52Z"
+      },
+      "source": [
+        "<a name=\"methodology\"></a>\n",
+        "# Methodology\n",
+        "\n",
+        "In this section, describe a step-by-step walkthrough of the methodology, in the form of code cells. Feel free to make use of markdown headings to break this section up into smaller subsections, preferrably one section per task. \n",
+        "\n",
+        "Reminders:\n",
+        "*   Split the code into small, digestible chunks. \n",
+        "*   Use text cells to describe each code block.\n",
+        "*   Avoid duplicate code through modularization."
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "yWXsiZ5freTG"
+      },
+      "source": [
+        "## Manually Tuned Rule-Based Controller\n",
+        "Replace the heading with the appropriate title for each subtask."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 7,
+      "metadata": {
+        "id": "M-qNSqYSuiY-"
+      },
+      "outputs": [],
+      "source": [
+        "class RBC:\n",
+        "    def __init__(self, env: CityLearnEnv, hours: List[int], actions: List[float], loader: IntProgress = None):\n",
+        "        self.env = env\n",
+        "        self.hours = hours\n",
+        "        self.actions = actions\n",
+        "        self.loader = loader\n",
+        "\n",
+        "    def learn(self):\n",
+        "        if self.loader is not None:\n",
+        "            self.loader.max = self.env.time_steps\n",
+        "        else:\n",
+        "            pass\n",
+        "\n",
+        "        observations = self.env.reset()\n",
+        "        \n",
+        "        while not self.env.done:\n",
+        "            if self.loader is not None:\n",
+        "                self.loader.value += 1\n",
+        "            else:\n",
+        "                pass\n",
+        "            \n",
+        "            actions = self.predict(observations)\n",
+        "            next_observations, _, _, _  = self.env.step(actions)\n",
+        "            observations = [o for o in next_observations]\n",
+        "    \n",
+        "    def predict(self, observations: List[List[float]]) -> List[float]:\n",
+        "        actions = []\n",
+        "\n",
+        "        for n, o, s in zip(self.env.observation_names, observations, self.env.action_space):\n",
+        "            hour = o[n.index('hour')]\n",
+        "            a = self.actions[self.hours.index(hour)]\n",
+        "            actions.append([a]*s.shape[0])\n",
+        "\n",
+        "        return actions"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 8,
+      "metadata": {
+        "id": "wdmxDMHJuiY_"
+      },
+      "outputs": [],
+      "source": [
+        "def parse_kpis(env: CityLearnEnv):\n",
+        "    kpis = env.evaluate().pivot(index='name', columns='cost_function', values='value').round(3)\n",
+        "    kpis = kpis.reset_index()\n",
+        "    kpis = kpis.to_dict('records')\n",
+        "    return kpis\n",
+        "\n",
+        "def plot_profiles(env: CityLearnEnv):\n",
+        "    fig, axs = plt.subplots(3, 1, figsize=(8, 4), sharex=True)\n",
+        "    y1 = env.buildings[0].net_electricity_consumption\n",
+        "    y2 = env.buildings[0].net_electricity_consumption_without_storage\n",
+        "    y3 = env.buildings[0].net_electricity_consumption_without_storage_and_pv\n",
+        "    x = range(env.time_step + 1)\n",
+        "    axs[0].plot(x, y1, label='With storage')\n",
+        "    axs[0].plot(x, y2, label='Without storage')\n",
+        "    axs[0].plot(x, y3, label='Without storage and PV')\n",
+        "    axs[0].set_ylabel('kWh')\n",
+        "    axs[0].set_title('Net electricity consumption')\n",
+        "    axs[0].margins(0)\n",
+        "    axs[0].legend()\n",
+        "\n",
+        "    y4 = env.buildings[0].weather.outdoor_dry_bulb_temperature\n",
+        "    axs[1].plot(x, y4)\n",
+        "    axs[1].set_title('Outdoor dry bulb temperature')\n",
+        "    axs[1].set_ylabel('C')\n",
+        "    axs[1].margins(0)\n",
+        "\n",
+        "    y5 = np.array(env.buildings[0].cooling_storage.soc)/env.buildings[0].cooling_storage.capacity\n",
+        "    y6 = np.array(env.buildings[0].dhw_storage.soc)/env.buildings[0].dhw_storage.capacity\n",
+        "    y7 = np.array(env.buildings[0].electrical_storage.soc)/env.buildings[0].electrical_storage.capacity\n",
+        "    axs[2].plot(x, y5, label='Cooling storage')\n",
+        "    axs[2].plot(x, y6, label='DHW storage')\n",
+        "    axs[2].plot(x, y7, label='Battery')\n",
+        "    axs[2].set_title('Storage SOC')\n",
+        "    axs[2].set_xlabel('Time step')\n",
+        "    axs[2].set_ylabel('[1]')\n",
+        "    axs[2].margins(0)\n",
+        "    axs[2].legend()\n",
+        "\n",
+        "    plt.tight_layout()\n",
+        "\n",
+        "    return fig, axs\n",
+        "\n",
+        "def plot_building_daily_profile(ixs: List[int], schema: dict):\n",
+        "    column_count_limit = 5\n",
+        "    row_count = math.ceil(len(ixs)/column_count_limit)\n",
+        "    column_count = min(len(ixs), column_count_limit)\n",
+        "    fig, _ = plt.subplots(row_count, column_count, figsize=(4*column_count, 2*row_count))\n",
+        "    env = CityLearnEnv(schema)\n",
+        "    x = list(range(env.time_steps + 1))\n",
+        "\n",
+        "    for i, (ax, ix) in enumerate(zip(fig.axes, ixs)):\n",
+        "        y = \\\n",
+        "            env.buildings[ix].energy_simulation.non_shiftable_load\\\n",
+        "                + env.buildings[ix].energy_simulation.cooling_demand\\\n",
+        "                    + env.buildings[ix].energy_simulation.heating_demand\\\n",
+        "                        + env.buildings[ix].energy_simulation.dhw_demand\\\n",
+        "                            # - env.buildings[ix].pv.get_generation(env.buildings[ix].energy_simulation.solar_generation)\n",
+        "        \n",
+        "        y = np.array_split(y, int(len(x)/24))\n",
+        "\n",
+        "        for y_ in y:\n",
+        "            ax.plot(y_, color='grey', alpha=0.5)\n",
+        "\n",
+        "        ax.plot(np.mean(y, axis=0), color='red')\n",
+        "        ax.plot(np.mean(y, axis=0) + np.std(y, axis=0), color='green', linestyle='--')\n",
+        "        ax.plot(np.mean(y, axis=0) - np.std(y, axis=0), color='green', linestyle='--')\n",
+        "        ax.margins(0)\n",
+        "        ax.xaxis.set_major_locator(ticker.MultipleLocator(2))\n",
+        "        ax.set_xlabel('Hour')\n",
+        "        ax.set_ylabel('kWh')"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "6KHS2--GuiY_"
+      },
+      "source": [
+        "- What happens when actions for all hours are set to 0?\n",
+        "- How can we set the RBC so that it takes advantage of solar generation?\n",
+        "- How can we set the RBC so that it takes advantage of times of high coefficient of performance (COP) for the heat pump?"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 9,
+      "metadata": {
+        "colab": {
+          "referenced_widgets": [
+            "9f58c23eb35d42c19b6f53cd8a3cca7a",
+            "04c692b4fead4f1aa826e64dd5d02896",
+            "ed858a67466f40e3830e758c5dc1aa34",
+            "420b6d60d8ce496cac1586c26a368887"
+          ]
+        },
+        "id": "_j2GAa7YuiZA",
+        "outputId": "cd4e96e9-8964-44d7-f4c4-63956886acf3"
+      },
+      "outputs": [
+        {
+          "data": {
+            "application/vnd.jupyter.widget-view+json": {
+              "model_id": "758e181aa3094a9d8c8c9a86a43d9a57",
+              "version_major": 2,
+              "version_minor": 0
+            },
+            "text/plain": [
+              "HBox(children=(FloatSlider(value=0.0, continuous_update=False, description='Hr: 1-2', max=1.0, min=-1.0, orien…"
+            ]
+          },
+          "metadata": {},
+          "output_type": "display_data"
+        },
+        {
+          "data": {
+            "application/vnd.jupyter.widget-view+json": {
+              "model_id": "1e945423e4664ed2af30192da9cd0ab5",
+              "version_major": 2,
+              "version_minor": 0
+            },
+            "text/plain": [
+              "Checkbox(value=True, description='Use PV?', indent=False)"
+            ]
+          },
+          "metadata": {},
+          "output_type": "display_data"
+        },
+        {
+          "data": {
+            "application/vnd.jupyter.widget-view+json": {
+              "model_id": "6c652af924464c49abed7ca33c2a3a7d",
+              "version_major": 2,
+              "version_minor": 0
+            },
+            "text/plain": [
+              "HBox(children=(Button(button_style='info', description='Reset', style=ButtonStyle(), tooltip='Set all hour act…"
+            ]
+          },
+          "metadata": {},
+          "output_type": "display_data"
+        },
+        {
+          "data": {
+            "application/vnd.jupyter.widget-view+json": {
+              "model_id": "342d805350ce445a8d5d0b46e7e915cc",
+              "version_major": 2,
+              "version_minor": 0
+            },
+            "text/plain": [
+              "IntProgress(value=0, description='Waiting', max=10, style=ProgressStyle(bar_color='maroon'))"
+            ]
+          },
+          "metadata": {},
+          "output_type": "display_data"
+        }
+      ],
+      "source": [
+        "ACTION_STEP = 0.05\n",
+        "HOUR_STEP = 2\n",
+        "BUILDINGS = [0]\n",
+        "HOURS = list(range(1, 25, HOUR_STEP))\n",
+        "DEFAULT_LOADER_DESCRIPTION = 'Waiting'\n",
+        "sliders = [FloatSlider(\n",
+        "    value=0.0,\n",
+        "    min=-1.0,\n",
+        "    max=1.0,\n",
+        "    step=ACTION_STEP,\n",
+        "    description=f'Hr: {h}-{h + HOUR_STEP - 1}',\n",
+        "    disabled=False,\n",
+        "    continuous_update=False,\n",
+        "    orientation='vertical',\n",
+        "    readout=True,\n",
+        "    readout_format='.2f',\n",
+        ") for h in HOURS]\n",
+        "reset_button = Button(description='Reset', disabled=False, button_style='info', tooltip='Set all hour actions to 0.0', icon='')\n",
+        "random_button = Button(description='Random', disabled=False, button_style='warning', tooltip='Select random hour actions', icon='')\n",
+        "simulate_button = Button(description='Simulate', disabled=False, button_style='success', tooltip='Run simulation', icon='check')\n",
+        "loader = IntProgress(value=0, min=0, max=10, description=DEFAULT_LOADER_DESCRIPTION, bar_style='', style={'bar_color': 'maroon'},orientation='horizontal')\n",
+        "pv_checkbox = Checkbox(value=True, description='Use PV?', indent=False, disabled=False)\n",
+        "sliders_ui = HBox(sliders)\n",
+        "buttons_ui = HBox([reset_button, random_button, simulate_button])\n",
+        "\n",
+        "def on_reset_button_clicked(b):\n",
+        "    loader.value = 0\n",
+        "    loader.description = DEFAULT_LOADER_DESCRIPTION\n",
+        "\n",
+        "    for s in sliders:\n",
+        "        s.value = 0.0\n",
+        "\n",
+        "def on_random_button_clicked(b):\n",
+        "    loader.value = 0\n",
+        "    loader.description = DEFAULT_LOADER_DESCRIPTION\n",
+        "    options = np.arange(-1.0, 1.0, ACTION_STEP)\n",
+        "\n",
+        "    for s in sliders:\n",
+        "        \n",
+        "        s.value = round(random.choice(options), 2)\n",
+        "\n",
+        "def on_simulate_button_clicked(b):\n",
+        "    loader.description = 'Simulating'\n",
+        "    loader.value = 0\n",
+        "    clear_output(wait=False)\n",
+        "    display(sliders_ui, pv_checkbox, buttons_ui, loader)\n",
+        "    reset_button.disabled = True\n",
+        "    random_button.disabled = True\n",
+        "    simulate_button.disabled = True\n",
+        "    pv_checkbox.disabled = True\n",
+        "\n",
+        "    for s in sliders:\n",
+        "        s.disabled = True\n",
+        "\n",
+        "    hours = []\n",
+        "    actions = []\n",
+        "\n",
+        "    for h, s in zip(HOURS, sliders):\n",
+        "        for i in range(HOUR_STEP):\n",
+        "            hours.append(h + i)\n",
+        "            actions.append(s.value)\n",
+        "    \n",
+        "    env = CityLearnEnv(schema)\n",
+        "    env.buildings = [b for i, b in enumerate(env.buildings) if i in BUILDINGS]\n",
+        "\n",
+        "    for b in env.buildings:\n",
+        "        if not pv_checkbox.value:\n",
+        "            b.pv.nominal_power = 0.0\n",
+        "        else:\n",
+        "            continue\n",
+        "        \n",
+        "    agent = RBC(env=env, hours=hours, actions=actions, loader=loader)\n",
+        "    agent.learn()\n",
+        "\n",
+        "    # reporting\n",
+        "    kpis = parse_kpis(agent.env)\n",
+        "\n",
+        "    for r in kpis:\n",
+        "        print(r)\n",
+        "    \n",
+        "    fig, axs = plot_profiles(agent.env)\n",
+        "    plt.show()\n",
+        "\n",
+        "    loader.description = 'Finished'\n",
+        "    reset_button.disabled = False\n",
+        "    random_button.disabled = False\n",
+        "    simulate_button.disabled = False\n",
+        "    pv_checkbox.disabled = False\n",
+        "\n",
+        "    for s in sliders:\n",
+        "        s.disabled = False\n",
+        "\n",
+        "reset_button.on_click(on_reset_button_clicked)\n",
+        "random_button.on_click(on_random_button_clicked)\n",
+        "simulate_button.on_click(on_simulate_button_clicked)\n",
+        "\n",
+        "# preview of building load profile\n",
+        "display(sliders_ui, pv_checkbox, buttons_ui, loader)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "o8L28axZ4NVj"
+      },
+      "source": [
+        "## Q-Learning RL Agent\n",
+        "This Q-Learning RL Agent is adapted from the [BOPTEST Tutorial](https://colab.research.google.com/drive/1WeA_3PQeySba0MMRRte_oZTF7ptlP_Ra#scrollTo=9U81QUVcUfoW&line=17&uniqifier=1).\n",
+        "\n",
+        "CityLearn observation spaces are all `spaces.Box` thus, are continuous. Our Q-Learning agent uses a table that uses discrete observation values as indices to update the Q-value. We will make a slight modification to the `QLearningAgent` so that it converts our input continuous observations to discrete steps."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 10,
+      "metadata": {
+        "id": "_6HotiSW4Pe8"
+      },
+      "outputs": [],
+      "source": [
+        "class QLearningAgent:\n",
+        "    def __init__(\n",
+        "        self, \n",
+        "        env: CityLearnEnv,\n",
+        "        observation_bin_steps: List[List[int]],\n",
+        "        action_bin_steps: List[List[int]],\n",
+        "        eps: float = None,\n",
+        "        eps_min: float = None, \n",
+        "        eps_decay: float = None,\n",
+        "        alpha: float = None, \n",
+        "        gamma: float = None\n",
+        "    ):\n",
+        "        self.env = env\n",
+        "        self.observation_bin_steps = observation_bin_steps\n",
+        "        self.action_bin_steps = action_bin_steps\n",
+        "        self.eps = 1.0 if eps is None else eps\n",
+        "        self.eps_init = self.eps\n",
+        "        self.eps_min = 0.01 if eps_min is None else eps_min\n",
+        "        self.eps_decay = 0.0001 if eps_decay is None else eps_decay\n",
+        "        self.alpha = 0.05 if alpha is None else alpha\n",
+        "        self.gamma = 0.9 if gamma is None else gamma\n",
+        "        self.q = self.initialize_q()\n",
+        "        self.rewards = []\n",
+        "        self.kpis = []\n",
+        "\n",
+        "    def learn(self, episodes: int = None, deterministic: bool = None):\n",
+        "        deterministic = False if deterministic is None else deterministic\n",
+        "        episodes = 1 if episodes is None else episodes\n",
+        "        \n",
+        "        for i in range(episodes):\n",
+        "            # Initialize enviornment\n",
+        "            done = False\n",
+        "            observations = self.env.reset()\n",
+        "            reward_sum = 0\n",
+        "\n",
+        "            while not done:\n",
+        "                print(f'\\rEpisode: {i} | Timestep: {self.env.time_step}/{self.env.time_steps}', end=' '*100)\n",
+        "                # Get action with epsilon-greedy policy and simulate\n",
+        "                actions = self.predict(observations, deterministic=False)\n",
+        "                next_observations, reward, done, _ = self.env.step(actions)\n",
+        "                reward_sum += sum(reward)\n",
+        "                \n",
+        "                # Compute temporal difference target and error to udpate q-function\n",
+        "                self.update_q(observations, actions, reward, next_observations)\n",
+        "                \n",
+        "                # Make our next observation the current observation\n",
+        "                observations = [o for o in next_observations]\n",
+        "\n",
+        "                # exponential decay\n",
+        "                progress = self.env.time_step*(1 + i)\n",
+        "                self.eps = max(self.eps_min, self.eps_init*np.exp(-self.eps_decay*progress))\n",
+        "\n",
+        "            \n",
+        "            self.rewards.append(reward_sum)\n",
+        "            kpis = self.env.evaluate()\n",
+        "            kpis['episode'] = i\n",
+        "            self.kpis.append(kpis)\n",
+        "            # print()\n",
+        "            # print('reward:', reward_sum)\n",
+        "            # print('kpis:', parse_kpis(self.env))\n",
+        "\n",
+        "    def update_q(self, observations: List[List[float]], actions: List[List[float]], reward: List[float], next_observations: List[List[float]]):\n",
+        "        # Compute temporal difference target and error to udpate q-function\n",
+        "        discrete_observations = self.discretize_observations(observations)\n",
+        "        discrete_next_observations = self.discretize_observations(next_observations)\n",
+        "        discrete_actions = self.discretize_actions(actions)\n",
+        "        \n",
+        "        for i, (o, a, r, n) in enumerate(zip(discrete_observations, discrete_actions, reward, discrete_next_observations)):\n",
+        "            for j, a_ in enumerate(a):\n",
+        "                td_target = abs(r) + self.gamma*np.max(self.q[i][n][j])\n",
+        "                td_error = td_target - self.q[i][o][j][a_]\n",
+        "                self.q[i][o][j][a_] += self.alpha*td_error\n",
+        "\n",
+        "    def predict(self, observations: List[List[float]], deterministic: bool = None) -> List[List[float]]:\n",
+        "        deterministic = False if deterministic is None else deterministic\n",
+        "        actions = None\n",
+        "\n",
+        "        if deterministic or np.random.random() > self.eps:\n",
+        "            # Use q-function to decide action\n",
+        "            actions = self.exploit(observations)\n",
+        "        \n",
+        "        else:\n",
+        "            # Explore random action\n",
+        "            actions = self.explore()\n",
+        "\n",
+        "        return actions\n",
+        "\n",
+        "    def exploit(self, observations: List[List[float]]) -> List[List[float]]:\n",
+        "        actions = []\n",
+        "        choices = self.get_continuous_action_choices()\n",
+        "\n",
+        "        for i, (o, c) in enumerate(zip(self.discretize_observations(observations), choices)):\n",
+        "            a = [np.nanargmax(self.q[i][o][j]) for j in range(len(c))]\n",
+        "            a = [c[j][a_] for j, a_ in enumerate(a)]\n",
+        "            actions.append(a)\n",
+        "        \n",
+        "        return actions\n",
+        "        \n",
+        "    def explore(self) -> List[List[float]]:\n",
+        "        actions = []\n",
+        "        choices = self.get_continuous_action_choices()\n",
+        "\n",
+        "        for c in choices:\n",
+        "            a = [np.random.choice(c_) for c_ in c]\n",
+        "            actions.append(a)\n",
+        "\n",
+        "        return actions\n",
+        "\n",
+        "    def initialize_q(self) -> np.ndarray:\n",
+        "        # Initialize q-function as a null function\n",
+        "        q = [None for _ in self.env.observation_space]\n",
+        "\n",
+        "        for i, (od, ad) in enumerate(zip(self.get_observations_discretization_bins(), self.get_actions_discretization_bins())):\n",
+        "            od = [len(od_) + 1 for od_ in od]\n",
+        "            shape = od + [len(ad), len(ad[0]) + 1]\n",
+        "            shape = [int(s) for s in shape]\n",
+        "            q[i] = np.zeros(shape=tuple(shape))\n",
+        "\n",
+        "        return q\n",
+        "\n",
+        "    def get_continuous_action_choices(self):\n",
+        "        continuous_actions = []\n",
+        "\n",
+        "        for s, d in zip(self.env.action_space, self.action_bin_steps):\n",
+        "            b = [np.arange(s.low[i], s.high[i] + d[i], d[i]) for i in range(len(d))]\n",
+        "            continuous_actions.append(b)\n",
+        "\n",
+        "        return continuous_actions\n",
+        "\n",
+        "    def discretize_actions(self, actions: List[List[float]]):\n",
+        "        bins = self.get_actions_discretization_bins()\n",
+        "        discrete_actions = [tuple([np.digitize(a_, bins=b_) for a_, b_ in zip(a, b)]) for a, b in zip(actions, bins)]\n",
+        "\n",
+        "        return discrete_actions\n",
+        "\n",
+        "    def discretize_observations(self, observations: List[List[float]]):\n",
+        "        bins = self.get_observations_discretization_bins()\n",
+        "        discrete_observations = [tuple([np.digitize(o_, bins=b_) for o_, b_ in zip(o, b)]) for o, b in zip(observations, bins)]\n",
+        "\n",
+        "        return discrete_observations\n",
+        "\n",
+        "    def get_observations_discretization_bins(self) -> List[np.ndarray]:\n",
+        "        discretization_bins = []\n",
+        "\n",
+        "        for s, d in zip(self.env.observation_space, self.observation_bin_steps):\n",
+        "            b = [np.arange(s.low[i] + d[i], s.high[i] + d[i], d[i]) for i in range(len(d))]\n",
+        "            discretization_bins.append(b)\n",
+        "\n",
+        "        return discretization_bins\n",
+        "        \n",
+        "    def get_actions_discretization_bins(self) -> List[np.ndarray]:\n",
+        "        discretization_bins = []\n",
+        "\n",
+        "        for s, d in zip(self.env.action_space, self.action_bin_steps):\n",
+        "            b = [np.arange(s.low[i] + d[i], s.high[i] + d[i], d[i]) for i in range(len(d))]\n",
+        "            discretization_bins.append(b)\n",
+        "\n",
+        "        return discretization_bins"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 11,
+      "metadata": {
+        "id": "1rkt9jnNuiZE"
+      },
+      "outputs": [
+        {
+          "name": "stdout",
+          "output_type": "stream",
+          "text": [
+            "Episode: 9 | Timestep: 8758/8760                                                                                                    "
+          ]
+        }
+      ],
+      "source": [
+        "env = CityLearnEnv(schema)\n",
+        "env.buildings = [b for i, b in enumerate(env.buildings) if i in BUILDINGS]\n",
+        "active_observations = {\n",
+        "    'hour': 1, \n",
+        "    # 'carbon_intensity': 0.001, \n",
+        "    'solar_generation': 10,\n",
+        "    # 'electrical_storage_soc': 0.05,\n",
+        "    'non_shiftable_load': 0.1,\n",
+        "    # 'electricity_pricing': 0.15, \n",
+        "    # 'electricity_pricing_predicted_6h': 0.15,\n",
+        "}\n",
+        "for b in env.buildings:\n",
+        "    b.observation_metadata = {k: True for k in active_observations}\n",
+        "    b.observation_space = b.estimate_observation_space()\n",
+        "\n",
+        "    # for i, a in enumerate(b.active_observations):\n",
+        "    #     print(a, b.observation_space.low[i], b.observation_space.high[i])\n",
+        "\n",
+        "observation_bin_steps = [list(active_observations.values()) for _ in env.observation_space]\n",
+        "action_bin_steps = [[0.05 for _ in s.low] for s in env.action_space]\n",
+        "agent = QLearningAgent(env, observation_bin_steps, action_bin_steps)\n",
+        "agent.learn(episodes=10)\n",
+        "\n",
+        "# eps_decay = [0.0001, 0.00001]\n",
+        "# gamma = np.arange(0.1, 1.0, 0.1)\n",
+        "# alpha = [0.1, 0.01, 0.001, 0.0001, 0.00001]\n",
+        "# for e in eps_decay:\n",
+        "#     for g in gamma:\n",
+        "#         for a in alpha:\n",
+        "#             params = {'eps_decay': e, 'gamma': g, 'alpha': a}\n",
+        "#             agent = QLearningAgent(env, observation_discretization, action_discretization, **params)\n",
+        "#             agent.learn(episodes=10)\n",
+        "#             print(params, np.mean(agent.rewards[-1]))"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 12,
+      "metadata": {
+        "id": "5s9klu5nuiZF"
+      },
+      "outputs": [],
+      "source": [
+        "# action_space_index:hour_index:action_device_index:action_value_index\n",
+        "# len(agent.q[0][0][0])"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 13,
+      "metadata": {
+        "id": "uS7RzQUyuiZF"
+      },
+      "outputs": [
+        {
+          "data": {
+            "image/png": "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",
+            "text/plain": [
+              "<Figure size 1200x300 with 1 Axes>"
+            ]
+          },
+          "metadata": {},
+          "output_type": "display_data"
+        },
+        {
+          "data": {
+            "text/html": [
+              "<div>\n",
+              "<style scoped>\n",
+              "    .dataframe tbody tr th:only-of-type {\n",
+              "        vertical-align: middle;\n",
+              "    }\n",
+              "\n",
+              "    .dataframe tbody tr th {\n",
+              "        vertical-align: top;\n",
+              "    }\n",
+              "\n",
+              "    .dataframe thead th {\n",
+              "        text-align: right;\n",
+              "    }\n",
+              "</style>\n",
+              "<table border=\"1\" class=\"dataframe\">\n",
+              "  <thead>\n",
+              "    <tr style=\"text-align: right;\">\n",
+              "      <th></th>\n",
+              "      <th>cost_function</th>\n",
+              "      <th>value</th>\n",
+              "      <th>name</th>\n",
+              "      <th>level</th>\n",
+              "    </tr>\n",
+              "  </thead>\n",
+              "  <tbody>\n",
+              "    <tr>\n",
+              "      <th>0</th>\n",
+              "      <td>1 - load_factor</td>\n",
+              "      <td>1.009145</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>1</th>\n",
+              "      <td>average_daily_peak</td>\n",
+              "      <td>1.176176</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>2</th>\n",
+              "      <td>carbon_emissions</td>\n",
+              "      <td>1.101153</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>3</th>\n",
+              "      <td>electricity_consumption</td>\n",
+              "      <td>1.101088</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>4</th>\n",
+              "      <td>peak_demand</td>\n",
+              "      <td>1.189014</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>5</th>\n",
+              "      <td>pricing</td>\n",
+              "      <td>1.072054</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>6</th>\n",
+              "      <td>ramping</td>\n",
+              "      <td>1.633672</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>7</th>\n",
+              "      <td>zero_net_energy</td>\n",
+              "      <td>1.070051</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>8</th>\n",
+              "      <td>electricity_consumption</td>\n",
+              "      <td>1.101088</td>\n",
+              "      <td>Building_1</td>\n",
+              "      <td>building</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>9</th>\n",
+              "      <td>zero_net_energy</td>\n",
+              "      <td>1.070051</td>\n",
+              "      <td>Building_1</td>\n",
+              "      <td>building</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>10</th>\n",
+              "      <td>carbon_emissions</td>\n",
+              "      <td>1.101153</td>\n",
+              "      <td>Building_1</td>\n",
+              "      <td>building</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>11</th>\n",
+              "      <td>pricing</td>\n",
+              "      <td>1.072054</td>\n",
+              "      <td>Building_1</td>\n",
+              "      <td>building</td>\n",
+              "    </tr>\n",
+              "  </tbody>\n",
+              "</table>\n",
+              "</div>"
+            ],
+            "text/plain": [
+              "              cost_function     value        name     level\n",
+              "0           1 - load_factor  1.009145    District  district\n",
+              "1        average_daily_peak  1.176176    District  district\n",
+              "2          carbon_emissions  1.101153    District  district\n",
+              "3   electricity_consumption  1.101088    District  district\n",
+              "4               peak_demand  1.189014    District  district\n",
+              "5                   pricing  1.072054    District  district\n",
+              "6                   ramping  1.633672    District  district\n",
+              "7           zero_net_energy  1.070051    District  district\n",
+              "8   electricity_consumption  1.101088  Building_1  building\n",
+              "9           zero_net_energy  1.070051  Building_1  building\n",
+              "10         carbon_emissions  1.101153  Building_1  building\n",
+              "11                  pricing  1.072054  Building_1  building"
+            ]
+          },
+          "metadata": {},
+          "output_type": "display_data"
+        }
+      ],
+      "source": [
+        "# plot rewards\n",
+        "fig, ax = plt.subplots(1,1,figsize=(12,3))\n",
+        "ax.plot(agent.rewards)\n",
+        "plt.show()\n",
+        "display(agent.env.evaluate())"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 14,
+      "metadata": {
+        "id": "-uG900pOuiZH"
+      },
+      "outputs": [
+        {
+          "name": "stdout",
+          "output_type": "stream",
+          "text": [
+            "Episode: 0 | Timestep: 8758/8760                                                                                                    "
+          ]
+        },
+        {
+          "data": {
+            "text/html": [
+              "<div>\n",
+              "<style scoped>\n",
+              "    .dataframe tbody tr th:only-of-type {\n",
+              "        vertical-align: middle;\n",
+              "    }\n",
+              "\n",
+              "    .dataframe tbody tr th {\n",
+              "        vertical-align: top;\n",
+              "    }\n",
+              "\n",
+              "    .dataframe thead th {\n",
+              "        text-align: right;\n",
+              "    }\n",
+              "</style>\n",
+              "<table border=\"1\" class=\"dataframe\">\n",
+              "  <thead>\n",
+              "    <tr style=\"text-align: right;\">\n",
+              "      <th></th>\n",
+              "      <th>cost_function</th>\n",
+              "      <th>value</th>\n",
+              "      <th>name</th>\n",
+              "      <th>level</th>\n",
+              "    </tr>\n",
+              "  </thead>\n",
+              "  <tbody>\n",
+              "    <tr>\n",
+              "      <th>0</th>\n",
+              "      <td>1 - load_factor</td>\n",
+              "      <td>1.013708</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>1</th>\n",
+              "      <td>average_daily_peak</td>\n",
+              "      <td>1.606537</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>2</th>\n",
+              "      <td>carbon_emissions</td>\n",
+              "      <td>1.407636</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>3</th>\n",
+              "      <td>electricity_consumption</td>\n",
+              "      <td>1.426973</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>4</th>\n",
+              "      <td>peak_demand</td>\n",
+              "      <td>1.186990</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>5</th>\n",
+              "      <td>pricing</td>\n",
+              "      <td>1.353013</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>6</th>\n",
+              "      <td>ramping</td>\n",
+              "      <td>3.212952</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>7</th>\n",
+              "      <td>zero_net_energy</td>\n",
+              "      <td>1.226200</td>\n",
+              "      <td>District</td>\n",
+              "      <td>district</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>8</th>\n",
+              "      <td>electricity_consumption</td>\n",
+              "      <td>1.426973</td>\n",
+              "      <td>Building_1</td>\n",
+              "      <td>building</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>9</th>\n",
+              "      <td>zero_net_energy</td>\n",
+              "      <td>1.226200</td>\n",
+              "      <td>Building_1</td>\n",
+              "      <td>building</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>10</th>\n",
+              "      <td>carbon_emissions</td>\n",
+              "      <td>1.407636</td>\n",
+              "      <td>Building_1</td>\n",
+              "      <td>building</td>\n",
+              "    </tr>\n",
+              "    <tr>\n",
+              "      <th>11</th>\n",
+              "      <td>pricing</td>\n",
+              "      <td>1.353013</td>\n",
+              "      <td>Building_1</td>\n",
+              "      <td>building</td>\n",
+              "    </tr>\n",
+              "  </tbody>\n",
+              "</table>\n",
+              "</div>"
+            ],
+            "text/plain": [
+              "              cost_function     value        name     level\n",
+              "0           1 - load_factor  1.013708    District  district\n",
+              "1        average_daily_peak  1.606537    District  district\n",
+              "2          carbon_emissions  1.407636    District  district\n",
+              "3   electricity_consumption  1.426973    District  district\n",
+              "4               peak_demand  1.186990    District  district\n",
+              "5                   pricing  1.353013    District  district\n",
+              "6                   ramping  3.212952    District  district\n",
+              "7           zero_net_energy  1.226200    District  district\n",
+              "8   electricity_consumption  1.426973  Building_1  building\n",
+              "9           zero_net_energy  1.226200  Building_1  building\n",
+              "10         carbon_emissions  1.407636  Building_1  building\n",
+              "11                  pricing  1.353013  Building_1  building"
+            ]
+          },
+          "execution_count": 14,
+          "metadata": {},
+          "output_type": "execute_result"
+        },
+        {
+          "data": {
+            "image/png": "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",
+            "text/plain": [
+              "<Figure size 800x400 with 3 Axes>"
+            ]
+          },
+          "metadata": {},
+          "output_type": "display_data"
+        }
+      ],
+      "source": [
+        "# deterministic policy\n",
+        "agent.learn(episodes=1, deterministic=True)\n",
+        "plot_profiles(agent.env)\n",
+        "agent.env.evaluate()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "Lpbit9J6uiZK"
+      },
+      "source": [
+        "## Deep Q-Learning RL Agent"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 15,
+      "metadata": {},
+      "outputs": [
+        {
+          "name": "stdout",
+          "output_type": "stream",
+          "text": [
+            "Using cpu device\n",
+            "Wrapping the env with a `Monitor` wrapper\n",
+            "Wrapping the env in a DummyVecEnv.\n",
+            "              cost_function     value        name     level\n",
+            "0           1 - load_factor  1.059490    District  district\n",
+            "1        average_daily_peak  1.466708    District  district\n",
+            "2          carbon_emissions  1.257770    District  district\n",
+            "3   electricity_consumption  1.248100    District  district\n",
+            "4               peak_demand  1.685525    District  district\n",
+            "5                   pricing  1.196270    District  district\n",
+            "6                   ramping  2.666521    District  district\n",
+            "7           zero_net_energy  1.098029    District  district\n",
+            "8   electricity_consumption  1.248100  Building_1  building\n",
+            "9           zero_net_energy  1.098029  Building_1  building\n",
+            "10         carbon_emissions  1.257770  Building_1  building\n",
+            "11                  pricing  1.196270  Building_1  building\n"
+          ]
+        }
+      ],
+      "source": [
+        "# Wrap for SB3 compatibility\n",
+        "env = StableBaselines3Wrapper(env)\n",
+        "\n",
+        "# Run simulation with SAC policy\n",
+        "model = SAC('MlpPolicy', env, verbose=1, seed=0)\n",
+        "model.learn(total_timesteps=1000, log_interval=4)\n",
+        "\n",
+        "# Evaluation\n",
+        "print(env.evaluate())"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "ZhkmytKNU_Z2"
+      },
+      "source": [
+        "<a name=\"results-and-discussion\"></a>\n",
+        "# Results & Discussion\n",
+        "\n",
+        "In this section, describe your results. Briefly describe the performance metrics and cross validation techniques used. "
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 16,
+      "metadata": {
+        "id": "8LWo6UQzwj37"
+      },
+      "outputs": [],
+      "source": [
+        "# Insert code here. Feel free to break this up into several code\n",
+        "# cells, interleaved with explanatory text."
+      ]
+    },
+    {
+      "attachments": {},
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "oHIjM6eMwlXY"
+      },
+      "source": [
+        "<!-- Finally, include a discussion on the limitations and important takeaways from the exercise. -->\n",
+        "\n",
+        "## Limitations\n",
+        "<!-- *   ML algorithms and datasets can reinforce or reflect unfair biases. Reflect on the potential biases in the dataset and/or analysis presented in your tutorial, including its potential societal impact, and discuss how you might go about addressing this challenge.  -->\n",
+        "\n",
+        "> Coming soon 🙂"
+      ]
+    },
+    {
+      "attachments": {},
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "CLLCQpv14Gsx"
+      },
+      "source": [
+        "## Next Steps\n",
+        "<!-- *   What do you imagine would be the next steps for your readers after finishing your tutorial?\n",
+        "*   Discuss other potential climate-related applications for the method or tool discussed in the tutorial.\n",
+        "*   Do you know of other climate-related datasets similar to the one used in this tutorial? List them here. -->\n",
+        "\n",
+        "> Coming soon 🙂"
+      ]
+    }
+  ],
+  "metadata": {
+    "colab": {
+      "include_colab_link": true,
+      "provenance": []
+    },
+    "kernelspec": {
+      "display_name": "examples_env",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.7.7"
+    },
+    "vscode": {
+      "interpreter": {
+        "hash": "aef885a76ce31739e452d1e6967b400907b14827afd25732d0e38ec88d4e0d05"
+      }
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
diff --git a/examples/example.ipynb b/examples/example.ipynb
deleted file mode 100644
index ad1c6ec9a..000000000
--- a/examples/example.ipynb
+++ /dev/null
@@ -1,264 +0,0 @@
-{
- "cells": [
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Dependencies\n",
-    "***\n",
-    "\n",
-    "Uncomment and run cell below to install CityLearn and other dependencies for the internal RL agents."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# # upgrade pip\n",
-    "# !pip install --upgrade pip\n",
-    "\n",
-    "# # Install dependencies\n",
-    "# !pip install CityLearn scikit-learn==1.0.2 torch==1.12.0 torchvision==0.13.0"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    " # Import dependencies\n",
-    "import math\n",
-    "import os\n",
-    "from pathlib import Path\n",
-    "from citylearn.agents.rbc import OptimizedRBC as RBCAgent\n",
-    "from citylearn.agents.sac import SACOptimizedRBC as SACAgent\n",
-    "from citylearn.citylearn import CityLearnEnv\n",
-    "from citylearn.cost_function import CostFunction\n",
-    "import pandas as pd"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Helper Functions\n",
-    "***"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Function to calculate KPIs\n",
-    "def get_kpis(env):\n",
-    "    ## building level\n",
-    "    building_kpis = []\n",
-    "\n",
-    "    for b in env.buildings:\n",
-    "        building_kpis += [{\n",
-    "            'building_name': b.name,\n",
-    "            'kpi': 'electricity_consumption',\n",
-    "            'value': CostFunction.net_electricity_consumption(b.net_electricity_consumption)[-1]/\\\n",
-    "                CostFunction.net_electricity_consumption(b.net_electricity_consumption_without_storage)[-1],\n",
-    "            }, {\n",
-    "            'building_name': b.name,\n",
-    "            'kpi': 'carbon_emissions',\n",
-    "            'value': CostFunction.carbon_emissions(b.net_electricity_consumption_emission)[-1]/\\\n",
-    "                CostFunction.carbon_emissions(b.net_electricity_consumption_without_storage_emission)[-1],\n",
-    "            }, {\n",
-    "            'building_name': b.name,\n",
-    "            'kpi': 'zero_net_energy',\n",
-    "            'value': sum(b.net_electricity_consumption)/\\\n",
-    "                sum(b.net_electricity_consumption_without_storage),\n",
-    "            }]\n",
-    "\n",
-    "    building_kpis = pd.DataFrame(building_kpis)\n",
-    "    building_kpis['level'] = 'building'\n",
-    "\n",
-    "    ## district level\n",
-    "    district_kpis = pd.DataFrame([{\n",
-    "        'kpi': 'ramping',\n",
-    "        'value': CostFunction.ramping(env.net_electricity_consumption)[-1]/\\\n",
-    "            CostFunction.ramping(env.net_electricity_consumption_without_storage)[-1],\n",
-    "        }, {\n",
-    "        'kpi': '1 - load_factor',\n",
-    "        'value': CostFunction.load_factor(env.net_electricity_consumption)[-1]/\\\n",
-    "            CostFunction.load_factor(env.net_electricity_consumption_without_storage)[-1],\n",
-    "        }, {\n",
-    "        'kpi': 'average_daily_peak',\n",
-    "        'value': CostFunction.average_daily_peak(env.net_electricity_consumption)[-1]/\\\n",
-    "            CostFunction.average_daily_peak(env.net_electricity_consumption_without_storage)[-1],\n",
-    "        }, {\n",
-    "        'kpi': 'peak_demand',\n",
-    "        'value': CostFunction.peak_demand(env.net_electricity_consumption)[-1]/\\\n",
-    "            CostFunction.peak_demand(env.net_electricity_consumption_without_storage)[-1],\n",
-    "        }])\n",
-    "\n",
-    "    district_kpis = pd.concat([district_kpis, building_kpis], ignore_index=True, sort=False)\n",
-    "    district_kpis = district_kpis.groupby(['kpi'])[['value']].mean().reset_index()\n",
-    "    district_kpis['building_name'] = 'District'\n",
-    "    district_kpis['level'] = 'district'\n",
-    "    kpis = pd.concat([district_kpis, building_kpis], ignore_index=True, sort=False)\n",
-    "\n",
-    "    return kpis\n",
-    "\n",
-    "def parse_kpis(kpis):\n",
-    "    kpis['value'] = kpis['value'].round(3)\n",
-    "    kpis = kpis.pivot(index='kpi', columns='building_name', values='value')\n",
-    "    kpis = kpis.to_dict()\n",
-    "    kpis = {b: {kpi: v for kpi, v in b_kpis.items() if not math.isnan(v)} for b, b_kpis in kpis.items()}\n",
-    "\n",
-    "    return kpis"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# RBC Agent\n",
-    "***\n",
-    "Use the RBC agent to control the CityLearn Challenge 2022 Phase I environment."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "KPIs: {'Building_1': {'carbon_emissions': 1.046, 'electricity_consumption': 1.066, 'zero_net_energy': 1.042}, 'Building_2': {'carbon_emissions': 1.044, 'electricity_consumption': 1.066, 'zero_net_energy': 1.036}, 'Building_3': {'carbon_emissions': 1.076, 'electricity_consumption': 1.107, 'zero_net_energy': 1.106}, 'Building_4': {'carbon_emissions': 1.043, 'electricity_consumption': 1.066, 'zero_net_energy': 1.031}, 'Building_5': {'carbon_emissions': 1.068, 'electricity_consumption': 1.099, 'zero_net_energy': 1.052}, 'District': {'1 - load_factor': 0.991, 'average_daily_peak': 1.018, 'carbon_emissions': 1.055, 'electricity_consumption': 1.081, 'peak_demand': 0.992, 'ramping': 1.081, 'zero_net_energy': 1.053}}\n"
-     ]
-    }
-   ],
-   "source": [
-    "schema = Path('../citylearn/data/citylearn_challenge_2022_phase_1/schema.json') # replace with applicable path to schema\n",
-    "env = CityLearnEnv(schema)\n",
-    "agents = RBCAgent(\n",
-    "    action_space=env.action_space,\n",
-    "    observation_space=env.observation_space,\n",
-    "    building_information=env.get_building_information(),\n",
-    "    observation_names=env.observation_names,\n",
-    ")\n",
-    "observations = env.reset()\n",
-    "\n",
-    "while not env.done:\n",
-    "    actions = agents.select_actions(observations)\n",
-    "\n",
-    "    # apply actions to env\n",
-    "    observations, rewards, _, _ = env.step(actions)\n",
-    "\n",
-    "print('KPIs:', parse_kpis(get_kpis(env)))"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# SAC Agent\n",
-    "***\n",
-    "Use the SAC agent to control the CityLearn Challenge 2022 Phase I environment."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Episode: 0 ; KPIs: {'Building_1': {'carbon_emissions': 1.035, 'electricity_consumption': 1.057, 'zero_net_energy': 1.06}, 'Building_2': {'carbon_emissions': 1.067, 'electricity_consumption': 1.079, 'zero_net_energy': 1.041}, 'Building_3': {'carbon_emissions': 1.066, 'electricity_consumption': 1.089, 'zero_net_energy': 1.091}, 'Building_4': {'carbon_emissions': 1.062, 'electricity_consumption': 1.076, 'zero_net_energy': 1.032}, 'Building_5': {'carbon_emissions': 1.07, 'electricity_consumption': 1.098, 'zero_net_energy': 1.052}, 'District': {'1 - load_factor': 0.99, 'average_daily_peak': 1.021, 'carbon_emissions': 1.06, 'electricity_consumption': 1.08, 'peak_demand': 0.992, 'ramping': 1.128, 'zero_net_energy': 1.055}}\n",
-      "Episode: 1 ; KPIs: {'Building_1': {'carbon_emissions': 1.009, 'electricity_consumption': 1.011, 'zero_net_energy': 1.104}, 'Building_2': {'carbon_emissions': 1.073, 'electricity_consumption': 1.074, 'zero_net_energy': 1.078}, 'Building_3': {'carbon_emissions': 1.185, 'electricity_consumption': 1.185, 'zero_net_energy': 1.208}, 'Building_4': {'carbon_emissions': 1.145, 'electricity_consumption': 1.142, 'zero_net_energy': 1.067}, 'Building_5': {'carbon_emissions': 1.064, 'electricity_consumption': 1.072, 'zero_net_energy': 1.054}, 'District': {'1 - load_factor': 0.995, 'average_daily_peak': 1.07, 'carbon_emissions': 1.095, 'electricity_consumption': 1.097, 'peak_demand': 0.982, 'ramping': 1.333, 'zero_net_energy': 1.102}}\n",
-      "Episode: 2 ; KPIs: {'Building_1': {'carbon_emissions': 0.961, 'electricity_consumption': 0.967, 'zero_net_energy': 1.104}, 'Building_2': {'carbon_emissions': 1.04, 'electricity_consumption': 1.044, 'zero_net_energy': 1.076}, 'Building_3': {'carbon_emissions': 1.093, 'electricity_consumption': 1.095, 'zero_net_energy': 1.159}, 'Building_4': {'carbon_emissions': 1.104, 'electricity_consumption': 1.102, 'zero_net_energy': 1.056}, 'Building_5': {'carbon_emissions': 1.041, 'electricity_consumption': 1.051, 'zero_net_energy': 1.062}, 'District': {'1 - load_factor': 0.996, 'average_daily_peak': 0.99, 'carbon_emissions': 1.048, 'electricity_consumption': 1.052, 'peak_demand': 1.083, 'ramping': 1.221, 'zero_net_energy': 1.091}}\n",
-      "Episode: 3 ; KPIs: {'Building_1': {'carbon_emissions': 0.896, 'electricity_consumption': 0.905, 'zero_net_energy': 1.109}, 'Building_2': {'carbon_emissions': 0.958, 'electricity_consumption': 0.959, 'zero_net_energy': 1.062}, 'Building_3': {'carbon_emissions': 1.0, 'electricity_consumption': 1.002, 'zero_net_energy': 1.095}, 'Building_4': {'carbon_emissions': 1.03, 'electricity_consumption': 1.026, 'zero_net_energy': 1.035}, 'Building_5': {'carbon_emissions': 1.036, 'electricity_consumption': 1.044, 'zero_net_energy': 1.056}, 'District': {'1 - load_factor': 0.988, 'average_daily_peak': 0.93, 'carbon_emissions': 0.984, 'electricity_consumption': 0.987, 'peak_demand': 0.929, 'ramping': 1.104, 'zero_net_energy': 1.071}}\n",
-      "Episode: 4 ; KPIs: {'Building_1': {'carbon_emissions': 0.849, 'electricity_consumption': 0.861, 'zero_net_energy': 1.104}, 'Building_2': {'carbon_emissions': 0.921, 'electricity_consumption': 0.927, 'zero_net_energy': 1.061}, 'Building_3': {'carbon_emissions': 0.97, 'electricity_consumption': 0.969, 'zero_net_energy': 1.07}, 'Building_4': {'carbon_emissions': 0.993, 'electricity_consumption': 0.989, 'zero_net_energy': 1.017}, 'Building_5': {'carbon_emissions': 0.995, 'electricity_consumption': 1.001, 'zero_net_energy': 1.035}, 'District': {'1 - load_factor': 0.985, 'average_daily_peak': 0.901, 'carbon_emissions': 0.945, 'electricity_consumption': 0.949, 'peak_demand': 0.92, 'ramping': 0.998, 'zero_net_energy': 1.057}}\n",
-      "Episode: 5 ; KPIs: {'Building_1': {'carbon_emissions': 0.822, 'electricity_consumption': 0.838, 'zero_net_energy': 1.104}, 'Building_2': {'carbon_emissions': 0.888, 'electricity_consumption': 0.895, 'zero_net_energy': 1.065}, 'Building_3': {'carbon_emissions': 0.952, 'electricity_consumption': 0.953, 'zero_net_energy': 1.073}, 'Building_4': {'carbon_emissions': 0.988, 'electricity_consumption': 0.986, 'zero_net_energy': 1.013}, 'Building_5': {'carbon_emissions': 0.976, 'electricity_consumption': 0.984, 'zero_net_energy': 1.025}, 'District': {'1 - load_factor': 0.975, 'average_daily_peak': 0.88, 'carbon_emissions': 0.925, 'electricity_consumption': 0.931, 'peak_demand': 0.878, 'ramping': 0.955, 'zero_net_energy': 1.056}}\n",
-      "Episode: 6 ; KPIs: {'Building_1': {'carbon_emissions': 0.817, 'electricity_consumption': 0.833, 'zero_net_energy': 1.104}, 'Building_2': {'carbon_emissions': 0.867, 'electricity_consumption': 0.875, 'zero_net_energy': 1.071}, 'Building_3': {'carbon_emissions': 0.934, 'electricity_consumption': 0.933, 'zero_net_energy': 1.084}, 'Building_4': {'carbon_emissions': 0.98, 'electricity_consumption': 0.979, 'zero_net_energy': 1.014}, 'Building_5': {'carbon_emissions': 0.973, 'electricity_consumption': 0.981, 'zero_net_energy': 1.024}, 'District': {'1 - load_factor': 0.973, 'average_daily_peak': 0.868, 'carbon_emissions': 0.914, 'electricity_consumption': 0.92, 'peak_demand': 0.86, 'ramping': 0.949, 'zero_net_energy': 1.059}}\n",
-      "Episode: 7 ; KPIs: {'Building_1': {'carbon_emissions': 0.809, 'electricity_consumption': 0.826, 'zero_net_energy': 1.103}, 'Building_2': {'carbon_emissions': 0.86, 'electricity_consumption': 0.868, 'zero_net_energy': 1.07}, 'Building_3': {'carbon_emissions': 0.929, 'electricity_consumption': 0.926, 'zero_net_energy': 1.088}, 'Building_4': {'carbon_emissions': 0.978, 'electricity_consumption': 0.976, 'zero_net_energy': 1.015}, 'Building_5': {'carbon_emissions': 0.968, 'electricity_consumption': 0.976, 'zero_net_energy': 1.024}, 'District': {'1 - load_factor': 0.977, 'average_daily_peak': 0.864, 'carbon_emissions': 0.909, 'electricity_consumption': 0.914, 'peak_demand': 0.902, 'ramping': 0.942, 'zero_net_energy': 1.06}}\n",
-      "Episode: 8 ; KPIs: {'Building_1': {'carbon_emissions': 0.804, 'electricity_consumption': 0.821, 'zero_net_energy': 1.102}, 'Building_2': {'carbon_emissions': 0.854, 'electricity_consumption': 0.862, 'zero_net_energy': 1.072}, 'Building_3': {'carbon_emissions': 0.919, 'electricity_consumption': 0.918, 'zero_net_energy': 1.093}, 'Building_4': {'carbon_emissions': 0.973, 'electricity_consumption': 0.971, 'zero_net_energy': 1.016}, 'Building_5': {'carbon_emissions': 0.964, 'electricity_consumption': 0.973, 'zero_net_energy': 1.027}, 'District': {'1 - load_factor': 0.977, 'average_daily_peak': 0.859, 'carbon_emissions': 0.903, 'electricity_consumption': 0.909, 'peak_demand': 0.886, 'ramping': 0.94, 'zero_net_energy': 1.062}}\n",
-      "Episode: 9 ; KPIs: {'Building_1': {'carbon_emissions': 0.801, 'electricity_consumption': 0.817, 'zero_net_energy': 1.102}, 'Building_2': {'carbon_emissions': 0.848, 'electricity_consumption': 0.856, 'zero_net_energy': 1.073}, 'Building_3': {'carbon_emissions': 0.914, 'electricity_consumption': 0.913, 'zero_net_energy': 1.101}, 'Building_4': {'carbon_emissions': 0.969, 'electricity_consumption': 0.968, 'zero_net_energy': 1.016}, 'Building_5': {'carbon_emissions': 0.963, 'electricity_consumption': 0.972, 'zero_net_energy': 1.026}, 'District': {'1 - load_factor': 0.978, 'average_daily_peak': 0.856, 'carbon_emissions': 0.899, 'electricity_consumption': 0.905, 'peak_demand': 0.917, 'ramping': 0.932, 'zero_net_energy': 1.064}}\n"
-     ]
-    }
-   ],
-   "source": [
-    "schema = Path('../citylearn/data/citylearn_challenge_2022_phase_1/schema.json') # replace with applicable path to schema\n",
-    "env = CityLearnEnv(schema)\n",
-    "agents = SACAgent(\n",
-    "    building_ids=[b.uid for b in env.buildings],\n",
-    "    action_space=env.action_space,\n",
-    "    observation_space=env.observation_space,\n",
-    "    building_information=env.get_building_information(),\n",
-    "    observation_names=env.observation_names,\n",
-    "    hidden_dimension=[256, 256],\n",
-    "    discount=0.99,\n",
-    "    tau=0.005,\n",
-    "    lr=0.003,\n",
-    "    batch_size=256,\n",
-    "    replay_buffer_capacity=1e5,\n",
-    "    start_training_time_step=6000,\n",
-    "    end_exploration_time_step=7000,\n",
-    "    deterministic_start_time_step=7500,\n",
-    "    action_scaling_coef=0.5,\n",
-    "    reward_scaling=5.0,\n",
-    "    update_per_time_step=2\n",
-    ")\n",
-    "episodes = 10 # number of training episodes\n",
-    "\n",
-    "for e in range(episodes):\n",
-    "    observations = env.reset()\n",
-    "\n",
-    "    while not env.done:\n",
-    "        actions = agents.select_actions(observations)\n",
-    "\n",
-    "        # apply actions to env\n",
-    "        next_observations, rewards, _, _ = env.step(actions)\n",
-    "\n",
-    "        # update agents\n",
-    "        agents.add_to_buffer(observations, actions, rewards, next_observations, done=env.done)\n",
-    "        observations = [o for o in next_observations]\n",
-    "\n",
-    "    print('Episode:', e, '; KPIs:', parse_kpis(get_kpis(env)))"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "test_env",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.7.7"
-  },
-  "orig_nbformat": 4,
-  "vscode": {
-   "interpreter": {
-    "hash": "24d13602916ce501dab33551801634a98323f75b1378db411e4ca12af6dc15d7"
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/examples_requirements.txt b/examples_requirements.txt
new file mode 100644
index 000000000..0b8487327
--- /dev/null
+++ b/examples_requirements.txt
@@ -0,0 +1,1 @@
+ipykernel
\ No newline at end of file


Test patch:
diff --git a/tests/stable_baselines.py b/tests/stable_baselines.py
new file mode 100644
index 000000000..6ffe9a595
--- /dev/null
+++ b/tests/stable_baselines.py
@@ -0,0 +1,26 @@
+import sys
+sys.path.insert(0, '..')
+from stable_baselines3 import SAC
+from stable_baselines3.common.env_checker import check_env
+from citylearn.citylearn import CityLearnEnv, StableBaselines3Wrapper
+
+# Initialize environment
+dataset_name = 'citylearn_challenge_2022_phase_1'
+env = CityLearnEnv(dataset_name)
+
+# Wrap for SB3 compatibility
+env = StableBaselines3Wrapper(env)
+
+# Perform compatibility check
+try:
+    check_env(env)
+    print('Passed test!! CityLearn is compatible with SB3 when using the StableBaselines3Wrapper.')
+finally:
+    pass
+
+# Run simulation with SAC policy
+model = SAC('MlpPolicy', env, verbose=1, seed=0)
+model.learn(total_timesteps=1000, log_interval=4)
+
+# Evaluation
+print(env.evaluate())
\ No newline at end of file