DNClient
Work has started on DNClient, the distributed client that volunteers will run. The brain network code has been placed into a separate DLL for ease of updating later down the road. The client has a fairly simple program flow:
- Check for new versions of client, Brain.DLL, evolution parameters, genotypes
- Load current genotype/phenotype, depending on the progress of the client simulation
- If a genotype is loaded, mutate genotype and create phenotype. Proceed to next step.
- Run trial on currently loaded phenotype
- Score fitness, record data
- Repeat
Granted, this is a grossly simplified version, but it gives a nice overview of what is happening client side. Server side should be a fair amount more interesting. The server will have access to the results of all clients and will make “educated guesses” on which genotypes to keep in the genepool and which to remove. I’m currently reviewing various algorithms for deciding which genotypes are fit. Many algorithms allow less fit genotypes to persist because it increases genetic diversity and avoids local maxima, which genetic evolutionary algorithms tend to get stuck in.
I’m also trying to decide if, and how, I want to implement genetic crossover. Crossover is a fancy term for “computer sex”. Crossover takes whole portions of a genotype and transplants it on another genotype, giving the child genotype largely intact pieces of its parent’s genotype. The current client merely mutates the genotype by a small amount each time. I can see the benefits of crossover, as it could potentially take important pieces of genetic material from two fairly unsuccessful parents, but when paired together, create a fantastic child. It does, unfortunately, require some more coding I hadn’t counted on and will require clients to keep a limited genepool they can use to cross.