-
Notifications
You must be signed in to change notification settings - Fork 15
/
scenarios.py
223 lines (173 loc) · 8.26 KB
/
scenarios.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
"""
The "scenarios.py" generate diverse scenarios to simplify the modeling procedure
"""
__author__ = "Babu Kumaran Nalini" "Michel Zadé" "Zhengjie You"
__copyright__ = "2020 TUM-EWK"
__credits__ = []
__license__ = "GPL v3.0"
__version__ = "1.0"
__maintainer__ = "Babu Kumaran Nalini"
__email__ = "babu.kumaran-nalini@tum.de"
__status__ = "Development"
from opentumflex.configuration.devices import create_device
# Input only scenario. Read all parameters from input file with no modifications
def scenario_fromfile(ems):
""" change the device parameters and obtain the input time series
according to customized scenario from spreadsheet(xlsx/csv)
this function is only a placeholder, which serves as tag for selector in run_scenario.py
Args:
- ems: ems model instance
"""
return ems
# HP only scenario
def scenario_hp(ems):
""" only hp + boiler for satisfying heat load
Args:
- ems: ems model instance
"""
ems['devices']['sto']['maxpow'] = 10
ems['devices']['sto']['stocap'] = 15
ems['devices']['boiler']['maxpow'] = 3
ems['devices'].update(create_device(device_name='hp', minpow=0, maxpow=4, supply_temp=45))
return ems
# PV only scenario
def scenario_pv(ems):
""" only pv + boiler for satisfying heat load
Args:
- ems: ems model instance
"""
ems['devices'].update(create_device(device_name='pv', minpow=0.5, maxpow=3, eta=0.95))
ems['devices']['sto']['maxpow'] = 10
ems['devices']['sto']['stocap'] = 15
ems['devices']['boiler']['maxpow'] = 6
return ems
# Battery only scenario
def scenario_bat(ems):
""" only battery + boiler for satisfying heat load
Args:
- ems: ems model instance
"""
ems['devices'].update(create_device(device_name='bat', minpow=0, maxpow=3, stocap=15, init_soc=0, eta=0.95))
ems['devices']['sto']['maxpow'] = 10
ems['devices']['sto']['stocap'] = 15
ems['devices']['boiler']['maxpow'] = 6
return ems
# EV only scenario
def scenario_ev(ems):
""" only ev + boiler for satisfying heat load
Args:
- ems: ems model instance
"""
ems['devices'].update(create_device(device_name='ev', minpow=0, maxpow=10,
stocap=20, eta=0.98, timesetting=ems['time_data'],
ev_aval=['2019-12-18 00:00', '2019-12-18 08:00',
'2019-12-18 18:00', '2019-12-18 23:45'],
init_soc=[30, 50], end_soc=[80, 100]))
ems['devices']['sto']['maxpow'] = 10
ems['devices']['sto']['stocap'] = 15
ems['devices']['boiler']['maxpow'] = 6
return ems
# Simple house with PV and battery
def scenario_simple_house(ems):
""" simple house with PV and battery + boiler for satisfying heat load
Args:
- ems: ems model instance
"""
ems['devices'].update(create_device(device_name='pv', minpow=0.5, maxpow=3, eta=0.95))
ems['devices'].update(create_device(device_name='bat', minpow=0, maxpow=3, stocap=5, init_soc=50, eta=0.95))
ems['devices']['sto']['maxpow'] = 10
ems['devices']['sto']['stocap'] = 15
ems['devices']['boiler']['maxpow'] = 6
return ems
# Residential house with PV, battery and HP
def scenario_residential_house(ems):
""" residential house with pv, bat, heat storage and boiler
Args:
- ems: ems model instance
"""
ems['devices'].update(create_device(device_name='pv', minpow=0.5, maxpow=3, eta=0.95))
ems['devices'].update(create_device(device_name='bat', minpow=0, maxpow=3, stocap=5, init_soc=5, eta=0.95))
ems['devices']['sto']['maxpow'] = 10
ems['devices']['sto']['stocap'] = 15
ems['devices']['boiler']['maxpow'] = 3
ems['devices'].update(create_device(device_name='hp', minpow=0, maxpow=4, supply_temp=45))
return ems
# Apartment with PV, battery, HP and EV
def scenario_mini_apartment(ems):
""" mini apartment with pv, bat, hp, ev, heat storage and boiler
Args:
- ems: ems model instance
"""
ems['devices'].update(create_device(device_name='pv', minpow=0.5, maxpow=3, eta=0.95))
ems['devices'].update(create_device(device_name='bat', minpow=0, maxpow=3, stocap=5, init_soc=50, eta=0.95))
ems['devices']['sto']['maxpow'] = 10
ems['devices']['sto']['stocap'] = 15
ems['devices']['boiler']['maxpow'] = 3
ems['devices'].update(create_device(device_name='hp', minpow=0, maxpow=4, supply_temp=45))
ems['devices'].update(create_device(device_name='ev', minpow=0, maxpow=8,
stocap=20, eta=0.98, timesetting=ems['time_data'],
ev_aval=['2019-12-18 00:00', '2019-12-18 08:00',
'2019-12-18 18:00', '2019-12-18 23:45'],
init_soc=[30, 50], end_soc=[80, 100]))
return ems
# Apartment with PV, battery, HP, CHP and EV
def scenario_apartment(ems):
""" apartment with all devices
Args:
- ems: ems model instance
"""
ems['devices'].update(create_device(device_name='pv', minpow=0.5, maxpow=3, eta=0.95))
ems['devices'].update(create_device(device_name='bat', minpow=0, maxpow=3, stocap=5, init_soc=50, eta=0.95))
ems['devices']['chp']['maxpow'] = 2
ems['devices']['sto']['maxpow'] = 10
ems['devices']['sto']['stocap'] = 15
ems['devices']['boiler']['maxpow'] = 3
ems['devices'].update(create_device(device_name='hp', minpow=0, maxpow=4, supply_temp=45))
ems['devices'].update(create_device(device_name='ev', minpow=0, maxpow=8,
stocap=20, eta=0.98, timesetting=ems['time_data'],
ev_aval=['2019-12-18 00:00', '2019-12-18 08:00',
'2019-12-18 18:00', '2019-12-18 23:45'],
init_soc=[30, 50], end_soc=[80, 100]))
return ems
# For testing purpose only. Try all combinations of scenarios
def scenario_combination_test(my_ems, test_code):
"""
Parameters
----------
my_ems : dict
ems model
test_code : string
Device availability booleans merged as string.
Returns
-------
my_ems : dict
ems model.
"""
s_pv = int(test_code[0])
s_bat = int(test_code[1])
s_ev = int(test_code[2])
s_hp = int(test_code[3])
s_chp = int(test_code[4])
# add or change the utility/devices
my_ems['devices']['boiler']['maxpow'] = 4
if s_chp: my_ems['devices']['chp']['maxpow'] = 2
if s_hp: my_ems['devices'].update(create_device(device_name='hp', minpow=0, maxpow=2, supply_temp=45))
if s_pv: my_ems['devices'].update(create_device(device_name='pv', minpow=0.5, maxpow=3, eta=0.95))
if s_bat: my_ems['devices'].update(
create_device(device_name='bat', minpow=0.5, maxpow=3, stocap=5, init_soc=45, eta=0.95))
if s_ev: my_ems['devices'].update(create_device(device_name='ev', minpow=0, maxpow=11,
stocap=20, eta=0.98, timesetting=my_ems['time_data'],
ev_aval=['2019-12-18 00:00', '2019-12-18 08:00',
'2019-12-18 18:00', '2019-12-18 23:45'],
init_soc=[30, 50], end_soc=[80, 100]))
if not s_chp: my_ems['devices']['chp']['maxpow'] = 0
if not s_hp: my_ems['devices'].update(create_device(device_name='hp', minpow=0, maxpow=0, supply_temp=45))
if not s_pv: my_ems['devices'].update(create_device(device_name='pv', minpow=0, maxpow=0, eta=0.95))
if not s_bat: my_ems['devices'].update(
create_device(device_name='bat', minpow=0, maxpow=0, stocap=0, init_soc=0, eta=0.95))
if not s_ev: my_ems['devices'].update(create_device(device_name='ev', minpow=0, maxpow=0,
stocap=20, eta=0.98, timesetting=my_ems['time_data'],
ev_aval=['2019-12-18 00:00', '2019-12-18 08:00',
'2019-12-18 18:00', '2019-12-18 23:45'],
init_soc=[30, 50], end_soc=[80, 100]))
return my_ems