Base class representing selection operations, inheriting from MiesOperator
.
A Selector
gets a table of individuals as input, along with information on the individuals' performance values and the
number of individuals to select, and returns a vector of integers indicating which individuals were selected.
Selection operations are performed in ES algorithms to facilitate concentration towards individuals that perform well with regard to the fitness measure.
Fitness values are always maximized, both in single- and multi-criterion optimization.
Unlike most other operator types inheriting from MiesOperator
, the $operate()
function has three arguments, which are passed on to $.select()
values
:: data.frame
Individuals to operate on. Must pass the check of the Param
given in the last $prime()
call
and may not have any missing components.
fitnesses
:: numeric
| matrix
Fitnesses for each individual given in values
. If this is a numeric
, then its length must be equal to the number of rows in values
. If
this is a matrix
, if number of rows must be equal to the number of rows in values
, and it must have one column when doing single-crit optimization
and one column each for each "criterion" when doing multi-crit optimization.
The fitnesses
-value passed on to $.select()
is always a matrix
.
n_select
:: integer(1)
Number of individuals to select. Some Selector
s select individuals with replacement, for which this value may be greater than the number of
rows in values
.
group_size
:: integer
Sampling group size hint, indicating that the caller would prefer there to not be any duplicates within this group size, e.g. because the
Selector
is called to select individuals to be given to a Recombinator
with a certain n_indivs_in
, or because it is called as a
survival_selector
in mies_survival_comma()
or mies_survival_plus()
. The Selector
may or may not ignore this value, however.
This may possibly happen because of certain configuration parameters, or because the input size is too small.
Must either be a scalar value or sum up to n_select
. Must be non-negative. A scalar value of 0 is interpreted the same as 1.
If not given, this value defaults to 1.
The return value for an operation will be a numeric vector of integer values of length n_select
indexing the individuals that were selected. Some Selector
s
select individuals with replacement, for which the return value may contain indices more than once.
Selector
is an abstract base class and should be inherited from. Inheriting classes should implement the private $.select()
function. The user of the object calls $operate()
, and the arguments are passed on to private $.select()
after checking that
the operator is primed, that the values
argument conforms to the primed domain and that other values match. Typically, the $initialize()
function
should also be overloaded, and optionally the $prime()
function; they should call their super
equivalents.
Other base classes:
Filtor
,
FiltorSurrogate
,
MiesOperator
,
Mutator
,
MutatorDiscrete
,
MutatorNumeric
,
OperatorCombination
,
Recombinator
,
RecombinatorPair
,
Scalor
,
SelectorScalar
Other selectors:
SelectorScalar
,
dict_selectors_best
,
dict_selectors_maybe
,
dict_selectors_null
,
dict_selectors_proxy
,
dict_selectors_random
,
dict_selectors_sequential
,
dict_selectors_tournament
miesmuschel::MiesOperator
-> Selector
supported
(character
)
Optimization supported by this Selector
, can be "single-crit"
, "multi-crit"
, or both.
new()
Initialize base class components of the Selector
.
is_deterministic
(logical(1)
)
Whether the Selector
is deterministic. Setting this to TRUE
adds a configuration parameter shuffle_selection
(initialized to TRUE
)
that causes the selection to be shuffled.
param_classes
(character
)
Classes of parameters that the operator can handle. May contain any of "ParamLgl"
, "ParamInt"
, "ParamDbl"
, "ParamFct"
.
Default is all of them.
The $param_classes
field will reflect this value.
param_set
(ParamSet
| list
of expression
)
Strategy parameters of the operator. This should be created by the subclass and given to super$initialize()
.
If this is a ParamSet
, it is used as the MiesOperator
's ParamSet
directly. Otherwise it must be a list
of expressions e.g. created by alist()
that evaluate to ParamSet
s,
possibly referencing self
and private
.
These ParamSet
are then combined using a ParamSetCollection
.
Default is the empty ParamSet
.
The $param_set
field will reflect this value.
supported
(character
)
Subset of "single-crit"
and "multi-crit"
, indicating wether single and / or multi-criterion optimization is supported.
Default both of them.
The $supported
field will reflect this value.
packages
(character
)
Packages that need to be loaded for the operator to function. This should
be declared so these packages can be loaded when operators run on parallel
instances. Default is character(0)
.
The $packages
field will reflect this values.
dict_entry
(character(1)
| NULL
)
Key of the class inside the Dictionary
(usually one of
dict_mutators
, dict_recombinators
, dict_selectors
), where it can
be retrieved using a short access function. May be NULL
if the operator
is not entered in a dictionary.
The $dict_entry
field will reflect this value.
own_param_set
(language
)
An expression that evaluates to a ParamSet
indicating the configuration parameters that are entirely owned by
this operator class (and not proxied from a construction argument object). This should be quote(self$param_set)
(the default) when
the param_set
argument is not a list of expressions.