00001 #ifndef GLBASESELECTIONIST_H_
00002 #define GLBASESELECTIONIST_H_
00003 #include <vector>
00004
00005 using namespace std;
00006 class GLBaseOrganism;
00007 class GLBaseRanker;
00012 class GLBaseSelectionist
00013 {
00014 public:
00022 GLBaseSelectionist(GLBaseRanker* ranker);
00023
00027 virtual ~GLBaseSelectionist();
00028
00049 virtual int doSelection(
00050 const vector<GLBaseOrganism*>& current_population,
00051 const vector<GLBaseOrganism*>& candidates,
00052 size_t new_size,
00053 vector<GLBaseOrganism*>& to_live,
00054 vector<GLBaseOrganism*>& to_die,
00055 vector<const GLBaseOrganism*>& best_survived) = 0;
00056
00061 GLBaseRanker* getRanker()
00062 { return m_ranker;}
00063
00068 const GLBaseRanker* getRanker() const
00069 { return m_ranker;}
00070
00075 virtual void reset();
00076
00077 protected:
00088 virtual void assertNewSize(int new_size,
00089 const vector<GLBaseOrganism*>& current_population,
00090 const vector<GLBaseOrganism*>& candidates);
00091
00106 virtual int countSurvivedCandidates(
00107 const vector<GLBaseOrganism*>& to_live,
00108 const vector<GLBaseOrganism*>& to_die,
00109 const vector<GLBaseOrganism*>& current_population,
00110 const vector<GLBaseOrganism*>& candidates);
00111 private:
00112
00113 GLBaseRanker* m_ranker;
00114 };
00115
00116 #endif