forked from GrammaTech/sel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmulti-objective-fitness.texi
71 lines (50 loc) · 2.57 KB
/
multi-objective-fitness.texi
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
For multi-objective fitness, a fitness score is a list or vector
(depending on selector) of values: one for each objective.
SEL provides two selection options for multi-objective optimization:
@ref{pareto-selection,Pareto selection} and @ref{lexicase-selection,lexicase selection}.
@anchor{pareto-selection}
@subsection Pareto Selection
Function @refapifunction{sel/cp/multi-objective:pareto-selector} compares each candidate
against a random comparison set, preferring candidates which dominate
the comparison set. This will select for individuals along the Pareto
front of the population.
Because dominance is a partial order, @code{pareto-selector} will
often produce multiple winners, requiring a tie-breaker.
Pareto fitness scores are lists in which each list element can be a
vector, a list, or a number. When an element in this list is a
vector of numeric values, it can be subjected to lexicase selection.
The fitness score lists must be the same length (that is, contain
the same number of objectives) across the entire population.
@anchor{lexicase-selection}
@subsection Lexicase Selection
Function @refapifunction{sel/cp/lexicase:lexicase-select-best} performs lexicase
selection: a form of multi-objective optimization which prioritizes
objectives in a different order for each selection event.
Lexicase fitness scores are vectors of numeric values. The vectors must be the same length across the entire population.
@subsection API Support for Multi-Objective Fitness
@itemize
@item
Set variable @refapivariable{sel:*fitness-predicate*} to specify how
fitness values should be compared. Note that this applies across all
objectives: it is not possible to maximize some objectives while
minimizing others.
@item
Set variable @refapivariable{sel:*tournament-selector*} to specify the
selector function to use for multi-objective optimization. There are
currently two such functions:
@itemize
@item @refapifunction{sel/cp/multi-objective:pareto-selector}
@item @refapifunction{sel/cp/lexicase:lexicase-select-best}
@end itemize
@item
Set variable @refapivariable{sel:*tournament-tie-breaker*} to specify how
the tournament should break ties in the case where the selector
produces multiple winners. A useful tie-breaker for multi-objective
optimization is @refapifunction{sel/cp/multi-objective:pick-least-crowded}, which promotes
diversity by selecting individuals that are farther from their
neighbors in fitness space.
@end itemize
@subsection Example
The following code will enable multi-objective optimization with
Pareto selection.
@verbatiminclude ./doc/examples/005-multi-objective.lisp