3
« on: February 16, 2009, 10:00:16 PM »
I was sort of depressed when I made my first paragraph-less mushy post, but I've decided that starting my own project is a poor decision. I could help with DB3, as long as you aren't serious about the 3D thing. That seems to be what mostly put me off. It would make every other part of the program many times harder, but I suppose you've thought about this more than me already. Anyway, I've looked at your ideas so far, and I'll just ramble and hope some ideas emerge:
Similar to certain compression algorithms, each bot would have a "library" or "table" of body parts, such as an eyespot or motor. It would be defined by a polygon, perhaps with enforced symmetry, with each segment referencing a part in the library. Mutations would jitter the points defining the segments, and the length of the segment would determine how powerful that part is. Larger eyes would see farther. Larger motors would push harder. The library would also define an efficiency for the part, which would be some sort of ratio between the cost for each part at reproduction and the cost to use it. A motor on the back of a small prey bot would be inexpensive at birth but expensive to use, since it wouldn't be used much except to run from a predator. A predator bot would have an expensive motor at birth but cheap to use, since it would move around chasing so often. Other parts would work similarly. Part 0 would be the standard skin, which could have toughness, color, friction, bounce, or whatever. A high enough friction could become a sticker for parasite gnat bots. Color might be visible to advanced eyes, or perhaps each eye would be sensitive to certain color ranges. An eye might only return a positive number if it sees green, for plants. This brings me to the hardest part of the whole thing, which seems to be necessary to make truly interesting evolution bots: a neural network. They are very complicated, but I think I have a simple way to make them work using matrix multiplication. The size of the table would be proportional to the square of the number of line segments on the bot, plus some. I'll explain later. It might not work. I haven't had any way to test it yet, but it seems robust and computationally efficient. Each part would get its own "neuron" which would serve as input/output/both for the part. The eye neuron would respond to the eye seeing its favorite color. The motor neuron wouldn't really serve as an input, but move when the other neurons influenced it. Perhaps the motor neuron may respond when the bot smacks into a wall. The skin would respond to touch. A chameleon bot might be able to change color. If an eye is attacked, the neuron would max out with pain. A poison spot might release poison when its neuron is excited, respond to touch, and therefore release poison when anything touches it. A plant might have photosynthesis spots for skin. A part could be a mouth, which could pull other bots when its neuron is activated and respond to taste, or negatively to poison. That way it would automatically "swallow" if it tastes food or spit out poison. The sticker could simply respond when it sticks to something. The sticker would be very helpful for any multibots, being able to make a circle easily, since other shapes would be impossible if the stickers were placed correctly. Blobs would be even easier. Mutation would be simple and robust, change the library value of a segment here, split a segment in two there, switch two library parts, delete a part, jitter segment points, shuffle this, randomize that, whatever. Sexrepro would work pretty well, too. If a part referenced a library position that didn't exist or was out of range, it could be expressed as part 0, or perhaps modded around. This would even allow for recessive genes and more interesting hybrids. Hybrids from completely different species wouldn't work almost every time, which is good. They would die a mutanty death. Bots could also have specialized repro spots, which wouldn't copy all the genes. Perhaps a bot might want to reproduce a small, sterile, simple, cheap, suicide/search minibot. It could perhaps copy the mouth and motor only. This would greatly encourage multibot specialization, with starting "stem cells" that systematically produce simpler bots around it with partial DNA. I need to wrap this up, this is one of the longest forum posts ever. I think that's about all. Fluid dynamics is too hard, and would go with the env grid. There must be a better way, so I'll think about it. Oh, I almost forgot: the neural network is able to learn and adapt faster and smarter than mutation. I think this about covers it. The relationship between mutation and learning is very important. If you've gotten this far, I congratulate you. I'll see what I can do with what you've got so far if I happen to find a few hours of free time lying around. Could I borrow some paragraphs from someone so my posts aren't all in one blob? If you have any questions, read it again. Maybe even three or four times. Five couldn't hurt. I haven't said anything useful for a while now, so I'll push the Add reply button now.