Open In Colab

QuickStart

Install the latest CityLearn version from PyPi with the :code:pip command:

[ ]:
!pip install CityLearn

CityLearn Control Agents

No Control (Baseline)

Run the following to simulate an environment where the storage systems and heat pumps are not controlled (baseline). The storage actions prescribed will be 0.0 and the heat pump will have no action, i.e. None, causing it to deliver the ideal load in the building time series files:

[1]:
from citylearn.agents.base import BaselineAgent as Agent
from citylearn.citylearn import CityLearnEnv

# initialize
env = CityLearnEnv('citylearn_challenge_2023_phase_2_local_evaluation', central_agent=True)
model = Agent(env)

# step through environment and apply agent actions
observations, _ = env.reset()

while not env.terminated:
    actions = model.predict(observations)
    observations, reward, info, terminated, truncated = env.step(actions)

# test
kpis = model.env.evaluate()
kpis = kpis.pivot(index='cost_function', columns='name', values='value').round(3)
kpis = kpis.dropna(how='all')
display(kpis)
Couldn't import dot_parser, loading of dot files will not be possible.
/Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/test-py311-env/lib/python3.11/site-packages/gymnasium/spaces/box.py:130: UserWarning: WARN: Box bound precision lowered by casting to float32
  gym.logger.warn(f"Box bound precision lowered by casting to {self.dtype}")
name Building_1 Building_2 Building_3 District
cost_function
all_time_peak_average NaN NaN NaN 1.000
annual_normalized_unserved_energy_total 0.019 0.018 0.018 0.018
carbon_emissions_total 1.000 1.000 1.000 1.000
cost_total 1.000 1.000 1.000 1.000
daily_one_minus_load_factor_average NaN NaN NaN 1.000
daily_peak_average NaN NaN NaN 1.000
discomfort_cold_delta_average 1.657 0.045 0.675 0.793
discomfort_cold_delta_maximum 4.878 1.793 3.642 3.438
discomfort_cold_delta_minimum 0.000 0.000 0.000 0.000
discomfort_cold_proportion 0.369 0.000 0.095 0.155
discomfort_hot_delta_average 0.053 0.577 0.081 0.237
discomfort_hot_delta_maximum 5.006 6.441 3.734 5.060
discomfort_hot_delta_minimum 0.000 0.000 0.000 0.000
discomfort_hot_proportion 0.008 0.041 0.003 0.018
discomfort_proportion 0.377 0.041 0.098 0.172
electricity_consumption_total 1.000 1.000 1.000 1.000
monthly_one_minus_load_factor_average NaN NaN NaN 1.000
one_minus_thermal_resilience_proportion 0.333 0.643 0.133 0.370
power_outage_normalized_unserved_energy_total 0.723 0.692 0.637 0.684
ramping_average NaN NaN NaN 1.000
zero_net_energy 1.000 1.000 1.000 1.000

Centralized RBC

Run the following to simulate an environment controlled by centralized RBC agent for a single episode:

[2]:
from citylearn.agents.rbc import BasicRBC as Agent
from citylearn.citylearn import CityLearnEnv

# initialize
env = CityLearnEnv('citylearn_challenge_2023_phase_2_local_evaluation', central_agent=True)
model = Agent(env)

# step through environment and apply agent actions
observations, _ = env.reset()

while not env.terminated:
    actions = model.predict(observations)
    observations, reward, info, terminated, truncated = env.step(actions)

