dwdyer / watchmaker

The Watchmaker Framework for Evolutionary Computation
https://watchmaker.uncommons.org
Apache License 2.0
206 stars 79 forks source link

Supporting reusable chromosomes #33

Open wjladams opened 5 years ago

wjladams commented 5 years ago

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.