Advertisement

self-reproduction

Started by November 07, 2006 09:17 PM
21 comments, last by GameDev.net 18 years ago
I made a program where there's a bunch of flying orbs linked with lines to other orbs: http://i90.photobucket.com/albums/k276/krims2006/orbs.gif http://i90.photobucket.com/albums/k276/krims2006/orbs.gif http://i90.photobucket.com/albums/k276/krims2006/orbs.gif What I'm going to do with these orbs is to make them into a 3-dimensional representation of an algorithm. I will assign a certain function to each orb and its relation to other functions will be determined by its links. For example, here's a simple algorithm represented in C++:
a = 3 + 4;
In my 3d system I will break each of these pieces into orbs and link them in a tree form:
 
   (a)
    |
   (+)
  /   \
(3)   (4)
Once I've done this, I want to create a 3d algorithm that reproduces itself, so that the end result is like a biological cell reproducing itself. The problem is that I can't think of a way for how to implement this self-reproduction. I could make a function-orb that takes all the orbs nearby and reproduces them exactly, but that ruins the whole point of what I'm trying to do. And what I'm trying to do is to create a 3d evolving system where even the means by which the "organisms" reproduce can be mutated and evolved. So what I need is to break down self-reproduction into little steps that I will represent with orbs. I could store all the information on how to reconstruct an organism in some orbs, but then that is not really self-reproduction but having a really complex organism make smaller organisms... Is that understandable? It's very abstract, but I happen to have become interested in this sort of thing because I have a lot of free time to waste. :D So any ideas on how I can use very simple rules to create a self-reproducing organism in this 3d system?
Here is a way that I've thought about how to do the self-reproduction:

There will be a section of the organism called the "reader" that will traverse through all the orbs in the organism, and send a command to a "copier" section to copy each orb with a link attached to the original (like an umbilical cord). The next phase is to copy all the links in the copied orbs the same way as they are linked in the original organism. The final step is to cut the "umbilical cords" and animate the new organism.

The problem with this is that it is too complicated. I tried for a long time to try to do a schematic of this organism on paper, but it was just mind-boggling trying to figure how to put it on paper.
Advertisement
Reminds me of L-systems and Conway's Game of Life. Perhaps those can give you some inspiration. Both have a simple ruleset and especially the latter can result in very interesting situations.
Create-ivity - a game development blog Mouseover for more information.
I'm a little confused about what exactly your problem is.

Are you asking:
"how do I create a copy of an arbitrary graph (collection of nodes and vertices)"; or,
"how do I make new functions from old functions that are still valid functions (given your constraints on your initial function space)"; or,
"what kinds of functions are functions of themselves"?

I'll try rereading your post a few more times to see if it helps... but perhaps you could give us a little more detail about the specific problem you have.

Cheers,

Timkin

You are evolving a genetic algorithm.
Quote:
The problem is that I can't think of a way for how to implement this self-reproduction. I could make a function-orb that takes all the orbs nearby and reproduces them exactly, but that ruins the whole point of what I'm trying to do. And what I'm trying to do is to create a 3d evolving system where even the means by which the "organisms" reproduce can be mutated and evolved.


You could specify a fitness function with orbs, then your orb tree will mutate until one of acceptable fitness is created.
Using this method you could mutate the mutators and the mutator mutator mutators, etc :)
I'm not sure if I agree with the 3D space and orb methodology, but it is an interesting idea. I think you'll end up spending as much or more time managing the 3D simulation and lose computational power on the real question at hand. I'd be interested in the results, regardless.

You may get some good information from the following papers.


http://www.sq3.org.uk/papers/evselfreps.pdf

Hutton, T. J. (2002). "Evolvable self-replicating molecules in an artificial chemistry." Artificial Life 8: 341-356.




http://citeseer.comp.nus.edu.sg/cache/papers/cs/27414/http:zSzzSzcogprints.ecs.soton.ac.ukzSzarchivezSz00002888zSz01zSzNRC-44969.pdf/smith03selfreplicating.pdf

http://johnnyvon.sourceforge.net/applet/2.0/

Smith, A., P. Turney, et al. (2003). "Self-replicating machines in continuous space with virtual physics." Artif Life 9(1): 21-40.
(Very good paper showing that with the proper enabling environment and rules, you can get self-replication. The applet lets you see it in action.)



http://www.nature.com/nature/journal/v437/n7059/abs/437636a.html
Griffith, S., D. Goldwater, et al. (2005). "Robotics: self-replication from random parts." Nature 437(7059): 636. (Very similar to the work by Hutton, but these folks take it into the real world. Here, instead of simulating the process in a virtual world, they've done it with small robots on an air table. Excellent video under Supplementary info.)
Advertisement
Thanks for the links, I'll take a look later.


Here is what is the problem I'm having: I don't know how to make a self-reproducing algorithm in my 3d system.

Before I know what functions I will assign to orbs, I have to know how it will reproduce itself, and then I will figure out what functions I need.

This self-reproducing algorithm has to read itself in 3D SPACE and reconstruct the exact same structure of orbs and links. So try to imagine this - it is an algorithm, represented in 3d network form, that is reproducing a copy of itself, while morphing and shape-shifting because of the things that it's doing.

That's a very complicated task... the concept is actually harder than how DNA reproduces itself because DNA holds information in an essentially straight line (even though it is in 3d space), meanwhile my 3d system is not even a tree but a complicated mesh of orbs and links.


What is the purpose of all this? I am not trying to find a solution to any problem, so I have no criteria for a fitness-evaluator. This project is purely for entertainment and thought-stimulation. I am creating an open-ended evolutionary system. The organisms will reproduce through their own means, and there will not be any system that selects which ones are the most fit, like in real life. Instead the selection of the fittest will emerge itself in the system. There will be a large but limited number of orbs in the system, and as more orbs are being requested through reproduction, older orbs will be removed. What will the results of this? I predict that at first evolution will favour those algorithms that are simpler and reproduce the fastest. And then I predict that there will emerge an algorithm that is more complicated than the first but will be faster at reproducing because it will be construct several copies of itself at once. And then I predict there will be a very simple, parasitic algorithm that will invade other algorithms (in 3d space) "rewire" them in a way so that the host algorithm is tricked into reading and reproducing the parasite algorithm instead of itself. But that's just fantasizing, and the real results will probably be much different from what I've predicted.
I just got an idea from DNA - maybe a part of the algorithm will break off from the rest of the organism, and then copy this chunk that it's broken off of?

Mmmm... but then how do I get it to reproduce this piece that's broken off...



I need ANY working idea for how to make a self-reproducing 3d-mesh/algorithm/organism. Once it's working and reproducing, I can introduce random mutations into the system, and eventually it would create other ways of reproducing.... But I need a complete and simple idea. I've been racking my brain trying to figure this out.


I could have just made a text-based evolutionary system based on Core Wars where the algorithms are stored as a sequence of commands, but I don't want to because I want to be able to point to a part of the screen and say "Oh, that's a parasite, and its rewiring that organism there, and that organism over there looks like a mutation of the XZ-Alpha-3 type because it has that unique triangle-shaped array of orbs"...
Take a look at the JohnnyVon demo. You might find some inspiration there.
Hmm... this is just an idea that popped into a tired mind, probably inspired by the X-like shape of chromosomes, but why not create a double function, each half of which copies the other half as part of its functionality?

For that matter, why nit start with an algorithm that does nothing but reproduce itself with mutation, and let that evolve - you may find that other functions arise as it evolves.

MWAHAHAHAHAHAHA!!!

My Twitter Account: @EbornIan

This topic is closed to new replies.

Advertisement