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
|
library("tidyverse")
library("viridis")
## Simulation Parameters:
## simkey {baseline,extended,hint,hintandextended}
## wireless {lora,nbiot}
## wakeupfor {60s,180s}
## seed [1,200]
## node on[0,12]
## isSender {0,1}
## dataSize {1MB}
## Metrics:
## energy [0,+inf)
## nDataRcv [0,+inf)
nseed=200
nwakeupfor=2
nwireless=2
nsimkey=4
nsimulations=nseed*nwakeupfor*nwireless*nsimkey # Must be 3200
if(!exists("data_seed")){ # Auto-load data only one time
## Load data
data=read_csv("../simulations/results/analysis/CCGRID2022.csv")%>%distinct() # Note that in the data experiment wireless=="lora",seed==1,wakeupfor==60,simkey=="baseline" is present 2 times in the CSV file
tmp_data_coverage=data%>%group_by(simkey,wireless,wakeupfor,seed)%>%mutate(coverage=sum(nDataRcv))%>%ungroup()%>%filter(isSender==1)%>%select(simkey,wireless,wakeupfor,seed,coverage)
data_seed_isSender=data%>%group_by(simkey,wireless,wakeupfor,seed,isSender)%>%summarize(energy_mean=mean(energy))%>%
left_join(tmp_data_coverage,by=c("simkey","wireless","wakeupfor","seed"))%>%
mutate(efficiency=energy_mean/coverage)%>%
ungroup()
data_seed=data%>%group_by(simkey,wireless,wakeupfor,seed)%>%summarize(energy=sum(energy),coverage=sum(nDataRcv))%>%
mutate(efficiency=energy/coverage)%>%
ungroup()
## Load simulation results
sim=read_csv("../simulations/results/results.csv")
sim=sim%>%group_by(simkey,wireless,wakeupfor,seed,energy_constraint,coverage_constraint,model)%>%summarize(energy=sum(energy),coverage=sum(nDataRcv))
sim=sim%>%mutate(energy_delta=energy-energy_constraint,coverage_delta=coverage-coverage_constraint)
sim=sim%>%group_by(simkey,wireless,wakeupfor,energy_constraint,coverage_constraint,model)%>%summarize(mean_energy_delta=mean(energy_delta),mean_coverage_delta=mean(coverage_delta),sd_energy_delta=sd(energy_delta),sd_coverage_delta=sd(coverage_delta))
sim=sim%>%arrange(energy_constraint,coverage_constraint)%>%group_by(wireless,wakeupfor,model)%>%mutate(id=row_number())%>%ungroup() # Create id for each experiment
rand_id=sample(seq(1,NROW(sim)/8))
sim=sim%>%mutate(id_rand=rand_id[id])
}
## Perform various plots to understand the data
GG_VARIOUS=function(){
## Dimension Energy/Coverage
ggplot(data_seed%>%mutate(wakeupfor=as.character(wakeupfor)),
aes(coverage,energy,color=simkey))+geom_point(aes(shape=simkey),alpha=0.5)+labs(color="Policy")+
xlab("Network coverage")+ylab("Nodes energy consumption (J)")+
scale_shape_manual(values=c(22, 15, 16,1))+labs(shape="Policy",color="Policy")+
theme_bw()+
guides(colour = guide_legend(override.aes = list(alpha = 1)))+
facet_wrap(~wakeupfor+wireless,scale="free")+scale_color_viridis(discrete=TRUE,option="B")+
theme(legend.position = c(0.15,0.87),
legend.background = element_rect(fill = "white", color = "black",linewidth=0.8))+
scale_x_continuous(breaks=seq(0,12))
ggsave("figures/dimension_energy-coverage.pdf")
## Dimension Energy/Coverage Wakeupfor
ggplot(data_seed%>%mutate(wakeupfor=as.character(wakeupfor)),
aes(coverage,energy,color=wakeupfor))+geom_point(alpha=0.5)+labs(color="Policy")+theme(legend.position="top")+
ggtitle("Dimension Energy/Coverage Wakeupfor")+xlab("Coverage")+ylab("Nodes energy consumption (J)")
ggsave("figures/dimension_energy-coverage-wakeupfor.pdf")
## Dimension Energy/Coverage Policy
ggplot(data_seed%>%mutate(wakeupfor=as.character(wakeupfor)),
aes(coverage,energy,color=simkey))+geom_point(alpha=0.5)+labs(color="Policy")+
ggtitle("Dimension Energy/Coverage Policy")+xlab("Coverage")+ylab("Nodes energy consumption (J)")
ggsave("figures/dimension_energy-coverage-policy.pdf")
}
## Plot to generate:
GG_VARIOUS()
GG_SIMULATIONS = function(file,key="NOKEY") {
## Load simulation results
sim=read_csv(file)
sim=sim%>%group_by(simkey,wireless,wakeupfor,seed,energy_constraint,coverage_constraint,model)%>%summarize(energy=sum(energy),coverage=sum(nDataRcv))
sim=sim%>%mutate(energy_delta=energy-energy_constraint,coverage_delta=coverage-coverage_constraint)
sim=sim%>%group_by(simkey,wireless,wakeupfor,energy_constraint,coverage_constraint,model)%>%summarize(mean_energy_delta=mean(energy_delta),mean_coverage_delta=mean(coverage_delta),sd_energy_delta=sd(energy_delta),sd_coverage_delta=sd(coverage_delta))
sim=sim%>%arrange(energy_constraint,coverage_constraint)%>%group_by(wireless,wakeupfor,model)%>%mutate(id=row_number())%>%ungroup() # Create id for each experiment
rand_id=sample(seq(1,NROW(sim)/8))
sim=sim%>%mutate(id_rand=rand_id[id])
sim_means=sim%>%group_by(wireless,wakeupfor,model)%>%summarize(mean_energy=mean(mean_energy_delta),mean_coverage=mean(mean_coverage_delta),sd_energy=sd(sd_energy_delta),sd_coverage=sd(sd_coverage_delta))
write.csv(sim_means%>%mutate_if(is.numeric, ~round(.,digits=2)),paste0("figures/sim_results_",key,".csv"),row.names=FALSE, quote=FALSE)
## Dimension Energy
ggplot(sim,aes(id_rand,mean_energy_delta,color=model))+
geom_ribbon(aes(ymin=mean_energy_delta-sd_energy_delta,ymax=mean_energy_delta+sd_energy_delta,fill=model),alpha=0.2,color=NA)+
geom_point(aes(shape=simkey),size=2)+geom_line()+facet_wrap(~wireless+wakeupfor,scale="free")+ggtitle(paste0("Simulation Dimension Energy (",key,")"))+ylab("Energy Relative Absolute Error (J)")+
scale_x_continuous("Experiments id",breaks=seq(1,max(sim$id)))+theme(panel.grid.minor = element_blank())+labs(shape="Predictions")+
geom_hline(data=sim_means,aes(yintercept=mean_energy,color=model))+
guides(fill=guide_legend(title="Models"),color=guide_legend(title="Models"))+theme(legend.position="top")+
theme(axis.text.x=element_blank(),axis.ticks.x=element_blank())
ggsave(paste0("figures/sim_dimension_energy_",key,".pdf"),width=10)
## Dimension Coverage
ggplot(sim,aes(id_rand,mean_coverage_delta,color=model))+
geom_hline(data=sim_means,aes(yintercept=mean_coverage,color=model),linetype="dashed")+
geom_ribbon(aes(ymin=mean_coverage_delta-sd_coverage_delta,ymax=mean_coverage_delta+sd_coverage_delta,fill=model),alpha=0.2,color=NA)+
geom_point(aes(shape=simkey),size=2)+geom_line()+facet_wrap(~wireless+wakeupfor,scale="free")+ggtitle(paste0("Simulation Dimension Coverage (",key,")"))+ylab("Coverage Relative Absolute Error")+
scale_x_continuous("Experiments id",breaks=seq(1,max(sim$id)))+theme(panel.grid.minor = element_blank())+labs(shape="Predictions")+
guides(fill=guide_legend(title="Models"),color=guide_legend(title="Models"))+theme(legend.position="top")+
theme(axis.text.x=element_blank(),axis.ticks.x=element_blank())
ggsave(paste0("figures/sim_dimension_coverage_",key,".pdf"),width=20)
}
#GG_SIMULATIONS("../simulations/results/results_NoHintIsFALSE.csv",key="WITH_HINT")
#GG_SIMULATIONS("../simulations/results/results_NoHintIsTRUE.csv",key="NO_HINT")
system("rm -f figures/combined.pdf")
system("pdfunite figures/*.pdf figures/combined.pdf")
|