//----------------------------------------------------------------------------- // eoMerge.h //----------------------------------------------------------------------------- #ifndef eoMerge_h #define eoMerge_h //----------------------------------------------------------------------------- #include // eoMerge //----------------------------------------------------------------------------- // eoInsertion //----------------------------------------------------------------------------- template class Insertion: public eoMerge { public: eoInsertion(const float& _rate = 1): eoMerge(rate) {} bool compare(const Chrom& chrom1, const Chrom& chrom2) { return chrom1.fitness() < chrom2.fitness(); } void operator()(const Pop& breeders, Pop& pop) { sort(pop.begin(), pop.end() compare); pop.erase(pop.end() + (int)(pop.size() * (rate - 1) - breeders.size()), pop.end()); copy(breeders.begin(), breeders.end(), back_insert_iterator(pop)); } }; //----------------------------------------------------------------------------- template class Inclusion: public Replace { public: Inclusion(const float& rate = 1): Replace(rate) {} void operator()(Pop& breeders, Pop& pop) { Pop temp; sort(breeders.begin(), breeders.end(), compare); sort(pop.begin(), pop.end(), compare); merge(breeders.begin(), breeders.end(), pop.begin(), pop.end(), back_insert_iterator(temp), compare); temp.erase(temp.begin() + (unsigned)(rate * pop.size()), temp.end()); pop.swap(temp); } }; //----------------------------------------------------------------------------- #endif eoMerge_h