What's next for your robot?

What other robot(s) is it based on?

What's new(2008-09-01)v3.83 released: Some team strategy changes, trying to avoid friendly fire. Lots of 1on1 movement changes since 3.82. Melee should be roughly the same, probably with some minor tweaks since the last update. (2008-07-08)v3.82 released: Just checking if I changed anything important since 3.81f.(2008-02-26)v3.81 released: Lots of changes, both movement and gun. Bad idea, I know, but I couldn't resist.(2008-02-10)v3.79 released: The result of my gun tests + a few small tweaks.(2008-01-13)v3.77 released: Testing some 1on1 gun changes. 3.73 movement (=3.66), for now.(2007-12-04)v3.76 released: "Distributor of pain" release. Cool new melee gun experiment. How does it choose a target in melee? It doesn't. ;)(2007-11-18)v3.75 released: Reverted the gun to 3.73. Lots of small movement changes, speed optimisations.(2007-11-06)v3.74 released: Small change to the gun, even smaller to the movement. Untested.(2007-11-01)v3.73 released: Further gun tweaks.(2007-10-27)v3.72 released: Now using Simonton's BucketPRKdTree? code, with some more small changes to the gun. Slightly worse in the TCFast but amazing performance in the long run (55% against Dookious!).(2007-10-23)v3.71 released: Precision tweaks to the gun, 3.66 movement.(2006-02-16)v3.66b released: I think I found around 5 rumble points in the gun, testing with my best movement yet.(2006-02-11)v3.70 released: Major movement changes: now uses BlindMansStick based WallSmoothing instead of the old angle constraint method. Keeps to a closer distance (more agressively).(2006-02-02)v3.69g released: Movement changes, risky business.(2006-01-24)v3.69 released: Reverted back to 3.66 movement and gun (with a very small bugfix). Some changes to the melee gun.(2006-01-21)v3.68 released: Major movement and gun tweaks, must get some sleep...(2006-01-19)v3.67 released: Fixed a bug and tweaked the gun.(2006-01-14)v3.66 released: Mixing old with new.(2006-01-13)v3.65 released: Something slightly different with the gun. :)(2006-01-12)v3.64 released: Some more gun tunning, my best gun ever? Nope, at least not for the rumble. I'll try something slightly different next.(2006-01-11)v3.63 released: Testing some changes to the gun.(2006-01-10)v3.62 released: Corrected some mistakes with the new tweak. Must look at the gun now, I made some crazy changes while on vacations! :)(2006-01-09)v3.61 released: New movement tweak. After all this time it's very hard to follow my own code! Clean-up follows...(2005-04-27)v3.59 released: Refactored melee movement, some logic flaws corrected in the process. Melee King! :)(2005-04-19)v3.58 released: Revised melee gun. Should give Aleph 0.34 a run for it's money. ;)(2005-04-17)v3.57.1 released: Back to 3.55.1 1on1 movement. Some melee movement tweaks.(2005-04-04)v3.56 released: Experimenting with the movement, the gun will have to wait. Looks like I'm back, btw. :)(2004-12-08)v3.55 released: Added acceleration and time-since-velocity-change segmentations to the gun.(2004-12-04)v3.54 released: Increased aggressiveness, does it work in the rumble? Nope, testing the opposite in 3.54.1.(2004-12-03)v3.53.4 released: Back to 3.53 movement. Small gun tweaks, should be slightly faster.(2004-11-27)v3.52.3 released: According to my tests, this should be the best combination in terms of rumble ranking.(2004-11-26)v3.53 released: Some changes to the movement. Optimised (mostly) against Ascendant 1.0.(2004-11-21)v3.52 released: Trying to make sense of everything I tried in 3.51.x plus a new change in the surfing. Tested exclusively against top bots.(2004-11-17)v3.51 released: Optimised long run performance, 64% survival against DT in some tests.(2004-11-14)v3.49 released: Fixed a small bug in the movement code and made some adapting speed adjustments.(2004-11-12)v3.48(.1) released: Seems to work better now. Corrected a last minute tweak with v3.48.1.(2004-11-02)v3.47 released: Another atempt. Changed lots of stuff, reverted most of it, did a couple of tests, and packaged it. :)(2004-11-02)v3.46 released: Lots of changes, again. Now closer to my own gun inverted, only with guessFactors.(2004-10-31)v3.45 released: Rushed release, I don't remember what I changed.(2004-10-30)v3.44 released: No bins, no segments. Closer to the idea (but slightly worse in my tests).(2004-10-28)v3.43 released: Back to my new ways. Still a lot to experiment with.(2004-10-26)v3.42.1 released: An experiment. v3.13's WaveStats? class with current everything else. (2004-10-25)v3.42 released: Some tweaks. This version wins by 58% against DT in 1k rounds (62% survival!), I hope it takes me back to the 2050+ ranking.(2004-10-24)v3.41 released: Restructured for speed, still a lot of cleaning up to do. Now to see how far I can tweak it.(2004-10-21)v3.37 released: Another experiment. Much faster, but still slow by PEZ standards... :)(2004-10-20)v3.36 released: Small bugfix.(2004-10-19)v3.35 released: Lots of changes, work in progress. This version is a (very) SlowBot, I'll optimise it for speed in the next version.(2004-10-18)v3.34 released: Further tweaking.(2004-10-16)v3.33 released: Tweaked the distance control, slightly more agressive. Data saving enabled.(2004-10-15)v3.32 released: Corrected some small logical flaws.(2004-10-14)v3.31 released: Finally found time for some tweaks, nothing major. Data saving disabled.(2004-08-11)v3.25 released: Back to (almost) exactly the same movement setup as 3.13.(2004-07-26)v3.21 released: Several tweaks later... Too many tweaks at the same time, lost 17 ranking points, now to find out where they went.(2004-07-18)v3.13 released: 2066 points and rising! King of the Rumble! :)(2004-07-16)v3.12 released: Fixed (and improved?) melee gun, slightly tweaked melee movement and some precision fine-tunning of the 1on1 movement.(2004-06-24)v3.11 released: Improved movement, data saving re-activated.(2004-05-31)v3.07 released: Small error (last minute tweak) in the movement code corrected.(2004-05-29)v3.06 released: Back to the simpler (cumulative stats) 3.04 movement. Further gun tweaking.(2004-05-24)v3.05 released: Testing rolling averages again, no aparent performance change in my tests, let's see about the rumble. Yet another 1on1 gun tweak, pretty much untested but seems to target random movers better.(2004-05-24)v3.04.p recalled: The test with PEZ' gun scored ~10 points lower than with my own gun, I'm therefor happy with my recent gun development. Now I need to find 15 points in the movement. ;)(2004-05-22)v3.04 released: 1on1 gun optimisation, small movement tweaks. No melee gun for now, it's next in my todo list.(2004-05-16)v3.03 released: Back to my most recent wavesurfing classes, with some small movement tweaks. Found a couple of old gun tweaks that were decreasing it's performance. Fixed the TC and MC behavior support.(2004-05-14)v3.02 released: Shadow 3.01 suffered from an identity crisis in melee, it's fixed now ;). Testing Tron's v3.03 wavesurfing classes, similar to Shadow's v2.49 method.(2004-05-13)v3.01 released: Now using Tron's v3 structure and wavesurfing classes. Many small changes/optimisations. I hope I didn't break it too much... ;)(2004-04-14)v2.49.1 released: 2.49 with data saving disabled, rating difference: +0(2004-03-14)v2.49 released: Pure dodger experiment.(2004-03-11)v2.48 released: Small gun bug fixed.(2004-02-29)v2.47 released: Another weekend of changes/tweaks. Optimised to beat DT 2.71 over 1000 rounds.(2004-02-24)v2.46 released: Last test before 2.51, very high adapting speed, shorter memory (rolling averages) and a data saving option in the properties file.
(2004-02-20)v2.45 released: Adapting speed increased again. I hope it works this time.(2004-02-16)v2.44 released: Bugfixes and tweaks.(2004-02-13)v2.43 released: Simple data saving added (hacked in).(2004-02-10)v2.42 released: More testing...(2004-02-08)v2.41 released: Just testing some changes/tweaks in the rumble, tests indicate decreased performance against DT (35 rounds), but, I hope, better against most others. Lost about 20 raking points, to be analysed...(2004-01-23)v2.33 released: Bugfixed and optimised. Fixed a sporadic melee crash and tweaked 1vs1 movement using 1000 round battles against DT 2.41.(2004-01-16)v2.31 released: New movement, adaptive is it's middle name. Kills everything over 1000 rounds, can it do the same in the rumble? I got my fingers crossed...;)

I guess it's official now, Shadow 2.31 is king of the hill with 1950 ranking points, as well as melee and teams champion. Two years of Robocoding, and I never saw it coming... :)

