private Gene mutateNode(NEATNodeGene mutatee) { double perturbRandVal = perturbRand.nextDouble(); double mutateBias = perturbRand.nextDouble(); NEATNodeGene mutated = mutatee; double newSF = mutatee.sigmoidFactor(); double newBias = mutatee.bias(); if (perturbRandVal < this.pPerturb) { newSF = mutatee.sigmoidFactor() + MathUtils.nextClampedDouble(-perturb, perturb); mutated = new NEATNodeGene( mutated.getInnovationNumber(), mutated.id(), newSF, mutated.getType(), mutated.bias()); } if (mutateBias < this.pMutateBias) { newBias += MathUtils.nextClampedDouble(-biasPerturb, biasPerturb); mutated = new NEATNodeGene( mutated.getInnovationNumber(), mutated.id(), mutated.sigmoidFactor(), mutated.getType(), newBias); } return (mutated); }