From Robowiki
Jump to navigation Jump to search

This was supposed to be my Melee bot, but to transform 2nd places into 1st place it was needed a good OneOnOne code. So I ended up improving only the WaveSurfing, I wasn't going to release it yet, but the tests results were so good I had to see it in the rumble. --zyx 09:01, 4 March 2009 (UTC)

Oh oh, my Pallas took similar ideas to you, difference weighting. But I'm going to the way of dynamic weighting and dynamic cluster size, too.

DrussGT made me use Simonton's tree, some of the parameters when creating the trees or clusters are from him.

Me too. I learn the way of use it from DrussGT, but the main reason is Shadow use it =)

One more question, you said it melee bot, but with DC-GF? » Nat | Talk » 12:47, 4 March 2009 (UTC)

I meant to start as a Melee bot, but I have only done the OneOnOne part of it. But in any case, the melee gun will be a DC-GF it just need a different approach than the current gun. --18:32, 4 March 2009 (UTC)

Very nice looking score there, can't wait to see how it's ranking stabilizes! I really need to get SapphiricMuse working and out there before before you overtake RougeDC :) --Rednaxela 21:16, 4 March 2009 (UTC)

Thanks, well I don't think it will move much more, so RougeDC seems to be safe :p. But FastTrig will let me do many things I couldn't because of skipped turns, soyour about to hang yourself, I just don't know if I'll have time soon to work on Robocode. --zyx 00:02, 5 March 2009 (UTC)

Hey, you won Phoenix!!! Hope you will win Shadow sometimes, currently 49.11% Cheer! You'll be in TopTenDCParty in short. One more, what timezone do you in? I've edit conflict right now but I think I've unique timezone that almost no robocoder online while I'm online. » Nat | Talk » 00:07, 5 March 2009 (UTC)

It can beat Shadow sometimes, but it seems too dependent on how the first one or two battles turn out, and how many BulletHitBullet events happen, which seems to be the event that helps my movement the most. My TimeZone is GMT-4, so right now is 8pm, perfect time, but I have a unique timezone, because I tend to stay up all night and go to sleep at 6 or 7 am :S, I'm a night person :). --zyx 00:14, 5 March 2009 (UTC)

Congratulation! You have enter The2000Club! I've take a screenshot for you: [1] » Nat | Talk » 01:46, 12 March 2009 (UTC)

:-) Thanks. --zyx 02:39, 13 March 2009 (UTC)