(2004-01-08)v2.21 released: Experimental adaptive movement. Should take care of the "easy" problem bots and also, I hope, improve the performance against the top bots. Ranking 1874 :)(2003-12-23)v2.15 released: Simplified movement (practice what you preach ;)). 2.11 had two slightly different movement parameter sets, chosen randomly before each round, now it's back to just one. Kills the latest BlestPain by a good margin. Ranking: 1842, seems to have worked. :)(2003-12-10)ShadowTeam released: More work for Paul... ;)(2003-12-05)v2.11 released: New melee movement. Consistently better than DT 2.22 in my tests, still lots of (small) details to optimise. 1v1 unchanged, got to work on that, 2.02 got exactly the same ranking as 2.01 despite my (1000 rounds) tests indicating a small improvement...(2003-11-26)v2.11 almost ready: I want to thank Vuen for encouraging me to work on Shadow's melee strategy even though there are currently no active competitions. Acording to my tests v2.11 will be a very strong candidate to the melee crown, it currently outscores DT 2.11 even in long battles (5K rounds), and I believe it still has some room for improvements.(2003-11-18)v2.02 packaged: After countless movement tweaks (going in circles, mainly), I decided to release v2.02. It now wins against BlestPain, FloodMini, and others, including 54/46 against v2.01. Unfortunatly the repository went offline the exact moment I decided to upload it, so a "real world" test will have to wait. :( (2003-10-17)v2.01 released: Completely redone with curve flattening movement and my "pattern recognition" gun. Top 10 in the RoboRumble, I'm happy :)

It looks like there may have been a coup. A new king may be in town. 2073 after 470 battles. I wonder whats changed? -- jim

The King is dead. Long live the King! Congrats for taking the crown, ABC. Almost 20 points up since I last looked! I second jim's query :-) --Vic

Wow it stayed that high, saw it at 250battles at 2075 or so buton it's way down. Seemed very interesting and just now got an internet connection again (still in the US with work) and I quickly wanted to see if we had a new king... and we have! Well done! -- Pulsar

Thanks guys :). It was a very small change, I reactivated the flattener against all but the simplest guns (HeadOn?). It solved a lot of mid/top range problem bots and made me win against everyone except DT (49.5%!). I hope I meet him a couple of times more soon, I believe Shadow can score 50%+, and that would mean 100% wins in the PL ;) -- ABC

The most depressing part is your 60%+ against DH. Every time I get close someone ups the bar even further. I still have loads of room for improvement but I am begining to question my commitment to a GF gun. Looking at your scores vs. the cx.* bots and comparing them to the other 3 top bots I can see where you have distanced yourself some right there. Congrats again. Still not sure how I am going to catch this bot -- jim

Like you said, it wouldn't be fun to fight alone, I just changed the name of the bot to beat ;). I saw you TC results, you have a pretty good gun already, GF or PM is not important, as long as it works. -- ABC

Grr, another green dot in my LRP! ;) Are you sure it is a fluke? Have you tried running a 500+ round battle? -- ABC

No I haven't tried that. It is a fluke in that Locke does not consistently beat Shadow, but does sometimes. This time it felt special because now Shadow is king :-) --Vic

It is not a fluke, I ran a 400 round battle that resulted in a very close win (50.3%) for Locke. -- ABC

Wow! It must be because my gun is so different from GF guns. That probably means wavesurfing doesn't work that well against Locke as it does against GF targeters. I'm curious how far I can go with this gun. --Vic

Hey! Way cool. I've not checked the rankings for very long and now we have Shadow as the king again. Big congrats! -- PEZ

Thanks. Good to hear from you again, did you replace that Xbox yet? I recommend a GBASP and Advance Wars, one of my favourite time killers after/while Robocoding. ;) -- ABC

Yes, I got the XBox fixed. And finished all the levels of Blinx too. =) Advance Wars, I saw it on sale the pther day. Will pick it up next time. My GB advance needs a good game. -- PEZ

Hey! Been a week out of rc, and only saw it now: ABC is the new King! Congratulations, man! Portuguese spoken at the court! -- Axe

Thanks, and welcome back :). PEZ, I can heartly recommend that you buy Advance Wars (1 or 2, doesn't matter). It's the best strategy game I have ever played, it's like modern chess. I've been playing it for ages and can't get enough of it... -- ABC

Thanks, for the compliment and the clean-up. I'm trying to tweak it to beat DT more consistently, 100% wins in the PL is my goal now ;). - ABC

3.24 is going good! Impressing [details sheet]. Insane even. A year back it would have been considered plain impossible. -- PEZ

It has been a frustrating period for me, though. I had to go back to a setup very similar to 3.13, because everything I touch makes me rank lower. Looks to me like I can't win against DT by more than 52% (like 3.13 did, 1k rounds) without losing ranking points against everybody else... -- ABC

"Nothing major" costed you 12 points or something! What did you do? -- PEZ

I used a slightly different danger function, together with lots of small tweaks. The usual stuff, I don't know were the points went, but at least now I don't have the pressure of being #1, I can go forward instead of backwards. ;) -- ABC

Tell me about it. I couldn't imagine it would be this scary to be #1! Evrything I try costs me points. And I don't try lots of small tweaks in one release. Just one at a times. Interesting (and depressing) to find that I must by accident have tuned everything to the optimum. -- PEZ

Btw, I can't find a single bot that beats this version of Shadow in the long run, I must have done something right... I suspect close combat is one of the things dragging me down, I'll look into it. -- ABC

Not even Ascendant? (I think that's the only bot that could beat your last version.) Now, what's your current danger function like? -- PEZ

Bad luck maybe, but it looks like this Shadow might have to qualify to the StrongestBotRumble?. But since the qualification is with 1000 round battles, that's not a problem for you I guess. But maybe you relaxed a bit too hard about not being #1? You were #1 in PremierLeague before. And, with better support from the RR@H client/server setup, that is the league that counts anyway. -- PEZ

Not even Ascendant, that was one of my first tests. How come I have to qualify? I think Shadow is still #1 in the PL. -- ABC

Yeah, strange. When I looked I counted 6 losses. But now it looks much better! -- PEZ

More, I tested 10x35 rounds against Aleph, Shadow won 8 in 10. A couple more encounters with him and it's back to undefeated status. I believe I improved Shadow's performance against top bots, I just have to find where in the mid/low ranks I lost those points... -- ABC

I get only 88.5% in the DevilFISHChallenge, there is definately something wrong with my close combat strategy... -- ABC

Well, I think I have told you that before. =) Anyway, it's nothing new, and can't explain where you lost those points. But I have noticed that good surfing against the mid and top bots is not the same as the pixel-perfect surfing that's so successful against the low-ranks. Maybe you have lost some of your edge against these? In a perfect world this shouldn't be something to worry about, but now the RR Ranking is what it is... I use different danger functions for simple targeters and not-so-simple targeters. I have just set a threshold on the average amount of hits I have taken per round and those that fall below the threshold get a different danger function. Maybe you already do something like this? But then again, maybe you can revisit it and make it a bit more extreme? Like using the 3.25 function for simple targeters and the 3.31 one for the rest? -- PEZ

I thought you said you didn't have any special-casing ;). Anyway, one of the things I changed in 3.31 is I separated the visits/hits statistics (in 3.25 I had only one set of stats arrays). I could make a third set for the "old" way, but I'd rather try to optimise the current setup because I think it makes more sense. Like you said elsewhere, sometimes you optimise a certain (sometimes buggy or illogical) method so much, that you then lose points by "correcting" it. Without the #1 pressure I can explore other methods more freely, a big jump is better than a lot of small ones... -- ABC

Indeed. It's the big jumps that marks the real progress. About special cases... I do have a few where I think they really matter. The "trash-lowranks-harder" special cases is just a result of the ranking system favouring that. Then I have special case treatment for rammers too. They are special after all. =) -- PEZ

Shadow was slow before. But now it slows down the RR@H clients something really bad!

What about the small bugfix? And can you share some on what it is you are trying now?

It will soon be almost as fast as it was before. I'm trying a new way of surfing, I'll keep the details for myself for now ;). It looks very promissing so far, the bugfix wasn't really a bugfix, I noticed my performance against simple bots was lower than it could be and fixed it. It was cool to see a bot be undefeated and score just 2020 because of the imperfect HOT avoidance, like DT, only better. :) -- ABC

Yes, I also noted 3.34 didn't have that nice arrow-head in the LRP graph that is so typical for the pixel-perfect surf of Shadow. -- PEZ

You always refer to Shadow as a SlowBot, when it is much faster than most pattern matchers. If you compare it to Cigaret it is almost a FastBot?. And your own "shoot a wave every tick" wavesurfing movement is not the fastest one around either... ;) -- ABC

