I am writing a genetic algorithm. My population quickly develops a monoculture. I am using a small population (32 individuals) with a small number of discrete genes (24 genes per individual) and a single point cross-over mating approach. Combine that with a roulette wheel selection strategy and it is easy to see how all the genetic diversity is lost in just a few dozen generations.
What I would like to know is, what is the appropriate response? I do not have academic-level knowledge on GAs and only a few solutions come to mind:
What are some appropriate responses to the situation?
At the population level, inbreeding decreases the effective population size and thus the population genetic variability15. A lack of genetic diversity is often associated with a decrease in the adaptive response of a population16 and can even lead to its extinction17,18.
Three measures might be effective: Expansion of the size of the effective population. Restrictions in the number of offspring per parent. Mating schemes to control and manage relationships.
Genetic algorithms do not scale well with complexity. That is, where the number of elements which are exposed to mutation is large there is often an exponential increase in search space size. This makes it extremely difficult to use the technique on problems such as designing an engine, a house or a plane.
Genetic algorithms use a three-step iterative process: (1) test a solution to see how good it is, (2) select the best parents, and (3) generate offspring. Genetic algorithms provide a set of efficient, domain-independent search heuristics.
I would look at a larger population, 32 induviduals is a very small population. I usually run GAs with a population at least in the number of chromosomes^2 range (by experience) to get a good starting distribution of individuals.
A possible way to speed things upwith a larger population is to spawn different threads (1 per individual, possibly in batches) when running your fitness function (usually the most expensive part of a GA).
Assuming a population of 32, and a Quad core system, spawn threads in batches of 8 (2 threads per cpu will interleave nicely) and you should be able to run approx 4 * faster.
Therefore if you have a time limit on how long to run your GA, this may be a solution.
You can add to that:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With