void MONEEControlArchitecture::select() {
    // If the egg has gathered enough genomes or it's time is up, reactivate it with one of the gathered genomes.
    // Assign subjective fitness to genomes
    assignFitness(_wm->_genePool);
    // Do roulette selection (need to sort genomes vector first, because we are calculating medians for logging)
    std::sort(_wm->_genePool.begin(), _wm->_genePool.end(), genomeSortPredicate);
    std::vector<Genome>::const_iterator winner = selectWeighted(_wm->_genePool);
    _wm->_winnerId = winner->id;
    // Reactivate with the winning genome
    for (int i = 0; i < _parameterCount; i++) _activeGenome.parameters[i] = winner->parameters[i];
    // Mutate a bit
    mutate(_activeGenome.parameters, 0.1);
    // Do some logging
    _wm->dumpGenePoolStats();
}
Example #2
0
/**
  * Select best N of K with the given ordering method
  */
void selectWithOrdering(SchedOrdering ordering, size_t size, unsigned char *base, size_t nmemb, double(*evaluate)(void *), unsigned char *selected,size_t *selected_len){
  if (ordering == SCHED_WEIGHTED) selectWeighted(size, base, nmemb, evaluate, selected, selected_len);
  else selectBests(size, base, nmemb, evaluate, selected, selected_len);
}