Yes, CC isn't the fastest bot around. Not because it shoots EnemyWaves every tick though. That's only used to update the visit counts. What takes time is iterating my predicted destination alternatives and to evaluate the danger associated with them. Every tick. I believe you do that too? Or did before your current experiment started anyway. Shadow might be faster than Cigaret, but that says very little. My guess is that Shadow maybe is 3 times as fast as Cigaret. But CC is at least 5 times as fast as Shadow. Not talking about S 3.36 here, that one must have been slower than Cigaret. Both Shadow and Cigaret seem to get payback for being slow though. Those guns are good. All I ask is that now and then people with slow bots take a close look at their code and try see if there is something that could be rearranged or refactored to gain speed while not losing performance. I know some versions of my surfing has been unecessarily slow because of design flaws. And I'm pretty sure I can't speed my current surfing up significantly without changing it functionality-wise (or render the code even harder to follow than it already is...). So my standards can be summed up something like that it's OK to be slow as long as it's paying back in performance. (Or code size or readiability or whatever one might be chasing). And it's not as OK to be slow if it's just because you don't care about execution speed at all. Thus: The Shadow 2.25 line was OK slow. 2.36 was not. But then again you did warn us and did tell us you cared. So it was OK slow anyway. =) -- PEZ

Yep, 2.36 was very slow. I still haven't fixed it, 2.37 is only faster because I optimised it for 35 round battles and not because I fixed the fundamental problem that makes it slow. I'll have to refactor some classes to make it run as fast as before while doing exactly the same thing as 3.36, I hope to find time for it this weekend. I try my best to make my bots fast, I spent a lot of time working on my gun's speed. This time I just had to test my new surfing style in the rumble, it's great to have something new to play with, especially when it scores 60%+ against Aleph in the rumble. :) -- ABC

Cool, but that 58% result was in one of the many tests I made while tweaking, I don't know if it is repeatable. I forgot about that challenge I'll try the released version and post the results later. -- ABC

Wow, amazing! Looks like you won back that crown, and maybe even set the record for highest rating ever... even SilverFistWT barely reached 2080 and you're above that right now! --David Alves

At 166 battles quite a few bots have touched that ground and higher. It's too early to tell. But it looks good. Very good. And I'm very curious what's behind that often used word in the change log, tweak. -- PEZ

It's way too early to tell, that's for sure. This time I changed the dodging/flattening behaviour, now it has a special case for top bots instead of HOT bots. I turn on the flattener only if I'm getting hit 10% or more, there are very few guns in the rumble that trigger it. As for the new surfing style, take some ideas from my gun, mix it with GF theory, throw in some dynamic segmentation thoughts, and simplify as much as possible. I'll try coding a gun using the same method one of these days, the idea is to take advantage of my gun's learning speed and the speed/power of a gf gun at the same time. -- ABC

And when you do use the flattener, you weight it a bit higher than before? I've experimeneted a lot with different hitrates and stuff to trigger this or that part of my stats to get used. Haven't got exactly solid results though... As for your new surfing style. That's about what my guess was. You could turn any good gun backwards and surf it I guess. And your gun is the best one around, so it's a very good choice. -- PEZ

Hot, linear, or any other gun that doesn't learn. I'm off to bed now, I hope it doesn't drop much more... I'll be happy with 2050+ anyway. L8r, -- ABC

2055, good enough. Axe, the fact is that I ended up removing the flattener for the simple guns, so the multiplication "trick" isn't in effect against them anyway. It does pretty good against top guns, though, I don't know why, but I made so many changes that it's hard to know what worked and what didn't. -- ABC

That part about multiplication trick protecting against simple gun flattening really confuses me. You must still have some default behaviour when you have not been hit yet and that behaviour just can't protect against all kinds of simple guns, can it? Oh yes, congrats on your come-back to the 2050+ club! Strong bot you have there. Especially in 35 round battles. I ran some 100 round matches CC vs S and CC holds to itself a bit better there than it does in short battles. Like the 14+ battles these bots have fought in the rumble shows. In multiplying the dangers from visits and hits, is it smoothed dangers you multiply? And have you normalized them before the multiplication takes place? Nagging about those weights again, just in discuise this time. =) -- PEZ

My default behaviour when I have not been hit yet is GF0 avoidance. The idea behind the multiplication was to never avoid a certain GF until I get hit at least once in that particular GF. Currently, and only against top guns, I multiply vists times hits, both smoothed and normalized. If it is better than wheighting and adding them, I don't know. The fact that my performance against DT (and Ascendant) improved a lot may also be explained by the many other changes I did. -- ABC

Ok, I tested 1k rounds vs DT with visits+hits instead of visits*hits, 57% (61% wins). That change was not the reason for my improved performance against DT. -- ABC

I still think that the multiplying trick is brilliant, it's nice and clean. I think that even against medium guns this might help... I have a theory (ok, it's much more to a feeling than to a theory, so u all are welcome to laught loudly) that some guns might have "blind spots" (GFs that they dont ever fire), even if they are more sophisticated than HOTs or Linears. This trick maybe help you to take advantage of these "blind spots". -- Axe

I fail to see where multiplying should be better than adding. There must be something here that I miss... -- PEZ

By multiplying the danger function returns zero when only one of the two parameters is zero. If gfDanger_visits is zero and gfDanger_hits is not, appearantly the this was a lucky hit and the bin is still considered safe. The other way round the bin seems unsafe, but the opponent actually never shoots in that direction, so the danger level is still zero. When you add values, some directions will seem to be unsafe, while they are not. just my idears, correct me if i am wrong. --Loki

Unless you register BulletHitBullet? events or use the bullet position for the hits statistic, gfDanger_visits is never zero when gfDanger_hits is not. I look at it the other way around, if gfDanger_hits is zero there is no point in avoiding that GF any more than any other zero danger GF. A normal (addition) flattener would avoid it more than another more frequently visited (even if not hit) one. It was just a crazy idea that seemed to work at the time... :) -- ABC

But that's the whole point to why I have the flattener on in the first place. I think there is every reason to avoid the most visited of two equally hit (even if no hits) bins. Unless of course I have judged that the gun I am up against is non-learning, but then I switch of the flattener completely. -- PEZ

Ok forgive me if this is a bad place to ask, (feel free to move it) but here is my question: Seeing as I havnt been around in the robocode world while WaveSurfing apeared and developed, im wondering why you bother recording both the visits and the hits? Afterall, if your WaveSurfing works correctly, the visits shouldnt matter as you should be dodging all the actual bullets anyway. I can imagine that in the short term recording visits means your profile will flatten out when the bot is newly installed with no data on opponents, but once the data is gathered it seems to me that the visits data would be interfering with your hits data. Or maybe I have got the wrong end of the stick, and your using a different method of WaveSurfing compared to the one I am going to try to implement in the near future which means its usefull in the long term?? --Wolfman

Wavesurfing works great with just hits surfing. But against fast adapting guns your enemy almost never fires where it fired before (hits), it will fire at the peaks in your current movement profile (visits). I would say that, If you had the exact same statistics as you opponent, surfing hits wouldn't even be necessary, just pure flattening would work perfectly... -- ABC

So are you saying the "pure wavesurfing" is used for simple bots targeting like HOT, Linear etc, and that flattening is more usefull than true WaveSurfing vs advanced bots like Shadow?? -- Wolfman

Yes. But don't make the distinction you do there. Visits surfing is just as pure as hits surfing. Against learning guns you want to be ahead of your opponent as much as you can and then visits surfing plays an important rule. This has been proven by all current top surfers, they lose rating points if you remove the flattener. -- PEZ

(edit conflict :)) Yes, but for me "flattening" and "pure waveSurfing" are the same, it's just the waves you surf (hits, visits or a combination of both) that are different. -- ABC

Wolfman, imho, if u are starting now a WS? development, the best idea is NOT to include a flattener. Actually, i would recommend u to start with a single unsegmented WaveSurfing. This should be enought to beat all HOTs by 99+%, once u achieved that (and this might not be that easy, WS? is a nest of potential bugs), u will be sure that at least your "basic" surfing is working, and this would give u a solid plataform to start into more advanced surfing... -- Axe

Axe that is exactly what I was planning on doing. I was just wondering if I needed to think about adding features later, so that I wouldnt need a complete re-write when I need to add something like this. -- Wolfman

Hey! My warning bells are ringing loud here. You should never ever think about later features when implementing an idea IMHO. Complete re-writes are nothing bad in themselves. But modifying code that only solves the problem at hand is much easier than modifying code that also solves future predicted problems. Problems that might never arrive. That code will hang around like a backpack on your bot forever and make changes harder than they need to be. I completely agree that you should make sure your hits surfing works before you add complexity like flattening and what-have-you. Adding visits surfing is a piece of cake even if you haven't made room for it to begin with. Easier I would say, since you might change your mind on the hits surfing implementation as you go. -- PEZ

