Robo Home | Changes | Preferences | AllPages

/TargetingLab /MovementLab

Bot Name




What's special about it?

Wow, there's a lot more to list here than when I first made this page!

Great, I want to try it. Where can I download it?

[here] :)

How competitive is it?

Well... RougeDC Gamma1 seems to have a stable ranking of 12th (~2080) at the time of this writing, which is certainly nothing to scoff at... :)

How does it move?

Orbital WaveSurfing movement. Changes attack angle to attempt to distance.

How does it fire?

My very own fancy gun, which focuses on a form of CrowdTargeting and is primarily a DynamicClustering-GuessFactor gun, with a PatternMatcher thrown in sometimes.

How does it dodge bullets?

As mentioned above, WaveSurfing :)

How does the melee strategy differ from one-on-one strategy?

They don't differ. My code to handle enemy data is melee-ready except in the gun, however the tactics of the bot are not (yet). Also, even trying it in melee as in it's current form seems to lead to skipped turns for some reason.

How does it select a target to attack/avoid in melee?

It would select the nearest living target that it's seen within the last tick. Note this isn't made for melee.

What does it save between rounds and matches?

Saves all surfing and targeting data across rounds, nothing across matches.

Where did you get the name?

Well, it's a silly play on my handle "Rednaxela", translating the shortening "Red" into the french word for the colour. DC stands for DynamicClustering as that's the main thing I'm using for stat handling

Can I use your code?

Well, I'm releasing it under the RWPCL, but I' strongly advise you, that the best way to really fully understand algorithms is to implement them yourself...

What's next for your robot?

Does it have any WhiteWhales?

Well, as of Gamma1, there are about 11 enemies that I do not beat, but particularly frustrating is not beating the mini WeeksOnEnd and particularly humiliating is the margin by which Dookious beats me (nobody else beats me even close to that bad!). Since then, Dookious has still been given RougeDC the most humiliating whippings that anyone has gives RougeDC.

What other robot(s) is it based on?

Besides that all the code is from scratch.
Credits also go to:

Version History

Alpha12 - 30th (2015), 43rd (573/0/46) PL

Alpha13 - PULLED Alpha13a - 26th (2037), 39th (582/0/39) PL Alpha14 - 23rd (2049), 38th (582/0/38) PL Alpha15 - 23rd (2049), 37th (584/0/36) PL Beta1 - PULLED Beta2 - PULLED Beta3 - 39th (1985), 52nd (566/0/58) PL Beta4 - PULLED Beta4a - 18th (2064), 19th (606/0/19) PL Gamma1 - 12th (2078), 11th (613/0/14) PL Gamma2 - 12th (2077), 7th (618/0/10) PL Gamma3 - PULLED Gamma4 - PULLED Gamma4a - 13th (2074), 26th (611/0/23) PL Gamma5 - 18th (2066), 24th (612/0/21) PL Gamma6 - 23rd (2054), 34th (601/0/31) PL Gamma7 - ? Classic - ?


see /TargetingLab and /MovementLab


Haha, well fixing my handling of BulletHitBullet in Alpha13 certainly helped things all around the board, except against HOF. I suspect the slight drop against HOF is due to to not-quite-head-on shots being detected by BulletHitBullet sometimes, causing me to dodge those points instead of getting as far as possible from head-on sometimes. I suppose I should try to figure out some way to fix that. Anyways, it's too early to tell for sure but it's looking like this fix is also helping the rumble rating... -- Rednaxela

Woah! Looking at the [result comparison] it appears there was a sudden burst of bad results! I can't seem to reproduce those here either... Is this a bad client? Or am I crashing? Gah... this is annoying...
One possible cause that comes to mind, is that someone may be using a Roborumble client with a version below 1.5, and RougeDC depends on the StatusEvent of 1.5 and up, and I'm suspecting that I don't immediate crashes though in old versions, and thus am getting bad results on old clients... Anyone know if there's a way to know which robocode versions are uploading different rumble results? Anyone running such old clients currently? Anyone know of a way to code a strict robocode version requirement in my bot? =\ -- Rednaxela

It might be that old laptop I started up, I'm not sure if its running 1.5.3. I can check/turn it off in about 5 hours when I get home, sorry bout that. -- Skilgannon

As an idea of how to avoid getting this happening, how about if your bot doesn't get a StatusEvent? in the first tick you throw an exception at the start of every round? -- Skilgannon

Thats happening either way :) I dunno how it got the ~5% scores, possible due to ramming or something like that. --Krabb

Ahh, so that's what's going on. Well as far as getting ~5% scores, It's probably because my own bot code depends pretty heavily on the StatusEvent?, however the RaikoGun? that's plugged in doesn't depend on it at all. I'm going to test with 1.4.x and verify what the problem is and make sure I give 0 scores on that from now on.
Update: Hm, just loaded it up on an old 1.4.7 install, and it reliably crashing right away so I guess I don't know how those ~5% scores are happening. I'll add a little code to more explicitly deal make sure it dies when there is no StatusEvent? and rerelease though... -- Rednaxela

