|
|
- 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)
- }
|