What do you mean? "howto borrowed fro Nat" ??? » Nat | Talk » 03:56, 19 March 2009 (UTC)

  • I'm really dumb when it comes to web/Wiki stuff, so I copied how to link a subpage('''[[/VersionHistory]]''') from BlackHole :-). And also little ideas on how to organize the version history info. --zyx 07:58, 19 March 2009 (UTC)
  • Er, btw I see your signature was a little odd there. You may already know this, but just to double check, are you aware that you can just type --~~~~ to automatically get a nicely formatted/dated signature? --Rednaxela 08:08, 19 March 2009 (UTC)
  • Hehehe, yes you already showed me :-). This happened to me before, but this time the edit was so small I didn't preview it, it's an extra ~. Thanks --zyx 08:51, 19 March 2009 (UTC)
  • Do you mean 5 ~? like --~~~~~? I recently think that you just blankout your Nickname. (I sign this post with 5 ~) Nat --10:21, 19 March 2009 (UTC)
  • For me 5~ prints --> --15:48, 19 March 2009 (UTC), and 4~ prints --> --zyx 15:48, 19 March 2009 (UTC)
  • Also, interestingly, 3~ prints --Rednaxela. 2 and 6 don't do anything though. --Rednaxela 16:10, 19 March 2009 (UTC)
  • You will found that 3~ prints and 4~ prints are documented on MediaWiki Documentation, but I don't found document on 5~print somewhere. Now I sign with --~~~ ~~~~~ » Nat | Talk » 01:50, 20 March 2009 (UTC)

Very impressive PL score with 0.1beta Zyx! Poor RougeDC getting knocked back in rank... I really hope I find time to get my next bot up there beating any of the old stuff... :-) --Rednaxela 04:54, 20 March 2009 (UTC)

  • Thanks, although I don't know what the PL Score is. I'm sure you will. --zyx 05:56, 20 March 2009 (UTC)
  • The PremierLeague (see old wiki page) score where you get 2 points for every enemy you have over 50% against, 1 point for every one you have exactly 50% against, and 0 points for every one you have less than 50% against. It's nice for measuring how few bots yours loses to, and YersiniaPestis loses to very few even compared to other high ranking bots :) --Rednaxela 06:49, 20 March 2009 (UTC)
  • Really? I think the it isn't exactly 50%, I think I get 2 points from >60%, 1 point from <60% && > 40%. » Nat | Talk » 08:00, 20 March 2009 (UTC)
  • Oh I see, I saw that page on the old wiki, but I didn't know it was actually taken into account. Well when I started Robocode my main goal was to not lose against most bots because I thought that was the actual ranking, and I don't like loosing :-). --zyx 14:42, 20 March 2009 (UTC)
  • Well that's not directly used in the APS/ELO/Glicko scoring columns, but that is the whoe point of the PL score column which you can click to have it order by. Counting ties as a single rank, and presuming DrussGT's new version moves back to where the old one was: "YersiniaPestis 0.1beta" ties for 5th place in PL, with my "RougeDC balance" tied for 6th in PL just one win behind YersiniaPestis. Both of our bots get beat by Dookious/Shadow/Ascendant/DrussGT, YersiniaPestis gets beat by Tigger/WeeksOnEnd/Locke, and RougeDC gets beat by SandboxDT/Chalk/Phoenix/YersiniaPestis. What's amusing though is by how huge a margin that Dookious/Shadow/DrussGT cream RougeDC, yet YersiniaPestis only looses by a smallish margin. In other words... while RougeDC may be ahead in the main rankings, YersiniaPestis seems to be in the lead when it comes to fighting other high-ranking bots. :-) --Rednaxela 15:44, 20 March 2009 (UTC)
  • I had already realized that the Rank column came from APS so I started improving APS instead of PL, around Newton 2.1 (Newton 2.0 was much better I'd guess(didn't really check since didn't know the meaning) in PL that 2.1, but was way lower on Rank). Now that I know what PL means it will be much easier for me to check, I used to go in the bot's detail and see the Pairings Won % as my second measure of how good it was, but I had to compare only a few bots since it can be sorted by that, but sorting by PL should be the same and now I can check it on one click :-). About good bots and lower ranking, I'm currently trying to improve my surfing to be better against simpler bots, and your reasoning is the same I had, YersiniaPestis is very good against top bots but is not getting enough kick out the simpler targeting systems. The problem is that is hard to improve one thing and keep the other, I have a surfing that can get nearly 100% against HOT, Linear and Circular, but it performs way worse against the top bots, and maybe it can improve the ranking, but I don't want to loose points against to top bots, I even have more satisfaction from seeing the top bots have a hard time :-) --zyx 19:45, 20 March 2009 (UTC)

Just want to know, how to include another file than source and class to .jar file? » Nat | Talk » 08:08, 27 March 2009 (UTC)

  • jar files are actually in zip format, you can open them with any program that handles zip, I use WinRAR. I package my robot in Robocode, and then open it and add the extra files I want. --zyx 17:23, 27 March 2009 (UTC)
  • My WinRAR report error every time I try to added =) » Nat | Talk » 04:19, 28 March 2009 (UTC)
    • But you are able to open the jar file with WinRAR successfully? If you are you should be able to drag files to it, it will ask you if you want to add it, click yes and you are good to go. If it doesn't work, please be more specific on what error it reports to see if I can help more. --zyx 04:55, 28 March 2009 (UTC)
      • Whoops! It work for now! Thanks. I not sure why it not work in past. » Nat | Talk » 06:11, 28 March 2009 (UTC)
        •  :), your welcome. --zyx 07:52, 28 March 2009 (UTC)

Congrats on climbing to the top of the PL ranking! With one pairing still open, you've got a good chance on holding that spot through 2000 battles... --Darkcanuck 15:46, 3 April 2009 (UTC)

Thanks :-), my fingers are crossed so it will hold it. --zyx 16:26, 3 April 2009 (UTC)

Congrats indeed! This is very impressive! Hmm, I'll need to speed up work on SapphericMuse once summer comes in order to try to beat this... :) --Rednaxela 21:01, 3 April 2009 (UTC)

  • Isn't summer came already? » Nat | Talk » 04:19, 4 April 2009 (UTC)
  • Well, there are various defitions[2]. The definition I use is when Winter Semester at my univerity ends --Rednaxela 04:50, 4 April 2009 (UTC)
  • Well well, I can't get you still. If I use your definition, my summer started a months ago. » Nat | Talk » 08:01, 4 April 2009 (UTC)
  • Thanks man, but you are to blame. When I learned there is a PL score I switched back to improve that instead of APS. I figured I had much more chance on winning there, actually version 1.3.3 is much better APS wise, but it never beats Dookious and has some problems with Phoenix so I had to use 1.3.7 which is more balanced. --zyx 19:20, 4 April 2009 (UTC)

Wow, YersiniaPestis is the undefeated PL champ now? Congrats, man, that is awesome and super impressive. --Voidious 15:25, 27 April 2009 (UTC)

Thanks man, but I fear it won't hold out for too long, many people has been active in their robocoding specially Skilgannon, and DrussGT 1.3.7 already beat it(they only have one battle, but still). And I'm currently too busy to work on the bots. But honestly it made so happy when I was able to beat Dookious, I really like that bot. --zyx 01:15, 28 April 2009 (UTC)

Pattern Matching

Can someone point me to a very good PM Gun? I have read Waylander's (in DrussGT) and Simonton's WeekOnEnds and WeeklongObsession guns. And tried to make my own implementation based on those, but I haven't really liked the outcome. --zyx 19:23, 4 April 2009 (UTC)

If you can get hold of a copy of SeaSerpent by Kev that would probably be your best bet. Otherwise take a look at Toorkild, although you may want to switch the pattern-rebuilding to velocity/delta-heading to make it more accurate. I couldn't fit that in, what with it being a micro and all. But Toorkild's gun is ~20 points better than Waylanders, in the Micro Rumble at least. --Skilgannon 21:38, 4 April 2009 (UTC)

Thanks, I'll check Toorkild out. --zyx 02:09, 5 April 2009 (UTC)


You say the way your gun uses DC data and the way your flattener work are different from other bots in the rumble. Would you mind explaining what these differences are? --Skilgannon 22:15, 10 April 2009 (UTC)

Well I don't like reading other bots code so much, just enough to learn a specific thing, so I can't be sure of the differences. I just checked DrussGT gun and it uses the data in a very similar approach with minor differences. The flattener I haven't compared to any, but haven't seen my idea posted either so is probably different.


  • All waves record the precise factor window where the bot could have been hit, and the factor windows for the corners at every wave/bot collision (this is to simulate bin smoothing).
  • There are two Kd-trees, one is for waves that didn't hit anything, and one for waves that hit an enemy or an enemy bullet.
  • When aiming a cluster is built for each tree, and then this is transformed to an array like DrussGT's one. Where there are factors and positive or negative weights, at the start and end of the windows. The precise window has a bigger weight than the corners window. If the wave hit a bullet on the way the weight is lower for both windows, to account for many bots not reacting to them after the BulletHitBulletEvent.
  • The Anti-Surfer gun uses the same algorithm for the non-hitting waves, but for the waves that did hit it uses low negative weights for the windows, and a big negative weight for a window around the hit factor (I think around 0.1 on each side of the hit).
  • Then find the window with the biggest danger, in case of the danger being not so different (I think < 1e-5 or something), I use the smallest of them, but I'm still trying to figure a better tie-breaker. And then aim the gun to the middle of that window.
  • I also keep an array of different weighting schemes in a sort of VG array.


  • I think the flattener is really different because I don't have a binary on/off flattener.
  • Every time there is a HitByBullet or BulletHitBullet event I try to update my weights according to my enemy's current knowledge of my movement.
  • To do that I keep two different Kd-Trees, one that stores waves that passed me trough and one that stores waves that hit me or a bullet of mine.
  • The danger of a factor window is: HIT * HitDanger(window) + FLAT * FlatDanger(window).
  • Every time I have a new hit, I roll the values of HitDanger and FlatDanger on a small depth rolling average. And then calculate the HIT and FLAT weights as:

HIT = hit_avg / (hit_avg + flat_avg); FLAT = flat_avg / (hit_avg + flat_avg);

This gives the effect of flattening just as much as I think is needed at the moment. If the enemy is learning fast then the FLAT values tends to go up, but if the enemy learns slowly, then the HIT weight tends to stay higher. The small depth in the rolling average is important to accurately change how much the bot is flattening it's movement.


  • Something my wave surfing has different than many others, forced instead of chosen, is that I don't surf a second wave. I check how dangerous is the spot I'll be when the first wave passes in respect to the second wave, extended by maybe 0.2 on each side of the factor window. I've tried to surf a second wave, but every attempt has lowered my score, so maybe accidentally I discovered a nice thing.

Hopefully this will clarify, but if any more questions, just ask. --zyx 01:36, 11 April 2009 (UTC)

Weird results

Argh, I see a couple seemingly bad battles for from my client: [3] and [4]. I saw it lose to lunchie.Lunchbox before it got uploaded, which is what got my attention. I haven't been able to duplicate any of these in Robocode yet, so I'm not sure what's up. =( I guess I'll exclude your bots from my clients until morning, at least. --Voidious 04:52, 14 May 2009 (UTC)

For what it's worth, I also saw a 38% against Tityus on my Linux box. All my clients are running 1.5.4. I'll try and figure out what's up tomorrow, but I gotta get to bed for now... --Voidious 05:00, 14 May 2009 (UTC)
I just saw them too, I haven't been able to reproduce them either. But I think it may start skipping turns sometimes, and in some cases getting disabled(haven't seen it do it, but seems probable), I'm pulling a new version that should be lighter. Thanks for the heads up anyway. --zyx 05:45, 14 May 2009 (UTC)

Inverse Weighting

Hey, I just saw that you suspect YersiniaPestis is crashing after you made that change. It could be caused by a division by 0 if you somehow find a scan that is exactly the same as the current. To prevent this I added a small constant (1E-10) to the distance the inverse was being calculated from. Hope this clears up your bug. --Skilgannon 17:48, 19 May 2009 (UTC)

I was already adding 1e-9, although maybe being on the exact same scan is almost as probable as being 1e-9 away from it considering some attributes are continuous(lateral/advance velocity), maybe a max(1e-9, distance) would be wiser, but thanks anyway. I'm almost positive is more related to skip turns, 1.3.7 was already on the edge of skipping turns every now and skipping forever. I think it will need some serious refactoring to make it faster, but I've been too busy lately. --zyx 21:25, 19 May 2009 (UTC)
Actually not, if the bot is stopped being on the same scan is pretty easy since only the discrete attributes are non-zero. --zyx 21:31, 19 May 2009 (UTC)


Argh, what happened? I was excited and scared when I saw YersiniaPestis 2.0 hit the rumble, but it seems you have a problem somewhere. =( --Voidious 15:01, 22 July 2009 (UTC)

Yeah, I'm a little dissappointed too, version 2.0 out scored 1.3.7 in every test, only against DrussGT it had a worse score but I guessed that wasn't important. It was a rewrite from scratch to make it faster, I think I'll start with smaller tweaks to the old version, the old one probably has some performance enhancing bug because the new version had a lot of debugging and I believe is much more precise, but maybe that's not always good. --zyx 03:52, 23 July 2009 (UTC)
Oh, wow! In that case, some rating dip in the first release is not too surprising. You're really thinking of ditching the rewrite? In the long run, I think more precise is always good. =) Those performance enhancing bugs will still stand in the way of future gains, even if they help now.
Well, good luck whichever way you go. I must say that I have felt much happier and more proud of Dookious ever since his full rewrite. And (after a lot of debugging) I even ended up gaining a few points with it. Come to think of it, I discovered a big performance enhancing surfing bug in the old code during that rewrite! --Voidious 04:14, 23 July 2009 (UTC)
Well right now I won't have much time to work on Robocode, but I think the first thing I will try to do when I can is to use the new surfing and the old gun, but still unsure if I'm going to fit the new surf in the old code, or the old gun in the new code. Thanks for the advice. --zyx 17:21, 23 July 2009 (UTC)
Just on a sidenote: Why is it that the best ideas end up in crappy code, and the bad ideas fit in smoothly without problems ;p --GrubbmGait 20:55, 23 July 2009 (UTC)
Heehehhe, well I blame Murphy. --zyx 21:10, 23 July 2009 (UTC)


Inspired by Voidious' words I decided to do some minor tweaks to the new code before getting busy and realized that different preferred distance makes a huge difference, in some tests at least, let's see how v2.1 holds in the rumble. --zyx 07:22, 25 July 2009 (UTC)

There are no threads on this page yet.