Mostly ecr::ecr, with some simplifications and extensions.
slickEcr does mostly what ecr::ecr does, with different default values at places.
Note that fitness.fun must be a "smoof" function.
initEcr only evaluates fitness for the initial population and does not perform any
mutation or selection.
continueEcr continues a run for another number of generations. Only ecr.object
(a result from a previous initEcr, slickEcr, or continueEcr call) and
generations must be given, the other arguments are optional. If they were set
in a previous slickEcr or continueEcr call, the values from the
previous run are used. Otherwise it is possible to supply any combination of these values
to set them to new values.
Note, for fidelity, that the generation continues counting from previous runs,
so if initEcr was ran for 5 generations and continueEcr is called with
a fidelity with first column values c(1, 8), then the fidelity given in the
first row is applied for 2 generations, after which the fidelity given in the
second row applies.
slickEcr( fitness.fun, lambda, population, mutator, recombinator, generations = 100, parent.selector = selSimple, survival.selector = selNondom, p.recomb = 0.7, p.mut = 0.3, survival.strategy = "plus", n.elite = 0, fidelity = NULL, unbiased.fidelity = TRUE, log.stats = NULL, log.stats.newinds = c(list(runtime = list("mean", "sum")), if (!is.null(fidelity)) list(fidelity = list("sum"))) ) initEcr( fitness.fun, population, fidelity = NULL, log.stats = NULL, log.stats.newinds = c(list(runtime = list("mean", "sum")), if (!is.null(fidelity)) list(fidelity = list("sum"))), unbiased.fidelity = TRUE ) continueEcr( ecr.object, generations, lambda = NULL, mutator = NULL, recombinator = NULL, parent.selector = NULL, survival.selector = NULL, p.recomb = NULL, p.mut = NULL, survival.strategy = NULL, n.elite = NULL, fidelity = NULL, unbiased.fidelity = NULL )
| fitness.fun |
|
|---|---|
| lambda |
|
| population |
|
| mutator |
|
| recombinator |
|
| generations |
|
| parent.selector |
|
| survival.selector |
|
| p.recomb |
|
| p.mut |
|
| survival.strategy |
|
| n.elite |
|
| fidelity |
|
| unbiased.fidelity |
|
| log.stats |
|
| log.stats.newinds |
|
| ecr.object |
|
[MosmafsResult] the terminated optimization state.
# \donttest{ library("mlr") library("magrittr") library("mlrCPO") # Define tasks task.whole <- create.hypersphere.data(3, 2000) %>% create.classif.task(id = "sphere") %>% task.add.permuted.cols(10) rows.whole <- sample(2000) task <- subsetTask(task.whole, rows.whole[1:500]) task.hout <- subsetTask(task.whole, rows.whole[501:2000]) # Create learner lrn <- makeLearner("classif.rpart", maxsurrogate = 0) # Create parameter set to optimize over ps <- pSS( maxdepth: integer[1, 30], minsplit: integer[2, 30], cp: numeric[0.001, 0.999]) # Create fitness function fitness.fun <- makeObjective(lrn, task, ps, cv5, holdout.data = task.hout) # Receive parameter set from fitness function ps.objective <- getParamSet(fitness.fun) # Define mutators and recombinators mutator <- combine.operators(ps.objective, numeric = ecr::setup(mutGauss, sdev = 0.1), integer = ecr::setup(mutGaussInt, sdev = 3), selector.selection = mutBitflipCHW) crossover <- combine.operators(ps.objective, numeric = recPCrossover, integer = recPCrossover, selector.selection = recPCrossover) # Initialize population and evaluate it initials <- sampleValues(ps.objective, 32, discrete.names = TRUE) run.init <- initEcr(fitness.fun = fitness.fun, population = initials) # Run NSGA-II for 5 generations with run.init as input run.gen <- continueEcr(run.init, generations = 5, lambda = 5, mutator = mutator, recombinator = crossover, parent.selector = selSimple, survival.selector = selNondom, p.recomb = 0.7, p.mut = 0.3, survival.strategy = "plus") # Or instead of initEcr and continueEcr use the shortcut function slickEcr run.simple <- slickEcr( fitness.fun = fitness.fun, lambda = 5, population = initials, mutator = mutator, recombinator = crossover, generations = 5) print(run.simple)#> EA applied to solve bi-objective problem. #> Number of nondominanted points: 3 #> y1 y2 #> 1 0.452 0.3030303 #> 2 0.316 0.4545455 #> 3 0.290 0.4848485 #> NULL# }