If you have any features you would like to see in a future version of this simulator you can post your suggestions here or just upvote the ones you like the most.
lol yes I just found it. I came here to retract my suggestion :P Thanks for your reply though!
Ok another idea then: maybe you could have an option to let bones slowly evolve in length especially when most creatures are within a few percent fitness from each other.
also it would be fun if you could move the joints design around between generations :P
do not exist a way to change the total population per generation, some times is better start with a huge population, and star to lowing the number of population, for exmaple, i started a spider with 1000 population per generation, using 40 per batch. now after 500 generations i would like low the population and speed up my simulation, becoune now the spider is close of the best way to run.
haven't played it (saw it on YouTube) it's a cool idea. One thing I'd like to see is the creatures have a chance to evolve their structure as well. Like mutate to add or remove joints bones or muscles across generations. Having an immutable body structure doesn't make for interesting evolution over the countless generations
Edit: sorry I kinda misspoke. It's for sure interesting and evolving neural nets are awesome... But it's only half half of the evolutionary process
This might be a strange suggestion, but hear me out... Do not count the first 2-3 seconds in each generation. The reason why? Because each creature is slightly slower because they have to get into position to move, since creature design that the creature spawns in isn't exactly the optimal starting position. For example, who would be faster? A human who started in a running stance, or a human who is started in a sitting position? The reason why I think this should be implemented is because you can basically make any creature faster by a large amount just by increasing the evolution time, and by not counting the first 2-3 seconds of prep time, we would have a more accurate view of the creature's actual speed.
SUGGESTION TO IMPROVE THE A.I. to be a better runner
Like in real life, babies don't start trying to run, they
try first be stand up.
The program should divide the learn moves into 3 steps to lear how to run:
1- STAND UP : this is important to software knowing what is the correct creature position, to kwnon what is theyer foot, legs, head etc.
in this process at some moment we should to able to use a drag force using the mouse cursor, to try desestabilish the creature, or thrown heavy objects in it direction to test and see how creature try stand up with "stranges" forces on it body.
2- WALK: After learned how stay on foot, should now learn how to walk, becouse have a huge diference between walk and run, some animals (like a cat) when they are running, some times (mileseconds) they dont touch the ground and walking have slower moves and software should try to find the best way to consuming less energy in muscles (becouse walking is the most eficient way to move, differently of running, becouse is more explosive moves and higt energy musscle consuption..
3- finally using all the informations from step 1 and 2 to learn how to run, tryng to be the faster as can,
thats it THANKS.
I usually make hyper-symmetrical creatures actively intended to move by rolling; having the simulation make them 'stand' first would mean the simulator would never find the intended movement pattern for my 4-fold mirror rotationally symmetric creations meant to roll. Granted, I realize I am likely an outlier among the playerbase; for non-rolling creations, your suggestion does make sense. If it were something that could be toggled, I'd be fine with it; just as long as it isn't forced on me when trying to make and evolve a rolling creation.
When i think of an "overview of current generation", i mean that you can zoom out with the camera and also move the camera with the arrow keys. And like i said in the post of the walking human (https://itch.io/t/228740/did-anyone-get-a-good-running-humanoid-creature), i "train" my creatures in a special way and for this would a timer be very practicle.
Great game! As a begginer in machine learning / deep neural networks, I have a suggestion that I am sure you considered but it's hard to implement in Unity api. It would be nice if you could somehow implement a gpu acceleration method and let it run in the background, without the need to render it ( and obviously scale up the speed of the game to be more efficient ). This would let us train the creatures faster and see the result afterwards. Good luck in the future!
A possibility to let your computer (especially the gpu) simulate a bunch of generations in just a few seconds/ much less time. For example i have a gpu that just calculates at the beginning of a generation and that even with only about 40-50 % of its capabilities. However i have to wait till the simulations are over.
Edit: Upss... this was already posted by someone else.
I would like two have more control over how to determine fitness. I am not exactly sure of a great way to handle this, but here are 2 scenarios.
1) I was trying to evolve bipedal motion, but the thing keeps following over, then the one that can squirm the best is selected for. I would like to be able to maybe pick a Joint in the creature and stipulate something along the lines of, if this joint drops below a certain vertical height then drastically decrease the fitness of the creature. Hence creating a pressure to select for the creature to stay upright. Also, there are creature that stand upright initially, but they get selected against because following over moves the creature further.
2) When my creature all start hitting 100% fitness, then evolution no longer selects for improvement. For instance I can get 45.63 m/s on Generation 9 and then 12.7 m/s on Generation 57 for the Running Simulation because both produce a fitness of 100%.
Another thing I think may be cool would be to change the fitness equation. For instance, train something to stand upright, then train it to walk, then train it to walk and jump. Instead of having to start at square 1 for each task.
here are some things i would like to see maybe if you like the idea and if it's possible it would be nice if bones were able to curve and bend and if it were possible to place more than one muscle between two bones also place the muscle freely anywhere on the bone and even muscles that begin and end on the same bone i think that could fix creatures not working
i love your Evolution simulator it's super awesome
I think it would be really cool if you could rate the creatures one by one instead of the simulation rating them by a certain thing. Then you could evolve your creature to do more specific things instead of having a few monetary options. Also, there should be a option to make sure that the crautures never just stop moving, because some of them do that and it is really annoying when they evolve to just fall forward and do nothing.
I love the Idea of having stamina and having to find the most efficient way to run. If that ever gets added I think that if you also put in the option to let the creatures get hurt, then they would have to run with slamming any limbs into the ground because that would hurt their stamina. That would be really cool.
Add an option during the generation simulations to create a "target speed", basically a speed that the creature has to reach, and can't go higher or lower than it. This might make for more interesting creatures since you can basically simulate the running, walking, and standing versions of the same creature, without having to add anything else. I got this idea from this video, the "target speed" shows up at the bottom at the 1:30 mark.
So i have been thinking of a way to implement the "choose the best creatures" idea and i think it would be cool if you just got to give the creature a score. The score could be any number, but the higher the score, the better. You could use the same programming as deciding who was best in running, but just plug in the users score instead of distance. The creatures will still try to evolve to get a higher score even though the goal could change. It would be amazing if you put that in. By the way this is probably the coolest simulator i
An alternative type of bone/joint that when it touches the ground greatly reduces the fitness and so lets you get the type of movement you want (for example not dragging on the ground or lunging) more reliably without having to mess with Mutation rate/keeping the best creatures.
Making getting the type of movement you want less time intensive.
I like this, Whitefox2, but I'm thinking a slight variation of it would be better, so I'm going to post my variation in a separate reply and credit you with the original idea. I already upvoted this suggestion. Please look for my "SENSITIVE JOINTS" suggestion (which I will write after I post this reply to you) and consider upvoting it as well. :) Thanks.
A way to delete current generations for older ones in saves, for example, in generation 4, I get the movement that I want, but in gen 5, everything goes bad and glitchy and stays that way for a long time, but I only have the save file for gen 5. So I can delete gen 5 and go back to 4 and hope that it continues like that.
I was finally able to finish this one: http://keiwando.com/evolution/faq/
Hi Keiwan. I really did NOT want to create an account here, but I see no other way to make suggestions. I have several of them. I'm easy to find on YouTube or Twitter (@DonaldKronos) if you wish to talk. I don't know if you will see this, but upvotes are not a good way to judge how well an idea is liked, because those posted later will have been seen by fewer people and had less time to accumulate upvotes. Even so, I'll post a few, each in their own reply in this thread, so that people can upvote them if they choose to, as you have suggested... and I will also look through the HUGE list of replies and try to find some to upvote as well. I don't know if links are allowed here, so I won't link to my YouTube channel, but I have featured your Evolution program in a few videos already.
Suggestion: ALLOW USER TO EDIT A NEURAL NETWORK --- First, I would like to suggest that a way be added to edit the neural net of the "best creature" (the one with the highest fitness score) and inject that edited neural-net genome into the population (perhaps replacing the member with the lowest fitness score. Even if what they're given the option to edit is nothing more than the binary representation to edit, with no explanation of what any bit or group of bits might represent, at least they could try stuff and see what happens.
Suggestion: START WITH OBSTACLE VERY SMALL AND SLOWLY INCREASE ITS SIZE --- For the obstacle exercise, I would suggest in the first generation that the obstacle (or ball rolling on the floor) should be about the size of a joint object. After that, it would increase in size slightly in future generations until reaching its maximum size, which should probably be the size currently used. When to increase the size could be every generation, or every 10th generation, or when a large enough percentage of the population manages to avoid it completely. My suggestion would be to first try increasing it every 10th generation. That way, early success will come more easily and can be improved upon by those members of the population that inherit it.
Suggestion: START WITH A LOW OR ZERO INCLINE AND SLOWLY INCREASE IT --- For the climbing exercise, I would suggest in the first generation that the floor should have the jagged edge that will be needed later on, but should be level or a very shallow slope. I think completely level would be better if fitness it rated based on left-right movement, but if the fitness score is actually based on altitude then small incline would be needed in order to measure fitness at all. For later generations the slope would increase a little at a time until it reached its maximum, which should probably be the slope currently in use. When to increase the slope could be every generation, or every 10th generation, or when a large enough percentage of the population manages to make some reasonable progress. If increased every generation, the increase in slope should be almost imperceptible. My suggestion would be to first try increasing it every 10th generation. That way, early success will come more easily and can be improved upon by those members of the population that inherit it.
Suggestion: ADD RUN TO THE LEFT (AND RUN EITHER WAY) --- I would like to suggest changing the name of the "RUNNING" exercise to "RUN TO THE RIGHT", and then adding in a "RUN TO THE LEFT" which would score fitness based on how far to the left a creature managed to get and "RUN EITHER WAY" which would score fitness based on maximum absolute distance from the starting point. I think this would be great for illustrating that it is the evolving neural network which ultimately achieves the specified task and not the specifics of the body design (although the body does have to at least have the potential).
Suggestion: ADD MUSCLE ON/OFF TO NEURAL NETWORK --- I don't know whether the muscles are simply set to push r pull at full strength or have different levels of push and pull (which I think would be much better, though more computationally intensive), but they do seem to be always either pushing or pulling. I would like to suggest that the neural network should be able to opt to turn a muscle off completely, so it would still have it's passive springy tendency toward its original length but would neither actively push nor actively pull. When set to show "EXPANDING" in blue and "CONTRACTING" in red, neutral or turned off could be shown in purple.
Suggestion: UNBENDALBE JOINTS --- I would like to see a way to give specific joints an "UNBENDABLE" attribute, so that it would effectively allow the user to fuze two or more bones into one "bony structure" with a specific shape and more than one place that muscles can be attached. As an example of how some people might use this, I've seen several YouTube videos in which a person tries to give their creature a "head" which immediately collapses and flops around. LOL! This way they could make a head that at least doesn't collapse. Flopping around is a separate issue. :)
Suggestion: EXTRA SOLID BONES --- I would like to see a way to give bones an "EXTRA SOLID" attribute, to reduce the tendency of bones to apparently change length under pressure. This would offer a way of making structures with more predictable behavior. What I mean by this is easier to explain by example. I've seen YouTube videos in which people talk about using "triangles" as if they are immutable shapes. This way, they could be... without messing with the usual behavior of ordinary "bones" in the program.
Suggestion: STRETCHY/SPRINGY BONES --- I would like to see a way to give bones a "STRETCHY" or "SPRINGY" attribute which would make those specific bones less solid than the way they normally are in the Evolution program. Such an attribute would allow a user to tweak the physics a bit with regard to certain parts of their creature.
Suggestion: SENSITIVE JOINTS --- I would like to see a way to set joints to be sensitive to touching the ground, such that touching the ground would decrease the creature's fitness score. This is based on a suggestion by Whitefox2 about being able to place a ground sensor in bones, and is also an extension of my own idea of being able to set attributes such as flexible bones, extra solid bones, unbendable joints, and so on, which would allow the user to tweak specific details about a creature other than the starting arrangement of how its parts are arranged. This feature would offer a way of discouraging a creature from collapsing onto the ground when asked to climb, or and discouraging certain parts (such as an intended "head") from being used as feet.
Suggestion: COMPETING CREATURES --- I would like to see a way that a user could clone a creature and modify its clone and then test the fitness of both at the same time, with a way to switch back and forth or cycle through the creatures intended to compete in the same activity. Offspring would generally be of one or the other, usually avoiding breeding of neural networks between different body types, but if enough of the parts could be matched up to consider them structurally compatible with each other, their bodies could even be occasionally be included in the process of breeding, producing offspring with, potentially, physical and mental features from both parents. Perhaps the most fit of such hybrids could even be made available in the creature building area.
Suggestion: BODY EVOLUTION --- Okay, so technically the body of a creature in this evolution engine evolves as its designer adds changes to it, but I would also like to see an option to turn on (or off) the inclusion of body mutations in the breeding process which might move a joint a little bit in some direction, switch an attribute on or off such as EXTRA SOLID on a bone, or "UNBENDABLE" on a joint. One such change should not make the resulting offspring structurally incompatible with other offspring of sufficiently similar creatures, so the body could then be included in what's inherited and perhaps exchange "genes" when reproducing in a similar way to what's currently done with the neural networks.
Suggestion: GROSS MUTATIONS --- This is mainly meant as an extension to my BODY EVOLUTION suggestion, but could be implemented with or without it... although it wouldn't make nearly as much sense without it. The idea is that is bodies were inherited rather than only the neural networks, once in a while a body could have a mutation that connects a muscle between two bones (preferably which are connected to each other by a joint, though they wouldn't have to be) or could have a muscle deleted, or perhaps even have a short bone added dangling from an existing joint, or a bone added between two existing joints. Most such mutations would be detrimental, so such "GROSS MUTATIONS" would be turned off by default, but if switched on they would be allowed to happen, the detrimental ones would likely be quickly weeded out. Neutral ones might end up with a few offspring, and the rare beneficial mutations might even end up dominating the population. :) This might actually be very beneficial in terms of autonomously eliminating useless extra weight (such as an unneeded "head" which the brains are not stored in anyway) or muscles which do more harm than good with regard to a specified fitness task.
I'm suggesting the use of the term "evolation", as an extension of the family of words including "simulation" and "emulation". The word "evolation" is formed from "evo" used as a prefix and "lation" meaning local motion or local disturbance and indicating a local system of change. Indicating a system of evolutionary relation as conforming to, generated by, or viewed from the perspective of local conditions.
Environment viscosity, to enable flight or swimming. That is, add optional simulation of air or water or whatever "substance" one might consider the creatures to be moving inside of. A viscosity setting could allow adjustment of such simulated substance to act as air or water or perhaps even something like tar or quicksand.
Allow selection of fitness environment and fitness criteria in various combinations. For example, running criteria (movement to the right) in the climbing environment. (Which might just already be measuring movement to the right, but it what the only example I could think of while making a video and thinking about other things and reading what I'm writing at the same time so that my video will hopefully be more interesting.)
Hey, Keiwan... How about a feature to ignore the first second or the first n seconds of the simulation with regard to the fitness criteria?
In other words, the recorded starting position or other condition with which to compare for fitness calculations would be reset for each member of a batch (or generation) after the chosen number of seconds, one time, to reflect the creature's position or state at that time rather than what it was set to at the beginning of the simulation. This would eliminate (or at least partially eliminate) things like scoring an immediate fall to the right as good running skills, since the fall would generally happen in the first second or two. The setting could default to 1 except when the time per batch is set to 1 second (or less) in which case it would be turned off (set to zero). It could be changed from the Pause screen to any non-negative number which is smaller than the number of seconds per batch.
How about negative fitness scores? For example, if a movement of +x counts as 100% fitness, then a movement of -x would count at -100% fitness. It appears this is already being done internally, but simply not displayed. This would allow creatures which move in the wrong direction to still be compared, so that badly wrong could be distinguished from slightly wrong.
Can we get joints with a custom range of motion? 360, 270, 180, 90, 45, etc., as well as the ability to rotate them before placing. Shoulders, knees, elbows, hips, etc. all have this limitation in nature. I think it would add interesting dynamics to this simulation.
Also, It's probably been suggested before, but can we have stats on how far the best creature jumped, walked, climbed, etc.?
Thanks!
if we could have a button that could cancel a generation that would be great. I have had this problem many times when my creatures just degrade very badly in a generation. Once my creature had got to 4.05 m/s and 36% fitness and I was super happy and excited about the next generation expecting it to go up to like 4.95 m/s or something but nooooooo. It went down all the way to a mere 0.61 m/s and 5% fitness. So it would be great if we could restart generations. And by the way, I have a question. Is the fitness of a creature the percent of chance it has to go on to the next generation?
Make it possible to select points and copy, and also so that a person can choose the dimensions of the building field during creation of the creature, and make that if two bones are in one place create different layers on which these bones are located and the possibility of transition between these layers.
Good day, I would like to be able to create their own obstacle course for the creatures and it is desirable that it was all on my favorite platform Steam and make a workshop where users can download creatures and maps. And to keep all the files and saves in the root folder of the game, I do not like when games and applications create a billion folders, which then can not be removed.
How do you look at the creation of such a project in 3D? Where will creatures need to learn to move in three-dimensional space, taking into account the laws of physics? I understand that it will be very difficult to do this, but I think it would be very cool and interesting to see it.
I'm not 100% sure if this is already possible, but when i was trying to make a worm with a spirng like core to move, i wanted to make it like real worms, but worms have muscles that connect to their "bones" as well as their joints, so i would love to be able to wrap or attach muscles from bones to joints and joints to joints as well as bones to bones.
I have a few ideas that I don't think others have asked for yet.
A level editor with basic shapes, a creature spawn, and a goal to reach.
A file share system for creatures and levels.
Make the grid system in the creature creation subdivide instead of scale to make adding details more fluid.
A 3D version wouldn't be as available for phones but could be interesting for a variation on the game for pc or console.
So, i came up with this idea when doing a climbing simulation thing. We have climbing, but what if we had the opposite: falling? So, the map/thing would be the same as the climbing slope, except it's on the other side of the screen (it's usually on the right so in falling it would be on the left). The goal is simple: fall as fast as possible. The lowest creature in elevation is the winner.
I'm playing with this for quite a while. It's a very interresting and addictive game! I even took the time to test some already existing schematics in nature (like the horse or the cheetah) to be able to compare with real life (the most it can be done hehe). I'll summarise what kind of things that could be improved from this version for a second version (can't wait to see that!!).
The first thing that I noticed is that the friction is too high. We can easily see it when a creature trying to make a foward trust or climb the stairs. Legs easily slip, even if we make feline legs and add some fangs.
Next thing I noticed is that the creature always tries to do the task right away, rather than trying to stand without falling first (reaching equilibrium).
For the task of climbing, the software doesn't care about the space the creature is taking, and can make joints appear through the ground, so making the creature bug instantly. The hill could also have stairs a little more large. Or maybe making the creature start on a flat ground.
I 100% agree with the friction. Most creatures can only move through bouncing because their feet just slide on the floor when they walk. It would be cool to either see settings that change the floors friction and/or having a "stickier" joint or a joint that the creature can use to grasp the ground with.(That way the entire creature doesn't just stick to the ground)
For climbing it would be super helpful if the building screen showed what the starting stairs looked like(along with the running and jumping modes showed the ground plane and the obstacle jump showed the obstacle.) Something that could be toggled so it wont be distracting for some people.
different types of joints, bones and muscles. Like bones that are the default but also ones that are rigid, bendy/squishy, and stretchy or bones that are lighter(like hollow bones) or bones that are heavier. Joints that are the default, ones that can only bend so much, ones that dont bend at all(to have more places for muscle) or joints that add friction to a creature(to have on feet but not on tails so they don't get stuck). Muscles that are the default, ones that are faster at expanding/contracting(More hyper in a way), and ones that are stronger than normal(for things like legs so they can hold themselves up easier).
I made this list of ideas
I'm not sure if this has already been brought up but there is a simple hack that can get a creature to each 100% in every category easily. Simply create two creatures I just used 2 upside down V shapes and didn't connect them with bones but rather with muscles only. What this did was that the simulator after a few generations would simply lob half of it's body to some part of the screen. This got it to get 100% in running, 100% jumping, and 100% in climbing. (I didn't try obstacle jumping). I realize it's a simulator and not a game, but I'm not sure if you have intentions of trying to dissuade this method or not.
So, there's a couple concerns I have involving the evolution process, which might be significantly hindering creatures' ability to improve their fitness.
First, there doesn't seem to be any bias nodes in the neural network. Usually, one bias node is added to the input layer and to each hidden layer, and is simply set to always output 1. This is then multiplied by genetic coefficients (just like with any other node) to make nodes in the next layer have a constant offset; making certain nodes easier or harder to set very low or very high. It's a small, but extremely useful, addition to nearly any neural network. (I suspect this is the case because you list six inputs in the help screen: distance from ground, horizontal velocity, vertical velocity, rotational velocity, number of points touching ground, body rotation. Also, when looking at saved generations, it says there are six input layer nodes.)
Second, I'm concerned that the "sexual" (for lack of a better term) reproduction method is inefficient. You mention that new children are created by selecting two random parents (weighted by fitness), splitting their neural network data at a random location, and splicing opposite parents' pairs back together. This seems likely to sometimes kill off a highly-fit creature by breeding it with another creature whose strategy is completely incompatible, resulting in two children that both use two incomplete halves of two strategies that only work when whole.
I'd like an option to use an "asexual" method (again, for lack of a better term). It goes like this: You simulate a generation and give them fitness scores. Then you kill off half of them. The most fit creature is guaranteed to survive, and the least fit is guaranteed to die. All other creatures are then randomly selected for death, with the lower-fitness creatures getting higher chances of dying. The surviving creatures then generate two offspring each; both of them exact copies of the original, but one of them with a random amount of mutations. This method is guaranteed never to kill off the most fit creature unless another creature comes along that outperforms it. In otherwords, you never lose progress; every generation is at least as good as the one before it.
You can enable the "Keep best creatures" option already, which guarantees to carry the best two creatures to the next generation without any change to their genes whatsoever (no recombination or mutation). You might still see slight fitness drops and variations though, as explained here: http://keiwando.com/evolution/faq/fitness-drop/
Would be nice to be able to select multiple pieces together and move them as a unit. Perhaps a rectangular drag-to-select type arrangement, such that assembled "parts" could be moved around in relation to other parts. Moving things around one joint at a time is pretty tedious and at certain levels of complexity it can be almost impossible to move something you've already made.
An 'undo' button that reverses the last change would be a big help as well. I've completely ruined a creature by deleting the wrong bundle of bones & muscle.
Hello! Just got my copy, and I've actually been doing some coding with neural networks of my own.
I noticed that there are only 6 inputs for a creature. Seems like this would ultimately limit what a creature could ever "learn" resulting in (theoretically) a lot of "stalls" (ie, creature moves until it gets to a certain position, then simply can't any more).
What are the odds that we could have a mode where each "joint" is in fact an input, or even a series of inputs (ie: the joint's current Y position, and orientation, for example.) Also, the "state" of each muscle could be an additional input.
This would allow for VERY intelligent and complex actions to be learned over time. For instance, creatures may even be able to learn how to stand back up once they fall down.
If people are concerned about the additional overhead of the math, it could be a toggleable series of options, maybe?
Love the tool!
Oh, and another nice feature would be the ability to "hide" or "dim" bones/joints/muscles. So when editing a complex creature, we can click on "onion skin" or something, and then click those things we want to make less visible, and they'd be dimmed out. While dimmed, they wouldn't be collidable (ie: you wouldn't be able to attach muscles to them). For more complex creatures, this could be super helpful!
A big thing for me would be a mute button. The music is very nice, but to mute it, I have to mute all things chrome/chromium. That said, this is exactly the thing I have been hoping to see for a long time. I really hope you expand on this idea even further. I really enjoy it a lot. I'd also love to see generations displayed in parallel in tiled windows, so I could watch a lot of them at the same without them being overlayed on top of each other. But the priority for me would be an option to disable audio. I suspect this will see a lot of run time!
I think a good idea would be to add tabs, as in be able to create and evolve multiple creatures at a time, because some creatures slowly evolve and then you could work on another one. I do realise that this might make it really laggy if you have lots running at the same time but i think it is worth it if you just use batches and dont do to many at a time :)
Thanks, it would be really great if you could add this
Is there a log output file, cause if not i would like to know why my significantly powerful pc was completely frozen when I got home from a 9 hour shift. Not only that but it was only on stage 302. Given the time frame it was supposed to be on stage 2163. I'd like to know the method of movement that gave my computer a brain aneurysm. So if there is a output file can you point me in a direction if not then it wouldn't be a bad idea to have one.
the best creature in the current gen can be on the screen next to the best creature in the last gen. You should also make it so you can control how the simulation determines the best creatures each gen in the settings. Example: u could put fitness proportional so the best creature is determined by its fitness & other options.
Some simple requests:
1. Timer. It makes it more fun to watch, almost like a race. In the last few seconds, the current generation might do better!
2. Current Fittest Highlight. Highlight the creature in the current generation that is currently the fittest (e.g. furthest along track). This makes it more fun and clearer to compare the current generation with the previous best, again a bit like a race.
3. Continue Simulation. Once we click "Back" the only way to get back into the simulation and carry on where you left off is to load it. Can we not please just click Evolve again, if the creature has not been changed?
4. Improvement Indicator. Clearly notify us if a newly evolved creature has outdone the existing best, and if so by how much, e.g. 1% improvement in fitness.
More complex requests:
5. Simulation Speed Dial. Please let us turn up the speed of simulation so we can quickly discover if creatures are evolving in the right direction, or need to be fundamentally changed.
6. Custom Optimisation Goals. Let us control/add the parameters to create new challenges. I would love to combine switches for: Maximise/Minimise Horizontal/Vertical Distance; Keep Selected Joint Above/Below/Front/Back.
7. Manual Centre of Gravity. Let us manually position this point (i.e. the point where the flag marker is placed) by selecting a number of joints (the marker is placed at the mean position of selected joints). This means e.g. I can force the marker to be between my creature's two feet (if I want it to walk) and it won't always think it's being fitter by finishing its attempt with falling forward.
Much more complex requests:
8. Give Creatures Hints. Let us pause the simulation and select a muscle, causing it to toggle its contract/expand state. This change would be backpropagated to create a manual mutation ("the hand of god"!) and is like the player saying "try this" rather than waiting and hoping for a random mutution to cause it. This instantly creates a new generation with a new offspring containing the manual mutation.
9. Hardware Utilisation. When I dial up the parameters the simulation slows down a lot. I'm running a Core i9 9900K at 4.7GHz on 8 cores, with an RTX graphics card. While the simulation slows down, I can see that Evolution is not using more than 20-30% of my CPU/GPU. Can you make more use of multiple threads, and the tensor cores in RTX cards which are designed for ML?
Thanks -- what a fantastic game.
I would really like if the brain could recognize if his shape is a circle that can roll. The current brain seems to keep wanting a "UP" and "DOWN" part of the body, and tries to "keep its balance", compared to a round shape that have to think relative to its position inside a rotation to keep rotating/accelerating.
Maybe adding some clickable option to enable it if it's the case.
An option to set a part of your body to deduce fitness if it touches the ground during the simulation. Really wanted to experiment with bipeds where the legs are actually in line with each other but the AI seems to find it more efficient to just fall forward far before it ever gets a chance to actually learn how to balance.
I have no idea whether you're still working on this or not, but I'll add this anyway. I'm not exactly sure how complicated this would be to do, considering I don't know how to code games and it could require revamping to code as a whole or something... but is there anyway to run the game with more cores than it's already running on? Because the game extremely laggy but it's only using 20% of my cpu and I want to run some large simulations!
Seeing what appears to be an evolution inefficiency when reviewing best creatures of generations, especially for climbing when all creatures are at 0% fitness (initialization) and when all creatures are at 100% fitness (yet with more untapped potential in the body that creatures which do tap into it seem to go unrewarded for tapping into it), I'd like to suggest an alternative fitness measurement to address this; ((self)-(worst))/((best)-(worst))=x% [within generation].
That is, for either climbing or running; the creature within the generation that moves the most to the right (or falls the least to the left) will always be marked as 100%, and the creature that moves the least to the right (or falls the most to the left) will always be marked as 0%. For creatures between, their fitness is the % of the best that they reach after subtracting the worst from both itself and the best; so if the best climber falls -2m to the left and the worst climber falls -8m to the left, a creature that gets -5m will have a fitness of ((-5)-(-8))/((-2)-(-8))=3/6=1/2=50%. The best gets ((-2)-(-8))/((-2)-(-8))=100%, while the worst gets ((-8)-(-8))/((-2)-(-8))=0%; thus mechanically serving as the clamps for their generation.
I believe this would help optimize evolution efficiency most notably in climbing initiation, where with the current method if all creatures get 0% it doesn't (seem to, as far as I can tell,) matter if one fell -5m left and another fell -15m left. Having fitness effectively 'unclamped' while being mechanically bound between 0 and 1 by the nature of the formula itself anyway, I believe would also incentivize constant improvement at the task; currently, if fitness does reach 100% at any task then no further improvement seems to be expressly selected even if the body still has more potential that several creatures go effectively unrewarded for tapping into.
As many already have asked for, a "head."
Evolution tends to favor those that don't die, but in the simulator there is no death or risk, causing many "species" to move using methods that should kill any.
This could also give the obstacle jump a boost in evolution, forcing creatures to learn to jump earlier/faster.
Hi Keiwan, just getting back into the game after a little break. It would be nice to see the current speed of the creature being viewed. I have a creature that starts slow and then goes really fast, so I would like to know the max speed that the creature reaches. In fact, maybe there could be a max speed achieved and current speed added into the game? Thanks
Another suggestion:
When stopping a simulation at the nth generation, it would be cool to be able to move some joints while keeping the neurones weights and so resume the simulation from this nth generation. In other words, neurones weights are erased in case joints, bones or muscles are deleted or added, but not in case of just moving the joints around.
I would like to grow my creature using different "learning rates", and by that I mean mutation rate. For that it would be very useful to have a dashboard, similar to tensorflow dashboard. I'm sure you know exactly what I'm referring to.
Keeping track of the settings and fitness would be very helpful in growing a successful creature.
Support for adaptive learning rate mutation rate based on the fitness would be too much to ask, but would be amazing.
Thank you!
Great "game" !
Some features that would interest me :
- non mobile joints (to make fixed angles with bones)
- to be able to edit (add or delete or move joints, bones, or muscles) after several steps (generations). This could be useful to first learn "basic" behavior (like walking) to a quite simple but secured pile of bones, joints and muscles (secured in the sense they cannot fall easily), and then remove or add components so they are more efficient.
- to record data in a csv file, data like the best scores over time, or all scores over time ...
- and would it be possible to have a look to the configuration of the "neural net" of best creatures (as a list of parameters for example)
Simple dark mode that just toggles a final `1-x` line in an existing shader for minimal impact.
Network input for if any joint within a group is touching the ground, rather than simply how many are. I imagine it's useful to know which foot is touching the ground rather than only how many are. For backwards compatibility all unspecified joints are in the same group.
Activation functions for the networks. I tried to find if there's already some form of nonlinearity in the network but I can't parse Unity code and didn't see any in the brain code. Simple choices include ReLU for just clamping the minimum value to zero; Leaky ReLU which is just ReLU but lerp the original value in a little; Sine; GeLU as approximated with `0.5 * x * (1 + tanh(sqrt(2 / pi) * (x + 0.044715 * x^3)))` which allows for some negative values but fades to zero as it becomes more negative. The final outputs shouldn't have these on them.
Biases to go along with weights in the network s. Simple values to add to the output of each fully connected layer (before activation function if added).
There are more complicated things that might be interesting, like gated units where the output of one layer is put through an activation function and then multiplied with the output of another layer in order to block off an output in certain situations, but at a certain point a line has to be drawn for simplicity.
This "game" is awesome, Two requests here please:
01- the possibility to use multiples cpu and cpu threads.
When simulation in BATCHES is active you can run more simulations BATCHES per cpu core or using cpu mult threads to improve speed of simulation. my cpu has 16 threads and the current version is using only one.
the next one I don't know if is possible:
02- global online simulation, maybe this one is a little to much and it needs be a paid service
we can use a online server or another way to allow multiples computers or cell phones to improve and simulate the same creature, for example, I create a monster, upload this monster online or active a button "global online simulation" and any one can make a online simulation and continue the same evolution, not start another simulation but improve the same creature and the best fitness version will be selected, imagine 10000 simulations at once running in the world, could be a very nice addition, very complex I know...
BYE I love this "game"!!!
Surely duplicates, but I'll list just in case anything's not covered:
Really, the first two would be enough to make a huge improvement, I think.
It's of course unofficial, but upon seeing this; I went ahead and just made one: https://discord.gg/zG4zXCmFa9
I don't know if you are still performing updates or if you will see this, but one idea I have would be to be able to change the neural network of an evolution.
With this, it would be possible to teach the basics of body movement with a simple neural structure and further on leaving the neural network more complex and taking advantage of the previous knowledge used
When performing an evolution with many entities, the time per generation is wrong because of the slowdown due to the amount of entities. And to solve this problem it is necessary to optimize or separate the tasks to be carried out, which can be done with the cpu cores. Instead of a single core having to perform the calculations for 100 entities, let the task be divided equally among the other available cores. My computer contains 14 cores, each core could be performing the calculations of approximately 7 entities instead of 100. When performing the evolution with the quoted amount, the game only uses:
CPU - 10%-15% -- 65% available
GPU - 4%-8% -- 86% available
MEM - 2%-3% -- 93% available
it is visible when you have around 100 entities and quote 5 seconds per generation, which in the end takes 12 seconds to switch to the next generation.
I would recommend relying on the computer's internal time for the time to work properly.
if (startTime - currentTime >= GenerationTime) nextGeneration()
I'm from Mexico and I would love it if you could translate the game into Spanish, it would make it much easier to understand the game. It would also be nice to be able to change the simulation speed once the simulation has started, and not have to start from scratch every time I want longer simulations.