Author Topic: Zerobot Evolution - Where to now?  (Read 6938 times)

Offline googlyeyesultra

  • Bot Destroyer
  • ***
  • Posts: 109
    • View Profile
Zerobot Evolution - Where to now?
« on: August 03, 2007, 01:56:41 AM »
Okay, I'm working on the whole conditional logic zerobot thing. As it stands, I've got a bot that every so often (not very often at all) will randomly decide to reproduce, tie for 1-2 cycles, virus shoot, or shoot. The children won't reproduce, however (They've got 10 body, so it's not that. It's either some wacky epigenetics, a really fragile genome, or some sort of condition on reproduction (or I'm brain-dead). No clue which.

Anyways, my questions:
Can anyone decipher the wacky code that causes whatever the hell this thing is to work?
Can anyone verify my results?
Can anyone offer advice as to where to go from here on evolving this thing?

In exchange, I'll put up my limited knowledge, and the code of the evolved zerobot.

Tips:
Select a bot, ctrl-r, reproduce. This'll make it reproduce if you like something in its genome.

Early on, don't expect much. Any bot that has one more "store", even if it doesn't do anything, is really, really good.

Once you have something decent, find the best one (just look at the DNA/behaviors manually). Then, take this one and evolve it in a sim all by itself.

Until you've got a decent amount of code, disable deletions. Also disable delta mutations.

Consider using either zero costs or perhaps negative costs to feed your bots or at least prevent them from dieing off.

If you can keep your bots from dieing, you don't need to run around with 600 of 'em. All the times I managed to get reproduction were from having about 5-10 bots, and then being able to get around 1-3 thousand cycles a second.

It'll take quite a while.

Movement tends to evolve quickly, as it's not a huge step from 0 to 1 or 2.

If you don't have anything good, set point mutations to around 100 (or lower, if you want).

Once you get something, assuming it can reproduce, start it up in a sim, with point mutations disabled, but the others (aside from delta and major deletion) enabled. That means that even if deletrious mutations occur, the original will remain unmutated and continue to reproduce hopefully healthy children.

Erm, yes. So, please, add your own tips in your posts, please! Now here comes the scary technical part. I'll leave you to scratch out your eyeballs as you attempt to decipher whatever the hell this evolved code is.

Code: [Select]
<< >
 -4 ceil 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 dist 47 2 ^ 436 floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 start
 << floor or
 store
 start
 add pyth inc
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 0 << >
 -4 ceil 47 start
 << floor or
 store
 dup *.maxvel pyth ~ 19 ~ pow -- else
 angle 47 inc
 >=
 %=
 not
 sub store
 and
 store
 xor
 -14 ~=
 dec
 | 41 .dx store
 1 pyth else
 & pyth rnd -5 -6 =
 or
 or
 floor stop
 start
 store
 inc
 *.timer -- ~ inc
 22 %=
 !~=
 add << >
 -4 ceil 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 dist 47 2 ^ 436 floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 start
 << floor or
 store
 start
 add pyth inc
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 0 << >
 -4 ceil 47 start
 << floor or
 store
 dup *.maxvel pyth ~ 19 ~ pow -- else
 angle 47 inc
 >=
 %=
 not
 sub store
 and
 store
 xor
 -14 ~=
 dec
 | 41 .dx store
 1 pyth else
 & pyth rnd -5 -6 =
 or
 or
 floor stop
 start
 store
 inc
 *.timer -- ~ inc
 22 %=
 !~=
 add

Offline Numsgil

  • Administrator
  • Bot God
  • *****
  • Posts: 7742
    • View Profile
Zerobot Evolution - Where to now?
« Reply #1 on: August 03, 2007, 04:05:22 AM »
Sprotiel was about the only one that was any good at working through evolved DNA.  It takes alot of work.  Basically, the first step is to remove junk DNA that doesn't do anything to end behavior.  Work backwards from store commands.

It's pretty easy to trim the first stuff down since a robot needs to start a gene with cond, or start, or else, or something.  Random DNA before a gene is junk.  (I think, been a while since I toyed with the DNA's virtual machine, so feel free to double check that.)

