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,87 @@
#include "ChromosomeRearrangementStrategy.h"
#include "Derevyanko\2015\Derevyanko2015RecombinationStrategy.h"
#include <cstdlib>
#include <ctime>
HaploidGenotype ChromosomeRearrangementStrategy::buildRecombinantGenotype(const Genotype* parentGenotype){
std::vector<Chromosome> chromosomes;
const std::vector<Chromosome>* fGenome = &parentGenotype->fatherGenome.chromosomes;
const std::vector<Chromosome>* mGenome = &parentGenotype->motherGenome.chromosomes;
//srand((unsigned int)time(NULL));
for (unsigned int i = 0; i < fGenome->size(); i++){
int flag = rand() % 2;
const std::vector<Gene>* first;
const std::vector<Gene>* second;
if(flag == 0){
first = &fGenome->at(i).genes;
second= &mGenome->at(i).genes;
}
else{
first = &mGenome->at(i).genes;
second= &fGenome->at(i).genes;
}
Chromosome childChromosome(fGenome->at(i).name, *first);
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
int bound = rand() % first->size();
for(unsigned int j = bound; j < first->size(); j++){
childChromosome.genes.at(j) = second->at(j);
}
chromosomes.push_back(childChromosome);
}
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>. <20> <20> <20>),
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return HaploidGenotype(chromosomes);
}
HaploidGenotype ChromosomeRearrangementStrategy::
buildRecombinantGenotype(const HaploidGenotype& fatherGenome, const HaploidGenotype& motherGenome){
std::vector<Chromosome> chromosomes;
const std::vector<Chromosome> fGenome = fatherGenome.chromosomes;
const std::vector<Chromosome> mGenome = motherGenome.chromosomes;
//srand((unsigned int)time(NULL));
for (unsigned int i = 0; i < fGenome.size(); i++){
int flag = rand() % 2;
std::vector<Gene> first;
std::vector<Gene> second;
if(flag == 0){
first = fGenome.at(i).genes;
second= mGenome.at(i).genes;
}
else{
first = mGenome.at(i).genes;
second= fGenome.at(i).genes;
}
Chromosome childChromosome(fGenome.at(i).name, first);
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
int bound = rand() % first.size();
for(unsigned int j = bound; j < first.size(); j++){
childChromosome.genes.at(j) = second.at(j);
}
chromosomes.push_back(childChromosome);
}
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>. <20> <20> <20>),
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return HaploidGenotype(chromosomes);
}
std::map<std::string, ChromosomeRearrangementStrategy*> RecombinationStrategies::_strategies;
ChromosomeRearrangementStrategy* RecombinationStrategies::getInstance(std::string _name){
if(_strategies.find(_name) == _strategies.end()){
if(_name.compare("D2015") == 0){
ChromosomeRearrangementStrategy* s = new Derevyanko2015RecombinationStrategy();
}
else{
ChromosomeRearrangementStrategy* s = new ChromosomeRearrangementStrategy();
}
_strategies[_name] = s;
}
return _strategies[_name];
}