27 RandomizerP rand = cart->state_->getRandomizer();
28 const uint size = cart->getGenomeSize();
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 randomGeneIndex = nInputs + rand->getRandomInteger(size);
39 if (randomGeneIndex < (size + nInputs - nOutputs)) {
41 uint iColumn = (randomGeneIndex - nInputs) / nRows;
42 if (rand->getRandomInteger(2) == 0) {
44 uint currentNArgs = cart->nodes_[randomGeneIndex].primitive_->getNumberOfArguments();
45 int functionID = rand->getRandomInteger(nFunctions);
46 Function* func = cart->functionSet_->vFunctions[functionID].get();
47 cart->nodes_[randomGeneIndex].setPrimitive(cart->functionSet_->vFunctions[functionID]);
50 uint newNArgs = func->getNumberOfArguments();
51 cart->nodes_[randomGeneIndex].arguments_.resize(func->getNumberOfArguments());
52 if (newNArgs > currentNArgs) {
53 for (uint k = currentNArgs; k < newNArgs; k++) {
54 uint iArgument = cart->randomNodeInputConnection(iColumn);
55 cart->nodes_[randomGeneIndex].arguments_[k] = iArgument;
61 uint iArg = rand->getRandomInteger(cart->nodes_[randomGeneIndex].primitive_->getNumberOfArguments());
62 cart->nodes_[randomGeneIndex].arguments_[iArg] = cart->randomNodeInputConnection(iColumn);
67 cart->outputs_[randomGeneIndex - cart->nodes_.size()] = cart->randomOutputConnection();