Pez, I think its much easier to plan for future eventualities at the beginning, and plan for future problems so that you dont have to rewrite. Its much better (IMHO) to spend a little more time on a properly designed system that is easier to intergrate future ideas into (that might not ever get used), than to write a poorly designed system that is a nightmare to add new ideas etc. And its complete rewrites that has stopped me from releasing a new bot for the past year+. --Wolfman

Different philosphies. But to make my standpoint a bit clearer I can asure you that I am not an advocate of poor design. What I am opposing is [Big Design Up Front]]. I think good design solves todays problems and only todays problems. And that when tomorrow arrives with demands for change you refactor. Re-writes are rarely needed with this design philosphy. But if it comes to that, it's not necessarily a bad thing. A think complete re-writes are more common with that big-design-up-front. Because if you didn't get it right the first time it's harder to refactor it than with a small-design-as-you-go solution. I have never had to completely re-write anything in CassiusClay. -- PEZ

I was wondering when you would mix in some of your old proven stuff into your new structure. It looks great! 503 battles and 2070 points. Time to throw Ascendant 0.9.2 in again and let S and A duke it out about the crown? -- PEZ

Wow, definitely a strong release. I'm reinserting the best version of Ascendant now. --Mue

No need, I'm below CC now. I still have some pairings to do, though. How do you guys handle the HOT shutdown problem? -- ABC

Hm i see, but i'm done with the 0.9.5 branch anyway. What is this shutdown problem? --Mue

I guess you mean shutout problem? When there are three rounds left and I have taken no hits I start waiting for a low power bullet and if one is coming I let it hit me. In the last round I am not picky I just let any bullet hit me. -- PEZ

Well, i have not dealt with this yet. Actually i dont think that this is a real problem for Ascendant, since these 100% results are rather rare i guess. --Mue

The problem, Mue, is that even if they are rare, u might be throwing away your best possible results... -- Axe

Yeah i know, i just dont want to put effort into making my bot less perfect. I think that if this shutout thing is really considered a common problem, the rule of ignoring perfect results should be removed. --Mue

I already thinked like you, but now I think that this exists to protect the ranking against buggy results (clients wrongly configurated, etc..). When problems like that happens, u oftenly see robocode outputs like "SandboxDT didnīt started after xxxx miliseconds, no score will be generated.". Taking this protection, could actually make a lot of damage in weird situations. (personnaly, I use this to prevent SS from beeing damaged by clients without the appropriated configuration to deal with the JRE 1.4.2 SecurityException Bug... so these words might sound a lil selfish, but I assure u that they are my opinion...) -- Axe

Note that iīm not saying that we shouldnīt take that "protection" from the server... But that we should at least think much better before doing this. -- Axe

Yup. I've seen my client go nuts too many times now to persist in my previous quest for removing that server protection. -- PEZ

Hm, maybe you are right, didnt consider configuration problems in RR@H clients. Perhaps its worth to take a look at what misconfigurations can be avoided by the client. The JRE 1.4.2 SecurityException Bug for instance can be avoided since its possible to check at runtime whether sun.io.useCanonCaches is switched off. --Mue

Thanks for the tips, but I don't think I'll implement something like that into Shadow. It eventually gets hit by those HOT bots and the pairings get complete. I like the 100% score invalidation rule because I don't think 100% makes sense in the ELO ranking method, it would translate into infinite ranking points. And it does also protects against many problems. ph.Archer, for example, always loses by 350/0 here because my client runs on java 1.4 and its code is compiled with 1.5. -- ABC

I don't think that's why the 350/0 score shows up. I've seen it on many bots. On my clients it has helped to rebuild the .robotcache. I have written about the shutout "solution" elsewhere and said I can't recommend it. In fact I'm going to remove it from CC. But in a perfect world Robocode would inform the client about any failures and shutout scores would be acceptable. I don't think the rating system of the RR@H would go nuts on such a score. I've made some tests and it seems it's not as exponential as one would think from some discussions on this site. In fact producing a ranking table totally on raw % score produces a carbon copy of the rankings produced by the strange 1600-based rating we're currently using. That wouldn't be the case in these days of surfers if it was that near 100% closed in on infinity. -- PEZ

Near 100% doesn't close on infinity, but 100% equals infinite rating difference. Or maybe it is just undefined? -- ABC

I made some tests. Assuming the max score difference in 35 rounds is around 5000/5001 = 99.98%, the max rating difference between two bots would be around 2274 points. A 100% score is undefined (1/0) in the current ELO formula. -- ABC

Version 3.48.1 looks very strong. Good work man! Tell us what the latest changes was about please. =) -- PEZ

I made my movement flat again :). Lots of changes, I changed the wavesurfing to yet another method, seems to work better overall. It is, in some ways, closer to how you do it in BumbleBee. I don't want to describe the details just yet because I might change it again soon. That is unless I get to #1, in that case I'll probably wait for someone to dethrone me... ;)-- ABC

Cool. Incidentically I have a dev version of Ali surfing a reversed BumbleBee. It's buggy yet, but I have big hopes for it! =) -- PEZ

I saved a snapshot of the PL rankings. (I really should get it done automatically together with the ELO archivings...)

The battle was delivered from your machine actually:
35,800x600,ABC,1100693585750,metal.small.dna2.MCoolDNA 1.5,6269,3474,35,abc.tron3.Shadow 3.51,65,65,0
Maybe you can still scroll up in the window running your RR@H client and see if you got any messages?

FYI. The 1% score battle against GrubbmOne was also delivered from your machine. -- PEZ

That's my home computer, I'm at work now. Just got another 1% against gh.mini.[GrubbmOne 0]?.9, something is wrong with Shadow or with my home RR@H client... :( -- ABC

And now you've got a 1% score against MakoHT. But that one was delivered by a signatre MN. So it's probably an array indexing problem or some such in Shadow. -- PEZ

Well, I found a possible division by zero, it shouldn't happen anymore in 3.51.1. In the process I found a major logic flaw with my lastest "tweak", what I did has nothing to do with what I intended, I should know better than trying crazy stuff while I'm playing Pikmin2 :). I'll test it in the rumble anyway, it seems to work against DT... -- ABC

So you have a GameCube?? I'm thinking of buying one too because of Pikmin 2. Maybe I can disguise it as an x-mas present to my daughter. =) -- PEZ

Yep, I like Nintendo games, just ordered Paper Mario 2 and Zelda Minish Cap, since I already finished Pikmin2. I can't get excited with the likes of Halo 2, Half Life2, GTA, etc, got bored of FPSs around the time when Quake 2 was the latest thing... -- ABC

That depends, on-line multiplayer FPS is not my kind of game. I'd rather play good strategy/puzzle multiplayer, online or offline. It's very stressing to play a game that you can't pause... -- ABC

Somehow my latest Pugilist upload to the RobocdeRepository? hijacked Shadow's repository id of 198! This might mean that you have lost it forever, unless you can persuade the admins there to fix it. Until it's fixed Shadow is not downloadable using that link though. =( -- PEZ

Even if you lost almost 10 RR@H points with the latest update I would say it's a success. Your details sheet is totally awesome now. If somehow you can figure out where you lost those points and reclaim them without losing the top-bot-trasher quality... It really is time you described your new movement scheme some. -- PEZ

Yep, my LRP is practically horizontal, and no bot I know can defeat Shadow in the long run, I'm happy. I hope I can get my 2070+ ranking back without many changes. -- ABC

Damnit! You reclaimed the PL title with the latest version. Ehm. I mean, congrats of course. =) -- PEZ

Thanks. But I never really lost it, 2.52.3 was just a test version. :) -- ABC

Can you give us a hint on what you do for evaluating the dangers in Shadow. Its [LRP graph] is simply incredible! -- PEZ

First I need to bring my gun to Bee's standard! ;) It's a fast adapting, log based wavesurfer. But what works for me probably won't work for you. It seems to be all about the small details, like my gun experiment just showed. I lost 10 points just by adding your segmentations to my gun. In the movement department it must be similar, it gives you points if it is better against your problem bots... -- ABC

Amazing. I've been doing some small precision tweaks to my gun lately, and I was worried that some of them might be lowering my rumble score. But then I ran this test:

Wow, Shadows performance in long battles is incredible. I already have some ideas what it could be thats holding Ascendant back in these battles. Cant wait to experiment with them, but sadly i've had not much time recently. I hope i'll find some time for this in the weekend. --Mue

You really are stepping on the heels of Aleph now. I think you need at least 1000 battles to have a reasonable stable meleeranking, although it will never be as stable as the one-on-one ranking. If you add the line below at the bottom of your meleerumble.txt file, your bot will keep fighting prioritybattles until the number is reached.

Thanks for the tip, I'll change it right away. There are a couple of problems with the melee rumble rating system. Each pairing is uploaded twice, inflating the battle count, and the number of rounds per battle should be at least 100. There is just too much randomness in a 35 round melee battle.

