00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "NodeSelector.h"
00019 #include "Sym.h"
00020
00021 #include <utils/eoRNG.h>
00022
00023
00024 Sym NodeSelector::NodeSelection::subtree() {
00025 if (subtree_.empty()) {
00026 subtree_ = get_subtree(root_, subtree_index_);
00027 }
00028 return subtree_;
00029 }
00030
00031 NodeSelector::NodeSelection RandomNodeSelector::select_node(Sym sym) const {
00032 unsigned idx = rng.random(sym.size());
00033 return NodeSelection(sym, idx, Sym() );
00034 }
00035
00036 NodeSelector::NodeSelection BiasedNodeSelector::select_node(Sym sym) const {
00037
00038 unsigned p = rng.random(sym.size());
00039 Sym res;
00040 for (unsigned i = 0; i < nRounds; ++i) {
00041 res = get_subtree(sym, p);
00042
00043 if (res.args().size() > 0) break;
00044
00045 p = rng.random(sym.size());
00046 }
00047
00048 return NodeSelection(sym, p, res);
00049 }
00050