library(ggplot2) setwd('../Results') ### GRAPH FOR THE ENERGY MODEL USED - using the data from Ahvar et al. Parasilo server ####Begin powerCore =c(98,148,161,176,178,180,184,200,208,212,215,217,218,221,230,237,241) piecewisePowerAccordingToUse <- function(utilization){ j <- floor(utilization * 16) #utilization should be between 0 and 1 print(j) index<- j+1 #R indexes vector from 1 powerRes <- (powerCore[index+1]-powerCore[index])*16*utilization+((j+1)*powerCore[index]-j*powerCore[index+1]) } ##Calculate the values for devices 6 and devices 8 oneCoreUtilizationParasilo= 1/16 utilizationPrevious_d5=0.3592 #Between 0 and 1 start_d5 = piecewisePowerAccordingToUse(utilizationPrevious_d5) end_d5=piecewisePowerAccordingToUse(utilizationPrevious_d5+oneCoreUtilizationParasilo) diff_d5=end_d5-start_d5 utilizationPrevious_d7=0.5165 #Between 0 and 1 start_d7 = piecewisePowerAccordingToUse(utilizationPrevious_d7) end_d7=piecewisePowerAccordingToUse(utilizationPrevious_d7+oneCoreUtilizationParasilo) diff_d7=end_d7-start_d7 ##Highlight these areas on the curve highlight <- data.frame(start=c(utilizationPrevious_d5,utilizationPrevious_d7), end=c(utilizationPrevious_d5+oneCoreUtilizationParasilo,utilizationPrevious_d7+oneCoreUtilizationParasilo), group=c("device 5", "device 7")) ggplot()+xlim(0,1) + ylim(0,250)+ geom_function(fun=piecewisePowerAccordingToUse)+ geom_rect(data=highlight, inherit.aes=FALSE, aes(xmin=start, xmax=end, ymin=min(0), ymax=max(250), group=group), color="transparent", fill=c("#0072B2","#F0E442"), alpha=0.3)+ theme_minimal()+ ylab("Power (W)")+ xlab("Utilization")+ theme(legend.position = "top",axis.title.x = element_text(size = 20), axis.text.x = element_text(size = 20), axis.title.y = element_text(size = 20), axis.text.y = element_text(size = 20), legend.text=element_text(size = 20), legend.title=element_text(size = 20)) ####End ### INITIAL STUDY # Device and links loaded ####Begin ### Getting the data result_data_csv <- read.csv(file="./InitialStudy/resultsParsed_40rep_DeviceLinkVar_2replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 #Number of different placements - = length of the utilizationDiff variable #27.84% ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculating how many are same, different and infeasible same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) for (levelNb in seq(1,11)){ print(levelNb) print(diffLoadLevel_Overall[levelNb]) for(diff in diffLoadLevel_Overall[[levelNb]]){ print(diff) if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1} } } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 20), axis.text.x = element_text(size = 20), axis.title.y = element_text(size = 20), axis.text.y = element_text(size = 20), legend.text=element_text(size = 20), legend.title=element_text(size = 20)) ###Looking at run 12 for loadlevel 5 for a in-depth analysis ####End ## LOAD HETEROGENEITY STUDIES #Only devices loaded ### FIXED LOAD ####Begin ### Getting the data result_data_csv <- read.csv(file="./FixedLoad/resultsParsed_40rep_DeviceOnlyVar_2replicas_Uniform_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Working on visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculating how many are same, different and infeasible same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) for (levelNb in seq(1,11)){ print(levelNb) print(diffLoadLevel_Overall[levelNb]) for(diff in diffLoadLevel_Overall[[levelNb]]){ print(diff) if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1} } } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ####End ## NORMALLY DISTRIBUTED LOAD - STD 10 (2 function instances/replicas) #Graphs for the categorization of placements and the relative difference in overall/marginal energy ####Begin ### Getting the data result_data_csv <- read.csv(file="./NormallyDistributedLoad/resultsParsed_40rep_DeviceOnlyVar_2replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Working on visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculate the relative difference - for Overall Energy reldiffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy / loadLevel0_Overall$OverallEnergy reldiffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy / loadLevel1_Overall$OverallEnergy reldiffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy / loadLevel2_Overall$OverallEnergy reldiffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy / loadLevel3_Overall$OverallEnergy reldiffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy / loadLevel4_Overall$OverallEnergy reldiffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy / loadLevel5_Overall$OverallEnergy reldiffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy / loadLevel6_Overall$OverallEnergy reldiffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy / loadLevel7_Overall$OverallEnergy reldiffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy / loadLevel8_Overall$OverallEnergy reldiffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy / loadLevel9_Overall$OverallEnergy reldiffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy / loadLevel10_Overall$OverallEnergy reldiffLoadLevel_Overall = list(reldiffLoadLevel0_Overall,reldiffLoadLevel1_Overall,reldiffLoadLevel2_Overall, reldiffLoadLevel3_Overall,reldiffLoadLevel4_Overall,reldiffLoadLevel5_Overall, reldiffLoadLevel6_Overall,reldiffLoadLevel7_Overall,reldiffLoadLevel8_Overall, reldiffLoadLevel9_Overall,reldiffLoadLevel10_Overall) #Calculate the relative difference - for Marginal Energy reldiffLoadLevel0_Marginal <- loadLevel0_Overall$MarginalEnergy / loadLevel0_Marginal$MarginalEnergy reldiffLoadLevel1_Marginal <- loadLevel1_Overall$MarginalEnergy / loadLevel1_Marginal$MarginalEnergy reldiffLoadLevel2_Marginal <- loadLevel2_Overall$MarginalEnergy / loadLevel2_Marginal$MarginalEnergy reldiffLoadLevel3_Marginal <- loadLevel3_Overall$MarginalEnergy / loadLevel3_Marginal$MarginalEnergy reldiffLoadLevel4_Marginal <- loadLevel4_Overall$MarginalEnergy / loadLevel4_Marginal$MarginalEnergy reldiffLoadLevel5_Marginal <- loadLevel5_Overall$MarginalEnergy / loadLevel5_Marginal$MarginalEnergy reldiffLoadLevel6_Marginal <- loadLevel6_Overall$MarginalEnergy / loadLevel6_Marginal$MarginalEnergy reldiffLoadLevel7_Marginal <- loadLevel7_Overall$MarginalEnergy / loadLevel7_Marginal$MarginalEnergy reldiffLoadLevel8_Marginal <- loadLevel8_Overall$MarginalEnergy / loadLevel8_Marginal$MarginalEnergy reldiffLoadLevel9_Marginal <- loadLevel9_Overall$MarginalEnergy / loadLevel9_Marginal$MarginalEnergy reldiffLoadLevel10_Marginal <- loadLevel10_Overall$MarginalEnergy / loadLevel10_Marginal$MarginalEnergy reldiffLoadLevel_Marginal = list(reldiffLoadLevel0_Marginal,reldiffLoadLevel1_Marginal,reldiffLoadLevel2_Marginal, reldiffLoadLevel3_Marginal,reldiffLoadLevel4_Marginal,reldiffLoadLevel5_Marginal, reldiffLoadLevel6_Marginal,reldiffLoadLevel7_Marginal,reldiffLoadLevel8_Marginal, reldiffLoadLevel9_Marginal,reldiffLoadLevel10_Marginal) #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ##Create the dataframe for statistics about the difference - OVERALL ENERGY statisticsPlacement=data.frame(datadiffloc,datareldiff) #Get numbers for the text quantile(statisticsPlacement$datareldiff,0.10) quantile(statisticsPlacement$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot (Overall energy) ggplot(data=statisticsPlacement, aes(x=factor(datadiffloc), y=datareldiff)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in overall energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ##Create the dataframe for statistics about the difference - MARGINAL ENERGY statisticsPlacement_m=data.frame(datadiffloc,datareldiff_m) #Get numbers for the text quantile(statisticsPlacement_m$datareldiff,0.10) quantile(statisticsPlacement_m$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement_m, aes(x=factor(datadiffloc), y=datareldiff_m)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in marginal energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Average included device utilization data graph ####Begin ### Getting the data - different placements ONLY result_data_csv <- read.csv(file="./NormallyDistributedLoad/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_2replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 #Create a dataframe with only the device utilization information utilization=data.frame(result_data_csv$Device0,result_data_csv$Device1,result_data_csv$Device2,result_data_csv$Device3, result_data_csv$Device4,result_data_csv$Device5,result_data_csv$Device6,result_data_csv$Device7, result_data_csv$Device8,result_data_csv$Device9,result_data_csv$Device10) #Calculating the mean utilization for each data line meanUt=rowMeans(utilization,na.rm=TRUE) #Create data frame for plotting mean_data_utilization= data.frame(result_data_csv$LoadLevel,result_data_csv$Alternative,meanUt) ###Plot - Statistics about the utilization, violin plot ggplot(data=mean_data_utilization, aes(x=factor(result_data_csv$LoadLevel), y=meanUt, fill=result_data_csv$Alternative)) + geom_violin()+ theme_minimal()+ ylab("Mean device utilization when placements are different (%)")+ xlab("Average load level in %")+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Completion Time graph for different placements ####Begin ## Getting the data - different placements ONLY result_data_csv_ut_DifferentOnly <- read.csv(file="./NormallyDistributedLoad/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_2replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") ## Getting the data - all placements result_data_csv_ev_All <- read.csv(file="./NormallyDistributedLoad/resultsParsed_40rep_DeviceOnlyVar_2replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") result_data_csv_ev_All$LoadLevel <- result_data_csv_ev_All$Scenario*10 ##Adding a column for the combination Repetition_Scenario to be able to filter result_data_csv_ut_DifferentOnly$id <- paste(result_data_csv_ut_DifferentOnly$Repetition,result_data_csv_ut_DifferentOnly$Scenario,sep = "_") result_data_csv_ev_All$id <- paste(result_data_csv_ev_All$Repetition,result_data_csv_ev_All$Scenario,sep = "_") ##Filter the all data from the combination Repetition/Scenario/Alternative? to get only the info when placements are different library(dplyr) result_data_csv_ev_DifferentOnly = result_data_csv_ev_All %>% filter(id %in% result_data_csv_ut_DifferentOnly$id) #Boxplot ggplot(data=result_data_csv_ev_DifferentOnly, aes(x=factor(LoadLevel), y=CompletionTime, fill=Alternative)) + geom_boxplot()+ theme_minimal()+ ylab("Request completion time when placements are different (ms)")+ xlab("Average load level in %")+ ylim(0,100)+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End ## LARGER STANDARD DEVIATION - NORMALLY DISTRIBUTED LOAD - STD 30 (2 function instances/replicas) ####Begin ### Getting the data result_data_csv <- read.csv(file="./LargerStandardDeviation/resultsParsed_40rep_DeviceOnlyVar_2replicas_Std30_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ####End ## AVAILABILITY OF FUNCTION INSTANCES STUDIES ## NORMALLY DISTRIBUTED LOAD - STD 10 (4 function instances/replicas) #Graphs for the categorization of placements and the relative difference in overall/marginal energy ####Begin ### Getting the data result_data_csv <- read.csv(file="./4FunctionInstances/resultsParsed_40rep_DeviceOnlyVar_4replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Working on visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculate the relative difference - for Overall Energy reldiffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy / loadLevel0_Overall$OverallEnergy reldiffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy / loadLevel1_Overall$OverallEnergy reldiffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy / loadLevel2_Overall$OverallEnergy reldiffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy / loadLevel3_Overall$OverallEnergy reldiffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy / loadLevel4_Overall$OverallEnergy reldiffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy / loadLevel5_Overall$OverallEnergy reldiffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy / loadLevel6_Overall$OverallEnergy reldiffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy / loadLevel7_Overall$OverallEnergy reldiffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy / loadLevel8_Overall$OverallEnergy reldiffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy / loadLevel9_Overall$OverallEnergy reldiffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy / loadLevel10_Overall$OverallEnergy reldiffLoadLevel_Overall = list(reldiffLoadLevel0_Overall,reldiffLoadLevel1_Overall,reldiffLoadLevel2_Overall, reldiffLoadLevel3_Overall,reldiffLoadLevel4_Overall,reldiffLoadLevel5_Overall, reldiffLoadLevel6_Overall,reldiffLoadLevel7_Overall,reldiffLoadLevel8_Overall, reldiffLoadLevel9_Overall,reldiffLoadLevel10_Overall) #Calculate the relative difference - for Marginal Energy reldiffLoadLevel0_Marginal <- loadLevel0_Overall$MarginalEnergy / loadLevel0_Marginal$MarginalEnergy reldiffLoadLevel1_Marginal <- loadLevel1_Overall$MarginalEnergy / loadLevel1_Marginal$MarginalEnergy reldiffLoadLevel2_Marginal <- loadLevel2_Overall$MarginalEnergy / loadLevel2_Marginal$MarginalEnergy reldiffLoadLevel3_Marginal <- loadLevel3_Overall$MarginalEnergy / loadLevel3_Marginal$MarginalEnergy reldiffLoadLevel4_Marginal <- loadLevel4_Overall$MarginalEnergy / loadLevel4_Marginal$MarginalEnergy reldiffLoadLevel5_Marginal <- loadLevel5_Overall$MarginalEnergy / loadLevel5_Marginal$MarginalEnergy reldiffLoadLevel6_Marginal <- loadLevel6_Overall$MarginalEnergy / loadLevel6_Marginal$MarginalEnergy reldiffLoadLevel7_Marginal <- loadLevel7_Overall$MarginalEnergy / loadLevel7_Marginal$MarginalEnergy reldiffLoadLevel8_Marginal <- loadLevel8_Overall$MarginalEnergy / loadLevel8_Marginal$MarginalEnergy reldiffLoadLevel9_Marginal <- loadLevel9_Overall$MarginalEnergy / loadLevel9_Marginal$MarginalEnergy reldiffLoadLevel10_Marginal <- loadLevel10_Overall$MarginalEnergy / loadLevel10_Marginal$MarginalEnergy reldiffLoadLevel_Marginal = list(reldiffLoadLevel0_Marginal,reldiffLoadLevel1_Marginal,reldiffLoadLevel2_Marginal, reldiffLoadLevel3_Marginal,reldiffLoadLevel4_Marginal,reldiffLoadLevel5_Marginal, reldiffLoadLevel6_Marginal,reldiffLoadLevel7_Marginal,reldiffLoadLevel8_Marginal, reldiffLoadLevel9_Marginal,reldiffLoadLevel10_Marginal) #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ##Create the dataframe for statistics about the difference - OVERALL ENERGY statisticsPlacement=data.frame(datadiffloc,datadiff,datareldiff) #Get numbers for the text quantile(statisticsPlacement$datareldiff,0.10) quantile(statisticsPlacement$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement, aes(x=factor(datadiffloc), y=datareldiff)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in overall energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ##Create the dataframe for statistics about the difference - MARGINAL ENERGY statisticsPlacement_m=data.frame(datadiffloc,datareldiff_m) #Get numbers for the text quantile(statisticsPlacement_m$datareldiff,0.10) quantile(statisticsPlacement_m$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement_m, aes(x=factor(datadiffloc), y=datareldiff_m)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in marginal energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Average included device utilization data graph ####Begin ### Getting the data - different placements ONLY result_data_csv <- read.csv(file="./4FunctionInstances/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_4replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 #Create a dataframe with only the device utilization information utilization=data.frame(result_data_csv$Device0,result_data_csv$Device1,result_data_csv$Device2,result_data_csv$Device3, result_data_csv$Device4,result_data_csv$Device5,result_data_csv$Device6,result_data_csv$Device7, result_data_csv$Device8,result_data_csv$Device9,result_data_csv$Device10) #Calculating the mean utilization for each data line meanUt=rowMeans(utilization,na.rm=TRUE) #Create data frame for plotting mean_data_utilization= data.frame(result_data_csv$LoadLevel,result_data_csv$Alternative,meanUt) ###Plot - Statistics about the utilization, violin plot ggplot(data=mean_data_utilization, aes(x=factor(result_data_csv$LoadLevel), y=meanUt, fill=result_data_csv$Alternative)) + geom_violin()+ theme_minimal()+ ylab("Mean device utilization when placements are different (%)")+ xlab("Average load level in %")+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Completion Time graph for different placements ####Begin ## Getting the data - different placements ONLY result_data_csv_ut_DifferentOnly <- read.csv(file="./4FunctionInstances/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_4replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") ## Getting the data - all placements result_data_csv_ev_All <- read.csv(file="./4FunctionInstances/resultsParsed_40rep_DeviceOnlyVar_4replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") result_data_csv_ev_All$LoadLevel <- result_data_csv_ev_All$Scenario*10 ##Adding a column for the combination Repetition_Scenario to be able to filter result_data_csv_ut_DifferentOnly$id <- paste(result_data_csv_ut_DifferentOnly$Repetition,result_data_csv_ut_DifferentOnly$Scenario,sep = "_") result_data_csv_ev_All$id <- paste(result_data_csv_ev_All$Repetition,result_data_csv_ev_All$Scenario,sep = "_") ##Filter the all data from the combination Repetition/Scenario/Alternative? to get only the info when placements are different library(dplyr) result_data_csv_ev_DifferentOnly = result_data_csv_ev_All %>% filter(id %in% result_data_csv_ut_DifferentOnly$id) #Boxplot ggplot(data=result_data_csv_ev_DifferentOnly, aes(x=factor(LoadLevel), y=CompletionTime, fill=Alternative)) + geom_boxplot()+ theme_minimal()+ ylab("Request completion time when placements are different (ms)")+ xlab("Average load level in %")+ ylim(0,100)+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End ## NORMALLY DISTRIBUTED LOAD - STD 10 (6 function instances/replicas) #Graphs for the categorization of placements and the relative difference in overall/marginal energy ####Begin ### Getting the data result_data_csv <- read.csv(file="./6FunctionInstances/resultsParsed_40rep_DeviceOnlyVar_6replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Working on visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculate the relative difference - for Overall Energy reldiffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy / loadLevel0_Overall$OverallEnergy reldiffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy / loadLevel1_Overall$OverallEnergy reldiffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy / loadLevel2_Overall$OverallEnergy reldiffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy / loadLevel3_Overall$OverallEnergy reldiffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy / loadLevel4_Overall$OverallEnergy reldiffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy / loadLevel5_Overall$OverallEnergy reldiffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy / loadLevel6_Overall$OverallEnergy reldiffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy / loadLevel7_Overall$OverallEnergy reldiffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy / loadLevel8_Overall$OverallEnergy reldiffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy / loadLevel9_Overall$OverallEnergy reldiffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy / loadLevel10_Overall$OverallEnergy reldiffLoadLevel_Overall = list(reldiffLoadLevel0_Overall,reldiffLoadLevel1_Overall,reldiffLoadLevel2_Overall, reldiffLoadLevel3_Overall,reldiffLoadLevel4_Overall,reldiffLoadLevel5_Overall, reldiffLoadLevel6_Overall,reldiffLoadLevel7_Overall,reldiffLoadLevel8_Overall, reldiffLoadLevel9_Overall,reldiffLoadLevel10_Overall) #Calculate the relative difference - for Marginal Energy reldiffLoadLevel0_Marginal <- loadLevel0_Overall$MarginalEnergy / loadLevel0_Marginal$MarginalEnergy reldiffLoadLevel1_Marginal <- loadLevel1_Overall$MarginalEnergy / loadLevel1_Marginal$MarginalEnergy reldiffLoadLevel2_Marginal <- loadLevel2_Overall$MarginalEnergy / loadLevel2_Marginal$MarginalEnergy reldiffLoadLevel3_Marginal <- loadLevel3_Overall$MarginalEnergy / loadLevel3_Marginal$MarginalEnergy reldiffLoadLevel4_Marginal <- loadLevel4_Overall$MarginalEnergy / loadLevel4_Marginal$MarginalEnergy reldiffLoadLevel5_Marginal <- loadLevel5_Overall$MarginalEnergy / loadLevel5_Marginal$MarginalEnergy reldiffLoadLevel6_Marginal <- loadLevel6_Overall$MarginalEnergy / loadLevel6_Marginal$MarginalEnergy reldiffLoadLevel7_Marginal <- loadLevel7_Overall$MarginalEnergy / loadLevel7_Marginal$MarginalEnergy reldiffLoadLevel8_Marginal <- loadLevel8_Overall$MarginalEnergy / loadLevel8_Marginal$MarginalEnergy reldiffLoadLevel9_Marginal <- loadLevel9_Overall$MarginalEnergy / loadLevel9_Marginal$MarginalEnergy reldiffLoadLevel10_Marginal <- loadLevel10_Overall$MarginalEnergy / loadLevel10_Marginal$MarginalEnergy reldiffLoadLevel_Marginal = list(reldiffLoadLevel0_Marginal,reldiffLoadLevel1_Marginal,reldiffLoadLevel2_Marginal, reldiffLoadLevel3_Marginal,reldiffLoadLevel4_Marginal,reldiffLoadLevel5_Marginal, reldiffLoadLevel6_Marginal,reldiffLoadLevel7_Marginal,reldiffLoadLevel8_Marginal, reldiffLoadLevel9_Marginal,reldiffLoadLevel10_Marginal) #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ##Create the dataframe for statistics about the difference - OVERALL ENERGY statisticsPlacement=data.frame(datadiffloc,datadiff,datareldiff) #Get numbers for the text quantile(statisticsPlacement$datareldiff,0.10) quantile(statisticsPlacement$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement, aes(x=factor(datadiffloc), y=datareldiff)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in overall energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ##Create the dataframe for statistics about the difference - MARGINAL ENERGY statisticsPlacement_m=data.frame(datadiffloc,datareldiff_m) #Get numbers for the text quantile(statisticsPlacement_m$datareldiff,0.10) quantile(statisticsPlacement_m$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement_m, aes(x=factor(datadiffloc), y=datareldiff_m)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in marginal energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Average included device utilization data graph ####Begin ### Getting the data - different placements ONLY result_data_csv <- read.csv(file="./6FunctionInstances/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_6replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 #Create a dataframe with only the device utilization information utilization=data.frame(result_data_csv$Device0,result_data_csv$Device1,result_data_csv$Device2,result_data_csv$Device3, result_data_csv$Device4,result_data_csv$Device5,result_data_csv$Device6,result_data_csv$Device7, result_data_csv$Device8,result_data_csv$Device9,result_data_csv$Device10) #Calculating the mean utilization for each data line meanUt=rowMeans(utilization,na.rm=TRUE) #Create data frame for plotting mean_data_utilization= data.frame(result_data_csv$LoadLevel,result_data_csv$Alternative,meanUt) ###Plot - Statistics about the utilization, violin plot ggplot(data=mean_data_utilization, aes(x=factor(result_data_csv$LoadLevel), y=meanUt, fill=result_data_csv$Alternative)) + geom_violin()+ theme_minimal()+ ylab("Mean device utilization when placements are different (%)")+ xlab("Average load level in %")+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Completion Time graph for different placements ####Begin ## Getting the data - different placements ONLY result_data_csv_ut_DifferentOnly <- read.csv(file="./6FunctionInstances/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_6replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") ## Getting the data - all placements result_data_csv_ev_All <- read.csv(file="./6FunctionInstances/resultsParsed_40rep_DeviceOnlyVar_6replicas_Std10_RequestDevice4.csv", header=TRUE, sep=",") result_data_csv_ev_All$LoadLevel <- result_data_csv_ev_All$Scenario*10 ##Adding a column for the combination Repetition_Scenario to be able to filter result_data_csv_ut_DifferentOnly$id <- paste(result_data_csv_ut_DifferentOnly$Repetition,result_data_csv_ut_DifferentOnly$Scenario,sep = "_") result_data_csv_ev_All$id <- paste(result_data_csv_ev_All$Repetition,result_data_csv_ev_All$Scenario,sep = "_") ##Filter the all data from the combination Repetition/Scenario/Alternative? to get only the info when placements are different library(dplyr) result_data_csv_ev_DifferentOnly = result_data_csv_ev_All %>% filter(id %in% result_data_csv_ut_DifferentOnly$id) #Boxplot ggplot(data=result_data_csv_ev_DifferentOnly, aes(x=factor(LoadLevel), y=CompletionTime, fill=Alternative)) + geom_boxplot()+ theme_minimal()+ ylab("Request completion time when placements are different (ms)")+ xlab("Average load level in %")+ labs(fill = "Optimization objective")+ ylim(0,100)+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End ## FULL CO-LOCATION STUDY ## NORMALLY DISTRIBUTED LOAD - STD 10 (6 function instances/replicas) ####Begin ### Getting the data result_data_csv <- read.csv(file="./FullColocation/resultsParsed_40rep_DeviceOnlyVar_6replicas_Std10_RequestDevice0.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 20), axis.text.x = element_text(size = 20), axis.title.y = element_text(size = 20), axis.text.y = element_text(size = 20), legend.text=element_text(size = 20), legend.title=element_text(size = 20)) ####End ## RANDOM BEGINNING DEVICE STUDIES ### FIXED LOAD - RANDOM BEGINNING DEVICE ####Begin ### Getting the data result_data_csv <- read.csv(file="./RandomBeginningDevice/Fixed/resultsParsed_40rep_DeviceOnlyVar_2replicas_Uniform_RequestDeviceRandom.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Working on visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculating how many are same, different and infeasible same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) for (levelNb in seq(1,11)){ print(levelNb) print(diffLoadLevel_Overall[levelNb]) for(diff in diffLoadLevel_Overall[[levelNb]]){ print(diff) if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1} } } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ####End ### NORMALLY DISTRIBUTED LOAD (2 function instances/replicas) Std 10 - RANDOM BEGINNING DEVICE #Graphs for the categorization of placements and the relative difference in overall/marginal energy ####Begin ### Getting the data result_data_csv <- read.csv(file="./RandomBeginningDevice/Std10/resultsParsed_40rep_DeviceOnlyVar_2replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Working on visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculate the relative difference - for Overall Energy reldiffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy / loadLevel0_Overall$OverallEnergy reldiffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy / loadLevel1_Overall$OverallEnergy reldiffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy / loadLevel2_Overall$OverallEnergy reldiffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy / loadLevel3_Overall$OverallEnergy reldiffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy / loadLevel4_Overall$OverallEnergy reldiffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy / loadLevel5_Overall$OverallEnergy reldiffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy / loadLevel6_Overall$OverallEnergy reldiffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy / loadLevel7_Overall$OverallEnergy reldiffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy / loadLevel8_Overall$OverallEnergy reldiffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy / loadLevel9_Overall$OverallEnergy reldiffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy / loadLevel10_Overall$OverallEnergy reldiffLoadLevel_Overall = list(reldiffLoadLevel0_Overall,reldiffLoadLevel1_Overall,reldiffLoadLevel2_Overall, reldiffLoadLevel3_Overall,reldiffLoadLevel4_Overall,reldiffLoadLevel5_Overall, reldiffLoadLevel6_Overall,reldiffLoadLevel7_Overall,reldiffLoadLevel8_Overall, reldiffLoadLevel9_Overall,reldiffLoadLevel10_Overall) #Calculate the relative difference - for Marginal Energy reldiffLoadLevel0_Marginal <- loadLevel0_Overall$MarginalEnergy / loadLevel0_Marginal$MarginalEnergy reldiffLoadLevel1_Marginal <- loadLevel1_Overall$MarginalEnergy / loadLevel1_Marginal$MarginalEnergy reldiffLoadLevel2_Marginal <- loadLevel2_Overall$MarginalEnergy / loadLevel2_Marginal$MarginalEnergy reldiffLoadLevel3_Marginal <- loadLevel3_Overall$MarginalEnergy / loadLevel3_Marginal$MarginalEnergy reldiffLoadLevel4_Marginal <- loadLevel4_Overall$MarginalEnergy / loadLevel4_Marginal$MarginalEnergy reldiffLoadLevel5_Marginal <- loadLevel5_Overall$MarginalEnergy / loadLevel5_Marginal$MarginalEnergy reldiffLoadLevel6_Marginal <- loadLevel6_Overall$MarginalEnergy / loadLevel6_Marginal$MarginalEnergy reldiffLoadLevel7_Marginal <- loadLevel7_Overall$MarginalEnergy / loadLevel7_Marginal$MarginalEnergy reldiffLoadLevel8_Marginal <- loadLevel8_Overall$MarginalEnergy / loadLevel8_Marginal$MarginalEnergy reldiffLoadLevel9_Marginal <- loadLevel9_Overall$MarginalEnergy / loadLevel9_Marginal$MarginalEnergy reldiffLoadLevel10_Marginal <- loadLevel10_Overall$MarginalEnergy / loadLevel10_Marginal$MarginalEnergy reldiffLoadLevel_Marginal = list(reldiffLoadLevel0_Marginal,reldiffLoadLevel1_Marginal,reldiffLoadLevel2_Marginal, reldiffLoadLevel3_Marginal,reldiffLoadLevel4_Marginal,reldiffLoadLevel5_Marginal, reldiffLoadLevel6_Marginal,reldiffLoadLevel7_Marginal,reldiffLoadLevel8_Marginal, reldiffLoadLevel9_Marginal,reldiffLoadLevel10_Marginal) #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ##Create the dataframe for statistics about the difference - OVERALL ENERGY statisticsPlacement=data.frame(datadiffloc,datadiff,datareldiff) #Get numbers for the text quantile(statisticsPlacement$datareldiff,0.10) quantile(statisticsPlacement$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement, aes(x=factor(datadiffloc), y=datareldiff)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in overall energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ##Create the dataframe for statistics about the difference - MARGINAL ENERGY statisticsPlacement_m=data.frame(datadiffloc,datareldiff_m) #Get numbers for the text quantile(statisticsPlacement_m$datareldiff,0.10) quantile(statisticsPlacement_m$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement_m, aes(x=factor(datadiffloc), y=datareldiff_m)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in marginal energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Average included device utilization data graph ####Begin ### Getting the data - different placements ONLY result_data_csv <- read.csv(file="./RandomBeginningDevice/Std10/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_2replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 #Create a dataframe with only the device utilization information utilization=data.frame(result_data_csv$Device0,result_data_csv$Device1,result_data_csv$Device2,result_data_csv$Device3, result_data_csv$Device4,result_data_csv$Device5,result_data_csv$Device6,result_data_csv$Device7, result_data_csv$Device8,result_data_csv$Device9,result_data_csv$Device10) #Calculating the mean utilization for each data line meanUt=rowMeans(utilization,na.rm=TRUE) #Create data frame for plotting mean_data_utilization= data.frame(result_data_csv$LoadLevel,result_data_csv$Alternative,meanUt) ###Plot - Statistics about the utilization, violin plot ggplot(data=mean_data_utilization, aes(x=factor(result_data_csv$LoadLevel), y=meanUt, fill=result_data_csv$Alternative)) + geom_violin()+ theme_minimal()+ ylab("Mean device utilization when placements are different (%)")+ xlab("Average load level in %")+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Completion Time graph for different placements ####Begin ## Getting the data - different placements ONLY result_data_csv_ut_DifferentOnly <- read.csv(file="./RandomBeginningDevice/Std10/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_2replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") ## Getting the data - all placements result_data_csv_ev_All <- read.csv(file="./RandomBeginningDevice/Std10/resultsParsed_40rep_DeviceOnlyVar_2replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") result_data_csv_ev_All$LoadLevel <- result_data_csv_ev_All$Scenario*10 ##Adding a column for the combination Repetition_Scenario to be able to filter result_data_csv_ut_DifferentOnly$id <- paste(result_data_csv_ut_DifferentOnly$Repetition,result_data_csv_ut_DifferentOnly$Scenario,sep = "_") result_data_csv_ev_All$id <- paste(result_data_csv_ev_All$Repetition,result_data_csv_ev_All$Scenario,sep = "_") ##Filter the all data from the combination Repetition/Scenario/Alternative? to get only the info when placements are different library(dplyr) result_data_csv_ev_DifferentOnly = result_data_csv_ev_All %>% filter(id %in% result_data_csv_ut_DifferentOnly$id) #Boxplot ggplot(data=result_data_csv_ev_DifferentOnly, aes(x=factor(LoadLevel), y=CompletionTime, fill=Alternative)) + geom_boxplot()+ theme_minimal()+ ylab("Request completion time when placements are different (ms)")+ xlab("Average load level in %")+ ylim(0,100)+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End ## NORMALLY DISTRIBUTED LOAD - STD 30 (2 function instances/replicas) - RANDOM BEGINNING DEVICE ####Begin ### Getting the data result_data_csv <- read.csv(file="./RandomBeginningDevice/Std30/resultsParsed_40rep_DeviceOnlyVar_2replicas_Std30_RequestDeviceRandom.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ####End ## NORMALLY DISTRIBUTED LOAD - STD 10 (4 function instances/replicas) - RANDOM BEGINNING DEVICE #Graphs for the categorization of placements and the relative difference in overall/marginal energy ####Begin ### Getting the data result_data_csv <- read.csv(file="./RandomBeginningDevice/4fi/resultsParsed_40rep_DeviceOnlyVar_4replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Working on visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculate the relative difference - for Overall Energy reldiffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy / loadLevel0_Overall$OverallEnergy reldiffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy / loadLevel1_Overall$OverallEnergy reldiffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy / loadLevel2_Overall$OverallEnergy reldiffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy / loadLevel3_Overall$OverallEnergy reldiffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy / loadLevel4_Overall$OverallEnergy reldiffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy / loadLevel5_Overall$OverallEnergy reldiffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy / loadLevel6_Overall$OverallEnergy reldiffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy / loadLevel7_Overall$OverallEnergy reldiffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy / loadLevel8_Overall$OverallEnergy reldiffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy / loadLevel9_Overall$OverallEnergy reldiffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy / loadLevel10_Overall$OverallEnergy reldiffLoadLevel_Overall = list(reldiffLoadLevel0_Overall,reldiffLoadLevel1_Overall,reldiffLoadLevel2_Overall, reldiffLoadLevel3_Overall,reldiffLoadLevel4_Overall,reldiffLoadLevel5_Overall, reldiffLoadLevel6_Overall,reldiffLoadLevel7_Overall,reldiffLoadLevel8_Overall, reldiffLoadLevel9_Overall,reldiffLoadLevel10_Overall) #Calculate the relative difference - for Marginal Energy reldiffLoadLevel0_Marginal <- loadLevel0_Overall$MarginalEnergy / loadLevel0_Marginal$MarginalEnergy reldiffLoadLevel1_Marginal <- loadLevel1_Overall$MarginalEnergy / loadLevel1_Marginal$MarginalEnergy reldiffLoadLevel2_Marginal <- loadLevel2_Overall$MarginalEnergy / loadLevel2_Marginal$MarginalEnergy reldiffLoadLevel3_Marginal <- loadLevel3_Overall$MarginalEnergy / loadLevel3_Marginal$MarginalEnergy reldiffLoadLevel4_Marginal <- loadLevel4_Overall$MarginalEnergy / loadLevel4_Marginal$MarginalEnergy reldiffLoadLevel5_Marginal <- loadLevel5_Overall$MarginalEnergy / loadLevel5_Marginal$MarginalEnergy reldiffLoadLevel6_Marginal <- loadLevel6_Overall$MarginalEnergy / loadLevel6_Marginal$MarginalEnergy reldiffLoadLevel7_Marginal <- loadLevel7_Overall$MarginalEnergy / loadLevel7_Marginal$MarginalEnergy reldiffLoadLevel8_Marginal <- loadLevel8_Overall$MarginalEnergy / loadLevel8_Marginal$MarginalEnergy reldiffLoadLevel9_Marginal <- loadLevel9_Overall$MarginalEnergy / loadLevel9_Marginal$MarginalEnergy reldiffLoadLevel10_Marginal <- loadLevel10_Overall$MarginalEnergy / loadLevel10_Marginal$MarginalEnergy reldiffLoadLevel_Marginal = list(reldiffLoadLevel0_Marginal,reldiffLoadLevel1_Marginal,reldiffLoadLevel2_Marginal, reldiffLoadLevel3_Marginal,reldiffLoadLevel4_Marginal,reldiffLoadLevel5_Marginal, reldiffLoadLevel6_Marginal,reldiffLoadLevel7_Marginal,reldiffLoadLevel8_Marginal, reldiffLoadLevel9_Marginal,reldiffLoadLevel10_Marginal) #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ##Create the dataframe for statistics about the difference - OVERALL ENERGY statisticsPlacement=data.frame(datadiffloc,datadiff,datareldiff) #Get numbers for the text quantile(statisticsPlacement$datareldiff,0.10) quantile(statisticsPlacement$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement, aes(x=factor(datadiffloc), y=datareldiff)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in overall energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ##Create the dataframe for statistics about the difference - MARGINAL ENERGY statisticsPlacement_m=data.frame(datadiffloc,datareldiff_m) #Get numbers for the text quantile(statisticsPlacement_m$datareldiff,0.10) quantile(statisticsPlacement_m$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement_m, aes(x=factor(datadiffloc), y=datareldiff_m)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in marginal energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Average included device utilization data graph ####Begin ### Getting the data - different placements ONLY result_data_csv <- read.csv(file="./RandomBeginningDevice/4fi/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_4replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 #Create a dataframe with only the device utilization information utilization=data.frame(result_data_csv$Device0,result_data_csv$Device1,result_data_csv$Device2,result_data_csv$Device3, result_data_csv$Device4,result_data_csv$Device5,result_data_csv$Device6,result_data_csv$Device7, result_data_csv$Device8,result_data_csv$Device9,result_data_csv$Device10) #Calculating the mean utilization for each data line meanUt=rowMeans(utilization,na.rm=TRUE) #Create data frame for plotting mean_data_utilization= data.frame(result_data_csv$LoadLevel,result_data_csv$Alternative,meanUt) ###Plot - Statistics about the utilization, violin plot ggplot(data=mean_data_utilization, aes(x=factor(result_data_csv$LoadLevel), y=meanUt, fill=result_data_csv$Alternative)) + geom_violin()+ theme_minimal()+ ylab("Mean device utilization when placements are different (%)")+ xlab("Average load level in %")+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Completion Time graph for different placements ####Begin ## Getting the data - different placements ONLY result_data_csv_ut_DifferentOnly <- read.csv(file="./4fi/RandomBeginningDevice/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_4replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") ## Getting the data - all placements result_data_csv_ev_All <- read.csv(file="./RandomBeginningDevice/4fi/resultsParsed_40rep_DeviceOnlyVar_4replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") result_data_csv_ev_All$LoadLevel <- result_data_csv_ev_All$Scenario*10 ##Adding a column for the combination Repetition_Scenario to be able to filter result_data_csv_ut_DifferentOnly$id <- paste(result_data_csv_ut_DifferentOnly$Repetition,result_data_csv_ut_DifferentOnly$Scenario,sep = "_") result_data_csv_ev_All$id <- paste(result_data_csv_ev_All$Repetition,result_data_csv_ev_All$Scenario,sep = "_") ##Filter the all data from the combination Repetition/Scenario/Alternative? to get only the info when placements are different library(dplyr) result_data_csv_ev_DifferentOnly = result_data_csv_ev_All %>% filter(id %in% result_data_csv_ut_DifferentOnly$id) #Boxplot ggplot(data=result_data_csv_ev_DifferentOnly, aes(x=factor(LoadLevel), y=CompletionTime, fill=Alternative)) + geom_boxplot()+ theme_minimal()+ ylab("Request completion time when placements are different (ms)")+ xlab("Average load level in %")+ ylim(0,100)+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End ### NORMALLY DISTRIBUTED LOAD - STD 10 (6 function instances/replicas) - RANDOM BEGINNING DEVICE #Graphs for the categorization of placements and the relative difference in overall/marginal energy #### Begin ### Getting the data result_data_csv <- read.csv(file="./RandomBeginningDevice/6fi/resultsParsed_40rep_DeviceOnlyVar_6replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 ###Filter per loadLevel loadLevel0_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Overall"),] loadLevel0_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 0 & result_data_csv$Alternative=="Marginal"),] loadLevel1_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Overall"),] loadLevel1_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 10 & result_data_csv$Alternative=="Marginal"),] loadLevel2_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Overall"),] loadLevel2_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 20 & result_data_csv$Alternative=="Marginal"),] loadLevel3_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Overall"),] loadLevel3_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 30 & result_data_csv$Alternative=="Marginal"),] loadLevel4_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Overall"),] loadLevel4_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 40 & result_data_csv$Alternative=="Marginal"),] loadLevel5_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Overall"),] loadLevel5_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 50 & result_data_csv$Alternative=="Marginal"),] loadLevel6_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Overall"),] loadLevel6_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 60 & result_data_csv$Alternative=="Marginal"),] loadLevel7_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Overall"),] loadLevel7_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 70 & result_data_csv$Alternative=="Marginal"),] loadLevel8_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Overall"),] loadLevel8_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 80 & result_data_csv$Alternative=="Marginal"),] loadLevel9_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Overall"),] loadLevel9_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 90 & result_data_csv$Alternative=="Marginal"),] loadLevel10_Overall <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Overall"),] loadLevel10_Marginal <- result_data_csv[which(result_data_csv$LoadLevel == 100 & result_data_csv$Alternative=="Marginal"),] ##Working on visualizing the difference #Calculate the difference - for Overall Energy diffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy - loadLevel0_Overall$OverallEnergy diffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy - loadLevel1_Overall$OverallEnergy diffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy - loadLevel2_Overall$OverallEnergy diffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy - loadLevel3_Overall$OverallEnergy diffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy - loadLevel4_Overall$OverallEnergy diffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy - loadLevel5_Overall$OverallEnergy diffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy - loadLevel6_Overall$OverallEnergy diffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy - loadLevel7_Overall$OverallEnergy diffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy - loadLevel8_Overall$OverallEnergy diffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy - loadLevel9_Overall$OverallEnergy diffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy - loadLevel10_Overall$OverallEnergy diffLoadLevel_Overall = list(diffLoadLevel0_Overall,diffLoadLevel1_Overall,diffLoadLevel2_Overall, diffLoadLevel3_Overall,diffLoadLevel4_Overall,diffLoadLevel5_Overall, diffLoadLevel6_Overall,diffLoadLevel7_Overall,diffLoadLevel8_Overall, diffLoadLevel9_Overall,diffLoadLevel10_Overall) #Calculate the relative difference - for Overall Energy reldiffLoadLevel0_Overall <- loadLevel0_Marginal$OverallEnergy / loadLevel0_Overall$OverallEnergy reldiffLoadLevel1_Overall <- loadLevel1_Marginal$OverallEnergy / loadLevel1_Overall$OverallEnergy reldiffLoadLevel2_Overall <- loadLevel2_Marginal$OverallEnergy / loadLevel2_Overall$OverallEnergy reldiffLoadLevel3_Overall <- loadLevel3_Marginal$OverallEnergy / loadLevel3_Overall$OverallEnergy reldiffLoadLevel4_Overall <- loadLevel4_Marginal$OverallEnergy / loadLevel4_Overall$OverallEnergy reldiffLoadLevel5_Overall <- loadLevel5_Marginal$OverallEnergy / loadLevel5_Overall$OverallEnergy reldiffLoadLevel6_Overall <- loadLevel6_Marginal$OverallEnergy / loadLevel6_Overall$OverallEnergy reldiffLoadLevel7_Overall <- loadLevel7_Marginal$OverallEnergy / loadLevel7_Overall$OverallEnergy reldiffLoadLevel8_Overall <- loadLevel8_Marginal$OverallEnergy / loadLevel8_Overall$OverallEnergy reldiffLoadLevel9_Overall <- loadLevel9_Marginal$OverallEnergy / loadLevel9_Overall$OverallEnergy reldiffLoadLevel10_Overall <- loadLevel10_Marginal$OverallEnergy / loadLevel10_Overall$OverallEnergy reldiffLoadLevel_Overall = list(reldiffLoadLevel0_Overall,reldiffLoadLevel1_Overall,reldiffLoadLevel2_Overall, reldiffLoadLevel3_Overall,reldiffLoadLevel4_Overall,reldiffLoadLevel5_Overall, reldiffLoadLevel6_Overall,reldiffLoadLevel7_Overall,reldiffLoadLevel8_Overall, reldiffLoadLevel9_Overall,reldiffLoadLevel10_Overall) #Calculate the relative difference - for Marginal Energy reldiffLoadLevel0_Marginal <- loadLevel0_Overall$MarginalEnergy / loadLevel0_Marginal$MarginalEnergy reldiffLoadLevel1_Marginal <- loadLevel1_Overall$MarginalEnergy / loadLevel1_Marginal$MarginalEnergy reldiffLoadLevel2_Marginal <- loadLevel2_Overall$MarginalEnergy / loadLevel2_Marginal$MarginalEnergy reldiffLoadLevel3_Marginal <- loadLevel3_Overall$MarginalEnergy / loadLevel3_Marginal$MarginalEnergy reldiffLoadLevel4_Marginal <- loadLevel4_Overall$MarginalEnergy / loadLevel4_Marginal$MarginalEnergy reldiffLoadLevel5_Marginal <- loadLevel5_Overall$MarginalEnergy / loadLevel5_Marginal$MarginalEnergy reldiffLoadLevel6_Marginal <- loadLevel6_Overall$MarginalEnergy / loadLevel6_Marginal$MarginalEnergy reldiffLoadLevel7_Marginal <- loadLevel7_Overall$MarginalEnergy / loadLevel7_Marginal$MarginalEnergy reldiffLoadLevel8_Marginal <- loadLevel8_Overall$MarginalEnergy / loadLevel8_Marginal$MarginalEnergy reldiffLoadLevel9_Marginal <- loadLevel9_Overall$MarginalEnergy / loadLevel9_Marginal$MarginalEnergy reldiffLoadLevel10_Marginal <- loadLevel10_Overall$MarginalEnergy / loadLevel10_Marginal$MarginalEnergy reldiffLoadLevel_Marginal = list(reldiffLoadLevel0_Marginal,reldiffLoadLevel1_Marginal,reldiffLoadLevel2_Marginal, reldiffLoadLevel3_Marginal,reldiffLoadLevel4_Marginal,reldiffLoadLevel5_Marginal, reldiffLoadLevel6_Marginal,reldiffLoadLevel7_Marginal,reldiffLoadLevel8_Marginal, reldiffLoadLevel9_Marginal,reldiffLoadLevel10_Marginal) #Calculating how many are same, different and infeasible, also storing the data about the difference same=rep(0,11) different=rep(0,11) infeasible=rep(0,11) datadiff=vector() datareldiff=vector() datareldiff_m=vector() datadiffloc=vector() for (levelNb in seq(1,11)){ difference=vector() reldifference=vector() reldifference_m=vector() for(diff in diffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){infeasible[levelNb]=infeasible[levelNb]+1} else if (diff==0){same[levelNb]=same[levelNb]+1} else if (diff>0){different[levelNb]=different[levelNb]+1 difference=append(difference,diff)} } for(diff in reldiffLoadLevel_Overall[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference=append(reldifference,diff)} } datadiffloc=append(datadiffloc,rep((levelNb-1)*10,length(difference))) datadiff=append(datadiff,difference) datareldiff=append(datareldiff,reldifference) for(diff in reldiffLoadLevel_Marginal[[levelNb]]){ if (is.na(diff)){} else if (diff>1){reldifference_m=append(reldifference_m,diff)} } datareldiff_m=append(datareldiff_m,reldifference_m) } ##Create the dataframe for plotting the difference LoadLevel= rep(seq(0,100,10),3) Outcome=c(rep("Same",11),rep("Different",11),rep("Infeasible",11)) NbPlacements=c(same,different,infeasible) nbDifferentPlacements =data.frame(LoadLevel,Outcome,NbPlacements) ### Plot - Nb of different placement ggplot(data=nbDifferentPlacements, aes(x=LoadLevel, y=NbPlacements, fill=Outcome)) + geom_bar(stat="identity", position = position_stack())+ theme_minimal()+ ylab("# obtained placements")+ xlab("Average load level in %")+ labs(fill = "Overall and Marginal placements are")+ scale_fill_manual(values=c("#A95AA1","#F5793A","#85C0F9"))+ theme(legend.position = "top",axis.title.x = element_text(size = 24), axis.text.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.y = element_text(size = 24), legend.text=element_text(size = 24), legend.title=element_text(size = 24)) ##Create the dataframe for statistics about the difference - OVERALL ENERGY statisticsPlacement=data.frame(datadiffloc,datadiff,datareldiff) #Get numbers for the text quantile(statisticsPlacement$datareldiff,0.10) quantile(statisticsPlacement$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement, aes(x=factor(datadiffloc), y=datareldiff)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in overall energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ##Create the dataframe for statistics about the difference - MARGINAL ENERGY statisticsPlacement_m=data.frame(datadiffloc,datareldiff_m) #Get numbers for the text quantile(statisticsPlacement_m$datareldiff,0.10) quantile(statisticsPlacement_m$datareldiff,0.90) ###Plot - Statistics about the relative difference, violin plot ggplot(data=statisticsPlacement_m, aes(x=factor(datadiffloc), y=datareldiff_m)) + geom_violin()+ theme_minimal()+ ylab("Relative difference in marginal energy (J)")+ xlab("Average load level in %")+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Average included device utilization data graph ####Begin ### Getting the data - different placements ONLY result_data_csv <- read.csv(file="./RandomBeginningDevice/6fi/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_6replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") #Adding the load level column result_data_csv$LoadLevel <- result_data_csv$Scenario*10 #Create a dataframe with only the device utilization information utilization=data.frame(result_data_csv$Device0,result_data_csv$Device1,result_data_csv$Device2,result_data_csv$Device3, result_data_csv$Device4,result_data_csv$Device5,result_data_csv$Device6,result_data_csv$Device7, result_data_csv$Device8,result_data_csv$Device9,result_data_csv$Device10) #Calculating the mean utilization for each data line meanUt=rowMeans(utilization,na.rm=TRUE) #Create data frame for plotting mean_data_utilization= data.frame(result_data_csv$LoadLevel,result_data_csv$Alternative,meanUt) ###Plot - Statistics about the utilization, violin plot ggplot(data=mean_data_utilization, aes(x=factor(result_data_csv$LoadLevel), y=meanUt, fill=result_data_csv$Alternative)) + geom_violin()+ theme_minimal()+ ylab("Mean device utilization when placements are different (%)")+ xlab("Average load level in %")+ labs(fill = "Optimization objective")+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18)) ####End #Completion Time graph for different placements #### Begin ## Getting the data - different placements ONLY result_data_csv_ut_DifferentOnly <- read.csv(file="./RandomBeginningDevice/6fi/resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_6replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") ## Getting the data - all placements result_data_csv_ev_All <- read.csv(file="./RandomBeginningDevice/6fi/resultsParsed_40rep_DeviceOnlyVar_6replicas_Std10_RequestDeviceRandom.csv", header=TRUE, sep=",") result_data_csv_ev_All$LoadLevel <- result_data_csv_ev_All$Scenario*10 ##Adding a column for the combination Repetition_Scenario to be able to filter result_data_csv_ut_DifferentOnly$id <- paste(result_data_csv_ut_DifferentOnly$Repetition,result_data_csv_ut_DifferentOnly$Scenario,sep = "_") result_data_csv_ev_All$id <- paste(result_data_csv_ev_All$Repetition,result_data_csv_ev_All$Scenario,sep = "_") ##Filter the all data from the combination Repetition/Scenario/Alternative? to get only the info when placements are different library(dplyr) result_data_csv_ev_DifferentOnly = result_data_csv_ev_All %>% filter(id %in% result_data_csv_ut_DifferentOnly$id) #Boxplot ggplot(data=result_data_csv_ev_DifferentOnly, aes(x=factor(LoadLevel), y=CompletionTime, fill=Alternative)) + geom_boxplot()+ theme_minimal()+ ylab("Request completion time when placements are different (ms)")+ xlab("Average load level in %")+ labs(fill = "Optimization objective")+ ylim(0,100)+ scale_fill_manual(values=c("#F0E442","#0072B2"))+ theme(legend.position = "top",axis.title.x = element_text(size = 18), axis.text.x = element_text(size = 18), axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 18), legend.text=element_text(size = 18), legend.title=element_text(size = 18))