# test
kpis = model.env.evaluate()
kpis = kpis.pivot(index='cost_function', columns='name', values='value').round(3)
kpis = kpis.dropna(how='all')
display(kpis)
name Building_1 Building_2 Building_3 District
cost_function
all_time_peak_average NaN NaN NaN 1.179
annual_normalized_unserved_energy_total 0.017 0.016 0.016 0.016
carbon_emissions_total 1.998 1.936 1.740 1.891
cost_total 1.931 1.878 1.713 1.841
daily_one_minus_load_factor_average NaN NaN NaN 0.720
daily_peak_average NaN NaN NaN 1.352
discomfort_cold_delta_average 9.825 3.493 3.189 5.502
discomfort_cold_delta_maximum 13.774 9.875 5.514 9.721
discomfort_cold_delta_minimum 0.000 0.000 0.000 0.000
discomfort_cold_proportion 0.975 0.899 0.953 0.942
discomfort_hot_delta_average 0.005 0.022 0.010 0.012
discomfort_hot_delta_maximum 1.456 4.526 3.230 3.071
discomfort_hot_delta_minimum 0.000 0.000 0.000 0.000
discomfort_hot_proportion 0.000 0.007 0.003 0.004
discomfort_proportion 0.975 0.907 0.957 0.946
electricity_consumption_total 1.995 1.963 1.755 1.904
monthly_one_minus_load_factor_average NaN NaN NaN 0.863
one_minus_thermal_resilience_proportion 0.667 0.500 0.267 0.478
power_outage_normalized_unserved_energy_total 0.781 0.759 0.711 0.750
ramping_average NaN NaN NaN 0.959
zero_net_energy 2.059 1.994 1.773 1.942

Decentralized-Independent SAC

Run the following to simulate an environment controlled by decentralized-independent SAC agents for 1 training episode:

[3]:
from citylearn.agents.sac import SAC as Agent
from citylearn.citylearn import CityLearnEnv

# initialize
env = CityLearnEnv('citylearn_challenge_2023_phase_2_local_evaluation', central_agent=False)
model = Agent(env)

# train
model.learn(episodes=2, deterministic_finish=True)

# test
kpis = model.env.evaluate()
kpis = kpis.pivot(index='cost_function', columns='name', values='value').round(3)
kpis = kpis.dropna(how='all')
display(kpis)
name Building_1 Building_2 Building_3 District
cost_function
all_time_peak_average NaN NaN NaN 0.949
annual_normalized_unserved_energy_total 0.013 0.013 0.012 0.013
carbon_emissions_total 0.943 0.973 0.952 0.956
cost_total 0.906 0.935 0.920 0.920
daily_one_minus_load_factor_average NaN NaN NaN 0.941
daily_peak_average NaN NaN NaN 0.931
discomfort_cold_delta_average 1.932 0.915 0.913 1.253
discomfort_cold_delta_maximum 6.430 4.516 3.078 4.675
discomfort_cold_delta_minimum 0.000 0.000 0.000 0.000
discomfort_cold_proportion 0.452 0.317 0.263 0.344
discomfort_hot_delta_average 0.237 0.543 0.283 0.354
discomfort_hot_delta_maximum 4.588 6.153 3.922 4.888
discomfort_hot_delta_minimum 0.000 0.000 0.000 0.000
discomfort_hot_proportion 0.042 0.151 0.028 0.074
discomfort_proportion 0.494 0.468 0.291 0.418
electricity_consumption_total 0.953 0.991 0.966 0.970
monthly_one_minus_load_factor_average NaN NaN NaN 0.994
one_minus_thermal_resilience_proportion 0.733 0.500 0.133 0.456
power_outage_normalized_unserved_energy_total 0.628 0.648 0.596 0.624
ramping_average NaN NaN NaN 0.883
zero_net_energy 0.969 0.993 0.967 0.976

Decentralized-Cooperative MARLISA

Run the following to simulate an environment controlled by decentralized-cooperative MARLISA agents for 1 training episodes:

[4]:
from citylearn.agents.marlisa import MARLISA as Agent
from citylearn.citylearn import CityLearnEnv

# initialize
env = CityLearnEnv('citylearn_challenge_2023_phase_2_local_evaluation', central_agent=False)
model = Agent(env)

# train
model.learn(episodes=2, deterministic_finish=True)

