00001 #ifndef GLBASEPOPULATION_H_
00002 #define GLBASEPOPULATION_H_
00003 #include "GLBaseOrganismInitialiser.h"
00004 #include "GLBaseOrganismStorage.h"
00005 #include "GLConstants.h"
00006
00007 class GLBaseBreeder;
00008 class GLBaseEvaluator;
00009 class GLBaseVariator;
00010 class GLBaseRanker;
00011 class GLBaseSelectionist;
00012
00018 class GLBasePopulation
00019 {
00020 public:
00026 GLBasePopulation(GLBaseOrganismStorage* storage);
00027
00031 virtual ~GLBasePopulation();
00032
00041 bool addOrganism(GLBaseOrganism* organism,
00042 GLConstants::TTwinsFlags twins =
00043 GLConstants::NO_TWINS)
00044 { return m_main_storage->addOrganism(organism, twins); }
00045
00054 virtual int breed(GLBaseBreeder *breeder,
00055 int max_offsprings = -1) = 0;
00056
00083 virtual int createNewGeneration(GLBaseBreeder* breeder,
00084 GLBaseVariator* variator,
00085 GLBaseEvaluator* evaluator,
00086 GLBaseSelectionist *selectionist,
00087 vector<const GLBaseOrganism*>&
00088 best_organisms,
00089 int max_offsprings = -1,
00090 int max_mutants = -1,
00091 int mutation_policy =
00092 GLConstants::MUTATE_CHILDREN |
00093 GLConstants::MUTATE_PARENTS,
00094 int new_size = -1);
00095
00104 virtual int evaluateAll(GLBaseEvaluator* evaluator) = 0;
00105
00110 int getSize()
00111 { return m_main_storage->getSize(); }
00112
00127 virtual int
00128 getOrganismsVector(vector<const GLBaseOrganism*>& container,
00129 GLConstants::TStorageFilling fill =
00130 GLConstants::APPEND,
00131 int size = -1,
00132 bool copy_clones = false) const
00133 { return m_main_storage->
00134 getOrganismsVector(container, fill, size, copy_clones);
00135 }
00136
00154 virtual int
00155 getOrganismsVector(vector<GLBaseOrganism*>& container,
00156 GLConstants::TStorageFilling fill =
00157 GLConstants::APPEND,
00158 int size = -1,
00159 bool copy_clones = false)
00160 { return m_main_storage->
00161 getOrganismsVector(container, fill, size, copy_clones);
00162 }
00163
00170 virtual bool isOrganismTrulyNew(const GLBaseOrganism* organism) const = 0;
00171
00187 virtual int keepFittest(GLBaseSelectionist *selectionist,
00188 vector<const GLBaseOrganism*>&
00189 best_organisms,
00190 int new_size = -1) = 0;
00191
00203 virtual int mutate(GLBaseVariator *variator,
00204 int max_mutants = -1,
00205 int mutation_policy =
00206 GLConstants::MUTATE_CHILDREN |
00207 GLConstants::MUTATE_PARENTS) = 0;
00208
00216 virtual void populate(int size,
00217 GLBaseOrganismInitialiser* initialiser,
00218 GLConstants::TTwinsFlags twins =
00219 GLConstants::NO_TWINS) = 0;
00220
00225 virtual void prepareForNextGeneration() {}
00226
00233 virtual void processCorpses(vector<GLBaseOrganism*>& corpses) = 0;
00234
00235 virtual void printRankedPopulation(
00244 ostream& out,
00245 GLBaseEvaluator* evaluator,
00246 GLBaseRanker *ranker);
00247 protected:
00250 GLBaseOrganismStorage* m_main_storage;
00251 };
00252
00253 #endif