For your bot... congratulations, it's a bouncing baby zombie.  It's been "infected"   Here's your viral culprit:

Code: [Select]
0 << >
-4 ceil 47 2 ^ floor xor
store
dup *.maxvel pyth or
19 ~ pow -- stop

There's several different strains in that genome, so your virus is evolving as well (or maybe just mutating).  This seems to be a common occurrence in evolved DNA.  I tried destructing your virus to see how it works, but my math must be screwed up because it looks to me like it's storing 0s at location 0.

Actually, on closer inspection I think you have a larger virus in there too.

The last bit of the genome mirrors a bit earlier on.

Offline googlyeyesultra

  • Bot Destroyer
  • ***
  • Posts: 109
    • View Profile
Zerobot Evolution - Where to now?
« Reply #2 on: August 03, 2007, 04:14:50 AM »
Trimming isn't as easy as it sounds. I'm pretty sure that a condition, even outside of the cond section, is added to the cond stack. It'll then get called next time cond comes up, although it might be overwritten by other conditions there, I'm not sure. You might also be able to put values on the stack outside of genes, but I'm really not sure. And ya, I noticed the virus thing, but it seemed to work, so I didn't want to bother to try to select against it.

Also, in terms of virus evolution, it says next to copy mutations that viruses mutate that way. Can someone that knows how the code works check that? Do viruses actually copy mutate?

Lemme see if I can figure out what the hell that's doing.
0, a couple of probably useless cond markers, -4 ceil. I guess that means -4 on the stack. Erm, what does the program do when the floor is set to be higher than the ceil? I'm betting that store is just taking a value off of the stack from somewhere else and storing it into 47 squared, with a wrap-around at 1000 (Is that 209, then?). Then dup'd take another value off the stack and do some wacky pythagorean equation involving powers and 19. I guess it just puts that on the stack for something else to use.

Looking further at its behavior, it also sometimes rotates. I don't know how the hell it works, though. Maybe it is being mind-controlled by extra-terrestrials? I seriously don't understand how it has such a wide behavior of somewhat decent abilities in a wacky little illegible thingamabobber.

Well, studying closer, the little ones do repro. It's just that the children are given so little energy they die in one cycle, making it appear as though the small children never reproduced, as if it were conditional. Interesting. I still have to figure out what logic it uses to decide when to virus, turn, etc.

I'm theorizing that it may be syncing everything with its virus production, so that when .vtimer is within a certain range of values, it does stuff.
« Last Edit: August 03, 2007, 04:39:10 AM by googlyeyesultra »

Offline Numsgil

  • Administrator
  • Bot God
  • *****
  • Posts: 7742
    • View Profile
Zerobot Evolution - Where to now?
« Reply #3 on: August 03, 2007, 04:31:10 AM »
Quote from: googlyeyesultra
Trimming isn't as easy as it sounds. I'm pretty sure that a condition, even outside of the cond section, is added to the cond stack. It'll then get called next time cond comes up, although it might be overwritten by other conditions there, I'm not sure. You might also be able to put values on the stack outside of genes, but I'm really not sure. And ya, I noticed the virus thing, but it seemed to work, so I didn't want to bother to try to select against it.

I can't seem to reproduce what you're talking about here, but I may need to go in and look at the program's code to say one way or another.  And by all means, select for the viruses.  It's not a bad thing.  They tend to produce the best results.

Quote
Also, in terms of virus evolution, it says next to copy mutations that viruses mutate that way. Can someone that knows how the code works check that? Do viruses actually copy mutate?

Copy and point mutations work on all DNA, so any viruses that stick around inside a genome will get mutated when the bot reproduces or just over time.  Mutations don't respect code structure at all.  They just muck with things pretty blindly.

Your bot's code is also a good example of why simple DNA instructions are important.  Bitwise operators are hard to decipher when you try to figure out what an evolved bot is doing.

