|
|
ea.crossover <- function(p1, p2, mask) {
|
|
ch1 <- c()
|
|
ch2 <- c()
|
|
|
|
for(i in 1:length(mask)) {
|
|
if(mask[i]) {
|
|
ch1[i] <- p2[i]
|
|
ch2[i] <- p1[i]
|
|
} else {
|
|
ch1[i] <- p1[i]
|
|
ch2[i] <- p2[i]
|
|
}
|
|
}
|
|
|
|
return(list(ch1, ch2))
|
|
}
|
|
|
|
indiv2int <- function(indiv) {
|
|
res <- 0
|
|
|
|
indiv_rev <- rev(indiv)
|
|
|
|
for(i in 1:length(indiv)) {
|
|
res <- res + indiv_rev[i] * 2^(i-1)
|
|
}
|
|
|
|
return(res)
|
|
}
|
|
|
|
ea.n_point_mask <- function(len, n_points) {
|
|
return( function() {
|
|
points <- sort(c(c(1), sample(2:(len - 1), n_points), c(len)))
|
|
|
|
val <- TRUE
|
|
mask <- c()
|
|
|
|
for(i in 1:(length(points) - 1)) {
|
|
mask <- append(mask, rep(val, points[i + 1] - points[i]))
|
|
|
|
if(val) {val <- FALSE} else {val <- TRUE}
|
|
}
|
|
|
|
return(mask)
|
|
})
|
|
}
|
|
|
|
ea.uniform_mask <- function(len) {
|
|
return(function() sample(c(TRUE, FALSE), len, replace=TRUE))
|
|
}
|
|
|
|
rand.individual <- function(len) {
|
|
return(sample(c(0,1), len, replace=TRUE))
|
|
}
|