# test
kpis = model.env.evaluate()
kpis = kpis.pivot(index='cost_function', columns='name', values='value').round(3)
kpis = kpis.dropna(how='all')
display(kpis)
name Building_1 Building_2 Building_3 District
cost_function
all_time_peak_average NaN NaN NaN 0.949
annual_normalized_unserved_energy_total 0.013 0.013 0.013 0.013
carbon_emissions_total 0.954 0.976 0.961 0.964
cost_total 0.916 0.937 0.929 0.927
daily_one_minus_load_factor_average NaN NaN NaN 0.938
daily_peak_average NaN NaN NaN 0.934
discomfort_cold_delta_average 1.954 0.914 0.890 1.252
discomfort_cold_delta_maximum 6.447 4.527 3.032 4.668
discomfort_cold_delta_minimum 0.000 0.000 0.000 0.000
discomfort_cold_proportion 0.459 0.315 0.250 0.341
discomfort_hot_delta_average 0.232 0.546 0.291 0.356
discomfort_hot_delta_maximum 4.582 6.163 3.928 4.891
discomfort_hot_delta_minimum 0.000 0.000 0.000 0.000
discomfort_hot_proportion 0.039 0.151 0.028 0.073
discomfort_proportion 0.498 0.466 0.278 0.414
electricity_consumption_total 0.963 0.994 0.976 0.978
monthly_one_minus_load_factor_average NaN NaN NaN 0.992
one_minus_thermal_resilience_proportion 0.733 0.500 0.133 0.456
power_outage_normalized_unserved_energy_total 0.632 0.649 0.597 0.626
ramping_average NaN NaN NaN 0.883
zero_net_energy 0.979 0.997 0.977 0.984

Other Standard Reinforcement Learning Libraries

Stable Baselines3 Reinforcement Learning Algorithms

Install the latest version of Stable Baselines3:

[ ]:
!pip install "stable-baselines3<=2.2.1"

Before the environment is ready for use in Stable Baselines3, it needs to be wrapped. Firstly, wrap the environment using the NormalizedObservationWrapper (see docs) to ensure that observations served to the agent are min-max normalized between [0, 1] and cyclical observations e.g. hour, are encoded using the cosine transformation.

Next, we wrap with the StableBaselines3Wrapper (see docs) that ensures observations, actions and rewards are served in manner that is compatible with Stable Baselines3 interface.

⚠️ NOTE: central_agent in the env must be True when using Stable Baselines3 as it does not support multi-agents.

[5]:
from stable_baselines3.sac import SAC as Agent
from citylearn.citylearn import CityLearnEnv
from citylearn.wrappers import NormalizedObservationWrapper, StableBaselines3Wrapper

# initialize
env = CityLearnEnv('citylearn_challenge_2023_phase_2_local_evaluation', central_agent=True)
env = NormalizedObservationWrapper(env)
env = StableBaselines3Wrapper(env)
model = Agent('MlpPolicy', env)

# train
episodes = 2
model.learn(total_timesteps=env.unwrapped.time_steps*episodes)

# test
observations, _ = env.reset()

while not env.unwrapped.terminated:
    actions, _ = model.predict(observations, deterministic=True)
    observations, _, _, _, _ = env.step(actions)

kpis = env.unwrapped.evaluate()
kpis = kpis.pivot(index='cost_function', columns='name', values='value').round(3)
kpis = kpis.dropna(how='all')
display(kpis)
name Building_1 Building_2 Building_3 District
cost_function
all_time_peak_average NaN NaN NaN 0.834
annual_normalized_unserved_energy_total 0.015 0.011 0.014 0.013
carbon_emissions_total 0.389 0.359 0.499 0.416
cost_total 0.368 0.335 0.469 0.391
daily_one_minus_load_factor_average NaN NaN NaN 1.301
daily_peak_average NaN NaN NaN 0.686
discomfort_cold_delta_average 0.000 0.004 0.001 0.002
discomfort_cold_delta_maximum 0.124 0.581 0.394 0.366
discomfort_cold_delta_minimum 0.000 0.000 0.000 0.000
discomfort_cold_proportion 0.000 0.000 0.000 0.000
discomfort_hot_delta_average 9.432 7.095 8.040 8.189
discomfort_hot_delta_maximum 16.671 14.709 13.401 14.927
discomfort_hot_delta_minimum 0.000 0.000 0.000 0.000
discomfort_hot_proportion 0.982 0.978 0.978 0.979
discomfort_proportion 0.982 0.978 0.978 0.979
electricity_consumption_total 0.393 0.367 0.506 0.422
monthly_one_minus_load_factor_average NaN NaN NaN 1.127
one_minus_thermal_resilience_proportion 1.000 1.000 1.000 1.000
power_outage_normalized_unserved_energy_total 0.570 0.498 0.557 0.542
ramping_average NaN NaN NaN 0.898
zero_net_energy 0.276 0.342 0.451 0.356

