You found it!
"Others, going about it in the opposite way, thought the first thing to do was eliminate all worthless books. They would invade the hexagons, show credentials that were not always false, leaf disgustedly through a volume and condemn entire walls of books. It is to their hygienic, ascetic rage that we lay the senseless loss of millions of volumes. Their name is execrated today, but those who grieve over the "treasures" destroyed in that frenzy overlook two widely acknowledged facts: One, that the Library is so huge that any reduction by human hands must be infinitesimal. And two, that each book is unique and irreplaceable, but (since the Library is total) there are always several hundred thousand imperfect facsimiles - books that differ by no more than a single letter, or a comma. "
Recent community posts
You found it!
The music is "Comfortable Mystery (1-4)" by Kevin MacLeod. You can download it over at incompetech.com. It's weird, in my mind I had credited the music in the settings but I just went back and checked and it seems like I forgot to do that. I'm going to add that in a future update.
"Isn't the program supposed to preserve the best creature and so the drop in fitness shouldn't happen because of that?“
Yes, the best creature’s brain will be included without any modifications in the next generation if you have the setting enabled (I’ve also tested and verified this). You’re right, this should theoretically prevent a drastic fitness drop. Maybe this is also related to the behaviour change bug.
"Isn't the simulation deterministic so the same creature with the same brain should always behave exactly the same way?“
The neural network is fully deterministic so yes, the idea is that the same brain should always result in the same behaviour. Apparently though, this doesn’t always happen, for which I have no explanation. The only part of the full code that isn’t deterministic is the mutation and mating logic (the creatures that get picked are based on weighted randomization), but this has nothing to do with the brain during the simulation.
The part that is not under my control is Unity’s physics system, which could have something to do with the issue.
"Maybe the best creature is picked but for some reason some other creature is being displayed?“
The way that the best creatures logic works is the following: At the end of every generation I store the encoded brain (as a string) of the best creature in a list. When a „Best creature“ needs to be displayed (either manually or automatically), I pick the respective encoded brain, instantiate a new copy of the body, decode the brain string (chromosome) into an actual neural network and apply that to the body. (I also verified that the creatures always get the same brain that the best one of the generation had - even when the „Best creature“ doesn’t move, it has the exact same brain as when it used to be moving)
"Also shouldn't the worst creatures be erased from the population and so there shouldn't be such a big gap between the best and worst creature?“
The worst ones don’t get completely erased but they have a very small chance of passing on their genes to the next generation. It can also always happen that you mate two good creatures and then mutate a section of their brain that then renders the whole brain useless and results in a really bad creature.
"You said that the bug doesn't happen often but for me it happens all the time. As you can see in the video the "best of" screen never shows anything other than a creature falling on it's face.“
I mean it doesn’t happen that often in different simulations. Once it happens in a certain simulation then it seems to persist for the rest of that simulation without going back to normal.
"Are you the one who wrote the code behind the neural network or are you using some libraries for that?“
Yes, I wrote the network (and everything else) myself without using any libraries. The whole point of this project to me was to learn the basics of neural networks and evolutionary algorithms and have something to apply that knowledge to and playing around with.
"And one last thing. Is there any chance of you releasing the source code to public?“
I get asked that quite often and I’m actually surprised that nobody just tries to search for it, because you could easily find it in about 20 seconds. The source code is and has always been on my GitHub. https://github.com/keiwando/evolution
The project does not have an open source license, so the regular copyright stuff applies. You can obviously read through the code or play around with it for personal use though.
"Hmm, may it be that the reason for the bug is that, you are reseting physical structure of creature but not it's brain at the start of "the best" simulation? Same reason could be the cause for that fitness drop.“
The brains / neural networks have no state associated with them that would need to be reset. The networks always get encoded into strings (which is just an encoding of the weight matrices), then these strings are used for mutation and reproduction and then the new strings are decoded into networks to be applied to the new set of copies of the body.
(I commented this underneath the video already but I'm reposting it here so other people can read it as well. The comment might have also landed in your YouTube spam filter.)
Thanks a lot for the video! There is certainly a bug in here, but it's not really what seems to be the 'obvious' reason. In fact, I tried to solve this bug alone for a couple of days when I had time to work on the 2.0 update but I didn't manage to figure out what's going on.
That being said, I did a ton of testing and know certain things that are definitely not causing the bug. In short the problem is this: Sometimes the creatures in the "Best of" scene don't behave the same way they did during the actual simulation, even though they have the exact same brain as the best creature of that previous simulated generation.
I understand that when you (or anybody else) looks at the behaviour the first thing to think is: „The simulation clearly doesn’t pick the best one / It picks one of the bad ones.“ A lot of people say that. The real problem is that this is not the case (It would be really nice if it was because that would have been easy to fix).
This is definitely not the case though. The simulation consistently picks the creature with the highest fitness score of the generation as the best creature and stores that brain (in chromosome form, so as an encoded string). The fitness scores are also assigned properly. This is why 1) the creatures evolve at all and 2) the reason why you were seeing relatively high fitness scores (~17%) being displayed in the best creatures scene, while the „best creature“ was just falling over. It’s because the same creature (with the same brain) performed well and actually got 17% fitness during the simulation. It just for some reason doesn’t want to move when you put it in the „best creatures scene“. <- This is the really annoying bug that I’ve already tried to fix for days, but the problem is that I have no idea why this might be happening at all, so I can’t even consistently reproduce it.
As you have probably also noticed this doesn’t happen all the time. Most of the time the best creatures perform exactly the same as they did during the simulation and everything is fine. But that just makes it harder for me to find out the reason behind the bug. So if anybody can find out how to consistently reproduce this issue (instead of just randomly witnessing it) that would be of great help!
Another way to tell that the best creature is actually behaving differently (compared to when it was simulating) is that sometimes when this bug happens (not in this video) you can see that all of the creatures during the simulation actually walk - some better, some worse, but all of them walk - whereas the bugged out best creature just wiggles or falls over. This shows that this isn’t a matter of the wrong creature being picked but it’s actually a change in behaviour of the best creature (without any apparent reason).
That’s as much as I can say about this bug. The thing to take away from this is: While this bug is highly annoying and definitely something I’d love to be able to finally fix one day, it doesn’t affect the outcome of the simulation at all. It’s something that purely happens on the „best of“ scene.
Now you might ask yourself, well then why did the fitness score randomly drop from 17 to 5%?
This could have a lot of different reasons so I can’t say for sure why that is, but I’m pretty sure it’s unrelated to the above bug. Not only does the fitness drop „randomly“, it also goes back up as you can even see in this video. Additionally, the fitness neither drops exactly when the best creature bug happens for the first time, nor does it drop only when the bug occurs. Sometimes you can see these fitness fluctuations between generations without the bug even happening at all.
My current guess is that the creature brains have reached a point where you have (sort of) two groups of creatures. The ones that are doing pretty well at walking and the ones that can barely walk at all. Now when the next generation is created you can end up mating good and bad creatures which could cause the new creatures to receive one part of the bad creature’s brain and another part of the good creature’s brain. This could result in a bunch of creature that can’t walk at all (just like we’re seeing it in the video). However, the brain information of the previously good creatures is not fully gone; it’s still in the brains of the current generation. Therefore, during the next mating process you can still end up with creatures that receive both good brain parts and then „know“ how to walk again.
This is just my guess as to what might be happening here - especially since it seems to be happening in cycles and the good behaviour always keeps coming back after a certain number of generation after the fitness drops. The important thing is that this is unrelated to the bug described above and most likely not a bug itself.
That being said this bipedal creature is pretty amazing when it walks. Would you be okay with it if I record a little gif of one of them and add it to the collection at keiwando.com/evolution-gifs ? I would link back to this video of yours or another video/gif you might want to make yourself with this creature design.
That sounds really interesting and would probably improve the behaviour of a lot of creatures but I'm going to be honest: Implementing this would be quite a lot of work so it's probably not going to happen.
To be a little more specific, parts of the code that would be affected by this would be:
- The creature building logic. I'd need to have a way to figure out which muscles are a symmetric pair. (There are a bunch of edge cases and problems that come with that)
- The creature saving logic. I'd need to add this additional information about symmetry into the save files, which would then cause me to have a new save file version which needs to be distinguished from the old ones.
- The runtime logic of how the brain connects to the muscles.
- If I implement synchronized symmetric muscles, why not just allow the user to pick arbitrary groups of muscles that will then receive the same brain outputs, instead of restricting it to symmetric designs.
This last point is actually quite interesting and could lead to some really cool results. I'm now a little bit more tempted to do it. It's still going to be a large amount of work and is most likely not going to happen in the next year or so because I just don't have any time, but maybe with the next big update (if there will ever be one).
I've been really enjoying seeing all the different creature designs you've come up with, so I decided to make a small collection of gifs of user created creatures over on my website: http://keiwando.com/evolution-gifs.html
If you've created a cool creature and would like it to be featured in that collection you can send me a gif and I might add it to the list. Just link them here on itch.io or send me an e-mail at email@example.com
Important: Here are some things to consider if you want to submit a gif. I will assume that you have read these points and are okay with them if you decide to send something in! If you do not agree with any of these points, don't send anything in.
- I will download the gif, compress and potentially resize or crop it in order to lower the file size as much as I can. The optimized gif will then be hosted from my website and not where the original was hosted.
- I will add a link to every gif that takes you either to the original or to a different link you've sent me (together with the gif link) where the gif is taken from.
- Example 1: You have made a YouTube video and want to submit a short gif extracted from that video. Send me a direct link to the .gif and a link to your YouTube video. If a user clicks on the optimized gif in the gif collection, it will take them to your YouTube video.
- Example 2: You only send me a direct link to the .gif. If a user clicks on the compressed gif in the gif collection, it will take them to the location of the original.
- I can't promise that all of the submissions will end up on the website. This can have several reasons:
- I didn't get your e-mail (maybe because it ended up in my spam folder). If you don't want to run into this risk just link the gif right here.
- The gif was too big and I wasn't able to compress it to an acceptable file size.
- Nothing even remotely interesting happens in the gif. If your creature just sits there and does nothing, chances are high it will not end up in the collection.
- I didn't have time to update the website yet. I will add multiple of them at a time whenever I have some free time and nothing else to do (which doesn't happen too often at the moment) so please don't expect your submission to show up any time soon in the collection.
- If the custom link you submitted together with the gif doesn't actually lead to a place where the gif is taken from, is shortened in a way that doesn't immediately show where it's going to take me to if I click on it or is in any other way inappropriate, then I will either directly link to the gif itself or not include it at all.
- Any other arbitrary reason that I can't think of right now but I'm sure exists.
The change in lighting is the only practical way to find it but you also have to get lucky. The easter egg is something (relatively big) that spawns inside a certain radius from your spawn point in one of the rooms. It's most likely not going to spawn close enough for you to see it immediately (but it might) so you'll have to get lucky and start walking into the right direction (without knowing it at first) until you see a change of lighting. If this wasn't a just a simulation you'd also feel a change of temperature...
This is the current fitness function for the running task:
fitness = Mathf.Clamp(creature.GetXPosition() / (MAX_DISTANCE * SimulationTime), 0f, 1f);
The fitness is directly proportional to the horizontal distance that the creature has travelled, the top speed has no effect.
I'm going to look into this to see if I can reproduce this the next time I have time to work on this project again.
There is no builtin restriction that would prevent the creatures from being able to walk by crossing their legs over. However, walking that way is much more complex and requires a very fine tuned brain that is able to perfectly balance the whole creature during the transition between legs.
Therefore it's much more unlikely that a creature will learn how to do that in a short period of time. Instead, they will optimize their behaviour towards a local maximum where their strategy of walking still gets them moving forward at a certain speed (most likely not as fast as the 'obvious' way they should be doing things) without the need to worry a whole lot about balancing all the time.
You can always get lucky with a creature that is really good at walking using a highly complex movement pattern, it's just fairly unlikely to happen.
All three of these scenarios you've described make me strongly believe you jumped down the hole in the middle of one room and landed on one of the floors below. Is that true? If so, then all of the things you see are expected. Trying to get to a room without using the stairs will "break" the library.
The reason why I'm not loading the floors if you jump down the center is because the simulation very quickly wouldn't be able to keep up loading with the speed at which you'll be falling. You could keep falling into the abyss forever and just have the whole thing lag like crazy. I also think jumping into the hole is currently a very convenient way to quit the application on desktop versions.
I guess I could have it load the floors if you fall up to two stories, but quit if you fall through more. However, I don't really see a huge benefit in this feature and I currently also don't plan to release an update anytime soon.
That being said, if this happens even after you've only taken the stairs then that's most definitely a bug, so let me know if that's the case.
As long as the fitness change isn't too big I'd say things are going as to be expected.
The "Keep the best creatures" options means that the next generation will always contain the chromosome of the best performing creature of the previous generation without any crossover or mutation. Because the creature movements are based on many different factors, it is very hard (if not impossible) to guarantee that the same creature with the same brain will behave identically to its last run.
Even very small changes in one of the inputs or outputs can sometimes cause a fairly big difference in the behaviour you see. The difference between landing a jump in a recoverable and smooth way and tipping over can sometimes be the difference between extending one of the muscles to 53% or 54%. This is also why you can watch a creature that has a seemingly perfect strategy of moving its limbs in a steady and repeating pattern trip up after some time before then recovering and going back to its routine. Sometimes they also can't recover a little fall like this because their brains are only optimized to work with that one steady pattern. If anything slightly changes, the brain might not be able to react to it properly and instead only cause everything to get worse.
Your creature might have gotten lucky in the previous run or it might have simply gotten unlucky in the following run. Either way, as long as the performance doesn't just rapidly decrease by a lot, things don't seem to be broken.
By the way, a fitness of 20% in generation 5 is pretty great if you ask me. A running fitness of 100% is ridiculously difficult to reach, as long as you don't use the glitch of connecting multiple body sections only through muscles instead of bones (And reaching 100% with a glitch really shouldn't be anything to get excited about)
Surprisingly enough I get this request quite frequently. Being able to manually control the creature goes completely against the whole point of the simulation, so that's probably never going to happen.
Thank you very much, Dannii! I really appreciate the support and I'm glad you like the simulator so much!
The "brain" of the creatures is an (artificial) neural network. The concept is loosely based on the biological neural network, where you have lots of neurons that are connected to each other by synapses. Neurons can receive signals and send out new signals based on the ones they received. In an artificial NN (ANN) the synapses (connections) are represented by weights. They essentially determine how important the incoming signal through the synapse is for the final result, aka. the outgoing signal that's going to be produced by this neuron.
In our ANN we have multiple layers of neurons. All of the neurons between two layers are connected to all of the neurons in the respective other layer. The information flows from left to right (with respect to my visual network in the settings). The information starts out as all of the input values that describe the creature's current state (height, velocity, number of points touching the ground, rotation...). These inputs then get passed into the neural network - each of them into one neuron. This is why I wrote "One per Input" in the visual network, just to simplify it a bit. The number of inputs depends on the task and you can see the exact number of inputs neurons if you look at the stats of the best creatures.
After the information has filtered through the network it reaches the output neurons. We have one of these per muscle. Each output value controls the amount of contraction/expansion of exactly one muscle.
Mathematically the network weights are represented by matrices so most of the calculations boil down to simple (but not very efficient) matrix multiplications. The number of nodes (neurons) in two consecutive layers determines the dimensions of the weight matrix. If you have two layers with 10 nodes each, the weight matrix between those two layers is going to have the dimensions 10 x 10, so it's going to contain 100 entries. If you have two layers with 100 nodes each (which I wouldn't recommend) that would result in a 100 x 100 matrix with 10000 entries. This can have a pretty severe performance impact relatively quickly.
The matrix weights are the things that ultimately determine the behaviour of your creature. The brain is going to "make it's decisions" based on the weights between the individual nodes. The genetic algorithm therefore tries to optimize these weights to find the best possible creature behaviour. If you have a very large network, then you're going to have lots of different weights that all need to be optimized through trial and error. The more weights you have the more likely it is that they might counteract each other and the longer it's going to take for the brains to become optimized. I've never actually run a simulation with a very complicated network for long enough to see if the creatures learn to behave significantly better than the ones with a smaller brain or whether they both converge towards the same behaviour. I'm leaving that to everybody using the simulation to maybe play around with.
I hope that I was able to clear things up a little bit :)
The first issue will definitely be fixed with the next update.
As far as the second issue is concerned, I can assure you that the best chromosomes are never discarded. The creatures in the best creatures scene always have the exact same chromosome / brain as the very best creature of the simulated generation. If the creature for some reason behaves significantly worse in the best creatures scene than during the actual simulation, then this is an issue related to something else. (In fact, I thought I had fixed it with this update after spending three days on this bug)
What I'm trying to say is that the algorithm currently properly sorts the creatures and picks the best chromosomes and even if you see that the "best" creatures are standing still, that will not affect the ongoing simulation.
"I had a batch of climbers, one of them fairly quickly climbed up pretty fast and in the next batch it was gone." Do you mean it wasn't in any of the batches of the following generation or it just wasn't in the very next batch of the same generation? (You wrote batch so I'm assuming you were using the "simulate in batches" option)
I'm assuming that only happens when you modify a creature that was loaded from a save? If so then this bug must have existed ever since I introduced saving and loading (I think I know why it happens). I'll put it on my todo list for whenever I'll have time to work on the next update.
When you say "more static" do you mean that they move less in general or that the bones feel more rigid? Also, do you only experience this when loading old evolution saves or also with new simulations?
The total number of layers is capped at 10 so there should be at max 8 intermediate layers with 100 nodes (that's still quite a lot). Are you sure that the settings don't open at all? What happens if you wait for a bit?
If waiting doesn't help the only option I can think of would be to delete the PlayerPrefs file. (Follow the path described in the link - the company name should be my name and product name should be Evolution)
No, I currently have no plans for a paid version. I've just released version 2.0 with a bunch of new features and fixes, which is available for free for everybody to download. A paid version would also require me to come up with some advanced features that would only be available in the premium version. I might do it at some point in the future but probably not anytime soon :)
Thanks a lot!
Unfortunately I already have couple of other projects (in addition to this one) and quite a lot of university related work going right now so I really don't have any time left to work on something else in the near future.
Best of luck with your project!
Hey Wick, thank you so much for giving me all of this great feedback! I'm glad you enjoyed the simulator.
I'm currently working on the next big update (v2.0) and I've already implemented a bunch of heavily requested features:
- You'll be able to move joints after placing them
- There's a grid option to help with symmetry and joint placement
- You can delete saved creatures and simulation files
- Adjustable simulation settings during the simulation (time per generation, mutation rate ...)
- Customizable Neural Networks (You'll be able to decide the number of layers and the number of nodes per layer)
- I've also added the ability to simulate each generation in multiple batches which can be useful if you're running the simulator on a low-powered device or if you're trying to simulate rather complex creatures. That means you can for example set your population size to 20 and your batch size to 4 and then it would simulate 5 batches of 4 creatures for every generation (one after the other) before picking the best ones.
- The next version will also store and display more stats about a creature, such as the distance travelled, average speed, weight...
- You'll be able to watch each creature on its own while the others continue to simulate
There's still one last annoying bug that I'm going to have to try to fix somehow before I'm able to release the next version. Hopefully that won't take too long.
By the way, Crescent Loom looks really cool! Good luck with that project!
On Windows you should be able to find the save files at
The files are regular .txt files. Copying them from one computer to another should not cause any problems.
Yes, I've seen this happen and it really bothers me as well. I constantly keep getting comments / reviews claiming that the algorithm is clearly not picking the best one or that the fitness function has a problem but that isn't the case here. Otherwise, the creatures in the simulation scene would also stop and do nothing - but they don't. They continue to evolve like expected. This is definitely a bug with the "Best of Gen." scene and I currently have no idea why it's happening. I'll probably have to figure out a way to "look into" their brain and see why they aren't doing what they were doing before even though they have exactly the same chromosome.
A major problem with this is that I don't even know how to consistently reproduce this issue. As you might have noticed yourself this doesn't happen all the time - in fact it only rarely happens which makes debugging it a lot more difficult.
So if you, or really anybody, could help me figure out how to reproduce this bug, I'd be very grateful!
Thanks for starting this thread!
Great game! 10/10 would pet again. I should be learning for my exams right now but instead I'm petting virtual fluffy pups at a virtual party I don't want to be at. Part of me wants a feature that lets me pet all of the good boys in the dog library as much as I want, pretty much just a room with me and all of the dogs and no time restriction - But then again at that point I probably wouldn't get anything done anymore.
It is currently already the case that the creature with the maximum distance from the ground (measured from the lowest joint) is given the highest fitness score, I'm not choosing the highest center of gravity.
Thinking about it though, I should probably change it to optimize some sort of a weighted average between the lowest and highest joint height, because currently, if there's two creatures - one doesn't move at all and the other one extends itself upwards but without actually leaving the ground - the algorithm gives both of them a score of 0 because they both effectively didn't jump at all. However, it makes a lot of sense to give creature no.2 a higher fitness score because it was a lot closer to jumping than creature no. 1.
I'm going to play around with this for the next update to see what I can do. Thanks for pointing it out!
Yes, in the running mode the creatures will attempt to optimize their ability to move towards the right while in jumping mode they will try to reach the maximum height. The simulation modes are completely independent of each other.
As far as the saves are concerned, there are two different types of saves. Saving a creature (using the "Save" button) will only save the body design. There is no simulation progress / neural network / brain connected to these body saves. The only way to save simulations is to click on the save button in the simulation screen (or tick the autosave toggle). This is then going to save both the creature body, all of the brains of the currently simulating generation and the brains of the best creatures of the previously simulated generations into a separate save-file. You can then load these saves and continue the simulation from the creature building screen.
Note that this save has no effect on the creature body design save file (since the body is also completely saved again into the simulation save file separately). If you start a new simulation and save it again it won't overwrite the old saves (because it's a completely independent simulation and that can have a completely different result even if you didn't change anything about your creature design or the simulation settings). The only time anything is overwritten is if you use the autosave-feature, which just deletes the previous autosave of the same simulation before writing the new one - just so you don't end up unnecessarily accumulating files that you realistically don't want.
The problem is that all of the movements are simulated using Unity's physics engine. I remember that I once tried to increase the timescale in Unity but that messed up the physics simulation so the creatures weren't moving properly anymore. I'm going to try to see if there is any way I could possibly increase the overall simulation speed but I'm not too optimistic about it.
You'll definitely want to make sure that you give the creatures enough time to show their behaviour before the selection process kicks in, otherwise the algorithm has no way of knowing which ones are the best / have the best strategies. One of the biggest mistakes I see people make is setting the time per generation to 1 sec and then wondering why nothing happens. Lowering the time per generation is not equivalent to speeding up the simulation overall.
As far as how many generations you'll want to wait I'd say that depends on the complexity of the creature and also on luck. If your creature is complex (i.e. it has a lot of muscles) then it's going to be more difficult for it to learn how to coordinate all of those compared to a creature that only has one or two muscles. However, since the initial brains are completely random you might get lucky and end up having a couple of creatures in your first generation that already have a decent strategy - in this case you'll see them progress a lot quicker - or you might get unlucky and start with a bunch of creatures that just do nothing at first. If you see them still just do nothing after about 15 generations I'd just restart the simulation and hope for a better group of starting creatures.
Oh the librarians' translation area seems to be above the books. That's actually more of a bug than an easter-egg. If you click on a librarian that text field will show something that the librarian has translated from the books using a variation of a grammar proposed by brddte in a thread in the libraryofbabel.info forum. Every 20 seconds they pick a random section from one of the books in the room they're in and 'translate' it. If they haven't translated anything yet, they'll just say "It's all just gibberish!". If you wait in the same room for about 20 seconds you'll start to see the translations.
As far as the easter-egg is concerned: It's definitely big enough for you to be certain that you've found it in case you ever happen to see it.
I'm just going to give you one hint: If you ever see the lighting change, follow it!
Also, thanks for the donation, I really appreciate it!
Thanks for the offer, I really appreciate it!
However, because I'm going to try to implement many non-trivial features (mostly asked for by users) in the next update, I'm going to have to change quite a lot of the current code and structure and thus, I wouldn't want you to spend a bunch of your time on trying to figure out how things are currently working and maybe even implement new features which then end up conflicting with some of the things I was going to change (And I really don't have the time to try to coordinate this right now).
After I release the next update (which I'm going to start working on in about two months) I'll immediately let you know so you can look into the code and maybe add some features yourself if you like :)
I mean it shouldn't be too hard for you to find the source code right now if you really wanted to see it ;) I just wanted you to know that you probably won't want to invest too much time into this project before the next update, just to avoid any sort frustration in the future.
Also, Is your e-mail firstname.lastname@example.org or email@example.com? I just want to make sure it wasn't a typo :)
There will be a bigger update sometime in the future in which I'll try to implement some of the most requested and non-trivial features but it's going to take at least two months before I'll have time to even start working on it again.
Hey George! I've seen at least all of the default creatures that I've included do pretty well. Here's a gif I made with a couple of those if you're interested: https://twitter.com/keiwando/s...
I also have two different frogger simulations that had interesting results: In one of them they jump forward and in the other one (~gen. 35) they slowly but consistently walk by extending their legs in a pretty natural way.
Let me just quickly add a couple of tips / things to consider:
1) Always let the simulation run for a bit before judging the progress. I say this because I've seen some people build creatures that will definitely be able to do the task but then they don't even let them get to the second generation before saying "This doesn't work. What am I doing wrong?" and going back.
2) As far as building creatures is concerned the biggest tip I could give you is to try to build as simple as possible. Each bone has a weight, so the more bones you use the heavier the overall creature gets. And the heavier it gets the more muscles you'll need to add strategically to be able to move the body. But, every additional muscle adds a degree of complexity to the brain - since there is more stuff to control and therefore also more muscles that could cancel each other's effect out when the brain isn't as evolved yet - so it will take a lot longer to evolve a complex creature with a lot of muscles compared to a simple one.
3) When you start a simulation every creature starts off with a random brain - and therefore random behaviour. So it could technically be the case that most or all of them start out by just doing nothing and not moving at all. If you wait for a couple of generations and there still isn't a lot happening you can also just come back and start a new simulation with the exact same creature. Chances are that at least a couple of them are going to do something interesting, which will then slowly pull the rest of the population to evolve into that direction.
I hope this helped, if you have any other questions please let me know! (You can also read the help section by clicking on the (?) button in the creature building scene.)
The only reason I picked that model is because it was the only free and halfway decent-looking humanoid model in the Unity Asset store. I would have preferred something looking a bit more like a monk but well, there isn't a lot to choose from when you're on a budget :D
The screenshots here are a little bit outdated as well. In the actual game itself you'll notice that the librarians have a completely black shader applied to them, which makes them look more like mysterious 3D shadows rather than creepy monsters out of a bad horror game.