Skip to content
Snippets Groups Projects
Commit 055a28d3 authored by Maël Madon's avatar Maël Madon
Browse files

finish remaning campaign3 -> campaign + some cleaning

parent 700bfe94
Branches
Tags
No related merge requests found
%% Cell type:markdown id:sustained-helena tags:
 
# Analyse the data from the third campaign
 
In this notebook we analyse the results generated by launching the third experimental campaign `campaign3.py`.
In this notebook we analyse the results generated by launching the third experimental campaign `campaign.py`.
 
## Initializing the environment
 
%% Cell type:code id:yellow-parking tags:
 
``` python
from datetime import datetime,timedelta
import pandas as pd, json, numpy as np
from dateutil import parser
from scripts.util import *
from scripts.plot_library import *
import matplotlib.pyplot as plt
import math
from scipy.stats import linregress
 
#RAW_DATA_DIR is the directory where the raw simulation data are, OUT_DIR is the directory where the computed stats are
RAW_DATA_DIR = f"{ROOT_DIR}/out/"
OUT_DIR = f"{ROOT_DIR}/result-big-expe"
FIG_DIR = f"{ROOT_DIR}/../article/fig"
#%matplotlib inline
#plt.rcParams["figure.figsize"] = [15, 5]
 
# time used by the experiments
nb_days=164
save_number=0
nb_replicat = 30
 
expe_start_time = parser.parse('Sun Jun 1 00:00:00 CEST 2014').timestamp()
print(expe_start_time)
with open(f"{OUT_DIR}/expe_done_dict_{save_number}.json") as expe_done_file :
expe_done_dict =json.load(expe_done_file)
with open(f"{OUT_DIR}/windows_dict_{save_number}.json") as windows_dict_file :
windows_dict = json.load(windows_dict_file)
red_windows_dict = windows_dict["red_windows"]
yellow_windows_dict = windows_dict["yellow_windows"]
red_windows_dict = {int(k): v for k,v in red_windows_dict.items()}
yellow_windows_dict = {int(k) : v for k,v in yellow_windows_dict.items()}
print(red_windows_dict,yellow_windows_dict)
 
def confi_interval(group):
"""Confidence interval 99.7%"""
return 3 * group.std() / math.sqrt(nb_replicat)
```
 
%% Output
 
1401573600.0
{0: {'_simu_solar_wind': [[86400, 104400], [151200, 194400], [237601, 277200], [324000, 367200], [410401, 453600], [496801, 543600], [583201, 622800], [666001, 712800], [756001, 799200], [842401, 889200], [928801, 968400], [1015201, 1062000], [1101601, 1141200], [1188000, 1227600], [1274401, 1317600], [1360801, 1400400], [1447201, 1490400], [1530001, 1573200], [1620001, 1663200], [1706401, 1746000], [1792801, 1832400], [1879200, 1918800], [1969201, 2005200], [2055601, 2091600], [2142001, 2178000], [2224801, 2264400], [2311201, 2350800], [2397601, 2437200], [2484000, 2527200], [2570401, 2610000], [2613601, 2617200], [2656801, 2696400], [2743200, 2786400], [2829601, 2876400], [2912401, 2955600], [3002401, 3042000], [3092401, 3128400], [3178801, 3218400], [3265201, 3301200], [3351601, 3387600], [3438001, 3477600], [3520800, 3564000], [3603600, 3650400], [3697201, 3733200], [3780001, 3823200], [3870001, 3909600], [3952800, 3999600], [4035601, 4082400], [4122001, 4168800], [4212001, 4255200], [4302001, 4341600], [4384800, 4428000], [4471201, 4514400], [4557600, 4600800], [4644001, 4687200], [4730401, 4773600], [4816800, 4860000], [4903200, 4946400], [4989600, 5032800], [5076000, 5119200], [5162401, 5205600], [5248800, 5292000], [5335200, 5378400], [5421600, 5464800], [5508001, 5551200], [5594401, 5637600], [5680801, 5724000], [5767200, 5810400], [5853601, 5896800], [5940001, 5983200], [6026400, 6069600], [6112801, 6156000], [6199201, 6242400], [6285601, 6328800], [6372001, 6415200], [6458401, 6501600], [6541201, 6588000], [6631201, 6674400], [6717601, 6764400], [6804001, 6847200], [6890401, 6933600], [6976801, 7020000], [7063201, 7106400], [7149601, 7192800], [7236001, 7282800], [7322401, 7365600], [7408801, 7452000], [7495201, 7538400], [7581601, 7624800], [7668001, 7711200], [7754401, 7812000], [7833601, 7884000], [7923601, 7974000], [8010001, 8056800], [8100001, 8143200], [8182800, 8229600], [8269200, 8316000], [8359201, 8402400], [8445601, 8488800], [8528400, 8578800], [8614801, 8661600], [8701201, 8748000], [8787600, 8838000], [8874001, 8924400], [8960401, 9007200], [9046800, 9097200], [9133200, 9180000], [9219600, 9270000], [9306000, 9356400], [9392401, 9442800], [9478801, 9529200], [9565201, 9615600], [9648001, 9702000], [9738001, 9788400], [9824401, 9874800], [9907200, 9964800], [9993601, 10047600], [10080000, 10134000], [10166401, 10220400], [10252801, 10306800], [10339201, 10393200], [10422001, 10483200], [10515601, 10566000], [10598400, 10652400], [10688401, 10746000], [10767601, 10832400], [10836001, 10911600], [10933201, 10936800], [10940401, 11005200], [11030401, 11084400], [11116801, 11174400], [11199601, 11257200], [11289601, 11343600], [11376000, 11430000], [11462401, 11520000], [11548801, 11606400], [11635201, 11692800], [11721600, 11775600], [11808001, 11862000], [11894401, 11955600], [11980801, 12038400], [12067201, 12121200], [12153600, 12207600], [12240000, 12294000], [12326401, 12387600], [12405601, 12466800], [12499201, 12556800], [12564001, 12567600], [12578401, 12646800], [12668401, 12726000], [12758401, 12816000], [12841201, 12902400], [12931201, 12988800], [13017601, 13075200], [13100401, 13158000], [13190401, 13244400], [13276801, 13330800], [13363201, 13420800], [13449601, 13503600], [13536001, 13600800], [13611601, 13680000], [13705201, 13766400], [13795201, 13852800], [13878001, 13960800], [13964401, 14025600], [14050801, 14112000]]}} {0: {'_simu_solar_wind': [[104401, 108000], [234000, 237600], [277201, 280800], [396000, 403200], [406800, 410400], [453601, 457200], [493200, 496800], [543601, 547200], [579600, 583200], [622801, 630000], [662400, 666000], [712801, 716400], [752400, 756000], [838800, 842400], [889201, 892800], [925200, 928800], [968401, 972000], [1011600, 1015200], [1062001, 1069200], [1090800, 1101600], [1141201, 1144800], [1227601, 1231200], [1270800, 1274400], [1317601, 1321200], [1357200, 1360800], [1400401, 1404000], [1443600, 1447200], [1526400, 1530000], [1573201, 1576800], [1616400, 1620000], [1702800, 1706400], [1746001, 1749600], [1789200, 1792800], [1832401, 1836000], [1918801, 1922400], [1965600, 1969200], [2005201, 2008800], [2052000, 2055600], [2091601, 2095200], [2138400, 2142000], [2178001, 2181600], [2221200, 2224800], [2264401, 2268000], [2307600, 2311200], [2350801, 2354400], [2394000, 2397600], [2437201, 2440800], [2527201, 2530800], [2566800, 2570400], [2610001, 2613600], [2617201, 2624400], [2653200, 2656800], [2696401, 2700000], [2826000, 2829600], [2876401, 2880000], [2908800, 2912400], [2955601, 2959200], [2998800, 3002400], [3042001, 3045600], [3088800, 3092400], [3128401, 3132000], [3175200, 3178800], [3218401, 3225600], [3261600, 3265200], [3301201, 3304800], [3348000, 3351600], [3387601, 3391200], [3434400, 3438000], [3564001, 3567600], [3650401, 3654000], [3693600, 3697200], [3733201, 3736800], [3776400, 3780000], [3866400, 3870000], [3999601, 4003200], [4032000, 4035600], [4082401, 4086000], [4118400, 4122000], [4168801, 4172400], [4204800, 4212000], [4298400, 4302000], [4467600, 4471200], [4600801, 4604400], [4640400, 4644000], [4726800, 4730400], [4773601, 4777200], [4946401, 4950000], [5119201, 5126400], [5158800, 5162400], [5205601, 5209200], [5464801, 5468400], [5504400, 5508000], [5551201, 5554800], [5587200, 5594400], [5677200, 5680800], [5724001, 5727600], [5810401, 5814000], [5850000, 5853600], [5936400, 5940000], [6069601, 6073200], [6109200, 6112800], [6156001, 6159600], [6195600, 6199200], [6242401, 6246000], [6282000, 6285600], [6328801, 6332400], [6368400, 6372000], [6415201, 6418800], [6444000, 6447600], [6454800, 6458400], [6501601, 6508800], [6534000, 6541200], [6588001, 6591600], [6627600, 6631200], [6674401, 6678000], [6714000, 6717600], [6764401, 6768000], [6800400, 6804000], [6847201, 6850800], [6886800, 6890400], [6933601, 6937200], [6973200, 6976800], [7020001, 7023600], [7059600, 7063200], [7106401, 7110000], [7146000, 7149600], [7192801, 7196400], [7232400, 7236000], [7282801, 7286400], [7318800, 7322400], [7365601, 7369200], [7405200, 7408800], [7452001, 7455600], [7491600, 7495200], [7538401, 7542000], [7578000, 7581600], [7624801, 7632000], [7664400, 7668000], [7711201, 7714800], [7750800, 7754400], [7812001, 7833600], [7884001, 7887600], [7920000, 7923600], [7974001, 7977600], [8006400, 8010000], [8056801, 8060400], [8096400, 8100000], [8143201, 8146800], [8229601, 8233200], [8316001, 8319600], [8355600, 8359200], [8402401, 8406000], [8442000, 8445600], [8488801, 8492400], [8578801, 8586000], [8611200, 8614800], [8661601, 8665200], [8697600, 8701200], [8748001, 8751600], [8838001, 8841600], [8848800, 8852400], [8870400, 8874000], [8924401, 8928000], [8956800, 8960400], [9007201, 9010800], [9180001, 9183600], [9388800, 9392400], [9475200, 9478800], [9561600, 9565200], [9615601, 9619200], [9633600, 9637200], [9644400, 9648000], [9702001, 9709200], [9734400, 9738000], [9788401, 9792000], [9820800, 9824400], [9874801, 9882000], [9964801, 9968400], [9990000, 9993600], [10134001, 10137600], [10162800, 10166400], [10220401, 10227600], [10249200, 10252800], [10306801, 10310400], [10332000, 10339200], [10393201, 10396800], [10407600, 10411200], [10414800, 10422000], [10483201, 10486800], [10512000, 10515600], [10566001, 10569600], [10684800, 10688400], [10746001, 10753200], [10760400, 10767600], [10832401, 10836000], [10911601, 10915200], [10929600, 10933200], [10936801, 10940400], [11005201, 11008800], [11026800, 11030400], [11084401, 11088000], [11113200, 11116800], [11174401, 11178000], [11196000, 11199600], [11257201, 11260800], [11286000, 11289600], [11343601, 11347200], [11430001, 11433600], [11458800, 11462400], [11520001, 11527200], [11545200, 11548800], [11631600, 11635200], [11692801, 11696400], [11775601, 11782800], [11804400, 11808000], [11862001, 11865600], [11883600, 11894400], [11955601, 11962800], [11977200, 11980800], [12038401, 12042000], [12060000, 12067200], [12121201, 12124800], [12207601, 12211200], [12294001, 12297600], [12322800, 12326400], [12387601, 12394800], [12398400, 12405600], [12466801, 12470400], [12495600, 12499200], [12556801, 12564000], [12567601, 12578400], [12646801, 12668400], [12726001, 12729600], [12754800, 12758400], [12816001, 12819600], [12837600, 12841200], [12902401, 12906000], [12927600, 12931200], [12988801, 12992400], [13014000, 13017600], [13075201, 13082400], [13093200, 13100400], [13158001, 13161600], [13186800, 13190400], [13244401, 13248000], [13273200, 13276800], [13330801, 13334400], [13359600, 13363200], [13446000, 13449600], [13503601, 13507200], [13532400, 13536000], [13600801, 13611600], [13680001, 13683600], [13701600, 13705200], [13791600, 13795200], [13852801, 13856400], [13870800, 13878000], [13960801, 13964400], [14047200, 14050800], [14112001, 14115600]]}}
 
