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); }
private Gene mutateLink(NEATLinkGene mutatee) { double perturbRandVal = perturbRand.nextDouble(); double disableRandVal = disableRand.nextDouble(); double newWeight; NEATLinkGene mutated = mutatee; if (perturbRandVal < this.pPerturb) { if (this.pWeightReplaced > perturbRand.nextDouble()) { newWeight = MathUtils.nextPlusMinusOne(); } else { newWeight = mutatee.getWeight() + MathUtils.nextClampedDouble(-perturb, perturb); } // newWeight = mutatee.getWeight() + MathUtils.nextClampedDouble(-PERTURB, PERTURB); mutated = new NEATLinkGene( mutatee.getInnovationNumber(), mutatee.isEnabled(), mutatee.getFromId(), mutatee.getToId(), newWeight); } if (disableRandVal < this.pToggle) { if (this.featureSelection) { mutated.setEnabled(!mutated.isEnabled()); } } return (mutated); }
private Gene mutateFeature(NEATFeatureGene mutatee) { double perturbRandVal = perturbRand.nextDouble(); Gene mutated = mutatee; if (perturbRandVal < this.pPerturb) { mutated = new NEATFeatureGene( mutatee.getInnovationNumber(), mutatee.geneAsNumber().doubleValue() + MathUtils.nextClampedDouble(-perturb, perturb)); } return (mutated); }