• Main Page
  • Modules
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/ECF/tree/TreeMutHoist.cpp

00001 #include "../ECF_base.h"
00002 #include "Tree.h"
00003 #include "TreeMutHoist.h"
00004 #include <stdio.h>
00005 
00006 
00007 namespace Tree
00008 {
00009 
00010 void TreeMutHoist::registerParameters(StateP state)
00011 {
00012     myGenotype_->registerParameter(state, "mut.hoist", (voidP) new double(0), ECF::DOUBLE);
00013 }
00014 
00015 
00016 bool TreeMutHoist::initialize(StateP state)
00017 {
00018     voidP sptr = myGenotype_->getParameterValue(state, "mut.hoist");
00019     probability_ = *((double*)sptr.get());
00020     return true;
00021 }
00022 
00023 
00024 bool TreeMutHoist::mutate(GenotypeP gene)
00025 {
00026     Tree* tree = (Tree*) (gene.get());
00027     
00028     // first of all, make a copy of tree and clear the original
00029     Tree* copyTree = tree->copy();
00030     tree->clear();
00031     
00032     // select random node in copied tree, it will be the root node for new tree
00033     uint chosenNode = state_->getRandomizer()->getRandomInteger((int) copyTree->size());
00034     uint chosenNodeSubtreeSize = copyTree->at(chosenNode)->size_;
00035     
00036     // copy chosen subtree to original
00037     for(uint i = 0; i < chosenNodeSubtreeSize; i++) {
00038         NodeP node = static_cast<NodeP> (new Node(copyTree->at(chosenNode + i)->primitive_));
00039         tree->addNode(node);
00040     }
00041     
00042     tree->update();
00043     delete copyTree;
00044     
00045     std::stringstream log;
00046     log << "TreeMutHoist successful (hoisted subtree = ";
00047     for(uint i = 0; i < tree->size(); i++)
00048         log << tree->at(i)->primitive_->getName() << " ";
00049     log << ")";
00050     ECF_LOG(state_, 5, log.str());
00051 
00052     return true;
00053 }
00054 
00055 }

Generated on Tue Nov 4 2014 13:04:31 for ECF by  doxygen 1.7.1