%% Cell type:markdown id:b20d17c8 tags:
 
## Compare loads with graph
Let's compute some load graph with 4 scenario only rigid, low_effort, max_effort with yellow state, renounce only in red state. We will also compute the queue size.
 
%% Cell type:code id:impressed-disclosure tags:
 
``` python
# Visualize results
EXPE_LIST = [f"{RAW_DATA_DIR}/expe0/replay_user_rigid_simu_solar_wind_0",f"{RAW_DATA_DIR}/expe0/dm_user_multi_behavior_low_effort_simu_solar_wind_65565",f"{RAW_DATA_DIR}/expe0/dm_user_multi_behavior_max_effort_simu_solar_wind_yellow_147465",f"{RAW_DATA_DIR}/expe0/dm_user_multi_behavior_renonce_simu_solar_wind_0"]
LABEL_LIST = ["rigid only", "low effort", "max effort yellow","renounce"]
COLOR_LIST=["black","blue","darkred","gray"]
plot_queue_windows(EXPE_LIST,LABEL_LIST,COLOR_LIST,red_windows_dict[0]["_simu_solar_wind"],yellow_windows_dict[0]["_simu_solar_wind"],7*12*24,7*13*24-2*24,fontsize=25)
plot_load_windows(EXPE_LIST,LABEL_LIST,COLOR_LIST,red_windows_dict[0]["_simu_solar_wind"],yellow_windows_dict[0]["_simu_solar_wind"],7*12*24,7*13*24-2*24,fontsize=25)
```
 
%% Output
 
