size_t DSMGA2::findSize(Chromosome& ch, list<int>& mask, Chromosome& ch2) const { cout <<"_findsize2"; size_t size = 0; for (list<int>::iterator it = mask.begin(); it != mask.end(); ++it) { if (ch.getVal(*it) == ch2.getVal(*it)) break; ++size; } return size; }
size_t DSMGA2::findSize(Chromosome& ch, list<int>& mask) const { cout <<"_Findsize"; DLLA candidate(nCurrent); for (int i=0; i<nCurrent; ++i) candidate.insert(i); size_t size = 0; for (list<int>::iterator it = mask.begin(); it != mask.end(); ++it) { int allele = ch.getVal(*it); for (DLLA::iterator it2 = candidate.begin(); it2 != candidate.end(); ++it2) { if (population[*it2].getVal(*it) == allele) candidate.erase(*it2); if (candidate.isEmpty()) break; } if (candidate.isEmpty()) break; ++size; } return size; }
void DSMGA2::backMixingE(Chromosome& source, list<int>& mask, Chromosome& des) { cout <<"_bme"; Chromosome trial(ell); trial = des; for (list<int>::iterator it = mask.begin(); it != mask.end(); ++it) trial.setVal(*it, source.getVal(*it)); if (trial.getFitness() > des.getFitness()) { pHash.erase(des.getKey()); pHash[trial.getKey()] = trial.getFitness(); EQ = false; //des.getIndex()++; des = trial; return; } if (trial.getFitness() >= des.getFitness()) { pHash.erase(des.getKey()); pHash[trial.getKey()] = trial.getFitness(); des = trial; return; } }