3 ms·
The animated gif in the readme shows extremely diverse lifeforms until a superior 'species' emerges and dominates, with the only notable changes thereafter bein
by nomilk 7mo ago
The animated gif in the readme shows extremely diverse lifeforms until a superior 'species' emerges and dominates, with the only notable changes thereafter being successive superior spawns.
Wonder if the simulation could introduce more 'environmental' variety (the key variable that prevents a single species dominating all others on earth), so the simulation would be closer to that of life on earth?
- keanebean86 7mo agoThis is how earth works too. Humans figured out how to survive in all of earth's ecosystems then bulldozed the whole thing. Those waves sweeping across the grid at the end are different countries becoming dominate.
- cellular 7mo agoWhy is the density greater at equally spaced grid lines?
- quuxplusone 7mo agoYou're probably thinking "one cell = one pixel." In fact "one cell = one 8x8 block of pixels"; the specific pattern of colors in each 8x8 block represents the opcodes of that cell's 64-opcode program. So when the replicator takes over the map, it's changing the image to a repeating pattern of 8x8 blocks. Now, don't quote me on this part, but I think the first replicator to take over is this (minus all the "junk DNA" between the instructions): [}<,]}],<}[ and the second, more efficient, one is: {[}<,]],<}[{ The latter means roughly: --head1; while (*head0) { *--head0 = *++head1; } *head0-- = *head1++; while (*head0) { --head1; // CUT HERE which gets pasted together with whatever cell it's breeding with at the time.
- bob1029 7mo agoWe can slow the propagation speed and increase population size. Another option is to use a metric like hamming distance over the programs to determine if two neighbors should even be allowed to interact. If we can come up with an accurate per-candidate fitness metric, there are techniques like fitness niching that can be much more accurate & flexible. Only allowing candidates within a certain range of performance to interact is one of the most powerful knobs you can turn for controlling convergence speed. Adjusting the niche radius over time is trivial.
- quuxplusone 7mo agoYesterday I played around with the repo and found that (IIUC) one "environmental condition" already present in the simulation is the mutation rate. With relatively low mutation rates, I find that a whole tape filled with `<` is a good "substrate," in the sense that it can sit there stably for a long time until a random mutation puts `,` into one of its cells. Within a few generations, it will have spattered copies of the substrate into all its neighbors. Then they sit until a random mutation puts `,` into one of their cells... and so on. I described what (I think) I'm seeing in https://github.com/Rabrg/artificial-life/pull/1 https://github.com/Rabrg/artificial-life/pull/1 , and suggested in https://github.com/Rabrg/artificial-life/pull/3 https://github.com/Rabrg/artificial-life/pull/3 that random mutations ought to blow away the whole tape rather than modify only one cell of it. However, even with that modification to the rules, I still see the `<` substrate taking over the whole map, except when the mutation rate is very high. (I admit this doesn't make a ton of sense to me.) So, anyway, it's easy to make the mutation rate vary from one side of the map to the other. If you do that right, you can see the `<` substrate take over the low-mutation-rate side of the map, but fail to take over the higher-mutation-rate side. The `<` substrate is easy to see in the gif: it's a rapidly spreading splotch of red with gold noise flickering inside.