About Aleph, if my latest test results are any indication, the title is already mine:

The nice thing about the rumble is that it is not only important how you perform against topbots, but also against the minor bots such as Walls. Note that if you added the line I suggested, you will prioritize every bot which hasn't the number of battles yet.

Looking at the rankings after 54 battles, isn't it time that a page called TheMelee1800Club? is opened? -- GrubbmGait

Prioritizing every bot with <1000 pairings is exactly what I wanted, it's very frustrating watching the client run random battles when you only fought 500 (250, actually).

Looks like 3.58.2 is finally going to make it, cool. Shadow is great at killing simple bots in a melee, last time tested it wins a battle against the sample bots while only firing .1 power bullets... :) -- ABC

Still 8 points difference, I think I'll run some 35 round tests now. Just like in 1on1, Shadow beats everybody else but doesn't reach the top spot in the rumble. -- ABC

In melee nothing is certain, one bad battle just has 18 times more impact than in one-on-one. Aleph still seems to have the upperhand though. About testing against the samplebots with only 0.1 power bullets, I've tried it and I come in third, not even close to number one Walls. I saw a flaw in my targetting though, missing SittingDuck just after switching targets, so there is still some hope to get close to rank 25 . . . ;-) 3.58.2 at least is an improvement over 3.55.1, so keep up the good work! -- GrubbmGait

I noticed, thanks :). Lets see if I can squeeze some points out of Shadow, otherwise I'm afraid I'll get caught in the testing loop again. It's very hard to make changes to a bot that wins every single 1000 round match I run... -- ABC

Well, If we could make the testing process easier by beating Shadow we would... But that's a *long* way off (for me anyway). Welcome back, ABC! --wcsv

I'm not sure if you noticed, but v3.62 is undefeated with over 1,000 matches. Nice job! -- Voidious

Thanks, I noticed ;). Unfortunatly it still didn't manage to go up in the rankings. I have high hopes for the next version, though, I'm doing some promising gun experiments. -- ABC

If nothing ever went wrong, what would you learn from it. As you have far more experience than me in robocoding, you know the drill: one step back, two steps forward! -- GrubbmGait

I don't know if I'd say, "something went wrong." ;) The air's pretty thin around 2050. I imagine it's hard to find points way up there... and I can only imagine. Shadow's phenomenal - even 3.64. --Corbos

I'm usually more like: 10 steps back, 1 big step forward. You bet the air is thin up there! :) -- ABC

3.69g, could you tell us some about what you are testing with the movement? I'm pretty flesh out of ideas on what to test with my surfing... -- PEZ

Nothing new, I'm registering multiple hits for each enemy bullet and adding the danger values instead of computing only the danger of a center hit. Going back to basics really, I must have tried it like this many times before.... I'm also fine-tuning the wavesurfing precison, I made some tests against WSC bots and was getting hit too many times for my liking. -- ABC

Yeah, I've tried that too many times. Never got it to deliver. Running WSC is depressing at times. =) -- PEZ

Of course I never release a new version without testing against Ascendant first, this one scored an impressive 59% (66% survival!) in 1000 rounds... ;) -- ABC

Great! Funny, I never release without testing against Shadow first. That's never very encouraging, but anyway. I like a challenge. =) -- PEZ

I almost never test against the previous version of Shadow, it is always the hardest one to beat for me too... :) -- ABC

For your information CC's results against Ascendant are now 54% and 58% wins. Not as impressing as Shadow's but extremely good for being CC. Ascendant used to pick CC apart with disgusting ease. Shadow (3.69f) gets 57% with 60% wins against CC still. I think that is better than it used to be. -- PEZ

Great results you got there, I remember CC being almost too easy for Shadow, like 65%/70% wins. -- ABC

Now I can't repeat the results against Ascendant. Checking it I see that my log says that it was Ascendant's hit ratio on me that was pretty low during that match. Probably it locked in on the wrong gun in its VirtualGuns array. VGs are a bit scary really... Anyway, CC still beats Ascendant, but not as clear as I would like. -- PEZ

3.69j is a strong bot! It seems not even close to losing a single pairing. I'm impressed and envious. -- PEZ

Thanks, but I had to revert almost everything to 3.66 level. I found a huge bug in my recent attempt at "dynamic dimension weighting" that wasn't working as expected. Turns out that correcting that bug costs me at least 30 ranking points... talk about PerformanceEnhancingBugs! -- ABC

Maybe you can't comprehend your own genius.. -- Martin

That must be it, Thanks! :). The fact is that Shadow's source is full of redundant/obsolete code that makes it very hard to try new stuff. Maybe I should start working on a new bot... -- ABC

Hey, did you change the gun at all from 'm' to 'n'? I was just running TC2K6/FastLearning? for Shadow 3.69m. -- Voidious

Nope, I'm trying to get my movement back to 3.66 level without the huge bug I found. The current gun should be pretty good for the TC2K6, iirc. -- ABC

Shadow's dev version now crushes Ascendant by 60% score (69% wins), I'll release it tonight (v3.66o). If it doesn't bring me back close to 2060 ranking, I don't know what else to do except fully reverting back to 3.66, with all it's bugs, and dedicate my time to Tron/Melee?/Teams?/Something? else... -- ABC

Man, that sucks! Are you sure you haven't introduced some other bug in fixing the first one? It really seems hard to think you could have a major bug and be at a rating of 2050+, but I guess it could happen. (Shadow is a unique tank, after all.) Anyway, good luck in your bug hunt! -- Voidious

I think you can feel very, very, pleased with your awesome bot. It is the strongest bots of all. It is against the strong that strength is measured, remember? Ascendant is a very strong bot too but pitted against Shadow it too has to bow deeply in all its royalness. I will probably never have to choose, but I am pretty sure that in choosing between a bot who has known hard-to-fix bugs with 2060+ rating which wins, but only just against Ascendant and a bot which I have more trust in the code and which crushes Ascendant to pieces and reaches 2040+ I would choose the latter. Maybe you can analyze what catagories of bots you "lose" points against and see if you can figure out some special case or adaption of your movement system that would take care of them too. Or think of it like this: Which bot do you think holds the bigger potential for 2080+ rating scores? -- PEZ

I know, I'm very proud of my PL crown, and I believe Shadow has 2080+ potential. In fact, I know its has, since the AShadow experiment. But I would have to resort to a "mainstream" gun, and I don't want to do that ;). About the bug, it's not really a bug, it's some new code that wasn't doing what I thought it was. It was reseting the statistics for my dinamic weghting every time it registred a enemy bullet instead of accumulating the stats. I replaced it with an bullet "age factor", since I believe that was it's unintended result, but I'm fighting hard to make it perform as good as the "buggy" version. -- ABC

Well, maybe working on something else for a bit would help, actually... pounding away at a single problem works sometimes, but other times it can help to just take a breather for a little while and clear your head. Anyway, I must say that I have the utmost respect for (and fear of) Shadow, no matter what his rating is. Personally, I still think that going undefeated in the PremierLeague - not to mention doing it *consistently* - is more of a feat than a high rating. The rating system is just a little more arbitrary to me, while "winning against all opponents" leaves no room for argument. Anyway, once again, good luck in your quest for 2060 (or 2080). -- Voidious

Nice job with 3.66b... I'm curious, did you have to restore that "bug"? -- Voidious

Yes, it's the exact same movement code as 3.66. I'm not giving up on trying to make it work just as well without that bug though... -- ABC

This has always been my favorite robot, has that grace that I've never seen in any other bot, for some reason, I can't find a link to download it, any idea? - Avihoo Ilan

I don't know, I believe CC and Dokious method is very similar to Shadow, what makes them non TrueSurfers?

