Darwinbots Forum
Bots and Simulations => Evolution and Internet Sharing Sims => Topic started by: Beanspoon on March 28, 2012, 11:10:29 AM
-
The original post from this topic was modified by a moderator (not naming any names! ;) ), and I can't be bothered to re-write the whole essay so here's the gist.
I set up an evo sim with 100 1024bit randombots (1024 random integers between 1 and 1000), set as autotroph and left to mutate the ability to reproduce.
I used random integers instead of zeros because I noticed that point mutation only mutates numbers by small amounts, meaning that 1) even if luck was on our side and the number mutated only in the right direction, it would take a long time to reach 300, and 2) behaviour evolved would most likely only use the low array areas, as it becomes exponentally less likely for the higher array areas to be reached. Using random integers means that the chances of any array location being used are equal.
After a surprisingly short number of cycles, the command .repro inc appeared, causing a cancerous reproduction pattern. Please see further on for the next step.
-
Yes, please post the bot.
I am doing something similar evolving robots for F1 mode. I completely changed the mutation engine, see attachment. I don't like point mutations so I replaced them with a custom "copy error"; Although they evolve zero bots they also screw with robots that are already functional so I decided to remove them. I also attached my A1 trough A9 generations.
I would like to see your point mutation code as well, It might just convince me to change my mind. :P
Maybe have that one activate if the robot did not reproduce ever after like 8000 cycles...
-
I used a random bot for the same reason. Generate 1000 random numbers in excel and use them. Point of concern: mutation rates need to be much lower, is my experience. You need to strike a balance between the time a mutation needs to settle (or disappear, if bad) and new mutations appearing.
-
I used a random bot for the same reason. Generate 1000 random numbers in excel and use them. Point of concern: mutation rates need to be much lower, is my experience. You need to strike a balance between the time a mutation needs to settle (or disappear, if bad) and new mutations appearing.
Yeah, this is right. It's usually even better to drop them after they're less than 1/32 using the bot's settings. It just gives time for bots who have good mutations to survive and bots with bad mutations to die.
However, I never really thought of using random-bots over zero-bots and it seems like such a good idea. I must try this at some point. It will probably be summer before I get around to it, though.
-
oh, he never moded the code, it simply not a true zero bot...
I have to look into doing this kind of stuff internally...
That problem seems to come from this line:
Do
' Dim a As Integer
.DNA(t).value = Gauss(IIf(Abs(old) < 100, IIf(Sgn(old) = 0, Random(0, 1) * 2 - 1, Sgn(old)) * 10, old / 10), .DNA(t).value)
Loop While .DNA(t).value = old
I am going to try a mod...
el fixo:
If Mtype = PointUP Then
Dim randomsysvar As Integer
Do
randomsysvar = Int(Rnd * 1000)
Loop Until sysvar(randomsysvar).Name <> ""
.DNA(t).value = sysvar(randomsysvar).value
Else
Do
' Dim a As Integer
.DNA(t).value = Gauss(IIf(Abs(old) < 100, IIf(Sgn(old) = 0, Random(0, 1) * 2 - 1, Sgn(old)) * 10, old / 10), .DNA(t).value)
Loop While .DNA(t).value = old
End If
I feel better about using point mutations now
-
oh, he never moded the code, it simply not a true zero bot...
I have to look into doing this kind of stuff internally...
That problem seems to come from this line:
Do
' Dim a As Integer
.DNA(t).value = Gauss(IIf(Abs(old) < 100, IIf(Sgn(old) = 0, Random(0, 1) * 2 - 1, Sgn(old)) * 10, old / 10), .DNA(t).value)
Loop While .DNA(t).value = old
I am going to try a mod...
el fixo:
If Mtype = PointUP Then
Dim randomsysvar As Integer
Do
randomsysvar = Int(Rnd * 1000)
Loop Until sysvar(randomsysvar).Name <> ""
.DNA(t).value = sysvar(randomsysvar).value
Else
Do
' Dim a As Integer
.DNA(t).value = Gauss(IIf(Abs(old) < 100, IIf(Sgn(old) = 0, Random(0, 1) * 2 - 1, Sgn(old)) * 10, old / 10), .DNA(t).value)
Loop While .DNA(t).value = old
End If
I feel better about using point mutations now
Looks good. Can I ask for another one: decrease mutation rate defaults by a factor of 10?
-
I have load/save mutation rates from file, but it's alpha... (I never added code to select the file location, it defaults to a specific file)
If you want, I'll post that too.
-
Hey, so far nothing interesting to report, the sim has restarted a couple of times due to all bots dying out, but otherwise all quiet.
In the current version of the sim, all animal reproducers have died out due to cancerous growth and no incoming energy, two veggies have survived due to mutation which has rendered the reproduction gene dormant, and the randombots are just sitting there slowly mutating and running out of energy.
As suggested I am using nrg per kilobody point to discourage cancerous veg, and I have costs on in order to make finding food a priority. I know that it would probably be in my better interest to try to keep the bots alive, however I see no good way of doing that save forcing them to evolve the necessary code. If I set them as autotroph or create a feederbot to feed them, they will become lazy and just let that happen. Sometimes you have to be cruel to be kind...
I am going to adjust the sim to repopulate veggies if the population falls below 20. That should give them plenty of chances to evolve into something a little more sensible, while keeping a decent supply of food around in case anything else felt like evolving...
I'll post the A1 code next time I get the chance, there's really not very much to see though, just a random string of numbers and commands with 58 .repro inc stuck in there somewhere.
Watch this space...
-
Ah! I just realized I modified your first post instead of replying like I meant to. I'm really really sorry; I've never done that before. That was a lot of text to lose, and it was entirely my fault. :redface:
I'll put my post here. If you want to modify your original post to explain what you're doing again, that would be good (even if it's just a brief outline).
You're the patient sort, aren't you :P
I usually aim for no more than 1000 bots. That keeps the cycles/sec at something slightly more reasonable (1-3 cycles/sec or so). With cancerous reproduction, where they always try to reproduce every frame, once they get small enough the system won't let them reproduce anymore and they'll need to produce body (assuming you're only feeding them nrg from the autotroph system). If your veggy feeding method is set to nrg per kilobody, you'll also discourage (or at least, not actively encourage) cancerous veggies.
A single cancerous starter bot, at 1000 body, will produce about 1000 bots before each bot's body gets so low that it can't reproduce anymore.
-
Haha I was a little confused - I assumed it was just a server error. Yeah, I can't really remember what it was I wrote now...when I feel up to the task of re-writing my essay I will do ;)
In the meantime, I've decided to work on one thing at a time. Currently, I'm setting up the sim to instead focus on stabilising the veggy version of my evobot, i.e. evolving out the current cancerous nature. I will make a new topic with what I've achieved so far and where I'm going with it next. Incidentally, I want to evolve interesting veggy behaviour so I need an interesting environment - does anyone know how to provide good settings for pondmode? All the permutations I've tried dont seem to make any difference. I want to have the veggies get enough energy if they remain in the upper part of the pond, but if they sink to the bottom they die. I've tried light intensity 1 and sediment level 20 but even that doesn't seem to stop the ones at the bottom getting more than enough energy. Also I set nrg per cycle to 0 so they were only getting energy from the pondmode source.
-
Milestone 1
Right, here is where I draw the line for the first milestone of this project. Using randombots, I have successfully "evolved" a bot capable of reproduction. This is being done by a .repro inc command buried in the random integers. This causes a cancerous reproduction pattern, where the bots attempt to reproduce every single cycle.
My next step will be to attempt to breed out this cancerous growth, giving something a little more controlled. To do this, I will set energy to be distributed per kilobody point, which favours sensible veggies. Costs will be set to F1 default, but with age cost set to 0.1, which will also discourage cancerous growth, and veggies repopulation threshold will be set to 100. From previous dabblings with these settings, I have seen that the veggies that survive are the ones that evolve to turn off the area of code which allows them to reproduce. Therefore after a while of cancerous growth, I will end up with 100 non-reproducing veggies, however most, if not all, will still posess the genetic code enabling them to do so. Then, it's a simple matter of waiting for the point mutations to evolve a sensible control for the reproduction.
The F1 default costs will provide an evolutionary drive towards a sensible reproduction pattern for another reason as well. Eventually, the Age cost will outstrip the amount of energy being collected by the bot, and it will begin to lose energy. Therefore, each bot has a lifespan, and if it does not develop a sensible method of evolution in that time (and with age cost at 0.1, that's still 10 gigacycles per 1 energy) then both it and its genetic code dies. Sort of a brute-force method, but I'm pretty sure it should yield results eventually. If a veggie dies, it is replaced by a brand new cancerous veg, which will eventually simmer down into something useful again. And so the cycle continues...
If you have any suggestions, please let me know and I will give them due consideration. Most of my methods are hypothesis and a little trial and error, so if you have any useful experience, I'd love to hear it. Also, as I mentioned above, does anyone know how to work pondmode, because I've had no luck so far. I'd like to use it later.
I get the feeling I need a successful veg before I can start evolving something that can feed on veg...
-
I used the dynamic cost settings to provide evolutionary pressure. A target setting of say 400 bots is used. Below 400 bots the cost will decrease and above it will increase. Later on I did it manually to avoid see saw behaviour.
-
Common wisdom in the past has been to treat it a bit like gardening. Start off with 0 costs. That way no behavior is discouraged (well, bots can still find ways to kill themselves, but it's rather hard). Make all the bots vegs, and keep the nrg/cycle to something very small (since you have no costs there shouldn't be need for much nrg). And keep population controls so that the sim doesn't balloon to thousands of bots and wreck your cycles/sec. Probably keep the field size small since you want a certain bot spatial density.
Eventually, you'll probably get a bot that can move in one direction, fire -1 shots constantly (and therefore feed), and reproduce (probably cancerously). It just does everything constantly, but it's the beginnings of a rudimentary bot. From that base, you then crank up costs (slowly) to provide additional pressures. Maybe add in shapes to keep things interesting. The main point is that the complexity of the environment has to keep up with the complexity of the bot. Eventually you might be able to get a bot that can survive without being a veggy. Then you switch the species off of being a veggy and introduce a feeder veggy. Maybe just the original zero bots. Alternatively, if you're aiming for a veggy species, you could drop in, say, animal minimalis, and have them cap their own population to some (very low number). As the veggies get better at surviving you can crank up the population cap that the bots self impose. Eventually replace the animal minimalis with a more aggressive hunter.
And while cancerous, constant reproduction isn't very sexy (:P), the most successful evo sim I ever ran actually did pretty well with a cancerous veggy being fed nrg per bot instead of per kilobody point. If it learns to rotate and reproduce it can produce a sort of "foam" of bots with 1 nrg. Animals can only really kill 1 bot per cycle, and they won't get that much nrg back from it, so they will have a hard time entirely killing a veggy field. Maybe 10% of the veggy population survives to reproduce some more. So you have this very narrow evolutionary window for success, and an insane number of generations, so you do get some actual evolution going on. (If you turn on fixed bot radii, it makes this easier. They'll form a regular lattice structure.).
-
There are so many different ways to induce evolution in the bots... I think I'm going to have to start a charity where people donate their old computers to me so that I can use them for extra processing power. Try a different sim setup on each one and see how things develop.
That does sound like an interesting use of cancerous growth, and I can see how that would stay stable - you end up with a sort of grass effect, fields of veg grow, bots feeding from it gain only a little energy per veg, so must eat a lot of them. I rather like that idea actually, seems a little more reminiscent of real veg and herbivores.
I'm not sure I follow your approach to creating an animal bot though - if you make all the bots veg, won't that promote veg behaviour? If a bot can get enough energy just by sitting around and (for want of a better word) vegitating, what evolutionary advantage does moving around and shooting give?
Took a peek at my sim just now, I noticed that the constant reproduction was causing bots to propel themselves along, creating a 1% bot each cycle which immediately died from lack of energy. The poiffs of exploding bots make it look like a smoke trail for the one that's reproducing :P
-
There are so many different ways to induce evolution in the bots... I think I'm going to have to start a charity where people donate their old computers to me so that I can use them for extra processing power. Try a different sim setup on each one and see how things develop.
If you plan on leaving them on for a while, it's sometimes better to just buy a new stripped down computer with a core i7, in terms of the energy consumption. Each DB instance is single threaded, but you can run multiple instances simultaneously. So one of the new 6 core processors can run 12 instances (6 cores with hyperthreading = 12 hardware threads) pretty effectively.
I'm not sure I follow your approach to creating an animal bot though - if you make all the bots veg, won't that promote veg behaviour? If a bot can get enough energy just by sitting around and (for want of a better word) vegitating, what evolutionary advantage does moving around and shooting give?
If they don't get a lot of nrg from being a veggy, they should learn to feed as well, to supplement their meager nrg income. Pretty soon after that all the non feeding vegs should get eaten. Then you lower the veggy feeding some more, and introduce dumb bots to feed the animals by getting eaten. You keep lowering the veg nrg until you can turn it off entirely. Then start the sim with that species not marked as vegs, and you can introduce in smarter and smarter vegs.
Took a peek at my sim just now, I noticed that the constant reproduction was causing bots to propel themselves along, creating a 1% bot each cycle which immediately died from lack of energy. The poiffs of exploding bots make it look like a smoke trail for the one that's reproducing :P
Heh, that's a funny way to evolve locomotion. :)
-
If you plan on leaving them on for a while, it's sometimes better to just buy a new stripped down computer with a core i7, in terms of the energy consumption. Each DB instance is single threaded, but you can run multiple instances simultaneously. So one of the new 6 core processors can run 12 instances (6 cores with hyperthreading = 12 hardware threads) pretty effectively.
In an ideal world, this is precisely what I'd do. Sadly at this stage in my life I'm an impoverished student, so it'll be a while before I can just fork out on a hobby number cruncher xD
If they don't get a lot of nrg from being a veggy, they should learn to feed as well, to supplement their meager nrg income. Pretty soon after that all the non feeding vegs should get eaten. Then you lower the veggy feeding some more, and introduce dumb bots to feed the animals by getting eaten. You keep lowering the veg nrg until you can turn it off entirely. Then start the sim with that species not marked as vegs, and you can introduce in smarter and smarter vegs.
Ok I get where you're coming from with that - how do you give them a meagre nrg income? I have my veg feeding at 1 nrg per kilobody point, and anything withat least a few hundred body seems to be doing fine - in fact most of them have 32000 nrg - that is until the age cost catches up with them and kills them off.
Heh, that's a funny way to evolve locomotion. :)
I don't think I'll credit them with having evolved this on purpose to get around, but I suppose there's the possibility that a bot might use this as a means of locomotion if movement was exceptionally costly and body wasn't an issue...
Incidentally, the latest update: so far there is no sign of sensible reproduction evolving, however I feel we are getting closer. I have attached a few curiositied which have mutated along the way. The first is a robot that compulsively ties to anything in front of it. It doesn't do anythig further, but it's has a little cluster of other bots attached to it now, and it's at least a step in the right direction.
The second is a massive (32000 body) bot which constantly shoots (I'm not sure what it shoots either), but from the once-over I've given its DNA, I can't work out why it shoots constantly, nor why it's so big.
The final curiosity is another behemoth (32000 body) which again I haven't been able to ascertain the reason for its massive size. Please feel free to pick apart the coding for each and discuss, I'd be interested to know what makes these guys tick.
I find the discovery of these behaviours heartening - for a start it shows that a wide variety of interesting behaviour is possible from these bots, and secondly, all I need is for one of them to start reproducing again, and I could have the makings of a rudimentary self-sufficient bot!
-
I'd be interested to know what makes these guys tick.
A guy by the name of Prsn828 was working an a plugin that should make mutated DB easier to comprehend, unfortunately I have no idea what happened with this. http://forum.darwinbots.com/index.php/topic,3442.0.html (http://forum.darwinbots.com/index.php/topic,3442.0.html)
Huge robots are an evolutionary advantage because they put out the most energy pomp, unfortunately they never reproduce.
A robot does not need to shoot to gather energy, maybe it is tie feeding.
-
Sorry, I should have explained - these bots are far from adapting to their environment. The behaviours seen here are merely due to random mutation - unless they develop some way of reproducing sensibly, this behaviour is null and void.
One thing that the growing huge does mean though is that it will greatly increase their longevity, which will at least give them more of a chance to evolve other behaviours including reproduction. We'll see.
I just posted the bots out of curiosity as to how the behaviours they have developed work, none of them will be at all successful in their present condition.
-
I just posted the bots out of curiosity as to how the behaviours they have developed work
:D I kinda gave up trying when I evolved this; (There are 233 genes, it does not fit on the page)
'4111
*.body 1786 *.myeye 1786 << 1 *.in5 *.readtie *.dnalen *.eye3 *.vel 50 store
127 dec
sgn sqr
'''''''''''''''''''''''' Gene: 1 Begins at position 18 '''''''''''''''''''''''
cond
clear ceil not
rnd abs angle ~ stop
'''''''''''''''''''''''' Gene: 1 Ends at position 26 '''''''''''''''''''''''
*153 - stop
!%=
*267 store
'''''''''''''''''''''''' Gene: 2 Begins at position 33 '''''''''''''''''''''''
cond
*-353 angle dist *489 div or
and
not
dropbool
*.ypos ceil inc
<< <=
!=
div dist -1128 *382 *.deltie 1 swapbool
1 1 *.mkshell >=
start
ceil not
sgn .refvelup inc
*265 store
*.tin6 add *665 store
swapbool
false
<< store
inc
'''''''''''''''''''''''' Gene: 2 Ends at position 76 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 3 Begins at position 77 '''''''''''''''''''''''
else
-886 add sub xor
!=
-26 *-1152
'''''''''''''''''''''''' Gene: 3 Ends at position 84 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 4 Begins at position 85 '''''''''''''''''''''''
start
127 dec
sgn sqr
'''''''''''''''''''''''' Gene: 4 Ends at position 89 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 5 Begins at position 90 '''''''''''''''''''''''
cond
clear ceil not
rnd abs angle ~ stop
'''''''''''''''''''''''' Gene: 5 Ends at position 98 '''''''''''''''''''''''
*153 - stop
!%=
*267 store
'''''''''''''''''''''''' Gene: 6 Begins at position 105 '''''''''''''''''''''''
cond
*-353 angle inc
div -436 dupbool
-- ceil clear
'''''''''''''''''''''''' Gene: 6 Ends at position 114 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 7 Begins at position 115 '''''''''''''''''''''''
cond
swapbool
-336 & add | over >> and
dist swapbool
>
xor
else
sub !%=
691 << *.deltie 1 swapbool
1 1 *.mkshell >=
'''''''''''''''''''''''' Gene: 7 Ends at position 139 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 8 Begins at position 140 '''''''''''''''''''''''
start
ceil not
sgn sgn
'''''''''''''''''''''''' Gene: 8 Ends at position 144 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 9 Begins at position 145 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 9 Ends at position 150 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 10 Begins at position 152 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 sgn .refvelup inc
*265 store
*.tin6 add *665 store
swapbool
false
<< store
inc
else
-886 add sub xor
!=
-26 *-1152
'''''''''''''''''''''''' Gene: 10 Ends at position 180 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 11 Begins at position 181 '''''''''''''''''''''''
start
127 dec
xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 11 Ends at position 187 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 12 Begins at position 188 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1786 << 1 *.in5 *.readtie *.in9 705 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 12 Ends at position 203 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 13 Begins at position 204 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1786 << 1 *.in5 *.readtie *.in9 .refaimdx dec
ceil clear 1 *.mkshell >=
start
ceil not
sgn .refvelup inc
*265 store
*.tin6 add *665 store
swapbool
false
<< store
inc
'''''''''''''''''''''''' Gene: 13 Ends at position 238 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 14 Begins at position 239 '''''''''''''''''''''''
else
-886 add sub
'''''''''''''''''''''''' Gene: 14 Ends at position 242 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 15 Begins at position 243 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++ !=
dropbool
*.mkvirus floor floor !%=
!%=
691 ceil over *.hitup store
and
sgn else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 15 Ends at position 273 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 16 Begins at position 275 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 16 Ends at position 285 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 17 Begins at position 286 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1786 << 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor store
-14 <
abs *-108 xor
pyth -186 ++ !=
dropbool
*.mkvirus floor floor !%=
!%=
691 ceil over *.hitup store
and
sgn else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 17 Ends at position 334 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 18 Begins at position 336 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 18 Ends at position 346 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 19 Begins at position 347 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1786 << 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor << pow *.deltie 1 swapbool
1 1 *.mkshell >=
start
ceil not
sgn sgn
'''''''''''''''''''''''' Gene: 19 Ends at position 380 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 20 Begins at position 381 '''''''''''''''''''''''
else
<< 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor << pow *.deltie 1 swapbool
1 1 *.mkshell >=
'''''''''''''''''''''''' Gene: 20 Ends at position 404 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 21 Begins at position 405 '''''''''''''''''''''''
start
ceil not
sgn sgn
'''''''''''''''''''''''' Gene: 21 Ends at position 409 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 22 Begins at position 410 '''''''''''''''''''''''
else
<< pow *.deltie 1 swapbool
1 1 *.mkshell >=
'''''''''''''''''''''''' Gene: 22 Ends at position 419 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 23 Begins at position 420 '''''''''''''''''''''''
start
ceil not
sgn sgn
'''''''''''''''''''''''' Gene: 23 Ends at position 424 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 24 Begins at position 425 '''''''''''''''''''''''
else
<< 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor << pow *.deltie 1 swapbool
1 1 *.mkshell >=
'''''''''''''''''''''''' Gene: 24 Ends at position 448 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 25 Begins at position 449 '''''''''''''''''''''''
start
ceil not
sgn sgn
'''''''''''''''''''''''' Gene: 25 Ends at position 453 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 26 Begins at position 454 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 26 Ends at position 459 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 27 Begins at position 461 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 27 Ends at position 471 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 28 Begins at position 472 '''''''''''''''''''''''
cond
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 28 Ends at position 477 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 29 Begins at position 479 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 29 Ends at position 489 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 30 Begins at position 490 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1786 << 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor << pow *.deltie 1 swapbool
1 1 *.mkshell >=
start
ceil not
sgn .refvelup inc
*265 store
*.tin6 add *665 store
swapbool
false
<< store
inc
'''''''''''''''''''''''' Gene: 30 Ends at position 535 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 31 Begins at position 536 '''''''''''''''''''''''
else
-886 add sub xor
!=
-26 *-1152
'''''''''''''''''''''''' Gene: 31 Ends at position 543 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 32 Begins at position 544 '''''''''''''''''''''''
start
127 dec
sgn sqr
'''''''''''''''''''''''' Gene: 32 Ends at position 548 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 33 Begins at position 549 '''''''''''''''''''''''
cond
clear ceil not
rnd abs angle ~ stop
'''''''''''''''''''''''' Gene: 33 Ends at position 557 '''''''''''''''''''''''
*153 - stop
!%=
*267 store
'''''''''''''''''''''''' Gene: 34 Begins at position 564 '''''''''''''''''''''''
cond
*-353 angle inc
div -436 dupbool
-- ceil clear .refvelup inc
*265 store
*.tin6 add *665 store
swapbool
false
<< store
inc
else
-886 add sub xor
!=
-26 *-1152
'''''''''''''''''''''''' Gene: 34 Ends at position 594 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 35 Begins at position 595 '''''''''''''''''''''''
start
127 dec
sgn sqr
'''''''''''''''''''''''' Gene: 35 Ends at position 599 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 36 Begins at position 600 '''''''''''''''''''''''
cond
clear ceil not
rnd abs angle ~ stop
'''''''''''''''''''''''' Gene: 36 Ends at position 608 '''''''''''''''''''''''
*153 - stop
!%=
*267 store
'''''''''''''''''''''''' Gene: 37 Begins at position 615 '''''''''''''''''''''''
cond
*-353 angle inc
div -436 dupbool
-- ceil clear
'''''''''''''''''''''''' Gene: 37 Ends at position 624 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 38 Begins at position 625 '''''''''''''''''''''''
cond
swapbool
-336 & add | over >> and
dist swapbool
>
xor
else
sub !%=
691 ceil over *.hitup store
and
sgn
'''''''''''''''''''''''' Gene: 38 Ends at position 647 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 39 Begins at position 648 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 39 Ends at position 653 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 40 Begins at position 655 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 40 Ends at position 665 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 41 Begins at position 666 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1786 << 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor << pow *.deltie 1 swapbool
1 *.mkshell >=
start
ceil not
sgn .refvelup inc
*265 store
*.tin6 add *665 store
swapbool
false
<< store
inc
'''''''''''''''''''''''' Gene: 41 Ends at position 710 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 42 Begins at position 711 '''''''''''''''''''''''
else
-886 add sub xor
!=
-26 *-1152
'''''''''''''''''''''''' Gene: 42 Ends at position 718 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 43 Begins at position 719 '''''''''''''''''''''''
start
127 dec
sgn sqr
'''''''''''''''''''''''' Gene: 43 Ends at position 723 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 44 Begins at position 724 '''''''''''''''''''''''
cond
clear ceil not
rnd abs angle ~ stop
'''''''''''''''''''''''' Gene: 44 Ends at position 732 '''''''''''''''''''''''
*153 - stop
!%=
*267 store
'''''''''''''''''''''''' Gene: 45 Begins at position 739 '''''''''''''''''''''''
cond
*-353 angle inc
div -436 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor << pow *.deltie 1 swapbool
1 1 *.mkshell >=
start
ceil not
sgn sgn
'''''''''''''''''''''''' Gene: 45 Ends at position 771 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 46 Begins at position 772 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 46 Ends at position 777 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 47 Begins at position 779 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 47 Ends at position 789 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 48 Begins at position 790 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1 *.mkshell >=
start
ceil not
sgn .refvelup inc
*265 store
*.tin6 add over >> and
dist swapbool
>
xor
'''''''''''''''''''''''' Gene: 48 Ends at position 814 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 49 Begins at position 815 '''''''''''''''''''''''
else
sub !%=
691 ceil over *.hitup store
and
sgn
'''''''''''''''''''''''' Gene: 49 Ends at position 824 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 50 Begins at position 825 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 50 Ends at position 830 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 51 Begins at position 832 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++ !=
dropbool
*.mkvirus floor floor !%=
!%=
691 ceil over *.hitup store
and
<< store
inc
else
-886 add sub xor
!=
-26 *-1152
'''''''''''''''''''''''' Gene: 51 Ends at position 866 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 52 Begins at position 867 '''''''''''''''''''''''
start
127 dec
sgn sqr
'''''''''''''''''''''''' Gene: 52 Ends at position 871 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 53 Begins at position 872 '''''''''''''''''''''''
cond
clear ceil not
rnd abs angle ~ stop
'''''''''''''''''''''''' Gene: 53 Ends at position 880 '''''''''''''''''''''''
*153 - stop
!%=
*267 store
'''''''''''''''''''''''' Gene: 54 Begins at position 887 '''''''''''''''''''''''
cond
*-353 angle inc
div -436 dupbool
-- ceil clear
'''''''''''''''''''''''' Gene: 54 Ends at position 896 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 55 Begins at position 897 '''''''''''''''''''''''
cond
swapbool
-336 & ceil over *.hitup store
*.deltie 1 swapbool
1 1 *.mkshell >=
start
ceil not
sgn sgn
'''''''''''''''''''''''' Gene: 55 Ends at position 916 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 56 Begins at position 917 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 56 Ends at position 922 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 57 Begins at position 924 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 57 Ends at position 934 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 58 Begins at position 935 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1 *.mkshell >=
start
ceil not
sgn .refvelup inc
*265 store
*.tin6 add over >> and
dist swapbool
>
xor
'''''''''''''''''''''''' Gene: 58 Ends at position 959 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 59 Begins at position 960 '''''''''''''''''''''''
else
sub !%=
691 ceil over *.hitup store
and
sgn
'''''''''''''''''''''''' Gene: 59 Ends at position 969 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 60 Begins at position 970 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 60 Ends at position 975 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 61 Begins at position 977 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++ !=
dropbool
*.mkvirus floor floor !%=
!%=
691 ceil over *.hitup store
and
<< store
inc
else
-886 and
sgn
'''''''''''''''''''''''' Gene: 61 Ends at position 1007 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 62 Begins at position 1008 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 62 Ends at position 1013 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 63 Begins at position 1015 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++ !=
dropbool
*.mkvirus floor floor !%=
!%=
691 ceil over *.hitup store
and
sgn else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 63 Ends at position 1045 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 64 Begins at position 1047 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++ sgn else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 64 Ends at position 1064 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 65 Begins at position 1066 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 65 Ends at position 1076 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 66 Begins at position 1077 '''''''''''''''''''''''
cond
* *.body 1786 ceil not
sgn sgn else
<< 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor << pow *.deltie 1 swapbool
1 1 *.mkshell >=
'''''''''''''''''''''''' Gene: 66 Ends at position 1108 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 67 Begins at position 1109 '''''''''''''''''''''''
start
ceil not
sgn sgn
'''''''''''''''''''''''' Gene: 67 Ends at position 1113 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 68 Begins at position 1114 '''''''''''''''''''''''
else
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 68 Ends at position 1119 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 69 Begins at position 1121 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 69 Ends at position 1131 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 70 Begins at position 1132 '''''''''''''''''''''''
cond
%=
dist << sub stop
'''''''''''''''''''''''' Gene: 70 Ends at position 1137 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 71 Begins at position 1139 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 71 Ends at position 1149 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 72 Begins at position 1150 '''''''''''''''''''''''
cond
* <<
'''''''''''''''''''''''' Gene: 72 Ends at position 1152 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 73 Begins at position 1153 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 73 Ends at position 1163 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 74 Begins at position 1164 '''''''''''''''''''''''
cond
* *.body 1786 *.myeye 1 *.mkshell >=
start
ceil not
sgn .refvelup inc
*265 store
*265 store
*.tin6 add *665 store
swapbool
false
<< store
inc
'''''''''''''''''''''''' Gene: 74 Ends at position 1190 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 75 Begins at position 1191 '''''''''''''''''''''''
else
-886 add sub xor
!=
-26 *-1152
'''''''''''''''''''''''' Gene: 75 Ends at position 1198 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 76 Begins at position 1199 '''''''''''''''''''''''
start
127 dec
sgn sqr
'''''''''''''''''''''''' Gene: 76 Ends at position 1203 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 77 Begins at position 1204 '''''''''''''''''''''''
cond
clear ceil not
rnd abs angle ~ stop
'''''''''''''''''''''''' Gene: 77 Ends at position 1212 '''''''''''''''''''''''
*153 - stop
!%=
*267 store
'''''''''''''''''''''''' Gene: 78 Begins at position 1219 '''''''''''''''''''''''
cond
*-353 angle inc
div -436 1 *.in5 *.readtie *.in9 .refaimdx dec
*.mass 237 div 2 << pow floor << pow *.deltie 1 swapbool
1 1 *.mkshell >=
start
ceil not
sgn sgn *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 78 Ends at position 1256 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 79 Begins at position 1257 '''''''''''''''''''''''
cond
* *.body stop
'''''''''''''''''''''''' Gene: 79 Ends at position 1260 '''''''''''''''''''''''
<<
'''''''''''''''''''''''' Gene: 80 Begins at position 1262 '''''''''''''''''''''''
cond
499 store
-14 <
abs *-108 xor
pyth -186 ++
'''''''''''''''''''''''' Gene: 80 Ends at position 1272 '''''''''''''''''''''''
-
Ok I get where you're coming from with that - how do you give them a meagre nrg income? I have my veg feeding at 1 nrg per kilobody point, and anything withat least a few hundred body seems to be doing fine - in fact most of them have 32000 nrg - that is until the age cost catches up with them and kills them off.
That sounds about right. If you have a reproducing strain, as soon as someone figures out how to fire you should see that sub strain take over. Right now it's the quiet before the storm.
For the bots you posted:
This is a stripped version of the shooter bot (done by hand):
782 inc
801 .out8 store
905 inc
485 .eye3width store
523 191 store
593 407 store
.eye9dir inc
86 inc
275 912 store
148 120 store
373 * inc
382 dec
483 686 | dec
550 dec
.in8 dec
661 dec
859 1065 store
770 279 store
589 917 store
354 56 store
36 438 mult 187 store
Most of it is just random poking. But the shooting is from this:
483 686 | dec
The bitwise or of 483 and 686 is 7, which is the .shoot sysvar. dec means it's firing -1 shots. So it's learned to feed constantly, basically.
I didn't look at the others. The trick is just to find the inc, dec, and store commands, and then walk backwards through the program as many stack places as you need to to get the full command. It's usually more effort than it's worth, though :)
-
(thx for fixing my post Numsgil)
Beanspoon, You can also check out the robot building tutorials on the wiki to help you figure things out...
-
Cheers for the advice guys. Currently I'm ridiculously busy with my Masters dissertation, but once I've got my final year out of the way I'll have a lot more free time to play with this.
Speaking of your "calm before the storm" Nums, the massive shooter which I posted a while ago has survived all this time, has made the shoot gene dormant, re-started reproduction and its population has exploded. More excitingly, I am seeing a lot of promising behaviour, including periodic (not cancerous as far as I can tell) reproduction, periodic (but unaimed) shooting, periodic and random bursts of movement, and for some reason some of them seem to have activated their .fixed memory location. I will be keeping a close eye on things now to see what develops...
-
A quick update: The evosim will be down for a little while. My project is now finished so I've had to relinquish my work computer which was running it. It may be a little while before I can get my hands on another computer, but once I do I'll get it running again.
-
Good day friends! So I have acquired a new PC to run DB2 on! Hooray! Therefore, I will be starting up my evosim once again just as soon as I've remembered which file is which :/
-
Ha, sounds good. Can never have too much horsepower to throw at DB.
-
Ha, sounds good. Can never have too much horsepower to throw at DB.
True that. The computer I'm running now is a quad core, so I might get two instances on the go, one with algal-like veg and the other with cancerous veg. I'll need the other two cores for calculation however, as it is really a work computer ;)
I tell you what, evolving a sensible reproduction pattern is not easy...I have continued the sim from where I left off, and after 10m cycles the bots are still reproducing uncontrollably and killing themselves off, or have switched off their reproduction gene and are just sitting there. Patience is the key...
-
Success! It took about 40 million cycles, but I finally have a species which reproduces sensibly! I was lucky enough to check it just as the first one reproduced. I increased the energy so that it had a better chance of surviving, and am now slowly bringing it back down to the original level. I have one question: while the mutation rate is set extremely low (1/32x), a large number of mutations happen almost every time it reproduces. We're talking 5 or 6 different reproduction-related changes per offspring. Is this a fault with the program? I'm loath to start a new sim with just one because I don't know which one to choose (there are over 900 of them now, and almost all different) and that would defeat the purpose of natural selection.
-
The mutation rate at 1/32x is still quite high, really. Erm, the best way is to set the mutation rate for each type of bot to 10 times less, make the number wherever it is to a larger number. Can't remember exactly how to do that, though.
-
Ah ok - I know how to do that for a new sim, but not while one is running...
-
I have an idea how you can give us your robots:
1.) Memorize your out folder for internet mode. (Just make sure your outbound folder points to a real directory you can write to)
2.) Almost skipped a step :P Make sure the inbound folder points to an empty directory
3.) Take a program such as notepad.exe and make a copy of it in the same folder as darwinbots calling it "DarwinbotsIM.exe"
4.) Run with IM on for 8K cycles or so (you do not need to make a new simulation)
5.) Go to your out folder and select all robots, zip em and send em to us.
I believe you can accomplish the same result by adding a teleporter, although I never used one.
-
Good idea - I'll try that when I have a mo. Are you sure you want all this data though? Currently I have 500 vegs which appear to be thriving but are pretty much all different...
-
I don't need all of the data, maybe 20 robots or so... maybe by luck I'll get a couple that are doing well... in any case I want to see how they look like even if they are the crappier type
-
Sure. Would you like a copy of my settings file as well? They have evolved to survive under those conditions...
-
might as well, thx
-
Hi- I know I haven't posted anything here in a while. The reason is that I realised that my mutation rates were set far too high, and there was no way I could go through all the bots and change their rates one by one. As such, I restarted the sim with rates of a 10th of that which I was using before.
The sim has been running for over three months with no development. Today however, bots with a sustainable reproduction cycle evolved. Once I have sorted through them, further slowing their mutation rates (there was still an alarming amount of mutation happening), I will post the sim here. My next goal is to slowly reduce the energy the bots receive for photosynthesis from a frankly cushy 8 per kBP down to 1.
-
what mutation rate did you set the sim to?
-
what mutation rate did you set the sim to?
I have the mutation rate set at 1/32nd, but I also adjusted the individual mutation rates by multiplying the default values by 100. Currently most of the species in my sim have a species diversity of about a half of their population. Taking into account that their genetic data is ~1000 bp long and the bots tend to live a long time (there are no predators currently in my system), most of this diversity will be due to point mutation.
I think the veggie population has now adapted to the world parameters I wanted, so it's now time to introduce a predator of some sort. What would the veterans of evosims suggest as the best way to create a predator by mutation? Randombots sat next to veggies which spray out energy packets? I'd like to keep the sim with all my currently evolved veggies going if possible, so I need to evolve the predators to the point that they can look after themselves and then I can drop them into the current sim.
-
You might get some results by having energy-spreading bots, yeah. But you'll need to keep an eye on the bots and change the settings they face as they adapt, or the sim will start crawling.
Usually "predator" bots will evolve to just swim in a single direction firing constantly. But that might be all you need.
Keeping the two populations from killing each other would be much harder.
-
Well yeah my plan was to use the second sim long enough to get the predator bots eating and then move them over to the other sim. Hopefully if they're not too well adapted they'll only be marginally successful and I can get a sustainable sim going. I'm hoping to have them end up in an evolutionary arms race...