I tried implementing NEAT algorithm from scratch, and it successfully solves XOR problem. I followed the original NEAT paper.
However, when I run XOR problem solving test and calculate average convergence generations, it converges slowly with speciation, and it is much better and faster without speciation. Complexity of the solution was also smaller without speciation.
Original author of NEAT emphasizes the importance of speciation, so my implementation or parameters must be incomplete somewhere. But I failed to find the evidence that speciation actually helps the algorithm to work better. Is there any performance evaluation resources regarding effectiveness of speciation?
Thank you very much.
Here are my parameters:
input_number = 2 output_number = 1 population = 150 hidden_activation = 'Sigmoid' output_activation = 'Sigmoid' [mutation] weight_perturbation = 0.8 weight_assign = 0.1 add_connection = 0.5 remove_connection = 0.5 toggle_connection = 0.0 add_node = 0.2 remove_node = 0.2 weight_min = -15.0 weight_max = 15.0 perturb_min = -1.0 perturb_max = 1.0 [speciation] c1 = 1.0 c2 = 0.5 compatibility_threshold = 8.0 elitism = 1 survival_rate = 0.07
Implementation source repository : https://github.com/suhdonghwi/neat