Offline googlyeyesultra

  • Bot Destroyer
  • ***
  • Posts: 109
    • View Profile
Zerobot Evolution - Where to now?
« Reply #4 on: August 03, 2007, 04:45:46 AM »
Meh, nevermind, I just went back and tested it. Stuff outside of genes doesn't influence stuff inside of genes, at least not in the way I thought it did.

In terms of simple instructions, you could always leave the complex ones in the code for the occasional human use and then make it so they can't be mutated (or perhaps leave it as an option somewhere). Then again, that's not for this thread.

Even if I wanted to kill off the viruses, I'm not sure how. I don't know what is specifically producing them, and I think quite a bit of my other stuff is tied to it as well.

So far, I actually haven't gotten to any form of natural selection. They're still being rather babied through it. I use negative costs to feed them energy for things I like, like stores, edit their mutation rates repeatedly, and make arbitrary judgements on which one (yes, I only save one), should be saved and brought to the next sim. Unfortunately, evolution kindof dies out, since the children don't easily get big enough to reproduce, thus ending the mutation line quite quickly. I'll have to expirement with some crazy huge negative costs, like -10 per store or something.

So far, the only evolved code I could understand was a bot that took advantage of my negative costs. It still couldn't repro or feed, but I was tossing negative costs for movement, so it stored some crazy huge value (I think it was some random value on the stack 1 dist) into .dn. Oddly enough, that thing evolved into this. Once I moved the bonus back to 0, drifting bots sprang up a lot faster (still without any reproing, hunting, and minimal deaths).
« Last Edit: August 03, 2007, 04:54:20 AM by googlyeyesultra »

Offline googlyeyesultra

  • Bot Destroyer
  • ***
  • Posts: 109
    • View Profile
Zerobot Evolution - Where to now?
« Reply #5 on: August 03, 2007, 08:45:34 AM »
Dopplepost! Anyways, I've got some mild improvements going. Negative costs work wonders for reinforcing behaviors. I've got a bot that reproduces, moves, and then later annoyingly fixes itself. It still gets fed solely through negative costs, though. Can anyone offer me some suggestions to evolve against these buggers fixing? I really, really don't like it. It's probably the first major example of Muller's Ratchet I need to deal with so far.

Anyways, here's the code. I think it stores 2 into .fixpos, although I don't know when.

Code: [Select]
<< >
 -4 ceil 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 -10 << >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 or
 floor ^ store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 dist 47 2 ^ 494 angle or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 start
 << floor or
 store
 start
 add pyth inc
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 0 << >
 -4 ceil 47 start
 << floor or
 store
 dup *.maxvel pyth ~ add 8 ~ pow -- cond
 angle 47 inc
 >=
 %=
 not
 sub store
 and
 store
 xor
 -14 ~=
 dec
 | 41 .dx store
 1 pyth else
 & pyth rnd 1 -6 =
 or
 or
 floor stop
 start
 store
 inc
 *.timer -- ~ inc
 22 %=
 !~=
 add << >
 -4 pyth 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ angle xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 dist 47 2 ^ 436 floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- *.dx 0 << >
 -4 ceil 47 start
 << floor or
 store
 start
 add pyth inc
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 0 << >
 -4 ceil 47 start
 << floor or
 store
 dup *.maxvel pyth ~ 19 ~ pow -- else
 angle 47 inc
 >=
 %=
 not
 sub store
 and
 store
 xor
 -14 ~=
 dec
 | 41 .dx store
 1 pyth else
 & pyth rnd =
 -6 -5 or
 or
 floor stop
 start
 store
 inc
 *.timer -- ~ inc
 22 %=
 !~=
 add

Offline Trafalgar

  • Bot Destroyer
  • ***
  • Posts: 122
    • View Profile
Zerobot Evolution - Where to now?
« Reply #6 on: August 03, 2007, 11:03:10 AM »
I know one way to select against it - have a shepherd bot which kills any fixed bots. Of course, if they always repro before fixing, then that won't stop it.

