EDAs are implemented using S4 classes with generic functions for its main
parts: seeding (edaSeed
), selection (edaSelect
),
learning (edaLearn
), sampling (edaSample
), replacement
(edaReplace
), local optimization (edaOptimize
),
termination (edaTerminate
), and reporting
(edaReport
). The following pseudocode illustrates the interactions between all the generic
functions that implement the main parts of the EDA. It is a simplified
version of the implementation of the edaRun
function.
gen <- 0
fEvals <- 0
terminate <- FALSE
while (!terminate) {
gen <- gen + 1
if (gen == 1) {
model <- NULL
pop <- edaSeed(lower, upper)
# Set popEval to the evaluation of each solution in pop.
# Update fEvals.
r <- edaOptimize(gen, pop, popEval, f, lower, upper)
pop <- r$pop; popEval <- r$popEval
} else {
s <- edaSelect(gen, pop, popEval)
selectedPop <- pop[s, ]; selectedEval <- popEval[s]
model <- edaLearn(gen, model, selectedPop, selectedEval,
lower, upper)
sampledPop <- edaSample(gen, model, lower, upper)
# Set sampledEval to the evaluation of each solution
# in sampledPop. Update fEvals.
r <- edaOptimize(gen, sampledPop, sampledEval, f, lower, upper)
sampledPop <- r$pop; sampledEval <- r$popEval
r <- edaReplace(gen, pop, popEval, sampledPop, sampledEval)
pop <- r$pop; popEval <- r$popEval
}
edaReport(gen, fEvals, model, pop, popEval)
terminate <- edaTerminate(gen, fEvals, pop, popEval)
}