The fact that they calculate their movement risk only where the wave will hit them, where a TrueSurfer calculates the risk for all the positions that it will be, going forward and backward till the wave hits (at least that's how I do it). -- KID

What advantage does that have? If the wave is not going to hit until a certain time, the intermediate danger shouldn't be an issue... Or am I missing something? -- Greywhind

Checking all positions in the range and choosing the best is more like GoTo Style, I would say. The idea (IMO) of TrueSurfing is to simplify the decision to: "which direction should I go right now?" I consider the CassiusClay algorithm (not to say PEZ invented it, though he may have), which Dookious is based on, to be the ultimate evolution of TrueSurfing. If you think about how the forward/stop/backwards positions will be evaluated tick by tick, you'll notice that both GoTo? and TrueSurf?/CC-style should end up at about the same (least dangerous) point - but the TrueSurfer? might overshoot it and come back instead of going right to it. -- Voidious

Shadow only calculates the danger of the wave(s) hitting position(s). So, KID, by your definition, Shadow is not a TrueSurfer. Also, calculating every single position forward/backward would be too slow because of my current way of computing the danger. Voidious, I thought GoTo? style would be calculating the lowest risk reachable position, going there and stopping till the wave passed, that is not what I think KID is describing. -- ABC

You're right, I think I did misunderstand him... sorry KID. Still, I personally consider CC a TrueSurf? style. It seems like some of those surf style descriptions could use some updating... -- Voidious

@Greywhind: The advantage is that I can set myself up for the next wave (which I weigh based on dist) where a "normal" surfer really only looks at the first wave and then a point on the next wave that may not factor in, in the end. So I end up surfing all the waves not just the first one.

@ABC How do you calculate the risk for a position? or is that classified?

I calculate the danger using a log-based method, like DinamicClustering? but with guessFactors. Thinking about it, it would'nt be so slow to do what I think you are describing, since I end up with an array of guessfactors/visitcounts. But I do factor in all the flying waves, weighted by distance, at the positions I would be hit by each one of them if I went in each (forward/backward/stop) direction. Like Greywhind said, I don't see why calculating the danger of positions I'll probably never be in is important. You make a decision by adding all the dangers and chosing the best direction? -- ABC

Thought you might appreciate confirmation that you are still the 500 round champ =) (Over Dookious, at least).

Hey, that's some "precision"! At 290 battles you're up over 1.3% per bot compared to 3.66d. That should get you, what, like 25 points? But yeah, check out those trees! I have an implementation at KdTree/BucketPRKdTree you can use, if you'd like. It makes DC just as fast as the GF guns. Welcome back! -- Simonton

Thanks, I've been following your DC research, you're the man! :) In fact, your success is probably what made me look at Shadow's code again, and from there to total addiction is a very small step. I'll definitely look into your tree code, thanks. -- ABC

I was working on a version but never finished the search function (which is only half done as is). :P --Chase-san

Way cool, 20+ points and PL king! :) And it's the same gun as 3.66 with some bug fixes. -- ABC

Very impressive! Have you thought of surfing a DC gun as well? Several bots are doing that these days. Although I feel silly giving you movement suggestions... Shadow is well-known for being impossible to hit. =) --David Alves

Shadow has been surfing a DC gun for years! Its movement is an inverted DC-GF gun, buggy as hell, it's a wonder how it works so well :). But I'll concentrate on the gun for now, I won't be happy until it outscores DCResearch. -- ABC

Hey, since you're back, maybe I can pick your brain a little. =) You once said you use entropy-based calculations to determine your DC weighting. Unless you want to do integrals (which I don't), this means slicing GFs into bins and segmenting on attributes. How do you do this? Or if you don't want to just give the answer, any tips? =)

I've tried a couple things: first, keeping singly segmented VisitCountStats buffers, one for each attribute, and using the entropy of each as the weight for that attribute; second, I tried (once per shot, different tick than aiming) segmenting the last X (eg, 500-1000) scans into singly segmented buffers, calculating the entropy for each, and adding that to a running total that is the weight for that attribute. The advantage of that second method is I am able to also calculate the [mutual information] between every pair of attributes, so, for instance, if two attributes measure the exact same thing (mutual info = max), I would cut each of their weights in half. My dynamic weighting does better than unweighted, but I don't have too many concrete stats beyond that, like how much the mutual info helps or how it compares to intuitive weights.

I had an idea somewhat similar to the entropy-based dynamic attribute weighting, but I figured it wouldn't work. What it was was to take the last x scans that had hits in the same bin (or do this for a range of different GFs), see which attributes are the closest (on average), and then weight those attributes the highest. Unfortunately, you might get high/low GFs due to a combination of different circumstances, so I'm not sure how well that would work. -- Skilgannon

Hah, ABC your as skilled as ever, +20 points, crushing many bots who makers worked many sleepless nights to defeat Shadow. I must say well done. It was my goal originally to beat Shadow in every targeting challenge with my neural network gun, but I have yet to dive back into my lattice design. --Chase-san

Unfortunatly I never found a way to make dynamic dimension wheighting work. I tried using VCS/entropy, correlation, variance, and probably other crazy ideas I don't remember anymore. Shadow's current gun is just a bunch of unweighted normalised dimensions. Maybe I'll try it again someday, but this time with a more scientific aproach, like those concrete stats you mention. Got to stop tweaking based on a single good/bad 100 round battle result.. :) -- ABC

Not to sound like Simonton's advertising campaign, but that's what RoboResearch is for! =) A bunch of unweighted factors, huh... wow. -- AaronR

Tweaking on a single 100 round result, sounds familiar, hrm...... in my case its called being lazy. --Chase-san

Hmm - I thought Shadow did even better than 55% against Dookious over 500+ rounds. =) I seem to remember it being like 4-3. Anyway, Simonton tested his gun on Dooki's movement a little while back and it was very close to Shadow over 500 rounds, so that might be one you'd like to grab and test against: [Dookiton 1.0]. Perhaps I should stop toying with the TwinDuel if you and David are going to make a push for #1... =) -- Voidious

Well technically, it would be just trying to reclaim #1. ;) --Chase-san

In my 1k rounds tests Shadow 3.71 won by 52%/53% against Dookious 1.56 (I always test against the #1 bot ;)). I always test against Shadow's previous version too, so I don't really need another good DC gun bot. I'm expecting this new version to maybe lose a few points in the rumble, it's a work in progress, both the TC and TCFast results are slightly lower than v3.71. -- ABC

If anything, your rating went up. That tree of Simonton's is awesome! And with my tests of Shadow 3.66b vs Dookious over 500 rounds, Dookious wins by quite a big margin (about 56%)-- Skilgannon

I just checked the details, and you now have a few losses, so no longer the PL king =( -- Skilgannon

Holy cow, Shadow just smacked Ascendent. If we're not careful, Jamougha, Mue, and Paul will come back and try to take the kingdom back aswell. Actually, I donno about everyone else, but that would be awesome to see. --Chase-san

I'm trying to figure out a decent method to surf a DC gun, yet keep the movement strong against simple GF guns (Raiko, FloodMini, etc), and to do this I need decaying stats. Now, obviously Shadow has this down pat, so do you mind sharing secrets? I've tried adding 'distance' to scans that are older (ie. further back in the log), weighting them lower when deciding what angle to shoot at, and even restricting the log size. Nothing helped. Any clues? -- Skilgannon

My early experiments have failed miserably, but I have an idea that seems like it could do the trick. The KdTree/BucketPRKdTree comes with a "max depth" parameter to its constructor. If you keep that low, new scans that land in the same leaf replace old ones. This seems like it should have a decaying effect per "segment". If you get it working, though, let me know the secret! -- Simonton

Actually, I had a question about that parameter. What would be a "typical" value for the max depth constant for a slow-learning gun? I figured out what it did after several hours of retyping most of your code into Horizon (to avoid Ctrl-C Ctrl-V, =) but I didn't know a good value for it. I just set it to the number of dimensions (in my case, seven) and left it alone. -- AaronR

That would be a very low value. I use 500 in DCResearch. The original purpose of that parameter is to prevent the tree from becoming infinitely deep when several scans are exactly the same ... or at least deep enough to cause a StackOverflowError? when they are very close to the same. I tried several other solutions to that problem first before coming up with using a max depth, then got excited when I realize it might be a good way to decay stats, too! But don't be afraid to Ctrl-C Ctrl-V, that's why I put the jar out there! -- Simonton

It's been a while since I tweaked Shadow's movement, it's messy code. It currently surfs 2 enemy bullet logs, one for fired bullets and one for hit bullets, I think it just adds the dangers. I "decay" stats by limiting the log sizes, removing old data when it reaches its max size. I don't think I'll need to use a kd-tree unless I start surfing non-fired waves, otherwise the quantity of data doesn't justify a tree, currently 6000 and 1000 waves. It also has a failed attempt at dynamic wheighting code that, IIRC, slightly wheights the more recent waves higher than the older ones. -- ABC

Wow - so it's basically like you just always have CurveFlattening on? I know your movement is killer, so I'm hesitant to offer advice, but based on my own experience with flatteners, I would definitely experiment with making that a dynamic decision based on enemy hit percentage. I guess it's not that surprising with Shadow's PL prowess, after all. -- Voidious

Agreed with Voidious. Leaving the flattener on all the time hurts my score against all but the best guns. I'm curious - how many scans from your logs do you surf at a time? --David Alves

Of course, I forgot, I enable/disable the flattener based on enemy hit rate. About the number of scans surfed: I surf them all! :) You are making me look into some strange code, it currently just builds a kind of VCS array with all the scans wheighted by the inverse squared distance to the current scan. It's not really dynamic "clustering" anymore... :-O -- ABC

Actually I think what part your talking about. I think that entire long block might not be used at all (there was something like that in there o.O) --Chase-san

Wait wait wait. Does this mean we have to kick you out of the TopTenDCParty? And for that matter, I believe FireBird? is doing the same thing now, which might disqualify it, too. I mean, you could say it's cluster the same size as your history ... but that doesn't really make it dynamic anymore ... -- Simonton

Unfortunately we can't kick Shadow, as it is the original DC bot, since it was ABC who introduced it into Robocode.. with Shadow. --Chase-san

But wait, it's more dynamic, because the cluster size is also dynamic! =) Just kidding. Anyway, I don't think this is such a dealbreaker to call it "not DC". If the scans are weighted by inverse squared distance, most of them are getting infinitesimal weights, so you would get the same behavior with some normal cluster size. And it wasn't Shadow that introduced DC / TronsGun, it was Tron, of course! =) -- Voidious

I packaged it after I noticed I was getting 70% survival rate against Ascendant over 500 rounds! Since then I ran a few battles against Voidious, over 60%. I guess it's a "TopBot? killer" version :). Got to find out why it doesn't rank above version 3.73, though...

I know why, but I'm not sure how to explain it. I thought you must have some way to deal with this....but it seems you don't. It has to do with your using PlayItForward?, which is not dependant on lateral direction. I think it would help even more if you segmented instead actual velocity, not just the absolute value. -- Skilgannon

How is PlayItForward? not dependant on lateral direction? I store the enemy's heading using "back-as-forward", so it shouldn't matter if the velocity is + or - . -- ABC

Oh...so you mean the heading is rotated 180 if they are going backwards? Yeah...that should fix that problem...But how about this one: If they are going clockwise/anticlockwise then the deltaheading will be positive/negative, making them moveing in reference to an object 'mirrored' on the other side of them, instead of relative to you, 50% of the time. -- Skilgannon

I'll think a little more about that one, I'm feeling kinda slow right now, must be because of all the festivities... :) -- ABC

