26 RandomizerP rand = cart->state_->getRandomizer();
27 const uint size = cart->getGenomeSize();
28 const uint nConstants = cart->nConstants_;
29 const uint nOutputs = cart->nOutputs_;
30 const uint nRows = cart->nRows_;
31 const uint nCols = cart->nCols_;
32 const uint nFunctions = cart->nFunctions_;
33 const uint nInputs = cart->nInputs_;
37 std::vector<uint> validNodes;
38 cart->getActiveFunctionNodes(validNodes);
39 for (uint i = 0; i < nOutputs; i++)
40 validNodes.push_back((uint) cart->nodes_.size() + i);
41 randomGeneIndex = validNodes[rand->getRandomInteger((uint) validNodes.size())];
43 if (randomGeneIndex < (size + nInputs - nOutputs)) {
45 uint iColumn = (randomGeneIndex - nInputs) / nRows;
46 if (rand->getRandomInteger(2) == 0) {
48 int functionID = rand->getRandomInteger(nFunctions);
49 Function* func = cart->functionSet_->vFunctions[functionID].get();
50 cart->nodes_[randomGeneIndex].setPrimitive(cart->functionSet_->vFunctions[functionID]);
52 cart->nodes_[randomGeneIndex].arguments_.resize(func->getNumberOfArguments());
53 for (uint k = 0; k < func->getNumberOfArguments(); k++) {
54 uint iArgument = cart->randomNodeInputConnection(iColumn);
55 cart->nodes_[randomGeneIndex].arguments_[k] = iArgument;
59 uint iArg = rand->getRandomInteger(cart->nodes_[randomGeneIndex].primitive_->getNumberOfArguments());
60 cart->nodes_[randomGeneIndex].arguments_[iArg] = cart->randomNodeInputConnection(iColumn);
64 cart->outputs_[randomGeneIndex - cart->nodes_.size()] = cart->randomOutputConnection();