Init version

This commit is contained in:
2024-10-03 18:43:04 +07:00
commit f80052961f
186 changed files with 71676 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
#include "KolchShindyalBreedingStrategy.h"
#include "../../../../processor/Settings.h"
#include "../../../Phenotype.h"
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <ctime>
void KolchShindyalBreedingStrategy::breed(Population *_pop){
// N = const
srand((unsigned int)time(NULL));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
AsexualPopulation* pop = dynamic_cast<AsexualPopulation*>(_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();
// <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SelectionAll
// <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float deathRate = 0.01f; //Settings::DeathRate
int toDie = int (inds * deathRate);
std::vector<Individual*>::iterator start = pop->individs.begin();
std::vector<Individual*>::iterator end = pop->individs.begin()+toDie;
//advance(end,toDie);
for(std::vector<Individual*>::iterator it = start; it != end; it++){
delete *it;
}
pop->individs.erase(start, end);
std::cout<<"PopulationBreedingStrategy::breed: "<<toDie<<" individs have died\n";
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float birthRate = Settings::BirthRate;//0.02f;
int toBorn = int (inds * birthRate);
inds = pop->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)));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> !!!
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20>.<2E>.
pop->individs.push_back(ind);
}
}