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,162 @@
#include "Population.h"
#include "../individual/Phenotype.h"
#include "DEC-0.0/processor/Processor.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());
//std::cout << "lol" << std::endl;
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;
std::cout << "lol" << std::endl;
Processor::fillVectors(this->individs.at(i)->getGenotype());
}
}
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;
}
}