|
|
@ -0,0 +1,71 @@ |
|
|
|
source("linear_scaling.R") |
|
|
|
library(ggplot2) |
|
|
|
library(RColorBrewer) |
|
|
|
|
|
|
|
fittrans.id <- function(popul) { |
|
|
|
return(popul) |
|
|
|
} |
|
|
|
|
|
|
|
fittrans.linscale <- function(a, b) { |
|
|
|
return(function(popul) { |
|
|
|
popul[,2] = a * popul[,2] + b |
|
|
|
|
|
|
|
return(popul) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
select.fps <- function(popul) { |
|
|
|
relfit <- linscale.relfitness(popul[,2]) |
|
|
|
|
|
|
|
filtr <- sample(popul[,1], length(popul[,1]), prob=relfit, replace=TRUE) |
|
|
|
return(popul[filtr,]) |
|
|
|
} |
|
|
|
|
|
|
|
ev.run <- function(popul, gen, selection, fittrans=fittrans.id) { |
|
|
|
npopul <- length(popul) |
|
|
|
|
|
|
|
namedpopul <- matrix(c(1:npopul, popul), ncol=2) |
|
|
|
|
|
|
|
df = data.frame( gen = 0 |
|
|
|
,fitness = namedpopul[,2] |
|
|
|
,ancestor = namedpopul[,1] |
|
|
|
,relfit = linscale.relfitness(namedpopul[,2])) |
|
|
|
|
|
|
|
for(g in 1:gen) { |
|
|
|
namedpopul <- selection(fittrans(namedpopul)) |
|
|
|
|
|
|
|
df = rbind(df, data.frame( gen = g |
|
|
|
,fitness = namedpopul[,2] |
|
|
|
,ancestor = namedpopul[,1] |
|
|
|
,relfit = linscale.relfitness(namedpopul[,2]))) |
|
|
|
} |
|
|
|
|
|
|
|
return(df) |
|
|
|
} |
|
|
|
|
|
|
|
ev.plot <- function(df, filename) { |
|
|
|
pdf(file=filename, onefile=TRUE) |
|
|
|
|
|
|
|
|
|
|
|
for(g in unique(df$gen)) { |
|
|
|
p <- ggplot(data=df[df$gen == g,], aes(x="", y=relfit, fill=factor(ancestor))) + |
|
|
|
geom_bar(stat="identity", width=1) + |
|
|
|
coord_polar("y", start=0) + |
|
|
|
labs(x=NULL, y=NULL, fill="ancestor", title=sprintf("generation: %i", g)) |
|
|
|
|
|
|
|
print(p) |
|
|
|
} |
|
|
|
|
|
|
|
dev.off() |
|
|
|
} |
|
|
|
|
|
|
|
ev.animate <- function(df, filename) { |
|
|
|
|
|
|
|
anim <- ggplot(data=df, aes(x="", y=relfit, fill=factor(ancestor))) + |
|
|
|
geom_bar(stat="identity", width=1) + |
|
|
|
coord_polar("y", start=0) + |
|
|
|
labs(x=NULL, y=NULL, fill="ancestor", title="generation: {closest_state}") + |
|
|
|
transition_states(gen) |
|
|
|
|
|
|
|
anim_save(filename, animation=anim) |
|
|
|
} |