forked from CIGbalance/DagstuhlGAN
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathloadIntoR.R
106 lines (102 loc) · 3.52 KB
/
loadIntoR.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
latVecLength=32
# parameters:
# - path: relative path where results are stored
readAll <- function(path){
# first, determine the folder of each algorithm for which data is available
runs <- dir(path, full.names = FALSE)
runs_data = list()
for(f in runs){
print(f)
file <- paste(path,f, sep="/")
res <- readLines(file) #read file
run_data = matrix(NA, nrow=length(res), ncol=(latVecLength+1))
for(i in 1:length(res)){
line = res[i]
line=gsub("\\[", "", line)
line = gsub("\\]", "", line)
line=gsub(":", ",", line)
run_data[i,] = as.numeric(unlist(strsplit(line, split=", ")))
}
runs_data = c(runs_data, list(run_data))
}
save(runs_data, file="runs_data")
}
path="."
#readAll(path)
options(digits=20)
processRuns = function(){
max_iteration=0
best_inds = matrix(NA, nrow=length(runs_data), ncol=(latVecLength+1))
minY = Inf
maxY = -Inf
for(i in 1:length(runs_data)){
data = runs_data[[i]]
best_inds[i,] = data[which.min(data[, latVecLength+1]),]
max_iteration = max(nrow(data), max_iteration)
#if(best_inds[i,latVecLength+1]>=-33){
#cat(paste(best_inds[i,], ",", sep=" "), "\n")
#}
if(minY>min(data[,latVecLength+1])){
minY = min(data[,latVecLength+1])
}
if(maxY<max(data[,latVecLength+1])){
maxY = max(data[,latVecLength+1])
}
}
plot(1:length(runs_data), best_inds[, latVecLength+1], main="best individuals", xlab="run", ylab="fitness")
plot(0, type="n", ylim=c(minY, maxY), xlim=c(1,max_iteration), main="all individuals", xlab="iteration", ylab="fitness",
cex=3, cex.axis=1.5, cex.lab=1.5, cex.main=2)
for(i in 1:length(runs_data)){
data = runs_data[[i]]
points(1:nrow(data), data[,latVecLength+1], pch=".")
#print(nrow(data))
#print(data[, latVecLength+1])
}
avgs = numeric(max_iteration)
sds = numeric(max_iteration)
for(i in 1:max_iteration){
vec = numeric(length(runs_data))
for(j in 1:length(runs_data)){
data = runs_data[[j]]
if(i>nrow(data)){
vec[j]=NA
}else{
vec[j]=data[i,latVecLength+1]
}
#if(data[i,latVecLength+1]<=10){
#cat(paste(data[i,], ",", sep=" "), "\n")
#}
}
avgs[i]=mean(vec)
sds[i]=sd(vec)
}
avgs = avgs[!is.na(avgs)]
sds = sds[!is.na(sds)]
plot(1:length(avgs), avgs, main="mean fitness over time", xlab="iteration", ylab="fitness", type="l",
cex.axis=1.5, cex.lab=1.5, cex.main=2, cex=2)
plot(1:length(avgs), avgs, main="mean fitness over time with standard deviation", xlab="iteration", ylab="fitness", type="l", ylim=c(min(avgs-1.5*sds), max(avgs+1.5*sds)))
lines(1:length(avgs), avgs+1.5*sds, col="red")
lines(1:length(avgs), avgs-1.5*sds, col="red")
#avgs = numeric(max_iteration)
#sds = numeric(max_iteration)
#for(i in 1:max_iteration){
# vec = numeric(length(runs_data))
# for(j in 1:length(runs_data)){
# data = runs_data[[j]]
# vec[j]=data[i,latVecLength+1]
# }
# vec[vec<=-1]=-1
# avgs[i]=mean(vec)
# sds[i]=sd(vec)
#}
#avgs = avgs[!is.na(avgs)]
#sds = sds[!is.na(sds)]
#plot(1:length(avgs), avgs, main="mean fitness over time (only progress)", xlab="iteration", ylab="fitness", type="l")
#plot(1:length(avgs), avgs, main="mean fitness over time (only progress) with sd", xlab="iteration", ylab="fitness", type="l", ylim=c(min(avgs-1.5*sds), max(avgs+1.5*sds)))
#lines(1:length(avgs), avgs+1.5*sds, col="red")
#lines(1:length(avgs), avgs-1.5*sds, col="red")
}
pdf(file="cmaResultPlots.pdf")
load("runs_data")
processRuns()
dev.off()