Okay, released Alpha13a, which goes into endless loop when it receives neither a DeathEvent, WinEvent or StatusEvent on a particular tick, which should force the "No score will be generated" response of Robocode. That should make sure those ~5% scores won't happen. -- Rednaxela

Well, being inspired by GFMicro/DCResearch and Voidious/SegmentationResearch, I decided to do some segmentation research of my own, but this time for the purpose of DC-WaveSurfing instead of guns like most people seem to with segmentation research. I implemented a recorder mechanism that records the data I have on their targeting, and simulate how well I could predict it ahead of time with given weightings, and use genetic algorithms with JGAP to attempt to find good weightings and number of nearest neighbors to find. I'm still tweaking my setup for that but it's getting there and is rather interesting... :) -- Rednaxela

Hmm, one result that is surprising me currently, is that JGAP is always optimizing to about 2 or 3 nearest neighbors, even with the weighting based upon distance between situations. Without that weighting it goes to 1 always, but with the weighting it seems to always prefer either 2 or 3 nearest neighbors for giving the most accurate DC results. -- Rednaxela

Wow....very interesting! I'd be interested if this is only against 'bottom bots' or top-bots as well? And how about segmentation? What kind of info are you getting? =) Inquiring minds want to know =) -- Skilgannon

Well, currently my test data consists of 14 battles of 35 rounds, against Shadow, Dookious, Splinter, GrubbmGrb and a few other bots. I'm currently just saving data whenever I get hit or a bullet-hit-bullet event happpens, keeping track of some segments of myself and the GuessFactor that they aimed at. I then roughly simulate my WaveSurfing's danger calculations at the points they aim at, given prior data in that battle. I then add up the total danger calculations I simulated at the actually dangerous points, and use that as the fitness function. I want to test with more sample data some time, ideally I'd want one battle against every bot in the rumble, however even these 14 battles, take a LONG time to run the genetic algorithm on. Currently I just use segments of LateralVelocity, AdvancingVelocity, distance, and total time (a little trick I use to get a rolling-average-like effect with DynamicClustering), but I hope to make it consider more segments in the future. Here's one configuration it seems to like for my current data set, and then a second configuration it seems to like even better, and after tweaking the genetics in a way to get good results quicker, it found the last one here considerably better even:
Nearest neighbors LateralVelocity AdvancingVelocity Distance Total time
4 0.993389592890534 0.038814144904639525 2.9554100825690544E-4 2.924859003238245E-4
1 0.9977895653829506 0.04910180241543283 0.005621559986803137 2.310973024166607E-6
1 0.9920819050479935 0.9241526977886156 0.09578395540975759 0.039630267470545544
-- Rednaxela

Okay, I had some major bugs in my fitness function calculation, so ignore the number above completely. I haven't managed to fix it yet except for the case of 1 nearest neighbor only. It's also now set up so the weights always add up to 1.0 nicely. Here's a saner result of about what it converges to for my current test data:
LateralVelocity AdvancingVelocity Distance Total time
0.7884306118120862 0.20010123405036753 0.011322965580070442 1.4518855747578302E-4
That looks much nicer, and far more like what one would expect for good weightings I think. -- Rednaxela

Well, I made some test data based roughly on MC2K7 battles, and according to running the genetic algorithm on that, LateralVelocity and AdvancingVelocity were by far the most useful segments, with distancing coming next, and time being an utterly useless segment overall. So I got rid of my time and angular velocity segments, and added a lateral velocity segment. The result in the MC2K7 (see above in the challenge section), was a slight decrease against GrubbmThree (might just be random chance), a large decrease against the advanced bots, however a notably increase against Splinter, GrubbmGrb, Waylander, and RaikoMicro. I think the reason for how this worked, is that now my segments are better overall, however the lack of time segment to promote a rolling-average type effect made me far more vulnerable to the anti-surfer guns of the top bots. I'm going to enter the new Alpha14 into the rumble in moment, and I wonder how that will do. I now wonder.... perhaps now is time to add a flattener and perhaps use that time segment to simulate the rolling nature of anti-surfer guns... -- Rednaxela

Well, I just added a little code to give it the option of recursively changing direction in the precise prediction, every time a wave passes the center of the bot. In other words I'm handling multiple waves kind of like X2 and Dookious do, however, instead of just dealing with 2 or 3 waves like they do, I'm recursing the precise prediction though ALL movement options for ALL waves and I'm still not skipping any turns at all. So, this is making me happy. I'm currently running MC2K7 to benchmark this change. Currently, it's looking like not only will I have a record MC2K7 score against GrubbmThree, but also against Waylander too. So anyways, this is looking very promising and I'll post the MC2K7 results and release the update to the rumble when I've finished running MC2K7 on it. Update: Well, a MC2K7 record on Waylander was overly optimistic it appears after more seasons, but still this change is giving notable improvement over my last revision. I'll update more when I've got enough seasons run. -- Rednaxela