RLlib

Install the latest version of RLlib:

[ ]:
!pip install "ray[rllib]<=2.10.0"

We advise that you include the ClippedObservationWrapper (see docs) wrapper when working with RLlib so that observations are always clipped within the observation space before sending to the agent if not, out-of-bound observations will raise a ValueError and terminate the training.

We also wrap the environment with NormalizedObservationWrapper (see docs) to ensure that observations served to the agent are min-max normalized between [0, 1] and cyclical observations e.g. hour, are encoded using the cosine transformation.

RLlib supports both single-agent and multi-agent algorithms. See below for an example for either case.

Single Agent

The single-agent interface for RLlib is the RLlibSingleAgentWrapper wrapper.

[6]:
import warnings
from citylearn.wrappers import ClippedObservationWrapper, NormalizedObservationWrapper, RLlibSingleAgentWrapper
from ray.rllib.algorithms.sac import SACConfig as Config

warnings.filterwarnings('ignore', category=DeprecationWarning)

# initialize
env_config = {
    'env_kwargs': {
        'schema': 'citylearn_challenge_2023_phase_2_local_evaluation',
    },
    'wrappers': [
        NormalizedObservationWrapper,
        ClippedObservationWrapper
    ]
}
config = (
    Config()
    .environment(RLlibSingleAgentWrapper, env_config=env_config)
)
model = config.build()

# train
for i in range(2):
    _ = model.train()

# test
env = RLlibSingleAgentWrapper(env_config)
observations, _ = env.reset()

while not env.unwrapped.terminated:
    actions = model.compute_single_action(observations, explore=False)
    observations, _, _, _, _ = env.step(actions)

kpis = env.unwrapped.evaluate()
kpis = kpis.pivot(index='cost_function', columns='name', values='value').round(3)
kpis = kpis.dropna(how='all')
display(kpis)
2024-11-06 19:20:41,805 WARNING deprecation.py:50 -- DeprecationWarning: `rllib/algorithms/simple_q/` has been deprecated. Use `rllib_contrib/simple_q/` instead. This will raise an error in the future!
2024-11-06 19:20:43,974 WARNING env.py:162 -- Your env doesn't have a .spec.max_episode_steps attribute. Your horizon will default to infinity, and your environment will not be reset.
2024-11-06 19:20:44,294 WARNING util.py:62 -- Install gputil for GPU system monitoring.
name Building_1 Building_2 Building_3 District
cost_function
all_time_peak_average NaN NaN NaN 1.063
annual_normalized_unserved_energy_total 0.015 0.016 0.014 0.015
carbon_emissions_total 1.630 1.593 1.458 1.560
cost_total 1.570 1.543 1.427 1.513
daily_one_minus_load_factor_average NaN NaN NaN 0.741
daily_peak_average NaN NaN NaN 1.165
discomfort_cold_delta_average 7.843 2.918 2.581 4.448
discomfort_cold_delta_maximum 12.452 8.403 5.322 8.726
discomfort_cold_delta_minimum 0.000 0.000 0.000 0.000
discomfort_cold_proportion 0.969 0.741 0.765 0.825
discomfort_hot_delta_average 0.011 0.088 0.013 0.037
discomfort_hot_delta_maximum 2.275 5.453 3.477 3.735
discomfort_hot_delta_minimum 0.000 0.000 0.000 0.000
discomfort_hot_proportion 0.001 0.017 0.003 0.007
discomfort_proportion 0.971 0.757 0.769 0.832
electricity_consumption_total 1.641 1.621 1.478 1.580
monthly_one_minus_load_factor_average NaN NaN NaN 0.891
one_minus_thermal_resilience_proportion 0.733 0.643 0.267 0.548
power_outage_normalized_unserved_energy_total 0.782 0.796 0.707 0.762
ramping_average NaN NaN NaN 0.885
zero_net_energy 1.685 1.637 1.487 1.603

