Yes, I agree that the all or nothing dominance of whole "chromosomes" seems something of a failing.
That said, it's not without precedance. Specifically a similar appraoch was used by "Kim, Kim, Lee, Cho and Lee-Kwang" in a paper called "Winner take all strategy for a Diploid Genetic Algorithm.”
I can't find a link to the paper, but the site I gave a while ago above says
[They] employ a winner-take-all approach to diploid dominance. In their research, each chromosome is evaluated independently, and the fittest chromosome is expressed in the phenotype. Once two parents are selected, they perform crossover first on the two dominant chromosomes to generate one offspring, and then on the recessive chromosomes to generate the second offspring. In addition, they allow for some small probability of “dominance mutation”, I.e. the dominant and recessive chromosome switch places before crossover.
While not exactly similar, it does show someone else trying to use a all or nothing dominance/recessive method for a whole chromosome.
The problem is that the DNA for Darwinbots is about as far from biology as you can be and still call it "DNA". As such, biological solutions are difficult to shoe horn onto the problem. Bio DNA has several abstraction levels between code and effect that DB does not. DB's DNA is more like the net effect of all the proteins in an organism instead of the DNA coding for the RNA that gets spliced together to form the proteins.
---------------------
I was thinking about what you suggested, having store simply add instead of replace. While I think it's an interesting idea, I'm not sure if it addresses the problems of dominance/recessive for three reasons:
1. Values in Darwinbots for memory locations aren't normalized. For instance, *.eyeX returns values up to about 100. *.aim gives values in the range [0, 1256], tielen could potentially go up to 1000, etc, repro takes values in the range [1, 99], delgene takes potentially values from 0 to infinity, though realistically it's probably in the range [1,100]. refxpos and refypos range the whole gamut from [0, 32000].
As a result, it's difficult to assume that bots with larger values are trying "harder". It becomes somewhat difficult to provide a strictly downard force. This is sort of a weak reason I'll admit.
2. It works on stores instead of "genes". Whereas my idea suffers from applying the dominance/recessive to too high above the gene level, you're idea works below the abstract gene level. It's just trading one potential problem for another in this regard.
3. If two genes both say to turn 10 degrees, I think most of us would expect the bot to turn 10 degrees instead of 20. Several genes that all agree with each other should provide a reinforcement for the behavior instead of amplification.