GeneticSharp icon indicating copy to clipboard operation
GeneticSharp copied to clipboard

Operators upgrade

Open jsboige opened this issue 3 years ago • 0 comments

This pull request introduces an important change: it decouples chromosome creation and gene initialisation. As I understand, that was always the original intent, with for instance the IPopulation interface and TplPopulation implementation entirely based on the premise that those two should be decouples, but in practice, many chromosomes required to have a global context for individual genes creation (such as the TSP chromosome). Accordingly, it was tempting to initialise the genes within the constructor, which was mostly the case.

That in turn defeated entirely the original intent, because that meant every CreateNew call from a Crossover would trigger unneeded gene initialization with potentially great penalty costs. The new proper way to do global context-based initialization rather than individually through the usual GenerateGene method is through overriding the CreateGenes method from the base class.

I went through all existing code to update the new behavior. Note that it shouldn't break things if a chromosome does early gene intialisation in the constructor. It just does not have to do it anymore, and shouldn't for better performances, since CreateNew will be explicitly called on each chromosome during first generation initialization, yielding dual initialisation if that's the case.

jsboige avatar Nov 18 '20 03:11 jsboige