00001 #include "ECF_base.h" 00002 #include<sstream> 00003 00004 00005 bool Deme::initialize(StateP state) 00006 { 00007 for(uint i = 0; i < nIndividuals_; i++) { 00008 this->push_back(static_cast<IndividualP> (new Individual)); 00009 this->back()->index = (unsigned int) this->size() - 1; 00010 this->back()->initialize(state); 00011 } 00012 00013 hof_ = static_cast<HallOfFameP> (new HallOfFame); 00014 hof_->initialize(state); 00015 00016 stats_ = static_cast<StatCalcP> (new StatCalc); 00017 stats_->initialize(state); 00018 00019 return true; 00020 } 00021 00022 00023 bool Deme::replace(unsigned int index, IndividualP newInd) 00024 { 00025 newInd->index = index; 00026 (*this)[index] = newInd; 00027 return true; 00028 } 00029 00030 00031 void Deme::write(XMLNode &xDeme) 00032 { 00033 xDeme = XMLNode::createXMLTopNode("Deme"); 00034 std::stringstream value; 00035 value << nIndividuals_; 00036 xDeme.addAttribute("size", value.str().c_str()); 00037 00038 XMLNode xHoF; 00039 hof_->write(xHoF); 00040 xDeme.addChild(xHoF); 00041 00042 XMLNode xIndividual; 00043 for(uint i = 0; i < this->size(); i++) { 00044 this->at(i)->write(xIndividual); 00045 xDeme.addChild(xIndividual); 00046 } 00047 } 00048 00049 00054 void Deme::read(XMLNode &xDeme) 00055 { 00056 XMLNode xHof = xDeme.getChildNode(0); 00057 this->hof_->read(xHof); 00058 00059 for(uint i = 0; i < this->size(); i++) { 00060 XMLNode xInd = xDeme.getChildNode(i + 1); 00061 this->at(i)->read(xInd); 00062 } 00063 }