In my particular usage of the watchmaker library my chromosomes are very large. Recreating them over and over was hurting performance badly. So I added a "Releasable" interface and made my chromosomes implement that. When GenerationalEvolutionEngine is done with a chromosome I added a couple of lines of code to check if the chromosome implements the Releasable interface, and if so it calls chromosome.release() prior to releasing it from the population.
This allows me to recirculate that object and avoid destroy/recreating objects. This change sped up my algorithm by a factor of 10+.
The majority of the code in this pull request is to add a unit test to make sure releasing is actually working, in addition to adding a simple ReleasablePool implementation.
In my particular usage of the watchmaker library my chromosomes are very large. Recreating them over and over was hurting performance badly. So I added a "Releasable" interface and made my chromosomes implement that. When GenerationalEvolutionEngine is done with a chromosome I added a couple of lines of code to check if the chromosome implements the Releasable interface, and if so it calls chromosome.release() prior to releasing it from the population. This allows me to recirculate that object and avoid destroy/recreating objects. This change sped up my algorithm by a factor of 10+. The majority of the code in this pull request is to add a unit test to make sure releasing is actually working, in addition to adding a simple ReleasablePool implementation.