2
2
# coding: utf-8
3
3
4
4
# <h1>Table of Contents <br></br><span class="tocSkip"></span></h1>
5
- # <div class="toc"><ul class="toc-item"><li><ul class="toc-item"><li><span><a href="#Imports-and-Data-loading" data-toc-modified-id="Imports-and-Data-loading-0.1"><span class="toc-item-num">0.1 </span>Imports and Data loading</a></span></li><li><span><a href="#Regular-Profit" data-toc-modified-id="Regular-Profit-0.2"><span class="toc-item-num">0.2 </span>Regular Profit</a></span></li><li><span><a href="#Charging-Stations" data-toc-modified-id="Charging-Stations-0.3"><span class="toc-item-num">0.3 </span>Charging Stations</a></span></li></ul></li><li><span><a href="#Baseline-Charging" data-toc-modified-id="Baseline-Charging-1"><span class="toc-item-num">1 </span>Baseline Charging</a></span></li><li><span><a href="#Intraday" data-toc-modified-id="Intraday-2"><span class="toc-item-num">2 </span>Intraday</a></span><ul class="toc-item"><li><span><a href="#Benchmark" data-toc-modified-id="Benchmark-2.1"><span class="toc-item-num">2.1 </span>Benchmark</a></span></li><li><span><a href="#Risk-Averse-(r=0.3,-acc=90)" data-toc-modified-id="Risk-Averse-(r=0.3,-acc=90)-2.2"><span class="toc-item-num">2.2 </span>Risk Averse (r=0.3, acc=90)</a></span></li></ul></li><li><span><a href="#Balancing" data-toc-modified-id="Balancing-3"><span class="toc-item-num">3 </span>Balancing</a></span><ul class="toc-item"><li><span><a href="#Benchmark" data-toc-modified-id="Benchmark-3.1"><span class="toc-item-num">3.1 </span>Benchmark</a></span></li><li><span><a href="#Risk-Averse-(r=0.5,-acc=70)" data-toc-modified-id="Risk-Averse-(r=0.5,-acc=70)-3.2"><span class="toc-item-num">3.2 </span>Risk Averse (r=0.5, acc=70)</a></span></li></ul></li><li><span><a href="#Integrated" data-toc-modified-id="Integrated-4"><span class="toc-item-num">4 </span>Integrated</a></span><ul class="toc-item"><li><span><a href="#Risk-Averse-(r=0.5,0.3,-acc=70,90)" data-toc-modified-id="Risk-Averse-(r=0.5,0.3,-acc=70,90)-4.1"><span class="toc-item-num">4.1 </span>Risk Averse (r=0.5,0.3, acc=70,90)</a></span></li><li><span><a href="#Risk-Seeking-(r=0.2,0.00,-acc=70,90)" data-toc-modified-id="Risk-Seeking-(r=0.2,0.00,-acc=70,90)-4.2"><span class="toc-item-num">4.2 </span>Risk Seeking (r=0.2,0.00, acc=70,90)</a></span></li><li><span><a href="#RL-(acc=70,90)" data-toc-modified-id="RL-(acc=70,90)-4.3"><span class="toc-item-num">4.3 </span>RL (acc=70,90)</a></span></li><li><span><a href="#RL-(acc=80,95)" data-toc-modified-id="RL-(acc=80,95)-4.4"><span class="toc-item-num">4.4 </span>RL (acc=80,95)</a></span></li></ul></li><li><span><a href="#Plots" data-toc-modified-id="Plots-5"><span class="toc-item-num">5 </span>Plots</a></span><ul class="toc-item"><li><span><a href="#Style" data-toc-modified-id="Style-5.1"><span class="toc-item-num">5.1 </span>Style</a></span></li><li><span><a href="#Fleet-Utilization" data-toc-modified-id="Fleet-Utilization-5.2"><span class="toc-item-num">5.2 </span>Fleet Utilization</a></span></li></ul></li></ul></div>
5
+ # <div class="toc"><ul class="toc-item"><li><ul class="toc-item"><li><span><a href="#Imports-and-Data-loading" data-toc-modified-id="Imports-and-Data-loading-0.1"><span class="toc-item-num">0.1 </span>Imports and Data loading</a></span></li><li><span><a href="#Regular-Profit" data-toc-modified-id="Regular-Profit-0.2"><span class="toc-item-num">0.2 </span>Regular Profit</a></span></li><li><span><a href="#Charging-Stations" data-toc-modified-id="Charging-Stations-0.3"><span class="toc-item-num">0.3 </span>Charging Stations</a></span></li></ul></li><li><span><a href="#Baseline-Charging" data-toc-modified-id="Baseline-Charging-1"><span class="toc-item-num">1 </span>Baseline Charging</a></span></li><li><span><a href="#Intraday" data-toc-modified-id="Intraday-2"><span class="toc-item-num">2 </span>Intraday</a></span><ul class="toc-item"><li><span><a href="#Benchmark" data-toc-modified-id="Benchmark-2.1"><span class="toc-item-num">2.1 </span>Benchmark</a></span></li><li><span><a href="#Risk-Averse-(r=0.3,-acc=90)" data-toc-modified-id="Risk-Averse-(r=0.3,-acc=90)-2.2"><span class="toc-item-num">2.2 </span>Risk Averse (r=0.3, acc=90)</a></span></li></ul></li><li><span><a href="#Balancing" data-toc-modified-id="Balancing-3"><span class="toc-item-num">3 </span>Balancing</a></span><ul class="toc-item"><li><span><a href="#Benchmark" data-toc-modified-id="Benchmark-3.1"><span class="toc-item-num">3.1 </span>Benchmark</a></span></li><li><span><a href="#Risk-Averse-(r=0.5,-acc=70)" data-toc-modified-id="Risk-Averse-(r=0.5,-acc=70)-3.2"><span class="toc-item-num">3.2 </span>Risk Averse (r=0.5, acc=70)</a></span></li></ul></li><li><span><a href="#Integrated" data-toc-modified-id="Integrated-4"><span class="toc-item-num">4 </span>Integrated</a></span><ul class="toc-item"><li><span><a href="#Risk-Averse-(r=0.5,0.3,-acc=70,90)" data-toc-modified-id="Risk-Averse-(r=0.5,0.3,-acc=70,90)-4.1"><span class="toc-item-num">4.1 </span>Risk Averse (r=0.5,0.3, acc=70,90)</a></span></li><li><span><a href="#Risk-Seeking-(r=0.2,0.00,-acc=70,90)" data-toc-modified-id="Risk-Seeking-(r=0.2,0.00,-acc=70,90)-4.2"><span class="toc-item-num">4.2 </span>Risk Seeking (r=0.2,0.00, acc=70,90)</a></span></li><li><span><a href="#RL-(acc=50,60)" data-toc-modified-id="RL-(acc=50,60)-4.3"><span class="toc-item-num">4.3 </span>RL (acc=50,60)</a></span></li><li><span><a href="#RL-(acc=70,90)" data-toc-modified-id="RL-(acc=70,90)-4.4"><span class="toc-item-num">4.4 </span>RL (acc=70,90)</a></span></li><li><span><a href="#RL-(acc=80,95)" data-toc-modified-id="RL-(acc=80,95)-4.5"><span class="toc-item-num">4.5 </span>RL (acc=80,95)</a></span></li><li><span><a href="#RL-(acc=90,99)" data-toc-modified-id="RL-(acc=90,99)-4.6"><span class="toc-item-num">4.6 </span>RL (acc=90,99)</a></span></li><li><span><a href="#RL-(acc=100,100)" data-toc-modified-id="RL-(acc=100,100)-4.7"><span class="toc-item-num">4.7 </span>RL (acc=100,100)</a></span></li></ul></li><li><span><a href="#Plots" data-toc-modified-id="Plots-5"><span class="toc-item-num">5 </span>Plots</a></span><ul class="toc-item"><li><span><a href="#Style" data-toc-modified-id="Style-5.1"><span class="toc-item-num">5.1 </span>Style</a></span></li><li><span><a href="#Fleet-Utilization" data-toc-modified-id="Fleet-Utilization-5.2"><span class="toc-item-num">5.2 </span>Fleet Utilization</a></span></li></ul></li></ul></div>
6
6
7
7
# ## Imports and Data loading
8
8
@@ -89,7 +89,7 @@ def read_results(path):
89
89
90
90
# ## Risk Averse (r=0.3, acc=90)
91
91
92
- # In[15 ]:
92
+ # In[8 ]:
93
93
94
94
95
95
df_i = read_results ("../results/intraday-risk-averse.csv" )
@@ -123,14 +123,22 @@ def read_results(path):
123
123
# In[11]:
124
124
125
125
126
+ df_in = read_results ("../results/integrated-benchmark.csv" )
127
+ print (df_in .sum ()/ 1000 )
128
+ profit_bench = df_in ["profit_eur" ].sum () / 1000
129
+
130
+
131
+ # In[12]:
132
+
133
+
126
134
df_in = read_results ("../results/integrated-benchmark-acc-1.csv" )
127
135
print (df_in .sum ()/ 1000 )
128
136
profit_bench = df_in ["profit_eur" ].sum () / 1000
129
137
130
138
131
139
# ## Risk Averse (r=0.5,0.3, acc=70,90)
132
140
133
- # In[12 ]:
141
+ # In[13 ]:
134
142
135
143
136
144
df_in = read_results ("../results/integrated-risk-averse.csv" )
@@ -140,22 +148,43 @@ def read_results(path):
140
148
141
149
# ## Risk Seeking (r=0.2,0.00, acc=70,90)
142
150
143
- # In[13 ]:
151
+ # In[14 ]:
144
152
145
153
146
154
df_in = read_results ("../results/integrated-risk-seeking.csv" )
147
155
df_in .sum ()/ 1000
148
156
149
157
158
+ # ## RL (acc=50,60)
159
+
160
+ # In[15]:
161
+
162
+
163
+ df_rl = read_results ("../results/accuracy/DDDQN-50-60_result.csv" )
164
+ print (df_rl .sum ()/ 1000 )
165
+ profit_rl = df_rl ["profit_eur" ].sum () / 1000
166
+ print ("Risk factors - Balancing: {:.2f}. Intraday:{:.2f}" .format (df_rl ["risk_bal" ].mean (), df_rl ["risk_intr" ].mean ()))
167
+
168
+ print ("Profit comparison - Balancing: {:+.0%}, Intraday: {:+.0%}, Integrated: {:+.0%}, , Benchmark: {:+.0%}" .format (
169
+ profit_rl / profit_bal ,
170
+ profit_rl / profit_intr ,
171
+ profit_rl / profit_in ,
172
+ profit_rl / profit_bench
173
+ )
174
+
175
+ )
176
+
177
+
150
178
# ## RL (acc=70,90)
151
179
152
- # In[24 ]:
180
+ # In[16 ]:
153
181
154
182
155
- df_in = read_results ("../results/integrated-rl-1.csv" )
156
- print (df_in .sum ()/ 1000 )
157
- profit_rl = df_in ["profit_eur" ].sum () / 1000
158
- print ("Risk factors - Balancing: {:.2f}. Intraday:{:.2f}" .format (df_in ["risk_bal" ].mean (), df_in ["risk_intr" ].mean ()))
183
+ df_rl = read_results ("../results/accuracy/DDDQN-70-90_result.csv" )
184
+ #df_rl = read_results("~/Downloads/DDDQN-70-90_result.csv")
185
+ print (df_rl .sum ()/ 1000 )
186
+ profit_rl = df_rl ["profit_eur" ].sum () / 1000
187
+ print ("Risk factors - Balancing: {:.2f}. Intraday:{:.2f}" .format (df_rl ["risk_bal" ].mean (), df_rl ["risk_intr" ].mean ()))
159
188
160
189
print ("Profit comparison - Balancing: {:+.0%}, Intraday: {:+.0%}, Integrated: {:+.0%}, , Benchmark: {:+.0%}" .format (
161
190
profit_rl / profit_bal ,
@@ -168,29 +197,74 @@ def read_results(path):
168
197
169
198
# ## RL (acc=80,95)
170
199
171
- # In[27 ]:
200
+ # In[17 ]:
172
201
173
202
174
- df_in = read_results ("../results/integrated-rl-80-95.csv" )
175
- print ("Risk factors - Balancing: {:.2f}. Intraday:{:.2f}" .format (df_in ["risk_bal" ].mean (), df_in ["risk_intr" ].mean ()))
176
- df_in .sum ()/ 1000
203
+ df_rl = read_results ("../results/accuracy/DDDQN-80-95_result.csv" )
204
+ print (df_rl .sum ()/ 1000 )
205
+ profit_rl = df_rl ["profit_eur" ].sum () / 1000
206
+ print ("Risk factors - Balancing: {:.2f}. Intraday:{:.2f}" .format (df_rl ["risk_bal" ].mean (), df_rl ["risk_intr" ].mean ()))
207
+
208
+ print ("Profit comparison - Balancing: {:+.0%}, Intraday: {:+.0%}, Integrated: {:+.0%}, , Benchmark: {:+.0%}" .format (
209
+ profit_rl / profit_bal ,
210
+ profit_rl / profit_intr ,
211
+ profit_rl / profit_in ,
212
+ profit_rl / profit_bench
213
+ )
214
+ )
215
+
216
+
217
+ # ## RL (acc=90,99)
218
+
219
+ # In[18]:
220
+
221
+
222
+ df_rl = read_results ("../results/accuracy/DDDQN-90-99_result.csv" )
223
+ print (df_rl .sum ()/ 1000 )
224
+ profit_rl = df_rl ["profit_eur" ].sum () / 1000
225
+ print ("Risk factors - Balancing: {:.2f}. Intraday:{:.2f}" .format (df_rl ["risk_bal" ].mean (), df_rl ["risk_intr" ].mean ()))
226
+
227
+ print ("Profit comparison - Balancing: {:+.0%}, Intraday: {:+.0%}, Integrated: {:+.0%}, , Benchmark: {:+.0%}" .format (
228
+ profit_rl / profit_bal ,
229
+ profit_rl / profit_intr ,
230
+ profit_rl / profit_in ,
231
+ profit_rl / profit_bench
232
+ )
233
+ )
234
+
235
+
236
+ # ## RL (acc=100,100)
237
+
238
+ # In[19]:
239
+
240
+
241
+ df_rl = read_results ("../results/accuracy/DDDQN-100-100_result.csv" )
242
+ print (df_rl .sum ()/ 1000 )
243
+ profit_rl = df_rl ["profit_eur" ].sum () / 1000
244
+ print ("Risk factors - Balancing: {:.2f}. Intraday:{:.2f}" .format (df_rl ["risk_bal" ].mean (), df_rl ["risk_intr" ].mean ()))
245
+
246
+ print ("Profit comparison - Balancing: {:+.0%}, Intraday: {:+.0%}, Integrated: {:+.0%}, , Benchmark: {:+.0%}" .format (
247
+ profit_rl / profit_bal ,
248
+ profit_rl / profit_intr ,
249
+ profit_rl / profit_in ,
250
+ profit_rl / profit_bench
251
+ )
252
+ )
177
253
178
254
179
255
# # Plots
180
256
181
257
# ## Style
182
258
183
- # In[ ]:
259
+ # In[20 ]:
184
260
185
261
186
262
sns .set (rc = {'figure.figsize' :(10 ,6 )})
187
-
188
- sns .set_context ("paper" , font_scale = 1.3 )
263
+ sns .set_context ("paper" , font_scale = 1.3 , rc = {"lines.linewidth" : 1.5 , "lines.markersize" : 7 })
189
264
190
265
sns .set_style ("white" )
191
266
sns .set_style ("ticks" )
192
267
193
-
194
268
palette = sns .cubehelix_palette (5 , start = .5 , rot = - .75 , reverse = True )
195
269
sns .set_palette (palette )
196
270
@@ -199,26 +273,25 @@ def read_results(path):
199
273
200
274
# ## Fleet Utilization
201
275
202
- # In[ ]:
276
+ # In[30 ]:
203
277
204
278
205
279
df_stats = read_results ("../results/stats-baseline.csv" )
206
- df_stats ["hour" ] = df_stats .index .hour
207
- df_stats .head ()
208
-
209
- def labels (y ):
210
- label = y .split ("_" )[0 ].title ()
211
- label = "Connected" if label == "Charging" else label
212
- label = label .upper () if label == "Vpp" else label
213
- return label
214
-
215
- Y = ["available_evs" , "charging_evs" , "vpp_evs" ]
216
- for y in Y :
217
- ax = sns .lineplot (x = "hour" , y = y , ci = "sd" , markers = ['X' ], data = df_stats , label = labels (y ))
218
-
280
+
281
+ df_stats = df_stats [["available_evs" , "charging_evs" , "vpp_evs" ]]
282
+ df_stats .columns = ["Available" , "Connected" , "VPP" ]
283
+
284
+ x = "Hour"
285
+ value_name = "Number EVs"
286
+ var_name = "Status"
287
+
288
+ df_stats [x ] = df_stats .index .hour
289
+ df_stats = pd .melt (df_stats , id_vars = x , var_name = var_name , value_name = value_name )
290
+
291
+ sns .set_palette (sns .cubehelix_palette (4 , start = .5 , rot = - .75 , reverse = True ))
292
+ sns .lineplot (x = x , y = value_name , hue = var_name , style = var_name , ci = "sd" , markers = False , data = df_stats )
293
+
219
294
sns .despine (offset = 10 )
220
- ax .set (xlabel = 'Hour' , ylabel = 'Number EVs' )
221
295
plt .xticks (np .arange (0 , 24 , 2 ));
222
296
plt .yticks (np .arange (0 , 500 , 50 ));
223
- plt .savefig ("../results/fig/fleet-utilization.png" )
224
297
0 commit comments