/** ParentContainer.cpp * J Scott Cameron * * IMplements Container class for the parent window * data in the Genetic Images app */ #include "ParentContainer.h" /* constuctor that sets up container with default values */ ParentContainer::ParentContainer(PopulationContainer* PC) { pc = PC; mutate = true; crossover = false; percMutation = 0.01f; ncs = vector(0); } /* adds a node to the vector of parents */ void ParentContainer::addNode(NodeContainer* nc) { ncs.push_back(nc); } /* empties parent vector */ void ParentContainer::emptyContainer() { vector::iterator itr; for(itr = ncs.begin() ; itr != ncs.end() ; itr++) { (*itr)->~NodeContainer(); } ncs.erase(ncs.begin(),ncs.end()); } /* generates a new population of images */ void ParentContainer::generateNewPopulation() { // vector::iterator itr; int i; if(crossover) { for(i=0;i< pc->P->members();i+=2) { /* kills two old images and replaces them with two new * images generated from randomly chosen parents */ delete(pc->P->trees[i]); delete(pc->P->trees[i+1]); pc->P->crossover(randomNode(), randomNode(), &pc->P->trees[i], &pc->P->trees[i+1]); } } else { /* else clone a parent into the new population */ for(i=0;iP->members();i++) { delete(pc->P->trees[i]); pc->P->trees[i] = (Binary_Node *)tree_copy( randomNode(),NULL); } } if(mutate) { /* mutates the newly generated image*/ g_mutate = percMutation; for(i=0;iP->members();i++) { pc->P->mutate(pc->P->trees[i]); } } /* generate all the bitmaps for display*/ pc->UpdateMaps(); } /* grabs a random image from the parent vector */ Binary_Node* ParentContainer::randomNode() { int i = rand()% ncs.size(); return (Binary_Node*)ncs[i]->n; }