Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ida-rtslab/public-code/2024_energy-aware_placement
1 result
Show changes
Commits on Source (2)
Showing
with 2237 additions and 9017 deletions
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))
import csv
import re
# open the file in the write mode
f = open('resultsParsed_40rep_DeviceOnlyVar_2replicas_Std30_RequestDeviceRandom.csv', 'w',newline='')
# create the csv writer
writer = csv.writer(f)
# Header
writer.writerow(['Repetition','Scenario','Alternative','ExecutionTime','CompletionTime','OverallEnergy','MarginalEnergy','CompletionTimeLink','CompletionTimeDevice', 'EnergyOverallLink','EnergyOverallDevice','EnergyMarginalLink','EnergyMarginalDevice'])
nextline= False
with open("40rep_DeviceOnlyVar_2replicas_Std30_RequestDeviceRandom.txt","r") as fi:
for ln in fi:
if ln.startswith("Repetition"):
# Get the repetition number
repetition =[s for s in re.findall(r'\b\d+\b', ln)]
if ln.startswith("Utilization scenario"):
# Get the scenario number
number =[s for s in re.findall(r'\b\d+\b', ln)]
if nextline:
#This is a line with the results for the placement evaluation
# The results should be in the following order: CompletionTime, OverallEnergy, MarginalEnergy, CompletionTimeLink, CompletionTimeDevice, EnergyOverallLink, EnergyOverallDevice, EnergyMarginalLink, EnergyMarginalDevice
results=[s for s in re.findall(r'\d+\.\d+', ln)]
if (results):
# Write to the CSV file
writer.writerow([repetition[0],number[0],alternative,executionTime[0],results[0],results[1],results[2],results[3],results[4],results[5],results[6],results[7],results[8]])
else:
# No results because infeasible
# Write to the CSV file
writer.writerow([repetition[0],number[0],alternative,executionTime[0],'NA','NA','NA','NA','NA','NA','NA','NA','NA'])
# Reset
nextline= False
if ln.startswith("OVERALL OPT"):
# Get the scenario number
alternative ="Overall"
# Get the value for the execution time
executionTime=[s for s in re.findall(r'\d+', ln)]
# Get to the nextline
nextline=True
else:
if ln.startswith("MARGINAL OPT"):
# Get the scenario number
alternative ="Marginal"
# Get the value for the execution time
executionTime=[s for s in re.findall(r'\d+', ln)]
# Get to the nextline
nextline=True
# close the file
f.close()
\ No newline at end of file
import csv
import re
# open the file in the write mode
f = open('resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_2replicas_Std30_RequestDeviceRandom.csv', 'w',newline='')
# create the csv writer
writer = csv.writer(f)
# Header
writer.writerow(['Repetition','Scenario','Alternative','Device0','Device1','Device2','Device3','Device4','Device5', 'Device6','Device7','Device8','Device9','Device10'])
nextline= False
nextlineUtilization = False
i=0
saveDevicePlacement = True
with open("40rep_DeviceOnlyVar_2replicas_Std30_RequestDeviceRandom.txt","r") as fi:
for ln in fi:
if nextlineUtilization:
#This is a line with the data for the utilization scenario
gatewayList=[s for s in re.findall(r'[\s\{]gateway_(\d+)=(\d+.\d+)', ln)]
utilizationInfo=[0.0]*11
for infoPair in gatewayList: #A pair has the form (deviceNumber,utilizationValue)
utilizationInfo[int(infoPair[0])]=infoPair[1]
#print(utilizationInfo)
# Reset
nextlineUtilization= False
if ln.startswith("Repetition"):
# Get the repetition number
repetition =[s for s in re.findall(r'\b\d+\b', ln)]
if ln.startswith("Utilization scenario"):
# Get the scenario number
number =[s for s in re.findall(r'\b\d+\b', ln)]
nextlineUtilization=True
if nextline:
#This is a line with the name of the alternative
if ln.startswith("OVERALL OPT"):
# Get the scenario number
alternative ="Overall"
saveDevicePlacement=False
# The results indicate the utilization information only for the devices used in the placement - save temporarily overall results
results2=[]
for deviceNb in range(11):
if deviceNb in devicesUsedInPlacement:
results2.append(utilizationInfo[deviceNb])
else:
results2.append('NA')
#print(results)
if ln.startswith("MARGINAL OPT"):
# Get the scenario number
alternative ="Marginal"
# Assuming Marginal is always second
saveDevicePlacement=True
if not devicesUsedInPlacement==devicesUsedInPlacementSaved:
#Only save info when placement is different
print("Different placement, writing to CSV")
# The results indicate the utilization information only for the devices used in the placement
results=[]
for deviceNb in range(11):
if deviceNb in devicesUsedInPlacement:
results.append(utilizationInfo[deviceNb])
else:
results.append('NA')
#print(results)
# Write to the CSV file - the two rows
writer.writerow([repetition[0],number[0],"Overall",results2[0],results2[1],results2[2],results2[3],results2[4],results2[5],results2[6],results2[7],results2[8],results2[9],results2[10]])
writer.writerow([repetition[0],number[0],alternative,results[0],results[1],results[2],results[3],results[4],results[5],results[6],results[7],results[8],results[9],results[10]])
i=i+2
print(i)
# Reset
nextline= False
if ln.startswith("Objective"):
# Get the devices that are part of the resulting placement
devicesUsedInPlacement=[int(s) for s in re.findall(r'yg(\d+)\w\w=1', ln)]
print(devicesUsedInPlacement)
if (saveDevicePlacement):
devicesUsedInPlacementSaved=devicesUsedInPlacement
# Get to the nextline - where the alternative is written
nextline=True
if ln.startswith("The request is infeasible"):
# Get the devices that are part of the resulting placement - none in this case
devicesUsedInPlacement=[]
print(devicesUsedInPlacement)
if (saveDevicePlacement):
devicesUsedInPlacementSaved=devicesUsedInPlacement
# Get to the nextline - where the alternative is written
nextline=True
# close the file
f.close()
\ No newline at end of file
This diff is collapsed.
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted