Skip to content

Optimizers

Clifford Bohm edited this page Jan 9, 2017 · 23 revisions

Optimizers are used in conjugation with single generation worlds (or within multi-generation worlds). Optimizers take a population and use results of evaluation generated by worlds 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' and will default to "score"... that is, it will use the values associated with score in the organisms DataMap, but optimizers may be created that optimize on more than one term (i.e. multi-objective) and these optimizers will define parameters as needed.

###Asexual vs. Sexual Reproduction In addition to selecting the parent organisms, the optimizer also determines the reproduction method. Optimizers can also be designed to handle other elements such as sexual selection.

###Optimizer Types

GA
Selects a single parent organism at a time and then calls makeMutatedOffspringFrom() with this organism to produce a new organism which is added to a new population. Parents are selected with a method that makes is more likely that organisms with high score relitive to the poulation will reproduce, but still allows for the change that even the worst organism may reproduce.
Tournament
Selects a single parent organism at a time and then calls makeMutatedOffspringFrom() with this organism to produce a new organism which is added to a new population. To select each parent organism a number of organisms are selected at random from the population. From this selection, the organism with the highest score is used as the parent.
Tournament2
Selects a two parent organisms at a time and then calls makeMutatedOffspringFromMany() with these organisms to produce a new organism which is added to a new population. Although this is sexual reproduction, the gender of the organisms is ignored. The two parents are picked using the method defined in Tournament.
(multi objective)
not implemented yet
(lambda lambda)
not implemented yet
###Optimizer interface
void makeNextGeneration(vector<shared_ptr<Organism>> &population)

given a population (vector of organisms) with scores, update population with new organisms.

Clone this wiki locally