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("../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")