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 }