# pero quizas nos interese armar nuestra propia # biblioteca de funciones para Algoritmos Genticos, # de manera de probar otras configuraciones o nuevas # tcnicas. As que armemos una funcin bsica # de optimizacin basada en este paradigma para tener # de ejemplo. # Primero que todo, armemos una funcin que nos # genere una poblacin inicial aleatoria: generarPoblacionInicial <- function(tamanoCromosoma, tamanoPoblacion){
} # Vamos a probarla : generarPoblacionInicial(5,10) # Hagamos una funcin para seleccionar las n mejores: seleccionarMejores <- function (poblacion, funcionObjetivo, cantMejores, minimiz ar = TRUE){ valoresObj <- c() for (i in 1:nrow(poblacion)){ valoresObj <- c(valoresObj, funcionObjetivo(poblacion[i,1:ncol(poblacion)])) } order(valoresObj, decreasing = !minimizar)[1:cantMejores] } # Probmosla: datos <- generarPoblacionInicial(5,10) datos seleccionarMejores(datos, function(x){sum(x)}, cantMejores = 3, minimizar = FALS E) # Ya sabemos como generar la poblacin inicial # y como seleccionar por las mejores. Veamos como mutar # a poblacion: mutarCromosomas <- function(poblacion, porcentajeMutacion){ cantCromosomas <- nrow(poblacion) cromosomasMutados <- ceiling(poblacion * porcentajeMutacion) cromosomasSeleccionados <- sample(1:cantCromosomas,cromosomasMutados,replace=F ALSE) bitsSeleccionados <- sample(1:ncol(poblacion),cromosomasMutados,replace=TRUE)
nuevaPoblacion } # Probemos nuestra funci?n de mutaci?n datos mutarCromosomas(datos, 0.25) # Y ahora armemos la funcin para generar hijos: generarHijosDeMadreYPadre <- function(madre, padre, cantHerenciaMadre){ hijo <- padre herenciaMadre <- sample(1:length(madre), cantHerenciaMadre, replace = FALSE) hijo[herenciaMadre] <- madre[herenciaMadre] hijo
} # La probamos: generarHijosDeMadreYPadre(c(1,1,1,1,1), c(0,0,0,0,0), 3) generarHijosDeMadreYPadre(c(1,1,1,1,1), c(0,0,0,0,0), 3) generarHijosDeMadreYPadre(c(1,1,1,1,1), c(0,0,0,0,0), 3) # Armemos ahora la funcin que implementa el algoritmo # en forma completa: myAlgoritmoGenetico <- function(tamanoCromosoma, tamanoPoblacion,cantMejores,por centajeMutacion,cantHerenciaMadre, nroIteraciones = 100, funcionObjetivo, minimi zar = TRUE){