Init version
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
#include "../GenotypeToPhenotypeStrategy.h"
|
||||
#include "../../../../processor/Settings.h"
|
||||
#include <cmath>
|
||||
#include <qmath.h>
|
||||
|
||||
void InOutBreedingGenotypeToPhenotypeStrategy::calculatePhenotype(Individual* individ){
|
||||
Genotype* genotype = individ->genotype;
|
||||
Phenotype* phenotype = individ->phenotype;
|
||||
InnerSubstratesPool* substrates = individ->substrateCache;
|
||||
|
||||
// Chromosome 1
|
||||
Chromosome chr1F = individ->genotype->getFatherGenome().getChromosome(0);
|
||||
Chromosome chr1M = individ->genotype->getMotherGenome().getChromosome(0);
|
||||
|
||||
const std::vector<Gene>& genesF = chr1F.getGenesAsVector();
|
||||
const std::vector<Gene>& genesM = chr1M.getGenesAsVector();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float a1 = genesF.at(0).getGeneValueCont();
|
||||
float a2 = genesM.at(0).getGeneValueCont();
|
||||
|
||||
float b1 = genesF.at(1).getGeneValueCont();
|
||||
float b2 = genesM.at(1).getGeneValueCont();
|
||||
// (END) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<float> diseaseAllelesF(4);
|
||||
std::vector<float> diseaseAllelesM(4);
|
||||
|
||||
for(unsigned int i = 0; i < diseaseAllelesF.size(); i++){
|
||||
diseaseAllelesF.at(i) = genesF.at(i+2).getGeneValueCont();
|
||||
diseaseAllelesM.at(i) = genesM.at(i+2).getGeneValueCont();
|
||||
}
|
||||
// (END) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float trait1 = 0, trait2 = 0;
|
||||
float a, b;
|
||||
|
||||
// 1) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
if(Settings::CoadaptiveGenesInteraction == "onechromosome"){
|
||||
// 1.1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
a = a1;
|
||||
b = b1;
|
||||
}
|
||||
else if(Settings::CoadaptiveGenesInteraction == "mean"){
|
||||
// 1.2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
a = 0.5f*(a1+a2);
|
||||
b = 0.5f*(b1+b2);
|
||||
}
|
||||
else{ // Settings::CoadaptiveGenesInteraction == "maxmodule"
|
||||
// 1.3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
a = std::fabs(a1) >= std::fabs(a2) ? a1 : a2;
|
||||
b = std::fabs(b1) >= std::fabs(b2) ? b1 : b2;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
|
||||
trait1 = std::max(a*b - (std::fabs(a*a*a) + std::fabs(b*b*b))/20, 0.0f);
|
||||
//trait1 = std::max(a*b - (a*a*a*a + b*b*b*b)/250, 0.0f);
|
||||
|
||||
// 2) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(Settings::DiseaseGenesInteraction == "add1"){
|
||||
// 2.1<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float sum1 = 0.0f, sum2 = 0.0f;
|
||||
for(unsigned int i = 0; i < diseaseAllelesF.size(); i++){
|
||||
sum1 += diseaseAllelesF.at(i);
|
||||
sum2 += diseaseAllelesM.at(i);
|
||||
}
|
||||
trait2 = std::max(sum1,sum2);
|
||||
}
|
||||
else if(Settings::DiseaseGenesInteraction == "addmax"){
|
||||
// 2.1<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>)
|
||||
for(unsigned int i = 0; i < diseaseAllelesF.size(); i++){
|
||||
trait2 += std::max(diseaseAllelesF.at(i), diseaseAllelesM.at(i));
|
||||
}
|
||||
}
|
||||
else if(Settings::DiseaseGenesInteraction == "mult"){
|
||||
// 2.2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(unsigned int i = 0; i < diseaseAllelesF.size(); i++){
|
||||
trait2 *= std::max(diseaseAllelesF.at(i), diseaseAllelesM.at(i));
|
||||
}
|
||||
}
|
||||
else if(Settings::DiseaseGenesInteraction == "meanadd"){
|
||||
// 2.3<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
for(unsigned int i = 0; i < diseaseAllelesF.size(); i++){
|
||||
trait2 += diseaseAllelesF.at(i) + diseaseAllelesM.at(i);
|
||||
}
|
||||
trait2 /= 2.0f;
|
||||
}
|
||||
else{// if(Settings::DiseaseGenesInteraction == "meanmult"){
|
||||
// 2.3<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
for(unsigned int i = 0; i < diseaseAllelesF.size(); i++){
|
||||
trait2 *= (diseaseAllelesF.at(i) + diseaseAllelesM.at(i))/2;
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
phenotype->traitsMap["coadaptive"].setTraitValue(trait1);
|
||||
phenotype->traitsMap["disease"].setTraitValue(trait2);
|
||||
}
|
||||
Reference in New Issue
Block a user