Maybe this will be easier to understand: by storing the lateral direction, you are in effect storing which side of them you are on, and thus which side they are moving relative to. -- Skilgannon

An easy way to check would be to store whether sin(eHeading - absBearing) > 0, and if that situation doesn't match the current one add PI to the angle you project your bot at when rebuilding the movement. In fact, that might even be more accurate. I really shouldn't be telling you this, but new years good spirit demands otherwise :-p -- Skilgannon

Thanks, I think I got it. My solution was a bit different, though. I trace the enemys path in the "negative" space, where clockwise and anti-clockwise are swapped, seems to work.-- ABC

That was my original idea, but I wasn't sure if that was possible with your optimized PlayItForward?. If you were reconstructing using delta-heading it would be easy just to stick a negative sign in there. -- Skilgannon

(Edit conflict) Other than Skilgannon's answer (which certainly seems plausible, depending on your setup), I had some of my own:

First thought: It wouldn't. =)

It's possible some enemies really do move differently in each direction - particularly if they have some subtle bug related to relative direction or some such.

You could have a similar bug in your gun somewhere; segmenting on direction might minimize the effect of that bug.

Have you checked if one of the directions is always the more accurate one? And you're sure it's consistent enough, statistically? Sometimes it takes a whole lot of tests to get results accurate down to 1 or 2 decimal places.

It sure is consistent, I've been running 10 season TC2K7 tests for the past 2 days! The difference is from a high 90% to a low 92%, one of the big score differences beeing against GrubbmGrb (88->91). I've checked the code over and over for a bug that could "counter-ballance" it, no luck. -- ABC

That is weird! Anyway, please don't rush to make Shadow's gun any stronger than it already is. =) -- Voidious

Don't worry, this is one of those situations where you think you found a big bug in your code but "fixing" it degrades your performance. I now understand why it worked and may have found a way to maybe slightly increase the learning speed in 1on1, got to run some more tests. -- ABC

I doesn't work, obviously. Sometimes I seem to forget that this is not a GF gun :). I would have to use polar coordinates in relation to my position, and that would make it much worse against the sample bots, can't have that. Maybe I'll try it someday, for now it's back to seeing if I can make it score a consistent 92 in the TC2k7 without major changes. -- ABC

Um....are you sure you're talking about the TC2K7? Shadow currently scores about 81 there...maybe you mean the TCRM? But nevertheless, nice one on the improvement! -- Skilgannon

Yep, 3.77c almost did it. I still have a few more variants to try. Lucky for you the versions optimised against GrubbmGrb seem to score slightly lower. ;) -- ABC

Oh, so close. I'm crossing my fingers for you, bro! I wouldn't count it out after 1143 battles. A lot can happen with another 850 battles, even if it has faced everyone already (which it has). It's kind of scary seeing Shadow with that high a rating... I already feared it enough when I was still 60 points ahead of it. =) -- Voidious

What's up with data saving? Isn't the cannonCaches problem solved? I'm trying the simplest data saving (create/delete a file per opponent) in Shadow and I start getting 0% results after a while in the rumble. -- ABC

Yes, it definitely should be solved. Java 1.5 fixed it, right? And Robocode now requires 1.5. I suppose it's feasible someone's running a 1.4 client with Robocode 1.07 and no -canonCaches argument, but that seems like a longshot. Maybe we can check the server's text files to see who the bad results are coming from. Now if I could just remember how/where to do that... I'll look around. -- Voidious

Just checking, do you have some way of preventing Shadow from saving too much data? That could be throwing exceptions and disabling you after enough battles against different opponents on the same machine. -- Skilgannon

Still, wouldn't that fail at the end of the match when you write the data, and not at the very beginning when you read it? You actually can read from an over-quote directory (like if you package > 200kb of data with your bot). -- Voidious

The problem is not the amount of data, that's for sure. v3.77q saves an empty file for each enemy after the last round. It deletes the file at the beginning, that's where it must be crashing. I checked the battles file in the server, all the bad results come from someone named Rednaxela. -- ABC

Erm, sorry about that. That was me trying out roborumble for the first time and I'm not sure what's going wrong. I'll refrain from running it for now. Gah, what an embarassement that my first intoduction in the public Robocode community goes like this (Hopefully my first public bot will enter more gracefully). Anyways, I'll run some tests with Shadow outside of Roborumble and report back here with if I figure out why I'm generating bad data on roborumble with it. -- Rednaxela

Okay, update on my tests. Running Shadow v3.77q in normal Robocode (not rumble) at full speed for 35 rounds seems to show Shadow operating normally to my knowledge (note, debug output for Shadow reports a total of 1736 skipped turns over the course of that, but I'm not sure if that's considered normal for Shadow or not). Anyone have any suggestions to figure out why running RoboRumble here seems to be generating polluted data? -- Rednaxela

Hi, and welcome! Don't worry, the rumble client is sometimes hard to configure properly. And it's great to see a newcomer contributing. Do you have a separate directory for the rumble or do you use the same where you run your local tests? I don't know if those skipped turns are normal, I always increase the robocode.cpu.constant.1000 in my clients so I don't know how Shadow behaves in a standard setup. These last versions are kind of slow, so 1736 skipped turns doesn't sound too bad, as long as it still wins the fight ;). Best of luck with your bots, btw. -- ABC

Thought the least I could do for roborumble before I enter my current obsession was contribute a few cpu cycles. Well for local tests I've just been using plain-old-Robocode 1.5.1 built from SVN with nothing else. I run Roborumble from the same build, and they also share the robots directory. By the way, when I adjust the slider to run the battle slower in Robocode, Shadow does more like 500 skipped turns instead even though the CPU constant is the same, and yes Shadow still wins the fight at least against my current bot in development (Though I do tend to get about 2 wins out of 35 rounds, and that's with my current movement blindly running into walls too.... so we'll see...) Thanks. -- Rednaxela

Strange, if you use the same dir the error should happen in a normal battle too. Could you check Shadow's data dir in the robocache to see if it saves a file for each opponent? -- ABC

Not seeing any exceptions at all or anything odd looking in Shadow's output text. Just checked in the robocache, and I am seeing Shadow having (0 byte, which is expected given what you noted above about v3.77q) data files for opponants it's fought. I'll soon give updating Robocode/rumble to newer SVN if no other ideas show up. Anyways as it's now 4AM here, I'll sleep on it

Alright, I did some more testing using the newer Shadow 3.77r. I ran Roborumble with upload disabled, and found that some bots, including Shadow were still posting 0 or very low score alot. I then ran some of those matchups where Shadow got 0 score, outside of roborumble, and Shadow is back to winning. I'm very puzzled as to why my rumble client is behaving like this -- Rednaxela

Can you check the .sh / .bat file for the RoboRumble and see how much RAM it is allocating? It's an argument like -Xmx512M. I think the RoboRumble defaults to 256 while the Robocode one defaults to 512. That could be the problem, but I'm not sure. Anyway, welcome! And like ABC said, no need to be embarrassed - setting up Robocode / RoboRumble has gotten easier in recent years, but it's still common for newcomers to run into these issues. -- Voidious

