Code center > Darwinbots3
Chromosomes and Sexual Rproduction
bacillus:
Hey, I was just giving this topic some thought recently and realized that the reason sexual reproduction in DB is so wobbly is that there is only one DNA. What if instead of coding the entire DNA into one section, large chunks of genes can be separated into chromosomes, which were assigned an ID to recognize pairs and a random one from each parent matched. If the chromosomes are properly coded (eg. a fair degree of independence), you could then activate one of your pair, and leave the other one to be still passed on (there's probably better ways to handle this, please discuss!). Instead of having very similar bots of different species, you could then check species by chromosome IDs (if they can breed, they're the same species) and thus introduce strains.
This would solve a lot of current issues - mainly the reproduction glitches, speciation definition, and would also allow for some funky new mutations. I know this has been discussed before, but the main difference is actually having more than one DNA strand present. Thoughts?? :D
Numsgil:
That's sort of what I want to do with DB3.
What you can do basically is, using some smart algorithms, match up like parts of disparate DNA strands, and then "cross over" (eg: swap bps downstream) for the like parts. The end result is basically a shuffled and relatively meaningful DNA strand. I think the program does this already (Eric coded it up a while ago). This matches very well with actual biology. The nice thing being that you don't need IDs or anything to handle this sort of thing. You can handle it automatically by just doing some pattern matching.
What makes the current system hard is that very very different bots can sexually reproduce, but not all properties in the system can be mixed very well. Like clearly raping a veggy is over powered. Since none of the DNA matches, no cross over event occurs. So basically you've managed to inject your DNA in to a veggy cheaply and quickly. The problem is that there's no down side to being a veggy really. Veggies just get free energy. Part of what I wanted to do with DB3 involves fleshing out the system better so that it's meaningful to be half veggy and half animal, with clear strengths and weaknesses.
As far as haploid/diploid: if you look at simple unicellular creatures which sexually reproduce, it's actually really, really interesting. In our multicellular world, we think in terms of male, female, and child. But in the world of cells sexual reproduction is more like fusing two creatures together (eg: Archons in Starcraft). Fungi, for instance, basically alternate between haploid generations and diploid generations. See this.
I think this sort of thing would make far more sense to bots. There would be a "fusing" stage where two haploid individuals pool their resources during times of scarcity. The two DNA strands sort of share control of the hybrid diploid creature. When times become better, the hybrid creature splits back apart in to either original bot. But during that process, the two strands take time to swap parts of their DNA with each other. The only hard part is figuring out how two DNA strands can share control of a single bot with each other. I don't have any really good options. You basically want to run both in parallel, and "average" their actions together. But an actual average wouldn't really work for things like memloc or shoot (-1 and -6 would average to like -3. Not the same thing at all). You could swap control of the bot every other cycle, but that feels really inelegant to the point that I can't imagine successful bots ever fusing voluntarily. The resulting bot would be way to schizo.
For DB3 I was hoping to frame the DNA in such a way that all sysvars operate on a gradient so that averaging values together actually does make sense. But even if that works, you run in to an issue with DNA trying to vote for much larger or smaller values than it really wants in an effort to force the values to be what it really wants (eg: strand 0 votes for 10, and strand 1, knowing strand 0 will vote for 10, votes -10 so that the average will be 0 like it wants). But maybe that's not a bug, but a feature. Two cheater strands won't really work well together, as they each try to get in to the other's heads.
Anyway, that's my brain dump on the matter.
bacillus:
The haploid to diploid fusion should maybe not be reversible (a bit like sperm and egg not being able to seperate again I suppose), but a meiosis option would be a good way to go.
On a related manner, what about plasmids (cells 'donating' sections of DNA to other cells)? It would be a bit like a virus I suppose, but could also have some interesting uses...
Numsgil:
--- Quote from: bacillus on August 17, 2010, 03:32:15 PM ---The haploid to diploid fusion should maybe not be reversible (a bit like sperm and egg not being able to seperate again I suppose), but a meiosis option would be a good way to go.
--- End quote ---
Yeah. My thought is when you separate you force a cross over event. So you can't fuse and remain unchanged necessarily.
--- Quote ---On a related manner, what about plasmids (cells 'donating' sections of DNA to other cells)? It would be a bit like a virus I suppose, but could also have some interesting uses...
--- End quote ---
Functionally, would work the same as viruses, yeah? Just with benevolent intentions instead of malicious ones.
Viruses are tricky. At a high level I want to treat them as just another DNA strand sharing control of a bot. But then you get in to issues where spamming a bot with thousands of identical viruses so you can "weight" the average to do what the virus wants becomes a good strategy. Which would be fine from a gameplay standpoint since those viruses aren't exactly free, except suddenly the simulation starts crawling as it has to do lots of basically identical calculations. There'd be nothing to prevent the number of viruses inside bots from ballooning exponentially, and all of them executing inside the bot. I could just count the number of identical DNA strands in a bot (with a hash) and avoid processing them that way, but maybe with mutations on that would break down quickly? It wouldn't take long for 10000 identical virus strands to diverge with mutations enabled. I could implement a cost for each bp executed, but that tends to have a chilling affect on evolution experimenting with complex behaviors (you get really efficient grey goo usually), so I really want to avoid that.
Thinking about it, I guess I want some mechanic that counterbalances the desire for exponential growth that reproducing units have. But that's really pretty fundamental to the way life is supposed to work. Actually thinking about it, I wonder why our real life genomes don't grow exponentially. Retroviruses add themselves to the DNA strand, so I'm not sure I know what prevents them from doing this ad infinitum. In a certain sense, I guess that's what real (non retro) viruses do. The cell ruptures from having too many virus copies. But with retroviruses (which are basically what Darwinbots viruses are) and plasmids I don't see a mechanism that should stop them from endlessly replicating themselves inside their host.
There's probably some selection pressure to keep DNA length small(ish), but I don't know what it might be. Bacteria genomes are orders of magnitude smaller than eukaryote genomes, so whatever it is it's less pronounced in eukaryotes. It's not like a computer, though, where more instructions = longer execution time. DNA operates on a massively parallel computer. Each bp is basically it's own processor. Each protein is a new processor, too.
Probably has to do with mutations. Fewer bps = fewer points of failure. If you have 20 copies of a gene you aren't better off than having 2 copies of a gene, but you are more likely to suffer a catastrophic mutation in one of those copies that kills you. Maybe eukaryotes have longer genomes because they have more sophisticated error checking machinery. Not sure how I'd incorporate all that into a gameplay mechanic. Maybe I wouldn't need to because it'd be emergent.
ikke:
--- Quote from: Numsgil on August 17, 2010, 06:27:40 PM ---There's probably some selection pressure to keep DNA length small(ish), but I don't know what it might be. Bacteria genomes are orders of magnitude smaller than eukaryote genomes, so whatever it is it's less pronounced in eukaryotes.
--- End quote ---
As I understand it dna and cell size correlate (on a species level). Organisms are selected based on optimal cell size (be it bigger or smaller) and therefore insertions or deletions are selected
Navigation
[0] Message Index
[#] Next page
Go to full version