Code center > Suggestions
Sexual Reproduction Focus Group
Elite:
Hiya everyone, just returned from holiday
Let's get together and decide what we want to do about sexual reproduction in DB
Here's my idea to start things off:
Firstly, meiosis: reproduction that splits the bot into two bots, splitting the DNA of the bot at a certain point and giving each portion to one of the bots. This would be achieved via the sysvar .meio, with the number stored indicating where in the DNA the split occurs
Secondly, give bots the ability to shuffle their genes, moving genes around their genome. This way they can 'line up' their genes into two halves for meiosis.
Bots should also have the ability to copy their own genes. The importance of this will become clear later.
Finally, recombination: two bots can, via a tie, merge into one bot and merge their DNA together, with the bot that initialized the recombination's DNA simply being added to the end of the other bot's DNA
.reco will fire a tie forward, which, if it hits anything, will initiate recombination
*********
Here's how sexual reproduction would work:
First, line up your genes into two halves (if necessary)
Next, split your DNA using meiosis
Then, have each 'half-bot' to find a 'half-bot' of the 'opposite sex'
Then, have the halves recombine into one bot
It works better still for MBs, which can afford to have specialist sex cells
*********
Here's the best part - implications of this system:
1) Different species cannot breed easily
If one bot accidentally recombines with a bot of a different species you're left with a bizare hybrid, which will probably be missing large chunks of vital DNA, and be run by two conflicting DNA 'half-bot' programs
2) Viruses emergy as a natural consequence
A virus would be a single gene (or several) that copied itself, sent the copy to the end of the genome, and split it off with meiosis, only to have the new SG bot recombine with the first bot it saw.
3) Incresed evolutionary benifits of sex, including true speciation
*********
What does everybody think of that?
Numsgil:
I have issues giving bots too much information about the structure of its DNA, especially numerically, and doublely especially on the "gene" level. Insertions and deletions are going to make doing something to the Xth base pair terribly obsolete. You need a system that's just a set of universal rules that allow the desired behavior to come about.
Ideally you'd have some system that's fairly emergent, without alot of control from the bots. The trick I think is to decide what we want and go backwards from there, comparing with biology as a base line.
Actual meisos goes something like this: (it's been a while, so point out errors I make) Chromosomes are lined up with each other. Like chromosomes find each other through their centromeres, which act as a kind of key in groove, only connecting to the sister chromatid.
The sister chromosomes begin zipping up along several sites to each other. If there isn't a proper match at a zipping up site, the zipping stops. Crossing over events occur along these zipped up sites only.
After crossing over, the chromosomes are seperated and each goes in one of the new cells.
From this I would imagine something like this for Darwinbots: (assuming a Haploid standard, which seems to be the norm for ALife). Two DNAs find each other (the specifics change depending on if you're macroscopic or microscopic). The DNA is lined up, and several random locations start trying to find corresponding matches. That is, location 1 on DNA A has "stop cond *.eye5 0 > start". This tries to find a match in DNA B. If a match is found, the DNA's are "zipped" up, checking the previous and next base pairs for a match. This continues until it either runs out of DNA to zip or the DNAs don't match anymore, in which case it stops.
The bots would then specify a number of crossing over events (maybe just average the requested crossing over events of the two parents), which would perform crossing over the same way biological DNA does along any zipped up regions.
The two DNAs are then seperated and either put back into the parents (for microscopic) or one is put into a new bot (macroscopic).
This avoids explicitly defining sex, and other abstract concepts (funguses for instance have a very interesting life cycle with some very complex "genders". Some have hundreds of genders.)
There are a few fudges in this system compared with natural systems. The largest being that bots are specifically limited to haploidity (polyploidity seems an impossible problem, specifically in deciding how to handle dominant/recessive/codominant in a fair way). Polyploidity would be easy to add, though, if we ever figured out an adequate system.
If bots could program their zipping up mechanisms, maybe through some sort of codule, you could add quite a bit of control to the bots without giving them explicit information about their DNA.
I do agree that ties would be the logical choice for coupling with a mate. To mate I imagine it would need to be a double agreement, like launching nuclear missiles. Both bots have to agree. Perhaps a single sysvar called .sexrepro (original I know). 0 or negative values imply no consent to mate. Positive values indicate a number of crossing over events. I dunno, I might have to think about it.
Ideally there would be a checkbox in the options between macroscopic and microscopic behavior (new child or DNA swap). If the sysvars behave the same for both, that would be even better. Bots designed for one could still operate as another.
Elite:
How about the DNA matches up by finding regions in which the DNA matches, and then splits the DNA into sections where the DNA doesn't match, then chooses an 'allele' at random from the unmatching parts
This is hard to explain
Example:
Bot1
h r j d n v r g k h t r e s b j y o g d s w e h g k h p g r e s g p p o r d w t x n t o p l
Bot2
h r j d n o I y t r v j b g h f d w e h p o d v d x b j r d w t x y y r e
Match points colour coded
DNA in-between match points shuffled
Example offspring:
Bot3
h r j d n v r g k h t r e s b j y o g d s w e h p o d v d x b j r d w t x n t o p l
This might be something similar to what you're getting at, although not specifying crossover points
Elite:
Title change: From "Sexual Reproduction (Again)" to "Sexual Reproduction Focus Group"
Are we in agreement that the system should involve meiosis and then fertilisation/recombination, rather than a simpler system whereby bots exchange genes without intermediate meiosis?
Resources:
Sexual Reproduction
Genetic Recombination
Numsgil:
Here's how I understand "real" crossing over to work (there are some limitations to my medium, so bear with me):
The two DNA strands couple:
a b c d e f g h I j k l m n o p
A B C D E F G H I J K L M N O P
A site is chosen:
a b c d e f g h I j k l m n o p
A B C D E F G H I J K L M N O P
The DNA strands downstream (or upstream, I'm using downstream without loss of generality) "swap":
a b c d e f g h I j K L M N O P
A B C D E F G H I J k l m n o p
The result doesn't sound too exciting, but if you do that several times the result is a relatively cohesive way to shuffle the DNA that minimizes damage to genetic code.
Elite, your way isn't much different as far as impact to the DNA, I'm just saying this is more or less how actual crossing over goes about its business. Although your method might have a different effect on Genetic Linkage.
Navigation
[0] Message Index
[#] Next page
Go to full version