Yes, you're right that RoboRumble is defaulting to 256. I just tested though, adjusting RoboRumble to 512, and the results are still showing Shadow and others abnormally losing with 0 score. -- Rednaxela

Ah wait, I didn't remember correctly, my copy of 1.5.1 was packaged. Anyways, I justed tested with 1.4.9 roborumble (upload disabled), and Shadow started scoring again. I then downloaded the 1.5.2 package and tested with that, and it also worked, so it's looking like a 1.5.1-specific bug. I'll update my main install for 1.5.2 in a moment and hopefully everything will be good. -- Rednaxela

Make sure you remove the results1v1.txt so that all your faulty battles don't get uploaded. Of course if you've completely re-installed that shouldn't matter =) -- Skilgannon

Done, and now Shadow and friends seem to giving good results, so now uploading real data to RoboRumble :) -- Rednaxela

Unfortunatly Shadow 3.77r is still getting bad results, I re-enabled the data saving for testing. I checked the server again, and it's not your client uploading the bad data, but someone named ProudsHost?. I will install Robocode 1.5.1 to see if I can figure out what's going on. I always end up disabling data saving, but now I'm curious if/why it doesn't affect other data saving bots... -- ABC

Best of luck figuring out what is going wrong with 1.5.1. I recall that there were some other bots that were getting unusual zero scores though can't remember which ones. I'll keep uploading good results with 1.5.2 to do the best I can to balance the bad results coming from some people using 1.5.1 -- Rednaxela

Well, coudn't reproduce the eror locally with 1.5.1. But with Shadow 3.77u I tried saving data in a more "standard" way, namely not deleting the file at the beginning of the battle. So far there have been no strange results (apart from it not scoring as good as I expected ;)), so the problem must be some security exception when deleting files. I also just noticed that it doesn't save data when run from Roboleague, anyone knows why? -- ABC

Well, this might be a bit late, but I think I came across an explaination for your RoboLeague issue the other day. If you look on the RoboLeague page, it appears Voidious is asking about the same thing and Florent replies with "You should add user.cmdline=-Dsun.io.useCanonCaches\=false to launcher.properties" which I'm guessing will fix this for you too. -- Rednaxela

In Shadow 3.81f I went all the way with the gun. It uses 2 trees with slightly different dimensions, each with 2 cluster sizes and 3 different MultipleChoice methods. A total of 8 "guns", or predictions per aim, with a simple virtual gun setup: the one with the most virtual hits gets used. I optimised it against most of the TC2K7 no-surf bots. It scores high up there with Dookious and Phoenix in the no-surf category (87.6 after 5 seasons), with some impressive highscores against DM (92.83), RMC (84.71) and GG (93.17!). I lost a few points against the surfers with this setup, but still the total score is very good, 81.72. How can this gun not be worth some good points in the Rumble? -- ABC

The Rumble is a cruel mistress... :-\ Sorry, man, I know how frustrating that can be. It reminds me of when I gained 5 points in the RRGunChallenge and actually lost points when I released that gun with Dookious. It can't hurt to try a rerelease of each version you're comparing, though, right? Maybe there's some drift or fluctuation behind this. I'll keep a client or two going for you if you do... Maybe there are just not many points left in your gun at all, anyway? Feel free to try a version with Dooki's gun for reference, if you'd like. -- Voidious

Heh, I feel kind of like that with the neural pattern matcher gun I'm working on in Gwynfor because I'm just a brick wall with one specific issue. Perhaps movement becomes worth far more points at this point? Perhaps it would be worth looking at the results of specific bots the changes lose points against? -- Rednaxela

Movement is always worth more points than the gun ;). I just don't believe there is a situation where "there are no more points left in my gun", especially when a very small tweak can change the TC500 score against GG from 88 to 93 :). Anyway, I would love to get back to movement, but I just can't for now. I know that I'm close to some significant gun improvement, I won't stop until I find it, or until I get into "RC overdose" mode and have to take a break... cruel mistress indeed. :\ -- ABC

Hmm, well... I suppose one thought is that movement and the gun are not entirely seperate. For example, if I understand what happened correctly, DrussiousGT didn't do better than DrussGT and Dookious despite taking what was thought to be the stronger gun and movement of each. Perhaps there is more points left in the gun, but I'm suspecting that maybe when the gun gets a a certain point, tweaks under one movement are invalid for under another movement, due to how your movement affects the opponant's evasion quality. After all, if you gave my TwinDuel team a high quality gun tweaked for it's movement, the same tweaks may not be effective if that gun were put on a different team. That example is particularly biased due to how agressive LunarTwins movement is and that it will almost always trigger things like dive protection if it exists, however, surely your movement would always effect the opponant's movement and thus evasion quality to some degree. Of course I've yet to experience tweaking a bot for the rumble and I'm just rambling about by what I've observed. I might be rambling about the obvious or spouting nonsense, so sorry if I'm being redundant or wrong :) -- Rednaxela

Sure, the movement can influence the enemy's behaviour and your own gun performance. But with the exact same movement the gun can always be improved upon, except if you have 100% accuracy against everyone, and we are still a bit far from that ;). The changes that will impact your rumble rating the most may be dependant on your gun balancing out your movement's problem bots, but still an "absolute" gun improvement is always possible. Then there are the surfers, quite a few these days, against who your gun improvements can actually degrade your performance and make it so that sometimes small bugs actually gain you points. That's why I've been optimising mostly against the random movers. -- ABC

One thing that I noticed during testing againts 3.81f is that you don't rebuild the waves' dangers after being hit by a bullet. Only new waves get the updated stats. Doing this can save you a couple bullet hits during early rounds... at not much of a performance hit. -- Skilgannon

I haven't watched Shadow's behavior in this regard but I thought I'd chime in with my thoughts about rebuilding wave dangers in such situations. For normal surfing dangers, I do it like Skilgannon and update the danger of all waves when I get new information, however in the flattener dangers I don't update old waves with new information. My thought is that with normal surfing dangers, you're trying to reconstruct a rough model of how their gun fires over an extended time period so new data can be helpful in waves that have already fired, with flattener dangers however you're essentially presuming the opponant is an adaptive GF gun or something similar (at very least, some sort of adaptive gun) and dodge that, in which case I think it makes the most sense to only use the information the enemy had avaliable when they fired. I haven't been able to verify if my theories about this help much in practice, but that's my thoughts/theories/ramblings about when wave dangers should and shouldn't be updated. -- Rednaxela

I reached exactly the same conclusions, however due to my implementation, if the hit data gets updated for the wave, the flattener data also gets updated. It would be fairly easy to fix, but I doubt worth the bother. -- Skilgannon

You are right Skilgannon, Shadow never rebuilds the waves' dangers. Maybe I'll try changing that sometime, but I'm not sure that those hits are important in a battle. My reasoning is that I'm reenforcing the enemy's gun data, so maybe I'll dodge a couple of hits later because it will take him longer to realise I'm not there anymore. Anyhow, I'm not ready to mess with my movement code just yet, I'll just try a few small gun ideas I had while "away" (you can leave, but Robocode stays in your head like a plague :)) and see where that leads me. -- ABC

The main reason I was suggesting this is because against the simple targeters the quicker you adapt the less hits they can get against you. But perhaps it doesn't matter, I dunno =) -- Skilgannon

You are probably right, I always think about optimising against the better guns. Maybe I'll try it only in the first round. -- ABC

Ok, version 3.82a recalcs all the flying waves in the first 3 rounds. -- ABC

Interesting, 3.82a lost the edge against some top bots while still maintaining its ranking. 3.82b recalcs dangers only when it's not using the flattener. -- ABC

It works, thanks for the tip Skilgannon :). And it should be much faster against weak guns, I was computing the flattener danger (= big log) even when I wasn't using it. Now I feel tempted to tweak the theshold for activating the "simple gun" mode... -- ABC

One little thought, is in some ways it may make sense to have a separate threshold for when to activate the flattener and when to stop updating waves that are in midair. My reasoning is, mistakenly not updating midair waves is far less harmful of a mistake than mistakenly turning the flattener on, and in addition not updating midair waves should be good against most adaptive guns even if weak where as the flattener may not be helpful against some of the weaker adaptive guns. Just a little thought that came to mind. -- Rednaxela

Agreed, I'll try separating them soon. I already have separate simple/top gun flags, originally intended to separate the simple/learning/anti-surfer guns, but currently I only use the simple one for the flattener (and now for danger recalc). It's very hard to optimise these things, and I always tend to reject changes that decrease my PL ranking. ;)

Version 3.82d separates those 3 groups. The flattener is on for all but the simplest guns, and flying waves are recomputed on hitByBullet? (and bulletHitBullet? ) for all but the best guns. The few tests I made look promising, as do the first few rumble results. I'm going to bed with my fingers crossed. :) -- ABC