00001 #ifndef GLPOPULATIONSTANDARD_H_ 00002 #define GLPOPULATIONSTANDARD_H_ 00003 #include <set> 00004 #include "GLBaseOrganism.h" 00005 #include "GLBasePopulation.h" 00006 00007 using namespace std; 00008 00013 class GLPopulationStandard : public GLBasePopulation 00014 { 00015 public: 00019 GLPopulationStandard(bool keep_corpses = GLConstants::CORPSES_KEEP); 00020 00024 virtual ~GLPopulationStandard(); 00025 00034 virtual int breed(GLBaseBreeder *breeder, 00035 int max_offsprings = -1); 00036 00041 void clearMorgue(); 00042 00051 virtual int evaluateAll(GLBaseEvaluator* evaluator); 00052 00057 bool isKeepCorpses() const 00058 { return m_keep_corpses; } 00059 00069 virtual bool isOrganismTrulyNew(const GLBaseOrganism* organism) const; 00070 00086 virtual int keepFittest(GLBaseSelectionist* selectionist, 00087 vector<const GLBaseOrganism*>& best_organisms, 00088 int new_size = -1); 00089 00101 virtual int mutate(GLBaseVariator *variator, 00102 int max_mutants = -1, 00103 int mutation_policy = 00104 GLConstants::MUTATE_CHILDREN | 00105 GLConstants::MUTATE_PARENTS); 00106 00114 virtual void populate(int size, 00115 GLBaseOrganismInitialiser* initialiser, 00116 GLConstants::TTwinsFlags twins = 00117 GLConstants::NO_TWINS); 00118 00123 virtual void prepareForNextGeneration(); 00124 00131 virtual void processCorpses(vector<GLBaseOrganism*>& corpses); 00132 00140 void setKeepCorpses(bool new_flag) 00141 { m_keep_corpses = new_flag; } 00142 protected: 00151 virtual int evaluateOrganisms(GLBaseOrganismStorage *container, 00152 GLBaseEvaluator* evaluator, 00153 bool not_evaluated_only = true); 00154 protected: 00156 GLBaseOrganismStorage *m_offsprings; 00158 GLBaseOrganismStorage *m_mutants; 00159 00162 bool m_keep_corpses; 00163 00165 TGLSetOfOrganismsConst m_morgue; 00166 }; 00167 00168 #endif /*GLPOPULATIONSTANDARD_H_*/