Init version
This commit is contained in:
159
population/Population.cpp
Normal file
159
population/Population.cpp
Normal file
@@ -0,0 +1,159 @@
|
||||
#include "Population.h"
|
||||
#include "../individual/Phenotype.h"
|
||||
#include <cstdlib>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
|
||||
AsexualPopulation::~AsexualPopulation(){
|
||||
// TODO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
}
|
||||
AsexualPopulation::AsexualPopulation(int size, PopulationBreedingStrategy* _strategy) :
|
||||
Population(_strategy), individs(size/*, 0*/)
|
||||
{
|
||||
|
||||
srand(0);
|
||||
int RANGE = 1000;
|
||||
float gValue;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(int i = 0; i < size; i++){
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<Chromosome> fGenome;
|
||||
std::vector<Chromosome> mGenome;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
gValue = (rand()%RANGE + 1) / (float) RANGE;
|
||||
Gene geneF1(Gene::Continious, "X", gValue);
|
||||
gValue = (rand()%RANGE + 1) / (float) RANGE;
|
||||
Gene geneF2(Gene::Continious, "Y", gValue);
|
||||
gValue = (rand()%RANGE + 1) / (float) RANGE;
|
||||
Gene geneF3(Gene::Continious, "Z", gValue);
|
||||
|
||||
Chromosome chromF("Chrom 1"); // <20><><EFBFBD><EFBFBD>
|
||||
chromF.insertGeneToEnd(geneF1);
|
||||
chromF.insertGeneToEnd(geneF2);
|
||||
chromF.insertGeneToEnd(geneF3);
|
||||
|
||||
|
||||
gValue = (rand()%RANGE + 1) / (float) RANGE;
|
||||
Gene geneM1(Gene::Continious, "X", gValue);
|
||||
gValue = (rand()%RANGE + 1) / (float) RANGE;
|
||||
Gene geneM2(Gene::Continious, "Y", gValue);
|
||||
gValue = (rand()%RANGE + 1) / (float) RANGE;
|
||||
Gene geneM3(Gene::Continious, "Z", gValue);
|
||||
|
||||
Chromosome chromM("Chrom 1"); // <20><><EFBFBD><EFBFBD>
|
||||
chromM.insertGeneToEnd(geneM1);
|
||||
chromM.insertGeneToEnd(geneM2);
|
||||
chromM.insertGeneToEnd(geneM3);
|
||||
|
||||
fGenome.push_back(chromF);
|
||||
mGenome.push_back(chromM);
|
||||
Genotype* genotype = new Genotype(fGenome, mGenome);
|
||||
// (END) <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Trait trait1(Trait::Continious, "X", 0.0f);
|
||||
Trait trait2(Trait::Continious, "Y", 0.0f);
|
||||
Trait trait3(Trait::Continious, "Z", 0.0f);
|
||||
Phenotype* phenotype = new Phenotype(trait1);
|
||||
phenotype->addTrait(trait2);
|
||||
phenotype->addTrait(trait3);
|
||||
// (END) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
InnerSubstratesPool* subPool = 0;
|
||||
// (END) <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
this->individs.at(i) = new Individual(genotype, phenotype, subPool, Individual::hermaphrodite, 0);
|
||||
} // (END) for(int i = 0; i < size; i++)
|
||||
}
|
||||
|
||||
void AsexualPopulation::calculateFitnessAll(){
|
||||
for(unsigned int i = 0; i < this->individs.size(); i++){
|
||||
this->individs.at(i)->calculateFitness();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AsexualPopulation::breedAll(){
|
||||
this->breedingStrategy->breed(this);
|
||||
}
|
||||
|
||||
void AsexualPopulation::selectionAll(){
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> breedAll
|
||||
}
|
||||
|
||||
void AsexualPopulation::mutationAll(){
|
||||
|
||||
}
|
||||
|
||||
void AsexualPopulation::setRegion(Region *_region){
|
||||
this->region = _region;
|
||||
for(unsigned int i = 0; i < this->individs.size(); i++){
|
||||
this->individs.at(i)->setRegion(_region);
|
||||
}
|
||||
}
|
||||
|
||||
std::string AsexualPopulation::getSatistics(){
|
||||
std::stringstream ans;
|
||||
long int pSize = this->individs.size();
|
||||
ans<<"Population size\t"<<pSize<<"\t";
|
||||
|
||||
//////////////////////////
|
||||
double totalFitness = 0.0;
|
||||
double best = 0.0;
|
||||
double worst= 1000.0;
|
||||
for(int i = 0; i < pSize; i++){
|
||||
double fitness = this->individs.at(i)->getFitness();
|
||||
best = fitness > best ? fitness : best;
|
||||
worst= fitness < worst? fitness : worst;
|
||||
totalFitness += fitness;
|
||||
}
|
||||
ans<<"Average fitness\t"<<(totalFitness/pSize);
|
||||
ans<<"\tBest\t"<<(best);
|
||||
ans<<"\tWorst\t"<<(worst);
|
||||
return ans.str();
|
||||
}
|
||||
|
||||
void AsexualPopulation::putGeneticStatisticsToStream(std::ostream &out){
|
||||
|
||||
out<<"Population size:\t"<<this->individs.size()<<std::endl;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//sort(this->individs.begin(),this->individs.end());
|
||||
|
||||
for(unsigned int i = 0; i < this->individs.size(); i++){
|
||||
out<<(i+1)<<"\t";
|
||||
out<<"Fitness:\t"<<(this->individs.at(i)->getFitness());
|
||||
out<<"\t";
|
||||
out<<"Genotype:\t"<<(this->individs.at(i)->getGenotype());
|
||||
out<<"\t";
|
||||
out<<"Phenotype:\t"<<(this->individs.at(i)->getPhenotype());
|
||||
out<<std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void AsexualPopulation::putGeneticSimpleStatisticsToStream(std::ostream &out){
|
||||
for(unsigned int i = 0; i < this->individs.size(); i++){
|
||||
out<<(i+1)<<"\t"<<(this->individs.at(i)->getFitness());
|
||||
out<<"\t"<<(this->individs.at(i)->getGenotype().toSimpleString());
|
||||
//out<<"\t";
|
||||
out<<(this->individs.at(i)->getPhenotype().toSimpleString());
|
||||
out<<std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void AsexualPopulation::putGeneticMaxModuleStatisticsToStream(std::ostream &out){
|
||||
for(unsigned int i = 0; i < this->individs.size(); i++){
|
||||
out<<(i+1)<<"\t"<<(this->individs.at(i)->getFitness());
|
||||
out<<"\t"<<(this->individs.at(i)->getGenotype().toMaxModuleAB());
|
||||
//out<<"\t";
|
||||
//out<<(this->individs.at(i)->getPhenotype().toSimpleString());
|
||||
out<<std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user