Well, this release was a bit of a flop really... From what I can tell though it has more precision now as far as giving the option of direction changes, it is also threw off the tuning of when is/isn't good to weave between waves. The problem now appears to be, that now weaves far too much against 'wobbly'-guns like HOF and Splinter, causing it to not get as far as possible from the danger area, in favor of weaving... I'm not exactly sure how to fix it, and I might give it a break when I'm having final exams this next week... -- Rednaxela

Well, I've been quiet for a while but nope I'm not dead. I've been having a slight break from robocode but I think I'll be getting back into it. My current focus is trying to figure out how to get team scan sharing integrated into RougeDC, in preparation for using it as the base for creating my planned RoboRumble team RedMoons The difficulty I'm having is with trying to smoothly integrate reading team scans into the class I use to represent enemy robots. Mainly, it's being a real big pain to deal with the fact that the team scans are 1 tick old, and my "handleEvents()" method and the way I dealt with everything before worked under the assumption of all events being equally recent. I think I'll be able to figure something out eventually, however it's seeming that dealing with team scan sharing can get rather bothersome. :) -- Rednaxela

I remember working with a rudimentary team, and I the way I got around this was by giving each scan a round number and time, so that the relevant data would be called on when sent to teammates. -- Skilgannon

Hmm, well recently I ported RougeDC's base, to use the new interfaces in Robocode 1.6 (this allows some parts of my code to be much cleaner), but only just now realized that it only works when Robocode is started with "-DEXPERIMENTAL=true" currently. I'm wondering what other people think: Is it okay to release a rumble that only works with 1.6 AND "-DEXPERIMENTAL=true" to the rumble? Should I just revert this porting for now? Should I do the "only run on my machine" thing that I've heard of some people doing for their bots? -- Rednaxela

Unless you're working around codesize constaints, it would be preferable to not release a 1.6-only bot into the wild. If you want to run all the battles on your machine then that's fine, just put a bogus link on the participants page and put a copy of the jar in your robots folder. But that creates the problem, if someone else releases a bot, they won't get battles against you unless you run your client again. And I wasn't even aware that 1.6 added new interfaces, I'll have to take a look =) -- Skilgannon

Well, supposedly "-DEXPERIMENTAL=true" won't be needed to use the new interfaces some time in the near future, and no, this isn't about codesize constraints, it's purely about keeping one part of my code considerably cleaner (in my opinion anyways). I guess that for now I'll just go with making it 1.6-only and only run battles on my machine for the moment, but I'll if it's starts becoming too long until "-DEXPERIMENTAL=true" won't be needed, then I'll consider porting back to the old interfaces. -- Rednaxela

Well, I tried running the new release that finally moves away from the Raiko gun in the rumble. Unfortunately, despite it working fine ouside of RoboRumble, it keeps getting 0 scores in the rumble. Perhaps "-DEXPERIMENTAL=true" doesn't work in RoboRumble? Perhaps it's something else? In any case, I'll look into this further tomorrow, because now it's getting late. -- Rednaxela

Woah there! It's only been 1000 battles so far, but it appears RougeDC Beta4a has only lost to a mere 14 bots out of them all! If this keeps up, I'll be in the Premier League Top 10, even if my RoboRumble rating isn't much better than in Alpha15 :D -- Rednaxela
Update: Well, now there are 20 bots it loses against, but even so it's faring considerably better in the Premier League than it did with the Raiko gun which is quite nice. -- Rednaxela

Bah... bugs... I was running RoboResearch and noticed one line like "0: : Result ags.rougedc.RougeDC TC37 vs. kawigi.mini.Fhqwhgads 1.1TC: 1.83 (battle 9), took 21 sec" happen. That's both a ridiculously poor score, and the battle ran far faster than normal (a normal time for that pairing would be something like 47 sec) however, whatever this bug is I can't seem to reproduce it! Gah! If anyone has any sorts of suggestions for locating this kind of elusive bug, it would be quite welcome -- Rednaxela
Update: Well I found the code where the exception occurred, but I'm not sure of the root cause that allowed data to get in a state that made it possible... In any case I made a tentative fix by adding one extra safeguard to where data is added, and added a "try...catch" around the problem spot so it will just print the exception so at most it will ruin one bullet instead of a whole match... hopefully... -- Rednaxela

Well, in response to getting frustrated at non-working ideas, I made a silly gibberish/poetry generator. Here's a sample of something you might see RougeDC say at the end of a round some time:

We dance in bullets.
We rescue a box.
I eat a pineapple.
-- Rednaxela

Err... This is a touch embarrassing, but I seem to have lost ags.rougedc.RougeDC_Gamma2.jar (possibly my most successful version) and can't find it. I might have had a copy on robocoderepository.com (a couple versions I uploaded there), but that's down. From [this] I can see that someone has it a around still, so... would someone be kind enough to upload this poor lost version? -- Rednaxela

Robo Home | Changes | Preferences | AllPages
Edit text of this page | View other revisions
Last edited September 24, 2008 3:11 EST by Rednaxela (diff)