That's great! I loved watching this, thank you!
By the way, you can't connect more than one muscle between the same two bones :)
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:
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 email@example.com or firstname.lastname@example.org? 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.