recoding files

This commit is contained in:
Aleksey Mukhin
2019-02-20 12:19:03 +07:00
parent 01cd2cdcc3
commit 5a4e1d30f5
5 changed files with 86 additions and 86 deletions

View File

@@ -21,16 +21,16 @@ Agent::Agent(Agent* father, int fID, Agent* mother, int mID){
this->motherID = mID;
std::default_random_engine& generator = Settings::RANDOM_GENERATOR;
std::uniform_int_distribution<int> distribution(0,1); // ERROR - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
std::uniform_int_distribution<int> distribution(0,1); // ERROR - генерирует только нули
int mAllele = distribution(generator);
int fAllele = distribution(generator);
// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Тут пока без рекомбинации
this->mGenome = (mAllele == 0 ? mother->mGenome : mother->fGenome);
this->fGenome = (fAllele == 0 ? father->mGenome : father->fGenome);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Определяем глухоту: только если в обоих аллелях единицы
this->isDeaf = (this->mGenome.at(0) + this->fGenome.at(0)) > 1 ? true : false;
@@ -42,21 +42,21 @@ Agent::Agent(Agent* father, int fID, Agent* mother, int mID){
this->isDeaf = true;
}
// <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><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
// (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
// 2018.11.20 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Трансмиссия жестового языка.
// Пока решили, что если в семье хоть один глухой, то все его члены автоматически должны владеть им
// (Егор с ОЛ должны решить этот момент)
// 2018.11.20 Заменили на другой алгоритм в процессоре
//this->knowsSignLanguage = (father->knowsSignLanguage && father->isDeaf
// || mother->knowsSignLanguage && mother->isDeaf);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><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><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Социальная позиция (ДИСКУССИЯ НУЖНА)
// Пока: берём среднее от родителей и на некоторую нормально распределённую величину сдвигаем
std::normal_distribution<float> distrN(0,0.1f);
float delta = distrN(generator);
this->socialPosition = 0.5f*(mother->socialPosition + father->socialPosition) + delta;
this->alreadyMarried = false;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Берём из популяции
// delta = distribution(generator);
// this->bachelority = 0.5f*(mother->bachelority + father->bachelority) + delta;
// this->age = 0;

View File

@@ -22,7 +22,7 @@ protected:
public:
Agent(int fGene, int mGene, bool deaf, bool signL,
float socialP); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float socialP); // Только для инициализации
Agent(Agent*,int, Agent*, int);
bool deaf() const { return isDeaf;}
int getDeafAllelesCount() const { return mGenome.at(0)+fGenome.at(0);}

View File

