You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

54 lines
1.0 KiB

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