restore_bplatform_bin_file () { int rr; /* 0 */ read_fm( rr, 1 ); read_fm(vnbs,1); read_fm(ttms,1); read_fm(vad(1),vnbs+1); restore_alloc ( vad(vnbs+1) ); read_fm(mmts[1],vad(vnbs+1)); read_fm(vtt(1),vnbs); read_fm(tmbs[1],ttms); mtt(vnbs+1,0); /* !!! */ mad(vnbs+2,max_mem); /* !!! */ /* 1 */ read_fm( rr, 1 ); read_fm(sym,1); read_fm(stri[1],sym); read_fm(lexi[1],sym); read_fm(edit[1],sym); read_fm(prio[1],sym); read_fm(righ[1],sym); read_fm(clos[1],sym); read_fm(arity[1],sym); /* 2 */ read_fm( rr, 1 ); read_fm(hcod[1],max_sym); /* 3 */ read_fm( rr, 1 ); read_fm(rul,1); read_fm(ant[1],rul); read_fm(cns[1],rul); read_fm(rth[1],rul); read_fm(num[1],rul); read_fm(trl[1],rul); read_fm(lsb[1],rul); read_fm(pvd[1],rul); read_fm(sts[1],rul); /* 4 */ read_fm( rr, 1 ); read_fm(rttm,1); read_fm(rtmb[1],rttm); /* 7 */ read_fm( rr, 1 ); read_fm(the,1); read_fm(tru[1],the); read_fm(tna[1],the); read_fm(tnm[1],the); read_fm(ttc[1],the); read_fm(tft[1],the); /* 8 */ read_fm( rr, 1 ); read_fm(tttm,1); read_fm(ttmb[1],tttm); /* 9 */ read_fm( rr, 1 ); read_fm(ttdi,1); read_fm(tdir[1],ttdi); }
//Create from random DNA(int iLength){ std::random_device rdt; std::mt19937 mtt(rdt()); //random value within ascii characters std::uniform_int_distribution<int> distt(32, 128); //Populate this new array with random char values for (int i = 0; i < iLength; ++i){ cGenes.push_back((char)distt(mtt)); } //Init fitness and mutation values fFitness = 0.0f, fMutation = 0.01f; };
//Mutate genes void Mutate(){ std::random_device rdt; std::mt19937 mtt(rdt()); //random value 0 - 1 std::uniform_real_distribution<double> distt(0, 1); //random char value std::uniform_int_distribution<int> distt2(32, 128); for (int i = 0; i < cGenes.size(); ++i) { double t = distt(mtt); if (t < fMutation) { cGenes[i] = distt2(mtt); } } };
//Create from parents DNA(std::shared_ptr<DNA> parent1, std::shared_ptr<DNA> parent2){ std::random_device rdt; std::mt19937 mtt(rdt()); //random value within gene size std::uniform_int_distribution<int> distt(0, parent1->GetGeneSize()); /*Set a midpoint for deciding which parent to take gene from. Alternatively this could be done by doing 50/50 chance on each gene */ int m = distt(mtt); //Begin filling cGenes array TODO: Ensure genes pushed in correct order for (int i = 0; i < parent1->GetGeneSize(); ++i){ if (i > m){ cGenes.push_back(parent1->GetGeneAt(i)); } else { cGenes.push_back(parent2->GetGeneAt(i)); } } //Initiate fitness and mutation fFitness = 0.0f, fMutation = 0.01f; };