Completely failing to meet the remit of creating a take on a shmup, Kyle Gabler‘s creation manages to be something far more interesting and remarkable. It’s a sort of evolution engine, not something you interact with (it was meant to involve some shooting, but that bit didn’t pan out), but rather something you watch in crazed fascination. Creatures are born with rudimentary movement abilities. Any that reach the right of the screen become candidates for future breeding, those that reach the left are destroyed (as are any that don’t get anywhere within a lifetime’s time limit). The idea is for each generation to evolve such that those with the greatest potential for right-screen-reachening are most likely to pass on their genetics to the next generation. It’s survival of the fittest displayed in a really clear way, that should probably be used in every biology classroom for the rest of time. My guys are currently in their 900-and-somethingth generation, and appear to now mostly have trunks for greater rightward dragging. I’m proud of them!

Created by Shalin Shodhan, EGP founder and one of the core team of engineers on Spore, it’s possibly the most ludicrously pleasant take on the shmup ever made. You have to shoot rabbits with guns. Sounds less than pleasant, right? To make them increase in number. It’s a bunny making game! Shooting them with one of four weapons is a novel take on a breeding programme, but it seems to work. The aim of the game is to have 1000 bunnies in your back yard, which can be achieved as quickly or as slowly as you wish, with no pressures to threaten you along the way. Which is rather nice, really. It’s almost confusing, to have a game that’s not screaming at you or trying to kill you.

50 Comments

Egg Worm is particularly interesting because it’s only a fascinating experience if you take Kyle’s word about the way the game is generating what you see on the screen. That is, what it’s actually showing you isn’t interesting if you don’t understand what’s going on under the hood of the game. If it were simply a pre-scripted thing, essentually a movie, you’d be hard pressed to be able to tell.

It seems to me there might be something to the idea of games being entertaining because of things you know about them that the game itself doesn’t tell you. I know with a lot of grand strategy games my fascination is with the “under the hood” mechanics far moreso than the visible components of the title.

Forbot is awesome indeed. I would like to play Egg Worm Generation but there is no flash version of it, can’t download files at work or I’ll be stripped and hung out the 5th floor window by my pinkie fingers ;P

The Egg Worm Generator is fascinating. More work must be done on evolving AI. The possibilities for this technology defy the imagination.

I personally find virtual, in-program AI to be more interesting than robot AI. Robots are limited by physical space, energy consumption, materials needed, etc. Virtual-space AI is free of those limitations.

Sadly, while you’ve got a lot more freedom in a simulation, the creatures you evolve can only work with what you’ve knowingly given them. In this case it’s a simple win/lose system with a time limit. I recall reading about an evolutionary system a few years ago using simple transistors in groups in an attempt to evolve a useful timer, it came up with a number of ways of doing this with groups of AND/OR/NOT gates on a chip. The thing is engineers could only see how a few of them worked, and a number of them had gates that weren’t apprently connected to anything, but the system failed to operate when they were removed.

Regardless, it’s a fascinating way of playing a game (Or not in this case), perhaps it’s time we had a look at N.E.R.O. (Neruo Nvolving Robotic Operatives I think) again to see if anyone’s trained a useful army yet.

There’s a significant bug in that your top-speeders’ generations are wrongly reported. I don’t know if it’s mod(something), but I just watched a new record set at gen 278 get reported as gen 34. Until I noticed that I had been growing increasingly concerned as the records seemed to bear no relationship to time or any normal distribution.

@Hypocee, I noticed the same thing, but figured it might be that there is some intergenerational competition thrown in as well, since it seemed to me some critters were entirely different than others.

Mine progressed from simply throwing themselves at the right (usually), to throwing and rolling, to sort of walking with what looked like six legs or four legs and graspy-bits in front. Sadly, it crashed around gen 150.

I feel sorry for the one’s which hatch early, are going in the right direction and clearly have potential, but are stuck behind the mass of unhatced eggs and then the sprawl of less able worms who fluked a better starting position.

The “winners” definitely come from a ‘family’ ie they are broadly similar

In general the fastest ones seem to come from the age range around 36 (29 to 42). I didn’t bother to do the standard deviation or mean or whatever – might be interesting but only if i wanted to take this seriously

I’m not sure it actually ‘optimises’. Which does throw up an interesting point:
—-

You will reach a point where the critters are ‘good enough’ to survive and will therefore not necessarily get any better.

You might get a group of critters which will all survive and pass on their genes but they might be slower than when you run the sim again.

Unless the time limit gradually lowers you won’t optimise you will only find a solution which works in the given environment.

—–

I had never really considered this before (though its pretty obvious really): Evolution STOPS. Once you have filled your niche you stop evolving because there is no point. Or rather theres nothing to kill off the less efficient critters.

So its external factors changing which drives evolution. I would be interested to see the timer start at say 1000 secs and count down to… …well zero I guess. I expect you would get extinctions then but I wonder if you would actually get some uber critter which leaps across the screen ridiculously fast…

