Darwinbots Forum
General => Leagues => Formula 1 => Topic started by: bacillus on March 21, 2008, 01:12:18 AM
-
A complete redesign of Lazy One to omit defensive features and try winning by strength in numbers. A lot of tweaking made it turn out like Commander Keen's Profero Victoria. The red code doesn't seem to do its job, I hope its function is obvious:
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
start
*.thisgene .mkvirus store
150 .vshoot store
1 .sharenrg store
.tie inc
25 *.nrg 500 sub sgn 1 add mult .repro store
10 .up store
600 rnd .aimsx store
*.nrg 3 div *.body sub .strbody store
*.body *.nrg 3 div sub .fdbody store
[color=#FF0000]-32000 .shootval store
.shootval .shoot store[/color]
0 .delgene store
stop
cond
start
99 .sharenrg store
0 .shoot store
0 .fixpos store
111 .out3 store
*.eye3 *.eye5 sub 0 floor *.eye7 *.eye5 sub 0 floor sub .aimsx store
stop
cond
*.shang 0 !=
start
*.shang .setaim store
0 .aimsx store
stop
Able to beat Excalibur in under 1 minute most of the time.
EDIT => The red code does work, as Excalibur mushed it as soon as I removed it.
-
Here's the newer version:
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
start
*.thisgene .mkvirus store
150 .vshoot store
1 .sharenrg store
.tie inc
25 *.nrg 500 sub sgn 1 add mult .repro store
10 .up store
600 rnd .aimsx store
*.nrg 3 div *.body sub .strbody store
*.body *.nrg 3 div sub .fdbody store
-32000 .shootval store
.shootval .shoot store
0 .delgene store
stop
cond
start
99 .sharenrg store
1 .sharewaste store
0 .shoot store
0 .fixpos *.fixpos sgn abs mult store
*.eye3 *.eye5 sub 0 floor *.eye7 *.eye5 sub 0 floor sub .aimsx store
stop
cond
*.shang 0 !=
start
*.shang .setaim store
0 .aimsx store
stop
Disposes of waste using .sharewaste, only changes .fixpos if [*.fixpos 0 != ], and trimmed off useless conspec store.
-
This can beat Excalibur!!!
I tried it vs. Excalibur in an F1 contest, and it won. Excalibur won 5 matches and Occura Amplificus won 14.
You might want to consider changing the code to
-32000 .shootval store
-1 .shoot store
because
-32000 .shootval store
.shootval .shoot store
just constantly shoots out info shots that don't do anything useful...
-
Well, it makes other bots spend a lot of energy the next time they try to shoot.
-
It has a nice solid virus hard to secure against.
Bit long though. I don't think 0 .delgene will help, people usualy place virus defences as the last genes anyway, or atleast they should.
Also if you use .genes dec a lot of bots won't detect the virus.
But remember the more you put in there the longer it will take to channel.
It might be enough to just rotate tie and feed with sharenrg (BTW you can also add -1 .tieloc store 1000 .tieval store, to empty energy faster).
Or you could split them up into 2 or 3 viruses and toggle between them, one that makes them feed you through ties, one to make them shoot -2 shots, and so forth. This way if you only have the biggest virus use .mkvirus to spread itslelf the other viruses won't be vulnerable to virus defences that use *.mkvirus .delgene store.
-
Excalibur won 5 matches and Occura Amplificus won 14.
Really? I only ran 12 rounds, but I had a 100% win rate.
Now also capable of beating every other F1 league bot, except Pacifist, which it only beats rougly half the time.
Well, it makes other bots spend a lot of energy the next time they try to shoot.
Precisely. The shots don't seem to travel too much further, but they do one-shot kill the source.
Also if you use .genes dec a lot of bots won't detect the virus.
Haven't heard that one before. It seems unethical to mess with a bot's internal values
I need a way for the bot to stop piling itself with its own virus. (See vital virus forum in the bot tavern). At the moment, this is what I'm planning:
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
*42 0 =
start
42 inc
*.thisgene .mkvirus store
150 .vshoot store
1 .sharenrg store
.tie inc
25 *.nrg 500 sub sgn 1 add mult .repro store
10 .up store
600 rnd .aimsx store
*.nrg 3 div *.body sub .strbody store
*.body *.nrg 3 div sub .fdbody store
-32000 .shootval store
.shootval .shoot store
.genes dec
stop
This way, the code will execute once, and only once (I hope). The virus may seem big, bulky and slow, but believe me, once the bot starts reproducing, it's out there in no time. Don't forget, there will be hundreds of bots making viruses, and a bot will be very lucky if it doesn't get hit. Run a sim with Occura Amplificis about 10 minutes, you'll see the map is covered with nothing but veggies coming and going, and the ones that come only take seconds to get infected.
-
Now also capable of beating every other F1 league bot, except Pacifist, which it only beats rougly half the time.
Oh?
It's a shame Jez isn't running the leagues any more. It's hard to see who's ahead.
It is very impressive that you can pack that much power into so few bps.
-
I tried every single suggested modification, even my position 42 trick, and they all dampened the bot's performance.
Maybe I should point out, as a general bit of advice, that I have a large list of bots now, and I won't post a new bot until it has beaten all of them. Many of my bots are a result of weeks worth of tweaking.
I tried every single suggested modification, even my position 42 trick, and they all dampened the bot's performance.
Maybe I should point out, as a general bit of advice, that I have a large list of bots now, and I won't post a new bot until it has beaten all of them. Many of my bots are a result of weeks worth of tweaking. Have a look at the original Lazy One, and see what an improvement this as a proof of concept.
-
Get Etch Mk II
-
Get Etch Mk II
Point made
Here's version 2:
cond
start
*.thisgene .mkvirus store
100 .vshoot store
.tie inc
25 *.nrg 200 sub sgn 1 add mult .repro store
12 .up store
600 rnd .aimsx store
*.nrg 3 div *.body sub .strbody store
*.body *.nrg 3 div sub .fdbody store
-32000 .shootval store
.shootval .shoot store
0 .delgene store
stop
cond
start
99 .sharenrg store
1 .sharewaste store
0 .shoot store
0 .fixpos *.fixpos sgn abs mult store
*.eye3 *.eye5 sub 0 floor *.eye7 *.eye5 sub 0 floor sub *.shang sgn abs 1 sub abs mult .aimsx store
*.shang *.shang sgn abs .setaim mult store
stop
Note that the code has been compressed to 2 genes, constants tweaked, and afflicted bots don't give away nrg, due to them keeping other bots alive.
EDIT => I set the 500 in the repro code to 200; it now seems to be able to create an equilibrium system with Pacifist, which is really annoying. It seems to do better against the other bots though, so I'll let it run a long time to see whether it still has the upper hand.
-
You can save a few bp to make the virus develop faster (without changing any behavior)
- (1bp) replace the "1 add" with a "++"
- (1bp) Turn "0 .delgene store" into ".delgene store" (because an empty stack counts as a 0)
- (3bp) Turn
*.nrg 3 div *.body sub .strbody store
*.body *.nrg 3 div sub .fdbody store
into
*.nrg 3 div *.body sub dup .strbody store - .fdbody store
Total savings: 5 bp
PS : What version are you running? On my end Occura (the latest one) has so far been unable to beat pacifist. 6-0
-
It can now beat Pacifist almost every time!
EDIT => I hope no-one read what was here before, but I destroyed the evidence just in case.
-
Wait a minute... I just made sense of abyaly's cryptic messages; what exactly does the dup command do?
-
dup duplicates the last variable on the stack.
So "5 dup mult .repro store" for instance, is the same as "5 5 mult .repro store"
If you ever use the same number or variable, duplicating it can save a whole load of code.
So *.nrg 3 div *.body sub dup .strbody store - .fdbody store would do this:
*.nrg 3 div *.body sub - energy / 3 minus body
So that lot resolves to a number, then dup duplicates the number. So the stack has the number twice. Then .strbody store stores the value in strbody, but since there is 3 values on the stack (nrg/3-body, nrg-3/body, .strbody) store only uses two, leaving one of the nrg/3-body 's on the stack, which is used by the next store.
I hope that makes sense...
-
Thanks for the concise summary. Now I have time to update all my bots before running the league (goodbye spare time)
-
Pacifist uses size as a conspec, so small bots will be regarded as friends and get fed by the infected alge
The reason is actualy that I completely misunderstood how memloc/memval conspects worked, so I used a wierd conspec.
It's still not enough to just be small though, TieFighters is small and does well but can't beat Pacifist... never finished TieFighters... since EtchII came along and worked a lot better doing something very similar...
But Spinner v1.3 (An F2 bot) can beat the latest version of Occura (But not Pacifist)...
I should give Pacifist a propper conspec, it's just such a mess since I merged all those stores... don't want to, would rather make a multibot... it's not like I'm having any success trying to spend some spare time on that damn thesis... just cutting away parts I won't have time to finish
-
Although the robot is very unique, I think it will find a better home in the F1 league.