#pylint: disable=bad-whitespace
"""
Support for the generation of scenarios of exemplary days.
"""
import logging
import numpy as np
from hynet.data.interface import initialize_database, save_scenario
from hynet.data.connection import DBConnection
from hynet.scenario.representation import Scenario
_log = logging.getLogger(__name__)
LOAD_WEIGHTS = {
'winter_weekday':
np.array([ 67, 63, 60, 59, 59, 60, 74, 86, 95, 96, 96, 95, 95,
95, 93, 94, 99, 100, 100, 96, 91, 83, 73, 63]) / 100,
'winter_weekend':
np.array([ 78, 72, 68, 66, 64, 65, 66, 70, 80, 88, 90, 91, 90,
88, 87, 87, 91, 100, 99, 97, 94, 92, 87, 81]) / 100,
'summer_weekday':
np.array([ 64, 60, 58, 56, 56, 58, 64, 76, 87, 95, 99, 100, 99,
100, 100, 97, 96, 96, 93, 92, 92, 93, 87, 72]) / 100,
'summer_weekend':
np.array([ 74, 70, 66, 65, 64, 62, 62, 66, 81, 86, 91, 93, 93,
92, 91, 91, 92, 94, 95, 95, 100, 93, 88, 80]) / 100
}
[docs]def initialize_database_with_example_days(database, base_case):
"""
Initialize the database with the base case and add exemplary day scenarios.
The added day scenarios are exemplary winter and summer weekdays/weekends
obtained by scaling the base case load according to the data provided in
[1]_, Table 4.
Parameters
----------
database : DBConnection
Connection to the destination database. This database must be empty.
base_case : Scenario
Base case scenario for the new database.
Raises
------
ValueError
In case that the destination database is not empty or the provided
scenario data exhibits integrity or validity issues.
References
----------
.. [1] C. Grigg et al., "The IEEE Reliability Test System - 1996. A report
prepared by the Reliability Test System Task Force of the
Application of Probability Methods Subcommittee," in IEEE Trans.
Power Systems, vol. 14, no. 3, pp. 1010-1020, Aug. 1999.
"""
base_case.verify(log=None)
if not database.empty:
raise ValueError("The destination database is not empty.")
initialize_database(database, base_case)
add_example_days(database, base_case)
[docs]def add_example_days(database, base_case):
"""Add the exemplary day scenarios to the database."""
for scenario_name, weights in LOAD_WEIGHTS.items():
scenario_name = scenario_name.replace('_', ' ').title()
for time, weight in enumerate(weights):
scenario_new = base_case.copy()
scenario_new.name = scenario_name
scenario_new.time = time
scenario_new.bus['load'] *= weight
save_scenario(database, scenario_new)