Multi-agent

The multi-agent interface for RLlib is the RLlibMultiAgentEnv wrapper.

[7]:
import warnings
from citylearn.wrappers import ClippedObservationWrapper, NormalizedObservationWrapper, RLlibMultiAgentEnv
from ray.rllib.algorithms.sac import SACConfig as Config
from ray.rllib.policy.policy import PolicySpec

warnings.filterwarnings('ignore', category=DeprecationWarning)

# initialize
env_config = {
    'env_kwargs': {
        'schema': 'citylearn_challenge_2023_phase_2_local_evaluation',
    },
    'wrappers': [
        NormalizedObservationWrapper,
        ClippedObservationWrapper
    ]
}
config = (
    Config()
    .environment(RLlibMultiAgentEnv, env_config=env_config)
    .multi_agent(
        policies={a: PolicySpec() for a in RLlibMultiAgentEnv(env_config)._agent_ids},
        policy_mapping_fn=lambda agent_id, episode, worker, **kwargs: agent_id,
    )
)
model = config.build()

# train
for i in range(2):
    _ = model.train()

# test
env = RLlibMultiAgentEnv(env_config)
observations, _ = env.reset()

while not env.terminated:
    actions = {p: model.compute_single_action(o, policy_id=p, explore=False) for p, o in observations.items()}
    observations, _, _, _, _ = env.step(actions)

kpis = env.unwrapped.evaluate()
kpis = kpis.pivot(index='cost_function', columns='name', values='value').round(3)
kpis = kpis.dropna(how='all')
display(kpis)
2024-11-06 19:21:19,796 WARNING util.py:62 -- Install gputil for GPU system monitoring.
name Building_1 Building_2 Building_3 District
cost_function
all_time_peak_average NaN NaN NaN 1.063
annual_normalized_unserved_energy_total 0.015 0.016 0.014 0.015
carbon_emissions_total 1.639 1.595 1.459 1.564
cost_total 1.579 1.544 1.428 1.517
daily_one_minus_load_factor_average NaN NaN NaN 0.740
daily_peak_average NaN NaN NaN 1.167
discomfort_cold_delta_average 7.907 2.924 2.584 4.471
discomfort_cold_delta_maximum 12.499 8.406 5.322 8.742
discomfort_cold_delta_minimum 0.000 0.000 0.000 0.000
discomfort_cold_proportion 0.969 0.743 0.764 0.825
discomfort_hot_delta_average 0.011 0.087 0.013 0.037
discomfort_hot_delta_maximum 2.255 5.451 3.476 3.728
discomfort_hot_delta_minimum 0.000 0.000 0.000 0.000
discomfort_hot_proportion 0.001 0.017 0.003 0.007
discomfort_proportion 0.971 0.759 0.767 0.832
electricity_consumption_total 1.650 1.622 1.479 1.584
monthly_one_minus_load_factor_average NaN NaN NaN 0.890
one_minus_thermal_resilience_proportion 0.733 0.643 0.267 0.548
power_outage_normalized_unserved_energy_total 0.783 0.796 0.707 0.762
ramping_average NaN NaN NaN 0.884
zero_net_energy 1.695 1.638 1.488 1.607

Neighborhood Dataset Generation