@Hypocee & Ishy
The generation counter at the top of the screen counts how many generations since the simulation started, the generation on the scoreboard shows how many ancestors that specific worm has had.

Ronald Fisher considered the role evolution played on organisms which were already highly adapted to a niche. He realised that while the organisms may not be showing significant generation to generation changes, they were still subject to strong, stabilizing selection. In short, and mutations which cause deviation from the ideal need to be removed.

In practice you also have a few areas in which variation is always being selected for, particularly in the case of the immune system. In these situations, selective pressure acts to maintain variation.

Personally, I would love it if you could control spore not directly, but instead influence the creature to evolve in different ways by changing the world around it. Say, you make its prey more aggressive and fight back, then your creature will NEED to also be more aggressive so it doesn’t starve. It’s just an idea, and it’s not going to happen, but I think it would be a lot more interesting than Spore is at the moment.

It would be interesting to know the genetic factors that can be passed on in each worm. But I guess that’s fairly nerdy. It’s funny how this sort of thing brings it out.
Sometimes the evolution gets stuck in a rut, as it were and you have to restart it. A fairly dominant species of mine made sure the others didn’t make it after some early success. But it became clear after a few hundred generations that it was too complex and couldn’t get any faster, yet no other major variations could break the stranglehold.
I resent and tried agian and after a couple of thousand generations ended up with these two piece worms, one part shapped like a shoe, the other a small block spinning like an outboard motor that catapulted it forward. (I forgot how fast they were going but it was quick)

This reminds me of fooling around with the Neuralbot in Quake 2, back in the day. That had a number of bots you could set (according to performance) each with its own evolving neural network governing behaviour. The behavioural loadings were all random at first. You could run around and execute the particularly stupid if you wanted to as well.
It was bizarrely fun to fidget around with. It took a long time to get truly notable results though (not just stuff you thought was intelligent). It turned out that, despite having proper fields of view and being able to utilise them (theoretically anyway. It was a complex neural network by default and you could even expand on the number of neurons and synapses if you wanted to) the bots couldn’t really cope with up and down, or behaviours that dealt with that were never passed on. The best breeding grounds were big, flat levels all on the same plane with some obstacles (on more complex levels you’d get all sorts of amusing things like one I did where the level was a bit overcrowded and the bots often spawned in the same place and some evolved the great skill of grabbing the grenades and holding them until they exploded, killing others around them). On those flat levels you really saw results. One guy had demos from various generations showing the bots at the start randomly jumping around and firing like some demented dance party. Then a few thousand later they’re running around perfectly, zipping between obstacles collecting weapons, killing each other (they favoured hitscan weapons for fairly obvious reasons). It’s quite cool. You could also dig through the bot files and inspect the neural nets youself and edit them if you wanted to. The failures in bot behaviours were illustrative of just how many variables you need to get good complex creatures in the world (I forget exactly how many neurons these things generally had, but it was a lot and it was plainly not enough) and also the necessity of hard coded behaviours in order to survive and clearly separate, demarcated systems for handling the various kinds of stimulus (as an open system can too easily not pass on good behaviours).
Anyway, I agree there’s a lot of room for this stuff in gaming. Some sort of Spore-ish spin off where you breed your own creature and then make them fight (or even live) with others on the net or something. Endlessly amusing.

I’ve had abortive attempts at evolutionary programming. And seen some truely impressive applications. From the programming of a flapping robot to artificial pack hunting behaviours. The group behaviours are particulary interesting when the groupings are not arbitry and groups may turn on each other, or abandon the weak or old.

Hmm. I have so far reached generation 400-ish, and my beasts seem to be slowing down. I had loads in the high teens m/s, and a couple of low 20s m/s, but now seem to be averaging somewhere bwteen 7m/s and 12m/s…

CS, if my run’s typical that’s from the eggs getting much smaller over time. It means fewer worms blocked, but also fewer luckily catapulted off the slope at ludicrous speeds. Less random in both directions.

Herpers, I’m happy to believe you but I don’t understand. Presumably every organism after the second generation has ancestors = $gen-1?

My run’s seemingly hit a local maximum at basically the simplest mobile form you could imagine, a square body with a rectangular head that waves back and forth to drag and/or wheelie-hop through rotational inertia.

Going strong at generation ~7800. The record speed is 672,44 m/s. The lowest displayed is 288,11 m/s. I don’t know if they started bugging a while ago or what happened, but somehow they started popping +200 m/s frequently. Before that, they barely made 30 m/s. I lost my interest after a short while, because they don’t really evolve. They just “grow” a block or lose one, and that continues infinitely – booooorinnngg. I just let it run on the background.

Trite: That’s called a ‘local maximum’, and it freezes the population in place in worlds (like this one) where the determinants of success are simple and unchanging. If you start again, you may explore to a different local maximum.