@@ -28,12 +28,12 @@ void Processor::run(std::string fileName){
int initPopSizeW = Settings::INIT_POP_SIZE_W;
///float deafAlleleRatio = Settings::DEAF_ALLELE_RATIO;
float birthRateH = Settings::BIRTH_RATE_H; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float birthRateD = Settings::BIRTH_RATE_D; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float birthRateH = Settings::BIRTH_RATE_H; // среднее число потомков
float birthRateD = Settings::BIRTH_RATE_D; // среднее число потомков
int maxGenerations = Settings::MAX_GENERATIONS;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Подготовка файла выдачи
std::cout<<"Initializing output file..\t";
std::ofstream outputFile(Settings::OUTPUT_FILE);
outputFile<<"Generation\tTotalPopulation\tMen\tWomen\tDeaf";
@@ -41,10 +41,10 @@ void Processor::run(std::string fileName){
outputFile<<"\tDH marriages\tDH children";
outputFile<<"\tHH marriages\tHH children";
outputFile<<"\tDA frequency\tDA homozygotes frequency";
// TODO <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// TODO Допишите ещё данные, которые вы хотите чтобы были
outputFile<<std::endl;
std::cout<<"Done\n";
// <EFBFBD><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>
// Инициализация исходной популяции
//std::vector<std::vector<float> > matrixCurrent;
//std::vector<std::vector<float> > matrixFuture;
@@ -54,7 +54,7 @@ void Processor::run(std::string fileName){
std::vector<Agent*> newMen;
std::vector<Agent*> newWomen;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD>
// Эмуляция сообщества глухих - образуют замкнутый круг знающих все и вся
std::vector<Agent*> deafMen;
std::vector<Agent*> deafWomen;
std::vector<Agent*> deafNewMen;
@@ -65,18 +65,18 @@ void Processor::run(std::string fileName){
//generator.seed(std::time(0));
//RandomDevice::RandomDevice(unsigned long n) : rand_seed(n), engine(n){ }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Создаём мужчин
std::cout<<"Creating men..("<<initPopSizeM<<")\t";
int deafHomozygotes = (int) (initPopSizeM*Settings::DEAF_HOMOZYGOTES);
int hearHomozygotes = (int) (initPopSizeM*Settings::HEAR_HOMOZYGOTES);
int heterozygores = initPopSizeM - deafHomozygotes - hearHomozygotes;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
// Слышащие гомозиготы (в них могут быть спонтанные)
for(int i = 0; i < hearHomozygotes; i++){
bool isDeaf = false;
int alleleFather = 0;
int alleleMother = 0;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Спонтанная глухота - только для негенетических
std::uniform_real_distribution<float> distrUI(0.f,1.f);
if(distrUI(generator) < Settings::SPONTANEOUS_DEAF)
isDeaf = true;
@@ -94,14 +94,14 @@ void Processor::run(std::string fileName){
if(isDeaf)
deafMen.push_back(a);
} // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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> (<28> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
// Слышащие гетерозиготы (в них могут быть спонтанные)
for(int i = 0; i < heterozygores; i++){
bool isDeaf = false;
int alleleFather = 1; // TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int alleleFather = 1; // TODO: Чуть аккуратнее
int alleleMother = 0;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Спонтанная глухота - только для негенетических
std::uniform_real_distribution<float> distrUI(0.f,1.f);
if(distrUI(generator) < Settings::SPONTANEOUS_DEAF)
isDeaf = true;
@@ -119,9 +119,9 @@ void Processor::run(std::string fileName){
if(isDeaf)
deafMen.push_back(a);
} // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} // Создали мужчин - слышащих гетерозигот
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Глухие гомозиготы
for(int i = 0; i < deafHomozygotes; i++){
bool isDeaf = true;
int alleleFather = 1;
@@ -141,23 +141,23 @@ void Processor::run(std::string fileName){
if(isDeaf)
deafMen.push_back(a);
}// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><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>
}// Создали мужчин - неслышащих гомозигот
std::random_shuffle(men.begin(), men.end());
std::random_shuffle(deafMen.begin(), deafMen.end());
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Создали всех мужчин
std::cout<<"Done\n";
std::cout<<"Creating women..\t";
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Создаём женщин
deafHomozygotes = (int) (initPopSizeW*Settings::DEAF_HOMOZYGOTES);
hearHomozygotes = (int) (initPopSizeW*Settings::HEAR_HOMOZYGOTES);
heterozygores = initPopSizeW - deafHomozygotes - hearHomozygotes;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
// Слышащие гомозиготы (в них могут быть спонтанные)
for(int i = 0; i < hearHomozygotes; i++){
bool isDeaf = false;
int alleleFather = 0;
int alleleMother = 0;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Спонтанная глухота - только для негенетических
std::uniform_real_distribution<float> distrUI(0.f,1.f);
if(distrUI(generator) < Settings::SPONTANEOUS_DEAF)
isDeaf = true;
@@ -175,14 +175,14 @@ void Processor::run(std::string fileName){
if(isDeaf)
deafWomen.push_back(a);
} // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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> (<28> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
// Слышащие гетерозиготы (в них могут быть спонтанные)
for(int i = 0; i < heterozygores; i++){
bool isDeaf = false;
int alleleFather = 1; // TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int alleleFather = 1; // TODO: Чуть аккуратнее
int alleleMother = 0;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Спонтанная глухота - только для негенетических
std::uniform_real_distribution<float> distrUI(0.f,1.f);
if(distrUI(generator) < Settings::SPONTANEOUS_DEAF)
isDeaf = true;
@@ -200,9 +200,9 @@ void Processor::run(std::string fileName){
if(isDeaf)
deafWomen.push_back(a);
} // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} // Создали женщин - слышащих гетерозигот
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Глухие гомозиготы
for(int i = 0; i < deafHomozygotes; i++){
bool isDeaf = true;
int alleleFather = 1;
@@ -222,14 +222,14 @@ void Processor::run(std::string fileName){
if(isDeaf)
deafWomen.push_back(a);
}// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><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>
}// Создали женщин - неслышащих гомозигот
std::random_shuffle(women.begin(), women.end());
std::random_shuffle(deafWomen.begin(), deafWomen.end());
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Создали женщин
std::cout<<"Done\n";
std::cout<<"\nMain cycle\n";
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// Основной цикл
for(int gen = 0; gen < maxGenerations; gen++){
std::cout<<"Generation\t"<<gen<<"\n";
int marriageDD = 0;
@@ -244,9 +244,9 @@ void Processor::run(std::string fileName){
//matrixCurrent.assign(men.size(),vect);
//std::cout<<"\tDone\n";
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><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><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
// Эмулятор разреженной матрицы - пара <индекс, оценка>
std::cout<<"\tInitializing settledPairs\t";
std::uniform_real_distribution<float> distrUI(0.f,1.f);
std::cout<<".";
@@ -258,11 +258,11 @@ void Processor::run(std::string fileName){
int candidatePairs = Settings::CANDIDATE_PAIRS_MEAN
+ (int)(sign*f*Settings::CANDIDATE_PAIRS_VAR);
// TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// TODO: Несколько топологий краёв
int left = i - candidatePairs/2;
int right = i + candidatePairs/2;
// HACK: 2018/11/23 <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// HACK: 2018/11/23 Для глухих модель Егора
if(men.at(i)->deaf() && Settings::DEAF_COMMUNITY_MODEL == 1){
left = 0;
right = women.size() - 1;
@@ -281,29 +281,29 @@ void Processor::run(std::string fileName){
std::vector<std::pair<unsigned int,float> > pairs(candidatePairs);
for(unsigned int p = 0; p < pairs.size(); p++){
pairs.at(p).first = left;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD>
// Зараз и оценили друг-друга
//matrixCurrent.at(i).at(left)
pairs.at(p).second = esteem(men.at(i),women.at(left));
left++;
}
settledPairs.at(i) = pairs;
}
// (END) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// (END) Эмулятор разреженной матрицы
std::cout<<"Done\n";
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Заполняем матрицу взаимных оцениваний
// По всем мужчинам
/*for(unsigned int m = 0; m < men.size(); m++){
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// По всем женщинам
for(unsigned int w = 0; w < women.size(); w++){
if(matrixCurrent.at(m).at(w) >= 0.0f)
matrixCurrent.at(m).at(w) = esteem(men.at(m),women.at(w));
}
} */
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Заполнили матрицу взаимных оцениваний
/* std::cout<<"\tGenerating offsprings\t";
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Формируем окончательные пары, генерируем потомков
// По всем мужчинам
std::cout << "MENS" << std::endl;
for (auto m = 0; m < settledPairs.size(); ++m)
{
@@ -319,19 +319,19 @@ void Processor::run(std::string fileName){
for(int m = 0; m < men.size(); m++){
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Ищем наиболее подходящую женщину
int bestW = 0;
float bestScore = 0.0f;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* БЫЛО ДО РАЗРЕЖЕННЫХ МАТРИЦ
for(int w = 0; w < women.size(); w++){
if(matrixCurrent.at(m).at(w) > bestScore){
bestScore = matrixCurrent.at(m).at(w);
bestW = w;
}
} // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} // Нашли
**/
// <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// С РАЗРЕЖЕННЫМИ
for(unsigned int p = 0; p < settledPairs.at(m).size(); p++){
unsigned int w = settledPairs.at(m).at(p).first;
@@ -344,12 +344,12 @@ void Processor::run(std::string fileName){
}
}
// (END) <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// (END) С РАЗРЕЖЕННЫМ
if(bestScore <= 0.0f)
continue; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
continue; // Этому мужчине никто не подошёл
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// Формируем пару, рожаем детей
int* mariage = &marriageHH;
int* childrenType = &childrenHH;
@@ -387,9 +387,9 @@ void Processor::run(std::string fileName){
(*mariage)++;
(*childrenType) += children;
// TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
std::vector<Agent*> newSibs; // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
std::vector<Agent*> deafSibs;// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// TODO: Добавить знание жестового языка если хотя бы один сибс - глухой + знает жестовый язык
std::vector<Agent*> newSibs; // Для учёта распространения жестового языка в одной семье
std::vector<Agent*> deafSibs;// Для подсчёта вновь рождённых глухих
for(int i = 0; i < children; i++){
Agent* newAgent = new Agent(men.at(m), m, women.at(bestW), bestW);
@@ -397,7 +397,7 @@ void Processor::run(std::string fileName){
if(newAgent->deaf()){
deafSibs.push_back(newAgent);
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Добавляем в общую популяцию
std::uniform_int_distribution<int> distrUI(0,1);
if(distrUI(generator) == 0){
newMen.push_back(newAgent);
@@ -406,8 +406,8 @@ void Processor::run(std::string fileName){
newWomen.push_back(newAgent);
}
}
// <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><EFBFBD><EFBFBD> 1 - <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Трансмиссия жестового языка
// Случай 1 - Хотя бы один родитель глухой и кто-то знает жестовый
if(men.at(m)->deaf() || women.at(bestW)->deaf()){
if(men.at(m)->knowsSign() || women.at(bestW)->knowsSign()){
for(auto i = 0; i < newSibs.size(); i++){
@@ -416,26 +416,26 @@ void Processor::run(std::string fileName){
}
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 - <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Случай 2 - Хотя бы один сибс глухой
else if(deafSibs.size() > 0){
std::uniform_real_distribution<float> distrUF(0.f,1.f);
// <EFBFBD>) <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// а) Он получает случайный шанс
bool sibsKnowSL = false;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Глухие случайно узнают жестовый
for(auto i = 0; i < deafSibs.size(); i++){
if(distrUF(generator) <= Settings::SIGN_LANG_DEAF){
deafSibs.at(i)->teachSignLanguage();
sibsKnowSL = true;
}
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Слышащие случайно узнают жестовый
for(auto i = 0; i < newSibs.size(); i++){
if(!newSibs.at(i)->deaf() && distrUF(generator) <= Settings::SIGN_LANG_HEAR){
newSibs.at(i)->teachSignLanguage();
sibsKnowSL = true;
}
}
// <EFBFBD>) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// б) Если родители или сибсы знают жестовый
if(men.at(m)->knowsSign() || women.at(bestW)->knowsSign() || sibsKnowSL){
for(auto i = 0; i < newSibs.size(); i++){
newSibs.at(i)->teachSignLanguage();
@@ -443,7 +443,7 @@ void Processor::run(std::string fileName){
}
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Случай 3 - Слышащий просто случайно узнаёт жестовый
else {
std::uniform_real_distribution<float> distrUF(0.f,1.f);
for(auto i = 0; i < newSibs.size(); i++){
@@ -452,18 +452,18 @@ void Processor::run(std::string fileName){
}
}
}
// (END) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// (END) Трансмиссия жестового языка
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Делаем эту женщину недоступной для всех остальных
women.at(bestW)->alreadyMarried = true;
//for(int i = m; i < men.size(); i++){
// matrixCurrent.at(i).at(bestW) = -100.0f;
//}
} // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} // Конец генерации потомков
std::cout<<"Done\n";
std::cout<<"\tSaving model state\t";
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Сохранить текущее состояние модели
int totalP = men.size()+women.size();
outputFile<<gen;
outputFile<<"\t"<<totalP;
@@ -515,7 +515,7 @@ void Processor::run(std::string fileName){
std::cout<<"Done\n";
std::cout<<"\tDeleting old agents\t";
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Удалить старых агентов
for(int i = 0; i < men.size(); i++){
delete men.at(i);
}
@@ -525,7 +525,7 @@ void Processor::run(std::string fileName){
std::cout<<"Done\n";
std::cout<<"\tReplacing old by new and shuffling\t";
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Заменить старых новыми
men = newMen;
women = newWomen;
std::random_shuffle(men.begin(), men.end());
@@ -537,13 +537,13 @@ void Processor::run(std::string fileName){
newWomen.clear();
std::cout<<"Done\n";
} // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
} // Основной цикл
outputFile.close();
}
float Processor::esteem(Agent* man, Agent* woman){
float ans = 0.0f;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Проверка брат-сестра
if( (man->getFatherID() == woman->getFatherID() ||
man->getMotherID() == woman->getMotherID()) && woman->getMotherID() != -1){
return -50.f;
@@ -597,7 +597,7 @@ void Processor::initSettings(std::string fileName){
boost::to_lower(instr);
boost::trim(instr);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Инструкции
if(instr == "generations" || instr == "iterations" ){
int iter = Settings::MAX_GENERATIONS;
sscanf_s(tokensVector.at(1).c_str(),"%d", &iter);
@@ -736,4 +736,4 @@ void Processor::initSettings(std::string fileName){
}*/
} // (END) for(curLine = 0; curLine < script.size(); curLine++)
}
}

View File

@@ -13,8 +13,8 @@ float Settings::DEAF_ALLELE_RATIO = 0.1f;
float Settings::DEAF_HOMOZYGOTES = 0.05f;
float Settings::HEAR_HOMOZYGOTES = 0.65f;
float Settings::BIRTH_RATE_H = 2.3f; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float Settings::BIRTH_RATE_D = 2.1f; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float Settings::BIRTH_RATE_H = 2.3f; // среднее число потомков
float Settings::BIRTH_RATE_D = 2.1f; // среднее число потомков
float Settings::BETA_A = 2.0f;
float Settings::BETA_B = 5.0f;

View File

@@ -16,8 +16,8 @@ public:
static float DEAF_HOMOZYGOTES;
static float HEAR_HOMOZYGOTES;
static float BIRTH_RATE_H; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static float BIRTH_RATE_D; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static float BIRTH_RATE_H; // среднее число потомков
static float BIRTH_RATE_D; // среднее число потомков
static float BETA_A;
static float BETA_B;
@@ -37,7 +37,7 @@ public:
static std::default_random_engine RANDOM_GENERATOR;
static int DEAF_COMMUNITY_MODEL; // 0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, 1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int DEAF_COMMUNITY_MODEL; // 0 - сообщества глухих нет, 1 - глухие видят всю матрицу, 2 - малая матрица для глухих
static std::string OUTPUT_FILE;
};