Skip to content

Optimizers

Clifford Bohm edited this page Jan 24, 2018 · 23 revisions

Optimizers are used in conjugation with single generation worlds (or within multi-generation worlds). Optimizers take a population and use results of the evaluations performed by worlds to select parents which are used to generate a new population. Depending on the type of optimizer being used, the new generation may be all new organisms or a mix of new organisms and organisms from previous generations.

optimizeValue

each optimizer will define parameters which determine what values will be optimized. Most commonly, this parameter will be called 'optimizeValue'. Optimizers may be created that optimize on more than one term (i.e. multi-objective) and these optimizers will define parameters as needed.

Optimizers will usually use an MTree for the optimizeValue parameter. This allows the user to determine what elements from organisms DataMaps will be used and how.

Asexual vs. Sexual Reproduction

Asexual optimizers generate offspring from a single parent. Sexual optimizers select two or more parents and generate offspring from these. In either case, in the code, generally, this is handled with a call to makeMutatedOffspringFrom() when there is only a single parent or makeMutatedOffspringFromMany() when there is more than one parent. Both of these functions manage the process of generating child organisms, as well as performing recombination, mutations, constructing new brains, etc. based on the type of genomes and brains being used.

Clone this wiki locally