In the add node mutation, the connection between two chosen nodes (e.g A and B) is first disabled and then a new node is created between A and B with their respective two connections.
I guess that the former A-B connection can be re-enabled via crossover (is it right?).
Can the former A-B connection also be re-enabled via mutation (e.g. "add connection")?
Yes, the original gene is disabled, but is left in the genome. This can be seen on page 10, figure 3 of the paper linked (taken from the original paper NEAT Paper) where gene 3 is disabled, but not removed from the genome. This gene can be re-enabled by receiving the gene with the identical innovation number from a mating partner with the gene enabled during crossover.
The original paper does not mention a mutation to re-enable genes, but various other publications and implementations after the original paper do. This is desirable for a number of reasons. Re-enable mutate allows for dropout to used in the implementation. It is also possible that certain genomes are disabling genes too quickly and this can help to correct for that.
-
1$\begingroup$ "This gene can be re-enabled by an enable mutate". I found no mention of this mutation. Source? NEAT paper says "Each mutation expands the size of the genome by adding gene(s)." Such 'enable' mutation would not add gene. $\endgroup$ – kuma Mar 3 '18 at 13:20
-
1$\begingroup$ Sorry, I had forgotten this was not included in the original publication. Many other publications attempting to improve the NEAT method add this mutation type (See my edit). $\endgroup$ – Andrew Butler Mar 3 '18 at 17:42
Yes. The mutation can either disable or enable a gene.
It's in the original NEAT implementation released by Dr. Kenneth O. Stanley.
Declared in
genetics.h
:void mutate_toggle_enable(int times); /* toggle genes on or off */ void mutate_gene_reenable(); /* Find first disabled gene and enable it */