final CalculateScore calculateScore) {
final TrainEA result = new TrainEA(population, calculateScore);
result.setSpeciation(new OriginalNEATSpeciation());
result.setSelection(new TruncationSelection(result, 0.3));
final CompoundOperator weightMutation = new CompoundOperator();
weightMutation.getComponents().add(
0.1125,
new NEATMutateWeights(new SelectFixed(1),
new MutatePerturbLinkWeight(0.02)));
weightMutation.getComponents().add(
0.1125,
new NEATMutateWeights(new SelectFixed(2),
new MutatePerturbLinkWeight(0.02)));
weightMutation.getComponents().add(
0.1125,
new NEATMutateWeights(new SelectFixed(3),
new MutatePerturbLinkWeight(0.02)));
weightMutation.getComponents().add(
0.1125,
new NEATMutateWeights(new SelectProportion(0.02),
new MutatePerturbLinkWeight(0.02)));
weightMutation.getComponents().add(
0.1125,
new NEATMutateWeights(new SelectFixed(1),
new MutatePerturbLinkWeight(1)));
weightMutation.getComponents().add(
0.1125,
new NEATMutateWeights(new SelectFixed(2),
new MutatePerturbLinkWeight(1)));
weightMutation.getComponents().add(
0.1125,
new NEATMutateWeights(new SelectFixed(3),
new MutatePerturbLinkWeight(1)));
weightMutation.getComponents().add(
0.1125,
new NEATMutateWeights(new SelectProportion(0.02),
new MutatePerturbLinkWeight(1)));
weightMutation.getComponents().add(
0.03,
new NEATMutateWeights(new SelectFixed(1),
new MutateResetLinkWeight()));
weightMutation.getComponents().add(
0.03,
new NEATMutateWeights(new SelectFixed(2),
new MutateResetLinkWeight()));
weightMutation.getComponents().add(
0.03,
new NEATMutateWeights(new SelectFixed(3),
new MutateResetLinkWeight()));
weightMutation.getComponents().add(
0.01,
new NEATMutateWeights(new SelectProportion(0.02),
new MutateResetLinkWeight()));
weightMutation.getComponents().finalizeStructure();
result.setChampMutation(weightMutation);
result.addOperation(0.5, new NEATCrossover());
result.addOperation(0.494, weightMutation);
result.addOperation(0.0005, new NEATMutateAddNode());