Modeling Evolution (3)
Major changes since the last update:
- Multiple organisms can now inhabit the same square. This is a better model of reality. You might
starve trying to live in the same area with another organism, but you’re now free to try. This is
a bit of evolutionary pressure to encourage movement. The shade of the square indicates how dense
the population is.
- The fertility of the landscape is now shaped by Perlin
Noise. I have been amazed by how flexible Perlin
noise is just by tuning some parameters. I have tuned it so that there seem to be some rolling
hills, yet some sudden dead spaces (salt lakes, perhaps) and also sudden lush spaces. Overflow is
- There is now a distinction between carnivores and herbivores. Attacking versus foraging is now a
“conscious” decision in the genome. (If a genome encodes neither, it can slowly absorb energy,
perhaps like a plant.) But how to attack? Yes, organisms can now “see” in some limited sense,
and direct their attacks. I haven’t yet observed deliberate attacks, but it’s now possible.
These carnivorous attacks (whether deliberate or random) are now visible, because they are briefly
outlined in red.
- Organisms now have a “phenotype”. This is just a crude attempt to group similar genomes.
Organisms “see” phenotypes, and they attack based on phenotype. My hope is to eventually create
“herds” or “tribes” based on phenotype. They are still free to evolve in a limited sense while
still remaining in the phenotype. My concept of phenotype is loosely based on
basic blocks from compiler theory.
- Removed prior “artificial” attempts to encourage evolution. Organisms can still send and receive
information, but I’m not encouraging “meaning” on this. The behavior is starting to (potentially)
get complex enough that I am now stepping out as “god”.
- Moving organisms can wrap around the screen.
- Organisms now get to execute their cycles in a randomized order, in a hope to remove some
- Organisms keep a log of their major events. If I ever observe interesting behavior, I want to
rewind the clock and understand the why and how.
A fundamental acknowledgement here is that I am not modeling physical creatures. I don’t have
enough computational power (or intelligence or time) to do this. I am trying to model higher-level
actions, but somehow roughly tie it back into the phenotype so that I might see tribal behaviors.
It’s still enough of a hack-job that I haven’t put it on GitHub. I just toy with it now and again,
with the occasional stolen half-hour. Sometimes a run starts out interesting, but then degenerates
into looping behavior. I think that means I’m either still asserting too many artificial
influences, or (most likely) I don’t have enough parallelism, randomization, and computational
But it’s still fun. Maybe someday I’ll step back in as god, and see if I can evolve religion. Just
kidding; I’m not that mean.