#include "KolchShindyalBreedingStrategy.h" #include "../../../../processor/Settings.h" #include "../../../Phenotype.h" #include #include #include #include void KolchShindyalBreedingStrategy::breed(Population *_pop){ // N = const srand((unsigned int)time(NULL)); // Выбираем лузеров и удаляем их AsexualPopulation* pop = dynamic_cast(_pop); if(pop == NULL){ std::cerr<<"Wrong dynamic cast to AsexualPopulation\n"; return; } std::sort(pop->individs.begin(), pop->individs.end(), compareOnFitness); int inds = pop->individs.size(); // По идее, смертность надо моделировать в разделе SelectionAll // а тут надо какой-то механизм дифференцированной плодовитости // описать float deathRate = 0.01f; //Settings::DeathRate int toDie = int (inds * deathRate); std::vector::iterator start = pop->individs.begin(); std::vector::iterator end = pop->individs.begin()+toDie; //advance(end,toDie); for(std::vector::iterator it = start; it != end; it++){ delete *it; } pop->individs.erase(start, end); std::cout<<"PopulationBreedingStrategy::breed: "<individs.size(); srand((unsigned int)time(NULL)); for(int i = 0; i < toBorn; i++) { int male = rand() % inds; int female = rand() % inds; female = (female != male ? female : (female + 1) % inds); Individual* ind = new Individual(*(pop->individs.at(male)), *(pop->individs.at(female))); // Мутация здесь !!! // Здесь по необходимости добавляем настройки среды и т.д. pop->individs.push_back(ind); } }