Aside the provided datasets that come with the CityLearn installation, custom single-family residential datasets can be generated in CityLearn by taking advantage of the End-Use Load Profiles for the U.S. Building Stock dataset. The citylearn.end_use_load_profiles.neighborhood.Neighborhood class makes this possible.

To learn more about the methodology used in this feature, refer to the CityLearn v2 paper.

Note that to make use of this feature, EnergyPlus 9.6.0 must be installed. Other EnergyPlus versions are not yet supported.

An example of a generating a dataset and using it in simulation is:

[8]:
from citylearn.agents.rbc import BasicRBC as Agent
from citylearn.citylearn import CityLearnEnv
from citylearn.end_use_load_profiles.neighborhood import Neighborhood, SampleMethod

# path to version EnergyPlus 9.6.0 IDD
idd_filepath = '/Applications/EnergyPlus-9-6-0/PreProcess/IDFVersionUpdater/V9-6-0-Energy+.idd'

# build a neighborhood with n buildings through random sampling of single-family residential buildings in EULP dataset.
# Sampling population is filtered to include specific county and building vintage.
# train their LSTM thermal dynamics models and generate a CityLearn schema for the two buildings
neighborhood = Neighborhood()
n = 2
neighborhood_build = neighborhood.build(
    idd_filepath=idd_filepath,
    delete_energyplus_simulation_output=True,
    sample_buildings_kwargs=dict(
        sample_method=SampleMethod.RANDOM,
        sample_count=n,
        filters={
            'in.resstock_county_id': ['TX, Travis County'],
            'in.vintage': ['2000s']
        },
    ),
)

# simulate neighborhood in CityLearn
env = CityLearnEnv(neighborhood_build.schema_filepath, central_agent=True)
model = Agent(env)
observations, _ = env.reset()

while not env.terminated:
    actions = model.predict(observations)
    observations, reward, info, terminated, truncated = env.step(actions)

kpis = model.env.evaluate()
kpis = kpis.pivot(index='cost_function', columns='name', values='value').round(3)
kpis = kpis.dropna(how='all')
display(kpis)
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
EnergyPlus Completed Successfully.
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
EnergyPlus Completed Successfully.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
EnergyPlus Completed Successfully.
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
[openstudio.energyplus.ForwardTranslator] <0> Cannot find file ""
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Program terminated: EnergyPlus Terminated--Error(s) Detected.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
EnergyPlus Completed Successfully.
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
EnergyPlus Completed Successfully.
/Users/kingsleyenweye/Desktop/INTELLIGENT_ENVIRONMENT_LAB/citylearn/CityLearn/test-py311-env/lib/python3.11/site-packages/gymnasium/spaces/box.py:130: UserWarning: WARN: Box bound precision lowered by casting to float32
  gym.logger.warn(f"Box bound precision lowered by casting to {self.dtype}")
Couldn't import dot_parser, loading of dot files will not be possible.
Couldn't import dot_parser, loading of dot files will not be possible.
name District resstock_2021_tmy3_release_1-164467-0 resstock_2021_tmy3_release_1-526919-0
cost_function
all_time_peak_average 1.405 NaN NaN
annual_normalized_unserved_energy_total -0.000 -0.000 -0.000
daily_one_minus_load_factor_average 0.501 NaN NaN
daily_peak_average 3.260 NaN NaN
discomfort_cold_delta_average 0.174 0.002 0.346
discomfort_cold_delta_maximum 3.665 1.084 6.246
discomfort_cold_delta_minimum 0.000 0.000 0.000
discomfort_cold_proportion 0.047 0.000 0.095
discomfort_hot_delta_average 2.225 0.496 3.955
discomfort_hot_delta_maximum 6.444 4.320 8.568
discomfort_hot_delta_minimum 0.000 0.000 0.000
discomfort_hot_proportion 0.376 0.078 0.674
discomfort_proportion 0.423 0.078 0.769
electricity_consumption_total 5.221 4.082 6.360
monthly_one_minus_load_factor_average 0.678 NaN NaN
ramping_average 1.137 NaN NaN
zero_net_energy -3.855 -5.923 -1.787