/home/mael/.local/lib/python3.10/site-packages/evalys/metrics.py:68: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
event_df = start_event_df.append(
/home/mael/.local/lib/python3.10/site-packages/evalys/metrics.py:68: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
event_df = start_event_df.append(
/home/mael/.local/lib/python3.10/site-packages/evalys/metrics.py:68: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
event_df = start_event_df.append(
/home/mael/.local/lib/python3.10/site-packages/evalys/metrics.py:68: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
event_df = start_event_df.append(
 
Line2D(rigid only) black
Line2D(low effort) blue
Line2D(max effort yellow) darkred
Line2D(renounce) gray
 
 
/home/mael/.local/lib/python3.10/site-packages/evalys/metrics.py:68: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
event_df = start_event_df.append(
/home/mael/.local/lib/python3.10/site-packages/evalys/metrics.py:68: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
event_df = start_event_df.append(
/home/mael/.local/lib/python3.10/site-packages/evalys/metrics.py:68: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
event_df = start_event_df.append(
/home/mael/.local/lib/python3.10/site-packages/evalys/metrics.py:68: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
event_df = start_event_df.append(
 
Line2D(rigid only) black
Line2D(low effort) blue
Line2D(max effort yellow) darkred
Line2D(renounce) gray
 
 
%% Cell type:markdown id:ec6a7ed9 tags:
 
## State distribution
We can see the state distribution during a week of the experiments. We cross with the used energy data
 
%% Cell type:code id:d9066775 tags:
 
``` python
red_windows,yellow_windows = red_windows_dict[0]["_simu_solar_wind"],yellow_windows_dict[0]["_simu_solar_wind"]
#energy datafile
production_dataframe = pd.read_csv(f"{ROOT_DIR}/data_energy/energy_trace_sizing_solar.csv")
day_offset = 7*(12)
yellow_threshold = 42*150
red_threshold = yellow_threshold//2
# plot the windows and production we add a 150 days offset because our experiments start in 1st June and
# the energy data start at 1st January
beg = 24*3600 + day_offset*24*3600
end = 8*24*3600 + day_offset*24*3600
plot_window_list_extra(red_windows,yellow_windows,beg, end, red_threshold,yellow_threshold, production_dataframe,150,tick=6,width=12,height=6,fontsize=18)
ax = plt.gca()
ax.yaxis.set_ticks(np.arange(0, 30000, 5000), labels=np.arange(0, 30, 5))
ax.set_xlim(beg, end)
plt.ylabel("renewable production (kW)")
plt.legend()
plt.savefig(f"{FIG_DIR}/windows_distrib.pdf", bbox_inches="tight")
plt.show()
```
 
%% Output
 
 
%% Cell type:code id: tags:
 
``` python
plot_window_list_extra(red_windows,yellow_windows,24*3600 +day_offset*24*3600,8*24*3600 + day_offset*24*3600, red_threshold,yellow_threshold, production_dataframe,150,tick=6,width=12,height=4,fontsize=12)
```
 
%% Output
 
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/mael/git/stage-jolyne/demand-response-expe/analyse_campaign3.ipynb Cell 7 line 1
----> <a href='vscode-notebook-cell:/home/mael/git/stage-jolyne/demand-response-expe/analyse_campaign3.ipynb#X45sZmlsZQ%3D%3D?line=0'>1</a> plot_window_list_extra(red_windows,yellow_windows,24*3600 +day_offset*24*3600,8*24*3600 + day_offset*24*3600, red_threshold,yellow_threshold, production_dataframe,150,tick=6,width=12,height=4,fontsize=12)
File ~/git/stage-jolyne/demand-response-expe/scripts/plot_library.py:81, in plot_window_list_extra(red_window_list, yellow_window_list, begin_exp, end_exp, red_threshold, yellow_threshold, energy_produced_dataframe, offset_day_production, tick, width, height, fontsize)
79 ax.xaxis.set_ticks(np.arange(begin_exp, end_exp + 1, tick * 3600))
80 ax.xaxis.set_ticklabels(np.arange(begin_exp // 3600, end_exp // 3600 + 1, tick) % 24,fontsize=fontsize)
---> 81 power_max=int((power_produced_max*1.2)//100*100)
82 tick_y = power_max // 10
83 ax.yaxis.set_ticks(np.arange(0,power_max,tick_y,dtype=int))
ValueError: cannot convert float NaN to integer
 
 
%% Cell type:markdown id:673005dc tags:
 
Let's compute length distribution of the state
 
%% Cell type:code id:ae2e08ba tags:
 
``` python
def compute_windows_length_list(window_list) :
window_length_list =[]
for window in window_list :
window_length_list.append((window[1]-window[0])/3600)
return window_length_list
yellow_windows_length = compute_windows_length_list(yellow_windows)
red_windows_length= compute_windows_length_list(red_windows)
yellow_windows_length_df= pd.DataFrame(data=yellow_windows_length)
red_windows_length_df = pd.DataFrame(data=red_windows_length)
print("Distribution analysis of state length (in hours)")
print("Yellow state :")
print(yellow_windows_length_df.value_counts())
print("Red state :")
print(red_windows_length_df.value_counts())
print(red_windows_length_df.quantile([0.1,0.25,0.75,0.9]))
print("Max length of windows (in hours) : ")
print("Yellow state :")
print(yellow_windows_length_df.max())
print("Red state : ")
print(red_windows_length_df.max())
print("Total Duration of windows (in hours) :")
print("Yellow state :")
print(yellow_windows_length_df.sum())
print("Red state : ")
print(red_windows_length_df.sum())
plt.show()
```
 
%% Output
 
Distribution analysis of state length (in hours)
Yellow state :
1.000000 113
0.999722 112
1.999722 18
2.000000 11
2.999722 2
3.000000 2
5.999722 2
dtype: int64
Red state :
11.999722 37
10.999722 17
15.999722 16
12.000000 16
12.999722 14
14.999722 12
13.999722 9
16.999722 8
9.999722 7
15.000000 6
14.000000 5
13.000000 5
17.999722 3
0.999722 3
11.000000 2
18.999722 2
16.000000 1
5.000000 1
20.999722 1
22.999722 1
dtype: int64
0
0.10 10.999722
0.25 11.999722
0.75 14.999722
0.90 15.999722
Max length of windows (in hours) :
Yellow state :
0 5.999722
dtype: float64
Red state :
0 22.999722
dtype: float64
Total Duration of windows (in hours) :
Yellow state :
0 306.962778
dtype: float64
Red state :
0 2179.963889
dtype: float64
 
%% Cell type:markdown id:e3960438 tags:
 
Let's compute the state distribution in function of the time of the day.
 
%% Cell type:code id:a3b32d9b tags:
 
``` python
def compute_windows_datetime(window_list,expe_start_timestamp) :
window_datetime_list =[]
for window in window_list :
begin,end = window[0] + expe_start_timestamp, window[1] + expe_start_timestamp
window_datetime_list.append([datetime.fromtimestamp(begin),datetime.fromtimestamp(end)])
return window_datetime_list
def compute_windows_hourday(window_list_datetime) :
window_hourday_list =[]
for window in window_list_datetime :
begin = window[0].hour
end = window[1].hour
window_hourday_list.append([begin,end])
return window_hourday_list
def cut_window(window_list,begin_exp,end_exp) :
for window in window_list :
window[0] = max(begin_exp,window[0])
window[1] = min(end_exp,window[1])
def compute_hour_list(hour_window) :
begin_range = hour_window[0]
end_range = hour_window[1]
if hour_window[0] == hour_window[1] :
end_range+=1
if hour_window[0] > hour_window[1] :
end_range = hour_window[1]+24
hour_list =[]
for hour in range(begin_range,end_range) :
hour_list.append(hour%24)
return hour_list
def compute_hour_list_all(hour_window_list) :
hour_list = []
for hour_window in hour_window_list :
hour_list+=compute_hour_list(hour_window)
return hour_list
 
begin_exp = 1*24*3600
end_exp = 163*24*3600+ 3601
cut_window(yellow_windows,begin_exp,end_exp)
cut_window(red_windows,begin_exp,end_exp)
yellow_windows_datetime = compute_windows_datetime(yellow_windows,expe_start_time)
red_windows_datetime = compute_windows_datetime(red_windows,expe_start_time)
yellow_windows_hourday = compute_windows_hourday(yellow_windows_datetime)
red_windows_hourday = compute_windows_hourday(red_windows_datetime)
yellow_hour_list = compute_hour_list_all(yellow_windows_hourday)
yellow_hour_list = yellow_hour_list + [i for i in range(24)]
red_hour_list = compute_hour_list_all(red_windows_hourday)
yellow_windows_hourday_df = pd.DataFrame(data=yellow_hour_list,columns=["hour"])
red_windows_hourday_df = pd.DataFrame(data=red_hour_list,columns=["hour"])
aggregated_red = red_windows_hourday_df.value_counts()
aggregated_red.sort_index(inplace=True)
aggregated_red_df = pd.DataFrame(aggregated_red,columns=["number of windows"])
aggregated_red_df.reset_index(inplace=True)
 
aggregated_yellow = yellow_windows_hourday_df.value_counts()
aggregated_yellow.sort_index(inplace=True)
aggregated_yellow_df = pd.DataFrame(aggregated_yellow,columns=["number of windows"])
aggregated_yellow_df.reset_index(inplace=True)
aggregated_yellow_df["number of windows"]-=1
aggregated_green_df = aggregated_red_df.copy()
aggregated_green_df["number of windows"] = 162-(aggregated_red_df["number of windows"] + aggregated_yellow_df["number of windows"])
aggregated_green_df["number of windows"] = np.maximum(0,aggregated_green_df["number of windows"])
aggregated_windows = aggregated_red_df.loc[:,["hour"]]
aggregated_windows["red"] = aggregated_red_df["number of windows"]
aggregated_windows["yellow"] = aggregated_yellow_df["number of windows"]
aggregated_windows["green"] = aggregated_green_df["number of windows"]
print(aggregated_windows)
fig = plt.figure(figsize=(6,3))
ax= plt.gca()
aggregated_windows.plot.bar(x="hour",rot=0,ax=ax,color={"red" : "darkred", "yellow" : "orange", "green" : "green" })
 
# You can comment or uncomment this section to get the number on the bar
for bars in ax.containers:
ax.bar_label(bars,fontsize=4)
print(bars)
 
ax = plt.gca()
ax.xaxis.set_ticks(np.arange(0, 24, 2))
ax.xaxis.set_ticklabels(np.arange(0, 24, 2)%24)
plt.legend(title="state:", bbox_to_anchor=(0.5, 0., 0.5, 0.7))
plt.xlabel("hour of the day")
plt.ylabel("number of days")
plt.savefig(f"{FIG_DIR}/stat_windows.pdf", bbox_inches="tight")
plt.show()
```
 
%% Output
 
hour red yellow green
0 0 162 0 0
1 1 162 0 0
2 2 162 0 0
3 3 162 0 0
4 4 162 0 0
5 5 137 25 0
6 6 65 53 44
7 7 17 43 102
8 8 9 16 137
9 9 2 10 150
10 10 3 8 151
11 11 2 6 154
12 12 3 9 150
13 13 3 14 145
14 14 10 21 131
15 15 24 22 116
16 16 49 23 90
17 17 77 56 29
18 18 151 12 0
19 19 162 1 0
20 20 162 1 0
21 21 162 1 0
22 22 162 1 0
23 23 162 1 0
<BarContainer object of 24 artists>
<BarContainer object of 24 artists>
<BarContainer object of 24 artists>
 
 
%% Cell type:markdown id:attractive-inspection tags:
 
## metrics of all expes
 
%% Cell type:markdown id:f6ad76dd tags:
 
Lets see how this files look like:
 
%% Cell type:code id:extended-minutes tags:
 
``` python
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign3_big.csv")
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign_big.csv")
metrics
```
 
%% Output
 
Unnamed: 0 XP dir \
0 0 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
1 1 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
2 2 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
3 3 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
4 4 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
.. ... .. ...
239 239 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
240 240 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
241 241 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
242 242 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/d...
243 243 0 /home/jogatt/stage-jolyne/save-dir/out/expe0/r...
behavior #jobs seed \
0 dm_user_multi_behavior_big_effort 570005 0
1 dm_user_multi_behavior_big_effort 569774 1
2 dm_user_multi_behavior_big_effort 569912 2
3 dm_user_multi_behavior_big_effort 569662 3
4 dm_user_multi_behavior_big_effort 569360 4
.. ... ... ...
239 dm_user_multi_behavior_medium_effort_yellow 600961 213020
240 dm_user_multi_behavior_medium_effort_yellow 601277 213021
241 dm_user_multi_behavior_reconfig 649480 0
242 dm_user_multi_behavior_renonce 394094 0
243 replay_user_rigid 649480 0
Duration_red (seconds) Duration_yellow (seconds) \
0 7847870 1105066
1 7847870 1105066
2 7847870 1105066
3 7847870 1105066
4 7847870 1105066
.. ... ...
239 7847870 1105066
240 7847870 1105066
241 7847870 1105066
242 7847870 1105066
243 7847870 1105066
Duration_total (seconds) NRJ_red (Joules) ... mean_corrected_wtime \
0 13996800 2.702822e+10 ... 11996.698248
1 13996800 2.704235e+10 ... 10570.916222
2 13996800 2.701490e+10 ... 9431.066887
3 13996800 2.698951e+10 ... 10328.101735
4 13996800 2.697545e+10 ... 12648.252150
.. ... ... ... ...
239 13996800 2.816022e+10 ... 12093.643089
240 13996800 2.811065e+10 ... 9831.591329
241 13996800 3.040103e+10 ... 10949.847486
242 13996800 2.023153e+10 ... 14796.787936
243 13996800 3.044820e+10 ... NaN
max_corrected_wtime mean_corrected_sdown max_corrected_sdown \
0 646009.222222 117.792405 57064.700000
1 676850.000000 105.654509 60437.200000
2 689055.000000 107.903784 60362.100000
3 657852.999999 110.939163 58697.700000
4 642279.000003 112.736757 60636.400003
.. ... ... ...
239 663619.000001 104.806675 57903.000000
240 613274.999999 114.816868 61327.700000
241 672882.000001 114.230228 64106.600000
242 604086.000000 94.857235 55251.500000
243 NaN NaN NaN
mean_corrected_wtime_2 max_corrected_wtime_2 mean_corrected_sdown_2 \
0 11996.698089 646012.222222 118.494916
1 10570.909743 676853.000000 106.356916
2 9431.074915 689058.000000 108.606393
3 10328.103641 657855.999999 111.641875
4 12648.256066 642283.000003 113.440009
.. ... ... ...
239 12093.651372 663615.000001 105.473008
240 9831.603488 613273.999999 115.482646
241 10949.866090 672877.000001 114.846750
242 14796.751217 604086.000000 95.872650
243 NaN NaN NaN
max_corrected_sdown_2 max_diff_wtime_sanity max_diff_sdown_sanity
0 400001.000008 50.000001 400000.000008
1 400001.000008 50.000002 400000.000008
2 400001.000008 50.000001 400000.000008
3 400001.000008 50.000000 400000.000008
4 400001.000008 50.000002 400000.000008
.. ... ... ...
239 400001.000008 50.000000 400000.000008
240 400001.000008 50.000000 400000.000008
241 400001.000008 50.000000 400000.000008
242 400001.000008 50.000000 400000.000008
243 NaN NaN NaN
[244 rows x 54 columns]
 
%% Cell type:code id:bottom-moore tags:
 
``` python
# analyze metrics relative to the control XP
import math
expe_filename = f"{OUT_DIR}/metrics_relative_campaign3_big.csv"
expe_filename = f"{OUT_DIR}/metrics_relative_campaign_big.csv"
metrics_relative = pd.read_csv(expe_filename)
aggregated_behavior_mean = metrics_relative.groupby(["window_type","behavior","XP"]).mean()
aggregated_behavior_mean = aggregated_behavior_mean.add_suffix("_mean")
aggregated_behavior_accuracy = 3 * metrics_relative.groupby(["window_type","behavior","XP"]).std() / math.sqrt(nb_replicat)
aggregated_behavior_accuracy = aggregated_behavior_accuracy.add_suffix("_accuracy")
aggregated_behavior_mean_accuracy = pd.concat([aggregated_behavior_mean,aggregated_behavior_accuracy],axis=1)
columns_list = ["true_rigid_jobs", "renonce_jobs", "consider_degrad_jobs","reconfig_jobs",'C_you_later_jobs']
columns_list = [name+ suffix for name in columns_list for suffix in ["_mean","_accuracy"] ]
aggregated_behavior_mean_accuracy.loc[:,columns_list]
```
 
%% Output
 
true_rigid_jobs_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 -29.484418
dm_user_multi_behavior_degrad 0 -39.321303
dm_user_multi_behavior_low_effort 0 -9.815663
dm_user_multi_behavior_max_effort 0 -39.321601
dm_user_multi_behavior_medium_effort 0 -19.658737
dm_user_multi_behavior_reconfig 0 -6.310433
dm_user_multi_behavior_renonce 0 -39.321611
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 -32.703460
dm_user_multi_behavior_low_effort_yellow 0 -10.905966
dm_user_multi_behavior_max_effort_yellow 0 -43.591468
dm_user_multi_behavior_medium_effort_yellow 0 -21.805342
true_rigid_jobs_accuracy \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 0.020904
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 0.017107
dm_user_multi_behavior_max_effort 0 0.000021
dm_user_multi_behavior_medium_effort 0 0.028837
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 0.023745
dm_user_multi_behavior_low_effort_yellow 0 0.016434
dm_user_multi_behavior_max_effort_yellow 0 0.010214
dm_user_multi_behavior_medium_effort_yellow 0 0.019555
renonce_jobs_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 12.281435
dm_user_multi_behavior_degrad 0 0.000000
dm_user_multi_behavior_low_effort 0 3.395522
dm_user_multi_behavior_max_effort 0 18.222881
dm_user_multi_behavior_medium_effort 0 7.449016
dm_user_multi_behavior_reconfig 0 0.000000
dm_user_multi_behavior_renonce 0 39.321611
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 12.279100
dm_user_multi_behavior_low_effort_yellow 0 3.410467
dm_user_multi_behavior_max_effort_yellow 0 18.218416
dm_user_multi_behavior_medium_effort_yellow 0 7.450863
renonce_jobs_accuracy \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 0.014187
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 0.010774
dm_user_multi_behavior_max_effort 0 0.024452
dm_user_multi_behavior_medium_effort 0 0.013369
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 0.019891
dm_user_multi_behavior_low_effort_yellow 0 0.010400
dm_user_multi_behavior_max_effort_yellow 0 0.024264
dm_user_multi_behavior_medium_effort_yellow 0 0.014036
consider_degrad_jobs_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 12.279526
dm_user_multi_behavior_degrad 0 39.321303
dm_user_multi_behavior_low_effort 0 3.409153
dm_user_multi_behavior_max_effort 0 18.212190
dm_user_multi_behavior_medium_effort 0 7.429313
dm_user_multi_behavior_reconfig 0 0.000000
dm_user_multi_behavior_renonce 0 0.000000
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 15.180195
dm_user_multi_behavior_low_effort_yellow 0 4.330870
dm_user_multi_behavior_max_effort_yellow 0 22.171568
dm_user_multi_behavior_medium_effort_yellow 0 9.318096
consider_degrad_jobs_accuracy \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 0.015494
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 0.013972
dm_user_multi_behavior_max_effort 0 0.025068
dm_user_multi_behavior_medium_effort 0 0.016337
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 0.022675
dm_user_multi_behavior_low_effort_yellow 0 0.011478
dm_user_multi_behavior_max_effort_yellow 0 0.027180
dm_user_multi_behavior_medium_effort_yellow 0 0.020327
reconfig_jobs_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 1.447450
dm_user_multi_behavior_degrad 0 0.000000
dm_user_multi_behavior_low_effort 0 0.418868
dm_user_multi_behavior_max_effort 0 2.078555
dm_user_multi_behavior_medium_effort 0 0.899494
dm_user_multi_behavior_reconfig 0 6.310433
dm_user_multi_behavior_renonce 0 0.000000
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 1.943996
dm_user_multi_behavior_low_effort_yellow 0 0.581871
dm_user_multi_behavior_max_effort_yellow 0 2.749045
dm_user_multi_behavior_medium_effort_yellow 0 1.228306
reconfig_jobs_accuracy \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 0.007390
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 0.004780
dm_user_multi_behavior_max_effort 0 0.007603
dm_user_multi_behavior_medium_effort 0 0.006831
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 0.006087
dm_user_multi_behavior_low_effort_yellow 0 0.004618
dm_user_multi_behavior_max_effort_yellow 0 0.009365
dm_user_multi_behavior_medium_effort_yellow 0 0.005825
C_you_later_jobs_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 9.432366
dm_user_multi_behavior_degrad 0 0.000000
dm_user_multi_behavior_low_effort 0 3.143715
dm_user_multi_behavior_max_effort 0 12.581275
dm_user_multi_behavior_medium_effort 0 6.289421
dm_user_multi_behavior_reconfig 0 0.000000
dm_user_multi_behavior_renonce 0 0.000000
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 9.438228
dm_user_multi_behavior_low_effort_yellow 0 3.153353
dm_user_multi_behavior_max_effort_yellow 0 12.587224
dm_user_multi_behavior_medium_effort_yellow 0 6.293271
C_you_later_jobs_accuracy
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 0.019882
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 0.011135
dm_user_multi_behavior_max_effort 0 0.020472
dm_user_multi_behavior_medium_effort 0 0.015590
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 0.020445
dm_user_multi_behavior_low_effort_yellow 0 0.012742
dm_user_multi_behavior_max_effort_yellow 0 0.023856
dm_user_multi_behavior_medium_effort_yellow 0 0.013159
 
%% Cell type:markdown id:84af2d5b tags:
 
Let's compute the metrics of energy in KwH and the accuracy using standard deviation.
 
%% Cell type:code id:02310919 tags:
 
``` python
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign3_big.csv")
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign_big.csv")
#Convert energy to kwh for better view
metrics["NRJ_red (kwh)"] = metrics["NRJ_red (Joules)"]/3600/1000
metrics["NRJ_total (kwh)"] = metrics["NRJ_total (Joules)"]/3600/1000
metrics["NRJ_yellow (kwh)"] = metrics["NRJ_yellow (Joules)"]/3600/1000
metrics["energy underproduced (kwh)"] = metrics["energy underproduced (Joules)"]/3600/1000
metrics["energy overproduced (kwh)"]= metrics["energy overproduced (Joules)"]/3600/1000
aggregated_energy_mean = metrics.groupby(["window_type","behavior","XP"]).mean()
aggregated_energy_mean = aggregated_energy_mean.add_suffix("_mean")
# accuracy is round up to integer to ease reading
aggregated_energy_accuracy = (3 * metrics.groupby(["window_type","behavior","XP"]).std() / math.sqrt(nb_replicat)).apply(np.ceil)
aggregated_energy_accuracy = aggregated_energy_accuracy.add_suffix("_accuracy")
aggregated_energy_mean_accuracy = pd.concat([aggregated_energy_mean,aggregated_energy_accuracy],axis=1)
columns_list = ["NRJ_red (kwh)", "NRJ_yellow (kwh)", "NRJ_total (kwh)","energy underproduced (kwh)",'energy overproduced (kwh)']
columns_list = [name+ suffix for name in columns_list for suffix in ["_mean","_accuracy"] ]
aggregated_energy_mean_accuracy.loc[:,columns_list]
```
 
%% Output
 
NRJ_red (kwh)_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 7503.086017
dm_user_multi_behavior_degrad 0 7213.664085
dm_user_multi_behavior_low_effort 0 8194.074735
dm_user_multi_behavior_max_effort 0 7019.031387
dm_user_multi_behavior_medium_effort 0 7881.703283
dm_user_multi_behavior_reconfig 0 8444.731088
dm_user_multi_behavior_renonce 0 5619.868528
replay_user_rigid 0 8457.832285
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 7421.517262
dm_user_multi_behavior_low_effort_yellow 0 8165.403507
dm_user_multi_behavior_max_effort_yellow 0 6914.665159
dm_user_multi_behavior_medium_effort_yellow 0 7826.659792
NRJ_red (kwh)_accuracy \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 7.0
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 4.0
dm_user_multi_behavior_max_effort 0 8.0
dm_user_multi_behavior_medium_effort 0 7.0
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
replay_user_rigid 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 8.0
dm_user_multi_behavior_low_effort_yellow 0 6.0
dm_user_multi_behavior_max_effort_yellow 0 8.0
dm_user_multi_behavior_medium_effort_yellow 0 7.0
NRJ_yellow (kwh)_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 1072.854073
dm_user_multi_behavior_degrad 0 1036.689216
dm_user_multi_behavior_low_effort 0 1124.334183
dm_user_multi_behavior_max_effort 0 1046.528079
dm_user_multi_behavior_medium_effort 0 1098.813792
dm_user_multi_behavior_reconfig 0 1161.352545
dm_user_multi_behavior_renonce 0 944.343888
replay_user_rigid 0 1145.257863
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 1053.319755
dm_user_multi_behavior_low_effort_yellow 0 1119.532479
dm_user_multi_behavior_max_effort_yellow 0 1019.927423
dm_user_multi_behavior_medium_effort_yellow 0 1088.183915
NRJ_yellow (kwh)_accuracy \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 2.0
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 1.0
dm_user_multi_behavior_max_effort 0 2.0
dm_user_multi_behavior_medium_effort 0 2.0
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
replay_user_rigid 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 2.0
dm_user_multi_behavior_low_effort_yellow 0 2.0
dm_user_multi_behavior_max_effort_yellow 0 2.0
dm_user_multi_behavior_medium_effort_yellow 0 2.0
NRJ_total (kwh)_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 13968.959981
dm_user_multi_behavior_degrad 0 13523.178534
dm_user_multi_behavior_low_effort 0 14815.742360
dm_user_multi_behavior_max_effort 0 13399.565571
dm_user_multi_behavior_medium_effort 0 14429.298778
dm_user_multi_behavior_reconfig 0 15259.567423
dm_user_multi_behavior_renonce 0 11682.595201
replay_user_rigid 0 15143.223636
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 13862.230387
dm_user_multi_behavior_low_effort_yellow 0 14779.105402
dm_user_multi_behavior_max_effort_yellow 0 13252.599830
dm_user_multi_behavior_medium_effort_yellow 0 14360.540520
NRJ_total (kwh)_accuracy \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 10.0
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 5.0
dm_user_multi_behavior_max_effort 0 11.0
dm_user_multi_behavior_medium_effort 0 9.0
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
replay_user_rigid 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 11.0
dm_user_multi_behavior_low_effort_yellow 0 8.0
dm_user_multi_behavior_max_effort_yellow 0 11.0
dm_user_multi_behavior_medium_effort_yellow 0 8.0
energy underproduced (kwh)_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 7173.866329
dm_user_multi_behavior_degrad 0 6915.808308
dm_user_multi_behavior_low_effort 0 7842.702819
dm_user_multi_behavior_max_effort 0 6717.154178
dm_user_multi_behavior_medium_effort 0 7538.836037
dm_user_multi_behavior_reconfig 0 8074.889661
dm_user_multi_behavior_renonce 0 5481.340914
replay_user_rigid 0 8098.083744
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 7087.144892
dm_user_multi_behavior_low_effort_yellow 0 7812.993440
dm_user_multi_behavior_max_effort_yellow 0 6602.495035
dm_user_multi_behavior_medium_effort_yellow 0 7479.663224
energy underproduced (kwh)_accuracy \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 7.0
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 4.0
dm_user_multi_behavior_max_effort 0 7.0
dm_user_multi_behavior_medium_effort 0 7.0
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
replay_user_rigid 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 8.0
dm_user_multi_behavior_low_effort_yellow 0 6.0
dm_user_multi_behavior_max_effort_yellow 0 7.0
dm_user_multi_behavior_medium_effort_yellow 0 6.0
energy overproduced (kwh)_mean \
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 16794.349403
dm_user_multi_behavior_degrad 0 16971.845675
dm_user_multi_behavior_low_effort 0 16608.920861
dm_user_multi_behavior_max_effort 0 16909.727849
dm_user_multi_behavior_medium_effort 0 16695.386260
dm_user_multi_behavior_reconfig 0 16401.182241
dm_user_multi_behavior_renonce 0 17307.895791
replay_user_rigid 0 16531.954350
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 16814.942815
dm_user_multi_behavior_low_effort_yellow 0 16616.045941
dm_user_multi_behavior_max_effort_yellow 0 16943.196475
dm_user_multi_behavior_medium_effort_yellow 0 16705.156668
energy overproduced (kwh)_accuracy
window_type behavior XP
_simu_solar_wind dm_user_multi_behavior_big_effort 0 4.0
dm_user_multi_behavior_degrad 0 NaN
dm_user_multi_behavior_low_effort 0 3.0
dm_user_multi_behavior_max_effort 0 5.0
dm_user_multi_behavior_medium_effort 0 4.0
dm_user_multi_behavior_reconfig 0 NaN
dm_user_multi_behavior_renonce 0 NaN
replay_user_rigid 0 NaN
_simu_solar_wind_yellow dm_user_multi_behavior_big_effort_yellow 0 6.0
dm_user_multi_behavior_low_effort_yellow 0 4.0
dm_user_multi_behavior_max_effort_yellow 0 5.0
dm_user_multi_behavior_medium_effort_yellow 0 4.0
 
%% Cell type:markdown id:c48b00ec tags:
 
Let's compute the correlation between effort probability alpha and metric underproduction.
 
%% Cell type:code id:1854d2a3 tags:
 
``` python
def behavior_to_alpha(behavior):
if "rigid" in behavior :
return 0
if "low_" in behavior :
return .25
if "medium_" in behavior :
return .5
if "big_" in behavior :
return .75
if "max_" in behavior :
return 1
 
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign3_big.csv")
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign_big.csv")
metrics["alpha"]=metrics["behavior"].apply(lambda x : behavior_to_alpha(x))
alpha = metrics["alpha"]
underprod = metrics["energy underproduced (Joules)"]
 
print(f"Pearson correlation coefficients:")
print(f"alpha/underprod: {alpha.corr(underprod)}")
print(f"alpha/red_nrj: {alpha.corr(metrics['NRJ_red (Joules)'])}")
print(f"alpha/yel_nrj: {alpha.corr(metrics['NRJ_yellow (Joules)'])}")
```
 
%% Output
 
Pearson correlation coefficients:
alpha/underprod: -0.9916222045338368
alpha/red_nrj: -0.9918343217511406
alpha/yel_nrj: -0.9654034516285591
 
%% Cell type:markdown id:ca592226 tags:
 
# Graph of energy and Effort
 
%% Cell type:markdown id:ad7cbb52 tags:
 
Let's compute the underproduction in function of modified job percentage.
 
%% Cell type:code id:e1f48289 tags:
 
``` python
color_blind_map = ["#882255","#332288","#117733","#44AA99","#88CCEE","#827846"]
def color_map(behavior) :
if "rigid" in behavior :
return color_blind_map[0]
if "low_" in behavior :
return color_blind_map[1]
if "medium_" in behavior :
return color_blind_map[2]
if "big_" in behavior :
return color_blind_map[3]
if "max_" in behavior :
return color_blind_map[4]
if "renonce" in behavior :
return color_blind_map[5]
if "degrad" in behavior :
return "tab:blue"
if "reconfig" in behavior :
return "tab:orange"
 
def marker(behavior) :
if "yellow" in behavior :
return "_"
if ("rigid" in behavior or "renonce" in behavior or
"degrad" in behavior or "reconfig" in behavior):
return "x"
return "."
 
def pretty_name(behavior):
if "rigid" in behavior :
behavior_name="full rigid"
elif "renonce" in behavior :
behavior_name="full renounce red"
elif "degrad" in behavior :
behavior_name="full degrad red"
elif "reconfig" in behavior :
behavior_name="full reconfig red"
elif "yellow" in behavior :
behavior_name=" ".join(behavior.split("_")[-3:-1]) + " (yellow)"
else :
behavior_name=" ".join(behavior.split("_")[-2:])
 
return behavior_name
 
def sort_effort(string1) :
string1 = string1.split("_")
effort_list = ["rigid","low","medium","big","max","degrad","reconfig","renounce"]
for index,effort_level in enumerate(effort_list) :
if effort_level in string1 :
if "yellow" in string1:
return index + .5
else:
return index
return len(effort_list)
 
def plot_energy_fun_effort(energy_metrics_name,effort_metrics_name,metrics,legend_enabled=True,disable_renounce=False,ybot=0,figsize=(6,5)) :
plt.figure(figsize=figsize)
ax = plt.gca()
 
behavior_list = list(metrics["behavior"].unique())
behavior_list.sort(key=sort_effort)
for behavior in behavior_list :
if disable_renounce and "renonce" in behavior :
continue
metrics_sub = metrics[metrics.behavior == behavior]
marker_value = marker(behavior)
color_behavior = color_map(behavior)
behavior_name = pretty_name(behavior)
ax.scatter(metrics_sub[effort_metrics_name],metrics_sub[energy_metrics_name],
marker=marker_value,label=behavior_name,color=color_behavior)
 
if legend_enabled:
plt.legend()
ax.set_ylim(bottom=ybot)
return ax
 
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign3_big.csv")
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign_big.csv")
 
total_jobs = metrics[metrics.behavior=="replay_user_rigid"]["#jobs"].values[0]
# metrics = metrics[metrics.behavior!='dm_user_multi_behavior_degrad']
# metrics = metrics[metrics.behavior!='dm_user_multi_behavior_reconfig']
 
# Unit conversion...
metrics["energy underproduced (kwh)"] = metrics["energy underproduced (Joules)"]/3600/1000
metrics["unmodified jobs percentage"] = metrics["true_rigid_jobs"]/total_jobs *100
metrics["modified jobs percentage"] = 100 - metrics["unmodified jobs percentage"]
metrics["modified jobs percentage"] = metrics["modified jobs percentage"].fillna(0)
 
# Plot
plot_energy_fun_effort("energy underproduced (kwh)","modified jobs percentage",metrics,
legend_enabled=True,disable_renounce=False,ybot=5200)
plt.xlabel("modified jobs (% of total)")
plt.ylabel("underproduction (kWh)")
 
# Computation of linear regression
# Sort out renounce before regression
selection_for_regression = metrics[
(metrics.behavior!="dm_user_multi_behavior_degrad") &
(metrics.behavior!="dm_user_multi_behavior_reconfig") &
(metrics.behavior!="dm_user_multi_behavior_renounce")].copy()
X = selection_for_regression["modified jobs percentage"]
Y = selection_for_regression["energy underproduced (kwh)"]
slope, intercept, r_value, _, _ = linregress(X,Y)
 
print(f"r-square : {r_value**2}")
print(f"linear regression : {slope}*X+{intercept}")
print("\nUnderproduction in fonction of the number of modified jobs:")
print("(the linear regression doesn't take 'renounce/reconfig/degrad' points into account)")
X = np.linspace(0, max(X))
plt.plot(X,slope*X+intercept, '--', color="gray")
plt.text(x=8,y=8000,color="gray",
s=f"Y = {slope:.3f}X + {intercept:.0f}\nr-squared: {r_value**2:.3f}")
plt.savefig(f"{FIG_DIR}/underprod_VS_modified_jobs.pdf", bbox_inches="tight")
plt.show()
```
 
%% Output
 
r-square : 0.9571896031960813
linear regression : -37.700930875883984*X+8252.704793698493
Underproduction in fonction of the number of modified jobs:
(the linear regression doesn't take 'renounce/reconfig/degrad' points into account)
 
 
%% Cell type:markdown id: tags:
 
Computation of quotient between underproduction gains (compared to rigid) and "effort" (percentage of modified jobs) to get an idea of the marginal cost of the gains:
 
%% Cell type:code id: tags:
 
``` python
metrics_rigid = metrics[metrics.behavior=="replay_user_rigid"]
 
# Sort out the experiments we don't need
selection = metrics[
(metrics.behavior!="replay_user_rigid") &
(metrics.behavior!="dm_user_multi_behavior_degrad") &
(metrics.behavior!="dm_user_multi_behavior_reconfig") &
(metrics.behavior!="dm_user_multi_behavior_renonce")].copy()
 
selection["pretty name"] = selection["behavior"].apply(lambda x : pretty_name(x))
max_energy = metrics_rigid["energy underproduced (kwh)"].values[0]
 
# Gains in energy underproduced compared to rigid
selection["gains underproduced"] = max_energy - selection["energy underproduced (kwh)"]
selection["modified jobs"] = total_jobs - metrics["true_rigid_jobs"]
selection["energy_quotient"] = selection["gains underproduced"] * 1000 / selection["modified jobs"]
 
# plot
fig, ax = plt.subplots(figsize=(6,2))
selection["sort_order"] = selection["behavior"].apply(lambda x : sort_effort(x))
selection["color"] = selection["behavior"].apply(lambda x : color_map(x))
selection.sort_values(by='sort_order', ascending=False, inplace=True)
selection.plot.scatter("energy_quotient","pretty name",
xlabel="gains in underproduction per modified job (in Wh/job)",
ylabel="", marker="+", color=selection["color"], alpha=1, ax=ax)
ax.set_xlim(0,6)
 
plt.savefig(f"{FIG_DIR}/ratio_gains_modified_jobs.pdf", bbox_inches="tight")
plt.show()
```
 
%% Output
 
 
%% Cell type:markdown id:21229fdc tags:
 
### Weighted effort
 
%% Cell type:markdown id:b745ae6a tags:
 
We see that we are near linear. Let's compute underproduction in function of a pondered effort so that renounce jobs
have more weight than see_you_later one :
 
%% Cell type:code id:5ee97fe1 tags:
 
``` python
weight = {
"reconfig": 1/4,
"C_you_later": 2/4,
"degrad": 3/4,
"renounce": 4/4
}
 
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign3_big.csv")
metrics = pd.read_csv(f"{OUT_DIR}/metrics_campaign_big.csv")
# Sort out the experiments we don't need
# metrics = metrics[metrics.behavior!='dm_user_multi_behavior_degrad']
# metrics = metrics[metrics.behavior!='dm_user_multi_behavior_reconfig']
# metrics=metrics[metrics.behavior!="dm_user_multi_behavior_renonce"]
 
total_jobs = metrics[metrics.behavior=="replay_user_rigid"]["#jobs"].values[0]
metrics["pretty name"] = metrics["behavior"].apply(lambda x : pretty_name(x))
 
metrics["weighted_effort"] = (metrics["renonce_jobs"] * weight["renounce"] +
metrics["consider_degrad_jobs"] * weight["degrad"] +
metrics["reconfig_jobs"] *weight["reconfig"] +
metrics["number_of_see_you_later"] * weight["C_you_later"] ) / total_jobs * 100
metrics["weighted_effort"] = metrics["weighted_effort"].fillna(0)
 
aggredated = metrics[["pretty name","weighted_effort"]].groupby("pretty name").agg(["mean",confi_interval])
 
print("Weighted effort for each expe:")
display(aggredated["weighted_effort"])
```
 
%% Output
 
Weighted effort for each expe:
 
 
%% Cell type:code id: tags:
 
``` python
metrics["energy underproduced (kwh)"] = metrics["energy underproduced (Joules)"]/3600/1000
 
print("\nUnderproduction in fonction of weighted user effort:")
plot_energy_fun_effort("energy underproduced (kwh)","weighted_effort",metrics,
legend_enabled=True,disable_renounce=False,ybot=5200)
plt.xlabel("weighted user effort")
plt.ylabel("underproduction (kWh)")
 
# Do the linear regression
# Sort out unwanted behaviors before regression:
selection_for_regression = metrics[
(metrics.behavior!="dm_user_multi_behavior_degrad") &
(metrics.behavior!="dm_user_multi_behavior_reconfig") &
(metrics.behavior!="dm_user_multi_behavior_renounce")].copy()
X, Y = selection_for_regression["weighted_effort"], selection_for_regression["energy underproduced (kwh)"]
slope, intercept, r_value, _, _ = linregress(X,Y)
 
print(f"r-square : {r_value**2}")
print(f"linear regression : {slope}*X+{intercept}")
print("\nUnderproduction in fonction of weighted user effort:")
print("(the linear regression doesn't take 'renounce/reconfig/degrad' points into account)")
X = np.linspace(0, max(X))
plt.plot(X,slope*X+intercept, '--', color="gray")
plt.text(x=8,y=8000,color="gray",
s=f"Y = {slope:.3f}X + {intercept:.0f}\nr-squared: {r_value**2:.3f}")
plt.savefig(f"{FIG_DIR}/underprod_VS_weighted_effort.pdf", bbox_inches="tight")
plt.show()
```
 
%% Output
 
Underproduction in fonction of weighted user effort:
r-square : 0.965461563762817
linear regression : -33.896612958929346*X+8107.549057879646
Underproduction in fonction of weighted user effort:
(the linear regression doesn't take 'renounce/reconfig/degrad' points into account)
 
 
%% Cell type:code id: tags:
 
``` python
max_energy = metrics[metrics.behavior=="replay_user_rigid"]["energy underproduced (kwh)"].values[0]
 
# Sort out the experiments we don't need
selection = metrics[
(metrics.behavior!="replay_user_rigid")
# & (metrics.behavior!="dm_user_multi_behavior_degrad")
# & (metrics.behavior!="dm_user_multi_behavior_reconfig")
# & (metrics.behavior!="dm_user_multi_behavior_renonce")
].copy()
selection["pretty name"] = selection["behavior"].apply(lambda x : pretty_name(x))
 
# Gains in energy underproduced compared to rigid
selection["gains underproduced"] = max_energy - selection["energy underproduced (kwh)"]
selection["energy_quotient"] = selection["gains underproduced"] / selection["weighted_effort"]
 
fig, ax = plt.subplots(figsize=(6,2))
selection["sort_order"] = selection["behavior"].apply(lambda x : sort_effort(x))
selection["color"] = selection["behavior"].apply(lambda x : color_map(x))
selection.sort_values(by='sort_order', ascending=False, inplace=True)
selection.plot.scatter("energy_quotient","pretty name",
xlabel="gains in underproduction per weighted effort (in kWh/unit of effort)",
ylabel="", marker="+", c=selection["color"], alpha=1, ax=ax)
ax.set_xlim(0,70)
 
plt.savefig(f"{FIG_DIR}/ratio_gains_weighted_effort.pdf", bbox_inches="tight")
plt.show()
```
 
%% Output
 
 
%% Cell type:markdown id:bc6c80c7 tags:
 
Correlation between alpha and weighted effort:
 
%% Cell type:code id:68091693 tags:
 
``` python
def behavior_to_alpha(behavior):
if "rigid" in behavior :
return 0
if "low_" in behavior :
return .25
if "medium_" in behavior :
return .5
if "big_" in behavior :
return .75
if "max_" in behavior :
return 1
 
metrics["alpha"]=metrics["behavior"].apply(lambda x : behavior_to_alpha(x))
alpha = metrics["alpha"]
w_effort = metrics["weighted_effort"]
 
print(f"Pearson correlation coefficients:")
print(f"alpha/w_effort: {alpha.corr(w_effort)}")
```
 
%% Output
 
Pearson correlation coefficients:
alpha/w_effort: 0.9930736668431336
 
%% Cell type:code id:5d394c86 tags:
 
``` python
```
......@@ -14,7 +14,7 @@ from scripts.generate_file import save_dict_to_json
from instance import start_instance, prepare_input_data, generate_windows_dict, \
compress_expe_result, user_type_to_behavior
from scripts.stat_tools import plot_exec_time, plot_queue_load
from compute_metrics_campaign3 import compute_metrics_all_expe_parr
from compute_metrics_campaign import compute_metrics_all_expe_parr
def parse_argument():
......
......@@ -220,7 +220,7 @@ def main():
argument_parser.add_argument("--threads", type=int,
help="number of threads (default : 1 sequential)", default=1, required=False)
argument_parser.add_argument("--output", type=str, required=True,
help="name of the output csv file (example : out/metrics_campaign3_2)")
help="name of the output csv file (example : out/metrics_campaign_2)")
argument_parser.add_argument("--merge", action="store_true",
help="merge the already computed data when using compress_mode")
argument_parser.add_argument("--energy-file", default=None,nargs="*",
......
#!/usr/bin/env bash
sudo-g5k
#creation of directory for nancy host
mkdir -m 0755 -p /nix/var/nix/{profiles,gcroots}/per-user/$USER
sudo mkdir -m 0755 -p /nix/var/nix/{profiles,gcroots}/per-user/$USER
sudo chown -R mmadon /nix
#nix installation
sh <(curl -L https://nixos.org/nix/install) --no-daemon --yes
. ~/.nix-profile/etc/profile.d/nix.sh
nix-env -iA nixpkgs.bat nixpkgs.tree
#!/bin/bash
# example launch of experiments of 164 days with 1 replicat with every behavior json
python3 campaign.py --nb-replicat 1 --expe-range -1 --window-mode 8 --nb-days 164 \
python3 campaign.py --nb-replicat 30 --expe-range -1 --window-mode 8 --nb-days 164 \
--json-behavior behavior_file/big_effort.json behavior_file/low_effort.json behavior_file/max_effort.json behavior_file/medium_effort.json \
--compress-mode --production-file data_energy/energy_trace_sizing_solar.csv data_energy/energy_trace_sizing_solar.csv
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment