doTheEvolution: Working horse of the ecr package.

Description Usage Arguments Value See Also Examples

Description

Takes a function and searches for a global optimum with an evolutionary approach.

Usage

1
doTheEvolution(task, control, initial.population = NULL, more.args = list())

Arguments

task

[ecr_optimization_task]
Optimization task. If a smoof_function is passed it is automatically converted into a task.

control

[ecr_control]
ECR control object generated via setupECRControl.

initial.population

[list]
List of individuals which should be placed in the initial population. The function will stop with an error message if the number of passed individuals is larger than control$n.population. If the number of passed individuals is lower than control$n.population, the population will be filled up by individuals generated by the corresponding generator. Default is NULL, i.e., the entire population is generated by the population generator.

more.args

[list]
Additional arguments passed to objective function.

Value

[ecr_result]

See Also

setupECRControl

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
library(smoof)
library(ParamHelpers)
library(ggplot2)

# We want to find the minimum of the function f(x) = x sin(2x) on the interval
# [0, 2pi]. The optimal value is about -5.5 for x = 5.54.
# First we wrap the function with the smoof package:
obj.fn = makeSingleObjectiveFunction(
  name = "My obj. function",
  fn = function(x) x * sin(2 * x),
  par.set = makeParamSet(makeNumericParam("x", lower = 0, upper = 2 * pi))
)

# We want to solve this with a (10 + 10) evolutionary strategy based on
# the floating point representation of the input vectors with the default
# operators: intermediate recombinator and Gaussian mutation
ctrl = setupECRControl(
  n.population = 10L,
  n.offspring = 10L,
  survival.strategy = "plus",
  representation = "float",
  stopping.conditions = setupTerminators(max.iter = 100L)
)
# use the default operators for representation "float"
ctrl = setupEvolutionaryOperators(ctrl)

res = doTheEvolution(obj.fn, ctrl)
print(res)

# Now let us choose a (10, 10) strategy with intermediate recombination. Moreover,
# we want the "fittest" individual to surive each time and therefore set n.elite
# to 1.
ctrl = setupECRControl(
  n.population = 10L,
  n.offspring = 10L,
  survival.strategy = "comma",
  n.elite = 1L,
  representation = "float",
  stopping.conditions = setupTerminators(max.iter = 100L)
)
ctrl = setupEvolutionaryOperators(ctrl)

res = doTheEvolution(obj.fn, ctrl)
print(res)

# Now let us tackle a two-dimensional problem
# Here we aim to find the global optimum of the 2D-Rastrigin function

set.seed(1234)

obj.fn = makeRastriginFunction(2L)
autoplot(obj.fn, show.optimum = TRUE)
# The global optimum is located in x1 = x2 = 0 with a function value of 0.

# We choose a (100 + 10) strategy with crossover recombination here and save
# each population. This way we can visualize the population later on.
ctrl = setupECRControl(
  n.population = 100L,
  n.offspring = 10L,
  survival.strategy = "plus",
  representation = "float",
  logger = setupOptPathLoggingMonitor(),
  stopping.conditions = setupTerminators(max.iter = 50L)
)

ctrl = setupEvolutionaryOperators(
 ctrl,
 parent.selector = setupRouletteWheelSelector(),
 recombinator = setupCrossoverRecombinator(),
 survival.selector = setupGreedySelector()
)
## Not run: 
  res = doTheEvolution(obj.fn, ctrl)
  print(res)
  autoplot(res, show.process = TRUE)

## End(Not run)

jakobbossek/ecr documentation built on May 18, 2019, 9:09 a.m.