Personally, I decided viruses were too dangerous since if they got into the veggies, they could bring non-evolved code to the zerobots. Worse, once I put mobile shepherd "veggies" in the sim, which are almost entirely SGized*, having a virus steal their genes for the zerobots would be a catastrophic corruption of their evolving genome. So, the shepherds destroy any bot which has vtimer above 0. (They also have Guardian's antivirus code in them, slightly modified and slightly less effective, since they have 2 genes normally instead of just 1)

* = They have 3 genes, one is deleted immediately after spawning (it sets initial values for non-reproduced shepherds), the next is the core logic, and the last one causes repro-suicide if the shepherd's pwaste exceeds 10000.

Most random complex behavior I've seen in my bots has been due to something like 'start angle inc' or 'start dist inc' - since those functions take their input and add your position to it, when getting identical input (like 0 0), they return different values based on the bot's position. For instance, I had one bot which tied to everything possible when it was on the left 1/3 of the screen or so, but not on the rest of the screen (Despite having no real conditions, no SGized conditions, and nothing referencing .tie - it was all powered by angle and/or dist).
« Last Edit: August 03, 2007, 11:04:41 AM by Trafalgar »

Offline googlyeyesultra

  • Bot Destroyer
  • ***
  • Posts: 109
    • View Profile
Zerobot Evolution - Where to now?
« Reply #7 on: August 03, 2007, 02:50:34 PM »
Lolz, I tried the gardener bot approach. I wrote this uber-complex thing that would assign things priorities based on refvars and feed them that way. It didn't work. At all. Unfortunately, they don't use the standard commands, so. . . Instead, I just feed things energy via negative costs. Seems to work well, and encourages some behaviors. Unfortunately, there isn't a cost option for fixing, which means that my usual approach doesn't work all that well. In the past, I could use small populations and high mutations, since the bots didn't do all that much. Now I've gotta deal with a hell of a lot of Muller's Ratchet. . .

Update: I've used the gardener bot approach. I toss 300 or so bots in with about 15 of these, and I end up with 15 of these and two remaining bots. Although those bots gladly have lost the ability to fix, they've also lost the ability to reproduce. I wonder if the two are linked somehow in the convoluted DNA. I'm gonna try again with my fixing-but-otherwise-so-so code.

Also, interestingly enough, I've been evolving this on F1 field size, torroidal, no grav, no brownian, etc.

Update: With around 600 bots plus the anti-fix gardeners, I was able to evolve one that fixes later on within a thousand cycles or so. Going to continue with that one.

Update: Well, the bots are willing to learn to fix later on, but they never refuse to do so altogether. All 600 of them would rather die than not fix. I really think it must be tied in with some other vital gene, but I'm not sure how. Also, my gardener occasionally misses shots, adding in a very bad random death factor.

One rather important question: In the costs panel, a bot is charged for voluntary movement. Does that charge (or in my case, benefit), apply to bots that try to move but can't because they are fixed? If not, then I can rig up the costs in such a way to kill off anything that fixes instantly dies but everything else gains a small but steady energy income.

Another bloody update: I've found that all selective pressure against fixing destroys reproduction. They're probably intertwined somehow. I'll leave the fixing alone for now, see if it "fixes" itself (pun intented), and just shoot for some sort of rotation for now.
« Last Edit: August 03, 2007, 06:39:41 PM by googlyeyesultra »

Offline Numsgil

  • Administrator
  • Bot God
  • *****
  • Posts: 7742
    • View Profile
Zerobot Evolution - Where to now?
« Reply #8 on: August 03, 2007, 11:26:42 PM »
That's interesting that fixing and reproduction are so closely related.  I'm not sure how fixing effects costs from trying to move, but it would be consistant with my mindset for it to only cost a bot if it's unfixed.

Offline Trafalgar

  • Bot Destroyer
  • ***
  • Posts: 122
    • View Profile
Zerobot Evolution - Where to now?
« Reply #9 on: August 04, 2007, 12:24:50 AM »
I bet you it's just incrementing or decrementing fakerandom* memory addresses, or storing a value to them, and selecting against that kills repro, fixpos, and anything else it is screwing with. However, none of the zerobots I have which are powered by fakerandom inc/decs reproduce. So hmm.

* = Couldn't think of an already existing word off the top of my head which means "returns a value that may appear random but is actually based on non-random variables" - like angle and dist and such, which return different values for the same input.

As for my shepherds, I'm having them try to select for greater amounts of genes at the moment, by rewarding (with energy) bots with lots of genes, and taking away energy from bots with less than the maximum they've seen.

Offline Numsgil

  • Administrator
  • Bot God
  • *****
  • Posts: 7742
    • View Profile
Zerobot Evolution - Where to now?
« Reply #10 on: August 04, 2007, 05:02:35 AM »
Quote from: Trafalgar
* = Couldn't think of an already existing word off the top of my head which means "returns a value that may appear random but is actually based on non-random variables" - like angle and dist and such, which return different values for the same input.

Pseudorandom is the word you're looking for.  You were pretty close
« Last Edit: August 04, 2007, 05:03:07 AM by Numsgil »

Offline googlyeyesultra

  • Bot Destroyer
  • ***
  • Posts: 109
    • View Profile
Zerobot Evolution - Where to now?
« Reply #11 on: August 04, 2007, 01:35:37 PM »
W00T! My bots have evolved once more. They now constantly shoot. Not feeding shots (They're storing 1 into shoot, with nothing in shootval, so they're trying to mess with .up), so they aren't beneficial, yet, but they don't drop any of their previous behaviors to do so.

Also, it appears that non-gene viruses can be transmitted, that are immune to .delgene inc .delgene inc. Someone needs to fix it, or someone needs to teach me how it works so I can make uberviruses that can even infect SG bots.

Also, technically, they will feed. Just only if they are at the VERY, VERY verge of their shooting distance (compared to their target, maybe .eye5) (meaning the point where only a couple of the shots will actually hit). Does that count as conditional logic? I suppose that's evolutionarily beneficial, since it allows an occasional bit of feeding but doesn't allow you to kill your children or your parents. It's like conspec! If you're really, really close, then you might be my kid or my parent! I won't hurt you!

Edit: They don't feed. They somehow manage to force bots that don't have any poison, to return poison shots. I have no clue what the hell that does, or how it works.

Also, I shall reveal my mutation rates! Muahaha! These are rather high, but they work well with my bot and settings. Also, 32x mutations.

Point: 500
Delta: Disabled
Copy: 500
Insertion: 700
Reversal: 600
Minor Deletion: 600
Major Deletion: Disabled

Code: [Select]
<< >
 -4 ceil 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 -10 >> >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 or
 floor ^ store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 dist 47 2 ^ 494 angle or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 start
 << floor or
 store
 start
 add pyth inc
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 0 << >
 -4 ceil 47 start
 << floor or
 store
 dup *.maxvel pyth ~ add 8 ~ pow -- cond
 angle 47 inc
 >=
 %=
 not
 sub store
 and
 store
 xor
 -14 ~=
 dec
 | 41 .dx store
 1 pyth else
 & pyth rnd 1 -6 =
 or
 or
 floor stop
 start
 store
 inc
 *.timer 6 ~ inc
 22 %=
 !~=
 add << >
 -4 pyth 47 2 ^ floor or
 store
 dup *.setaim pyth or
 19 ~ pow -- stop
 0 << >
 1 ceil 47 2 ^ floor xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ angle xor
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 2 ^ floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- stop
 0 << >
 -4 dist 47 ^ 436 floor or
 store
 dup *.maxvel pyth or
 19 ~ pow -- *.dx 0 << >
 -4 ceil 47 start
 << floor or
 store
 start
 add pyth inc
 19 ~ pow -- stop
 0 << >
 -4 ceil 47 0 << >
 add ceil 47 start
 << floor or
 store
 dup *.maxvel pyth ~ 19 ~ pow -- else
 angle 47 inc
 >=
 %=
 not
 sub store
 and
 -14 xor
 store
 ~=
 dec
 | 41 *-665 .dx store
 1 pyth else
 & pyth rnd =
 -6 -5 or
 or
 floor stop
 start
 store
 inc
 *.timer -- ~ inc
 22 %=
 !~=
 add
« Last Edit: August 04, 2007, 03:02:22 PM by googlyeyesultra »

Offline Trafalgar

  • Bot Destroyer
  • ***
  • Posts: 122
    • View Profile
Zerobot Evolution - Where to now?
« Reply #12 on: August 04, 2007, 03:13:31 PM »
If that counted as conditional logic, I would point out that I evolved a zerobot on 7/9/2007 which made ties to other nearby bots on a 16000x12000 map, but only made the ties on the very leftmost part of the screen or so (It was moved around by brownian motion). It also did various other things from time to time.

I didn't consider that an example of conditional logic, however, and the first reason is that this is that bot's DNA:
Code: [Select]
'#name: smallzerobot_0da.txt
'#generation: 0
'#mutations: 5065
 dec
 stop
 and
 start
 >=
 angle inc
 ceil div dist !=
 3 not
 stop
 sgn or

'#hash: ']($\S#^ANxO:fLy64=W

There's no visible condition and not even an SGized condition in there. The only thing in there which actually appears to do anything (I'm not 100% certain about this, though) is the 'angle inc'.

