Code center > Suggestions
Bringing back .sexrepro
Numsgil:
Yeah, I think we're pretty close too, we're just using vocab a little differently. When I say mixing DNA, I'm referring to the process that goes on inside a cell undergoing meiosis. This is the part of the process that's too complex for our DNA. And to boot, it's pretty boring since the process developed before the Cambrian and has been well conserved for billions of years across all eukaryotic life. Where to get two strands of DNA and what to do with the new strand is the interesting part. Combining the two strands in to one can only be done well in one way.
The natural process is very robust to mutations, especially insertions and deletions. This is essential. I'll provide a quick overview, but you'll want to find some independent sources (like wikipedia). The two strands are unwound from their chromosomes into two loose, long strands. Special proteins all over the strands act like the sliders in a zipper (I know you know what a zipper is, but this has a good animation), "zipping" up the two strands as long as they're the same. DNA sections that aren't similar aren't zipped. Crossover events then happen on these zipped up sections an arbitrary number of times at arbitrary locations (the process isn't important (Holiday junctions), but the results are).
A quick example, consider the two strands:
ABCDEabcdeFCGHIfcghiXYZ and
ABCDEFCGHIXYZ
the capital letters get zipped to like capital letters, and the lower case letters would form passive loops. After cross over events, the result could look like this:
ABCDEabcdeFCGHIXYZ and
ABCDEFCGHIfcghiXYZ
Those differences in the first DNA strand go along for the ride as the strands swap. The benefit here is that the DNA is a passive passenger along for the ride. Meaning you don't have to add tags like CROSSOVER_POINT in to the DNA-- every point is a potential cross over point, whether inside a gene or not, as long as it has a mirror in the other DNA strand.
The number of cross over events should probably be determined by DNA. The location of the cross over points in nature is (mostly) random, but we could add control in if we really needed to.
An important distinction here: in nature, organisms perform cross over during meiosis. In Darwinbots, where diploidness isn't supported, even for a second (primitive sexual reproduction involved haploid organisms fusing for a short time, performing crossing over, then splitting using meoisis), we need to perform crossing over events when the two DNA strands meet, not when they part.
Another interesting point here is that crossing over usually produces two new strands. I'm not sure if this would be useful or if we should just toss one of the resulting threads.
I'm for all sorts of interesting methods for a bot finding another strand of DNA to cross over with, but I don't have any ideas at the moment.
Welwordion:
--- Quote from: Numsgil ---It's been a long time since I looked in to it, but I believe that viruses get inserted anywhere in the genome between two other genes. I think there was (is?) a bug that prevented viruses from being inserted in either the very first or very last position, that made anti-virus especially useful.
--- End quote ---
--- Quote ---This is correct. A quick inspection of the code shows that the intent at least is to insert the virus after a random selected stop statement. I have not walked through it lookign for bugs or to test the boundary conditions, but this is clearly the intent.
--- End quote ---
I think you should look into it again my bot I attached creates (in most cases) a perfectly alternating patterns of genes, which should not be possible if genes would be inserted randomly (and I would like to keep it not random)
Test the bot in 2.43t with 30k energy and no brownian motion(you might also consider reducing the costs vor viruses)
As for crossover points thumbs up, a good idea.
--- Quote ---Either way, viruses just aren't a good way to totally mix two different genomes. It takes time to copy DNA in to a virus (I think it's 2 cycles per bp or 2 bps per cycle), viruses take a lot of energy to produce, relatively speaking, and there's too huge a chance of something going wrong to make it a viable reproductive strategy.
--- End quote ---
Viruses are bad in transfering large, amounts of Dna but the would have their value in transfering certain genes, if they would insert into the right position or the transferred gene is pretty much isolated from the effect of other genes.
So I vote to implement placeholders for viruses nevertheless although the asynchronous crossover system described by Ericl is already a more powerful, larger version of this.
EricL:
--- Quote from: Welwordion ---I think you should look into it again my bot I attached creates (in most cases) a perfectly alternating patterns of genes, which should not be possible if genes would be inserted randomly (and I would like to keep it not random)
--- End quote ---
Found it. There was a line of code overriding the virus insertion position so that it always got inserted at the end. In 2.43u, the insertion point of a virus is now a random choice selected from the set of positions which include the very beginning of the genome, the very end and right after all stop statements.
Welwordion:
First sorry that I had forget to attach my bot, I corrected that.
Second I should have shut my mouth if you have changed that, cause its just makes thinks harder and my template bot impossible. What in hell makes you think that inserting viruses at random points is an improvement?
EricL:
--- Quote from: Welwordion ---Second I should have shut my mouth if you have changed that, cause its just makes thinks harder and my template bot impossible. What in hell makes you think that inserting viruses at random points is an improvement?
--- End quote ---
Whoops. Sorry, I thought you wanted this change. I should read things closer I guess. It's not that I fiuxed this becuase I necessarily thought virus insertion should be random, I just fixed it cause it was easy to make the code work the way it looked like it was intendend.
So, what should we do? Hmmm. I want to change the virus paradym to use matching DNA sequences for insertion points instead of gene boundaries, but that is probably post 2.44 work, so lets think about what can be done for 2.44 to address sexual reproduction using viruses.
On the one hand, when I think of a viruses as a self-propagating, autonomous agent or as a weapon, I like the idea of random insertion. I think it's the right thing. So, I think that virus shooters should be able to shoot a virus that gets randomly inserted and the victim has no control over that.
But this perhaps the shooter should have some options. If you are using viruses to construct an offspring's DNA gene by gene, there perhaps there should be a way for the virus shooter to control the insertion point.
We could use .shootval. The value of .vshoot specifies the virus shot lifespan today and .shootval doesn't do anything for viruses currently, so it is open to use. A value of 0 would mean random insertion. A non-zero value would be moded by the number of genes in the target bot and used for the insertion point.
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version