00001 #include "GLBaseOrganism.h"
00002 #include "GLBaseRanker.h"
00003 #include "GLLogicError.h"
00004 #include "GLSelectionistStandard.h"
00005 using namespace std;
00006
00027 int GLSelectionistStandard::doSelection(
00028 const vector<GLBaseOrganism*>& current_population,
00029 const vector<GLBaseOrganism*>& candidates,
00030 size_t new_size,
00031 vector<GLBaseOrganism*>& to_live,
00032 vector<GLBaseOrganism*>& to_die,
00033 vector<const GLBaseOrganism*>& best_survived)
00034 {
00035
00036 assertNewSize(new_size, current_population, candidates);
00037
00038 vector<GLBaseOrganism*> all_organisms(current_population);
00039 all_organisms.insert(all_organisms.end(),
00040 candidates.begin(), candidates.end());
00041
00042
00043 getRanker()->rankOrganisms(all_organisms, best_survived);
00044
00045
00046 to_live.assign(all_organisms.begin(), all_organisms.begin() + new_size);
00047 to_die.assign(all_organisms.begin() + new_size, all_organisms.end());
00048
00049
00050
00051 if (best_survived.size() > new_size)
00052 {
00053 best_survived.erase(best_survived.begin() + new_size);
00054 }
00055 return countSurvivedCandidates(to_live, to_die,
00056 current_population, candidates);
00057 }