This bot appears to do nothing at all if it isn't moving - if brownian motion is disabled, it just sits still doing nothing. My best guess is that, most of the time, angle is making it inc unused memory addresses. There are lines running from the upper-left corner of the map, each one corresponding to a return value from ((implied) 0 0) angle. When the bot is on the line which corresponds to 330, it attempts to tie.

I also evolved bots which fired, spun and fired, moved backwards and fired, and moved forwards and fired, all using actual memory locations rather than angle crap (though they kept the angle crap as vestigal but disabled code, as it ended up inside a cond), but they didn't use any conditions either. Example:

Code: [Select]
'#name: smallzerobot_2c.txt
'#generation: 0
'#mutations: 5121
 store
 start
 *0 store
 else
 0 *.sx start
 .up inc
 else
 .aimleft inc
 start
 .shoot dec
 stop
 xor
 =
 sqr *22 angle cond
 add angle inc
 >
 xor
 stop
 * and

'#hash: ST''|$HI_.]=3k@PeW(K


In the end, I decided that that genome, and the others I had "evolved" from it, were probably not very good for evolving real conditions. So, I abandoned that line of bots for the time being. (I put "evolved" in quotes because by and large the bots had a tendency to evolve away from interesting features towards spending no energy by doing nothing in order to survive longer, as my method of selection was generally to pluck out the bots who survived the longest after all the others died of starvation, or to pluck out bots doing something interesting, like the ones I mentioned before).

Since then I've been working on the shepherd bot, which I'm using now to select for increasingly large numbers of genes in bots with a 13.5 thousand dna length (the original one was 13.5 thousand zeroes). I figure if I can get them to have a ridiculously large number of conditions, they should be able to hopefully evolve useful things and not be as likely to lose them while evolving more new things.
« Last Edit: August 04, 2007, 03:22:09 PM by Trafalgar »

Offline googlyeyesultra

  • Bot Destroyer
  • ***
  • Posts: 109
    • View Profile
Zerobot Evolution - Where to now?
« Reply #13 on: August 04, 2007, 05:20:36 PM »
Okay, the current evolved one I've makes the children face the parents, even if I drag the parent away. I'm not sure why, but it seems to either use ties to do so, or transmit the data through ties.

Offline Trafalgar

  • Bot Destroyer
  • ***
  • Posts: 122
    • View Profile
Zerobot Evolution - Where to now?
« Reply #14 on: August 04, 2007, 06:17:24 PM »
Of course, maybe there really are conditions buried in your bots' DNA somewhere. Who knows. It's rather difficult to tell from looking at the DNA.
« Last Edit: August 04, 2007, 06:21:27 PM by Trafalgar »