Robo Home | Changes | Preferences | AllPages

Bot Name





See WaveSerpent/History.



What's special about it?

Both the gun and movement are unique (I think) in using using segmentation without VisitCountStats.

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


How competitive is it?

WaveSerpent is 3rd in the rumble right now.

How does it move?

WaveSurfing with Precise Prediction. I've done my share of suffering, and I'm pretty sure it's now completely bug free (and it has the top BarracudaChallenge score to back me up). Unlike most other surfers, WaveSerpent doesn't use bins; it records a list of GuessFactors it has been hit at instead. It then tries to maximize the distance from hit factors while surfing, with a large punishment for being within one bot width of a hit location. There are several segmentation schemes that are weighted and layered on top of each other. The movement is especially strong against more basic guns.

How does it fire?

WaveSerpent uses a DynamicClustering gun. Instead of looking at every past scan of the other robot, it segments them on the other bot's velocity and acceleration. This makes the gun quite a bit faster, and seems to help its scores too.

How does it dodge bullets?


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

It currently can't fight in melees.

What does it save between rounds and matches?

It saves guess factor and surfing data between rounds.

Where did you get the name?

A wave serpent is a type of tank in a tabletop battle game my friends and I used to play. And, of course, the name sounds cool :).

Can I use your code?

Sure, it's released under the terms of the RWPCL.

What's next for your robot?

Does it have any WhiteWhales?

PatternMatchers and WaveSurfers I guess...

What other robot(s) is it based on?

I've used many ideas throughout the wiki, specifically from:

It was indirectly influenced by:


DookiSerpent is uses WaveSerpent's movement and the gun from Dookious. It shows that WaveSerpent's movement is really strong (it's only a couple points behind Dookious), but the gun still needs some work.

WaveSerpent/RRGC uses WaveSerpent's gun and the movement from Raiko for the RRGunChallenge.

Comments, questions, feedback:

Although capable of high wave surfing challenge scores, I can't seem to get WaveSerpent to get a score greater than 30 against FloodHT. If anyone is brave enough to look through my extremely messy and unexplained code and give advice, I'd appreciate it. -- Kev

This might not be the whole reason, but without looking at your code much at all (just a glance, and then setting isMC == 1), I can tell you that your distancing is probably a huge culprit in the MovementChallenges. Watch CassiusClay or Dookious, or probably anyone getting high scores there, and you'll see that they all stay pretty far away, while WaveSerpent pretty much just keeps whatever distance it is at currently. Staying close has pros and cons in a real battle, but against a learning gun in an MC situation, it's just a huge disadvantage. I'd try that first before worrying much about it. -- Voidious

Oh, and you really think it won't get much higher than Puzzle? [Comparison sheet] =) Also, how old was Alcatraz when he hit 2K? -- Voidious

I too think distancing is important, but for different reasons. Yes, of course against any non-trivial gun you'll get hit less if you stay away, but you'll hit less yourself too so there's no real reason in real battles to stay far away. However, trying to control you distance and make it so you fight most of the battles from the same distance is good for learning purposes. Especially for a WaveSurfer. Your targeting will benefit from it too against the majority of bots.

I haven't checked your code but I am still dead sure that what keeps your bot from really high ratings is bugs. It always is. Try the movement challenge and something like this:

  1. Use unsegmented surfing stats and go for perfection against HeadOnTargeting
  2. Then check your unsegmented score against LinearTargeting and see if you can segment your surfing stats to improve it
  3. Only then focus on the other guns in the challenge.

-- PEZ

@Voidious - 17. @Kev - I found the bin smoothing function in RaikoMX very important. I think that's a great bot to look at. And graphical debugging was also great. Good luck with WaveSerpent. -- Alcatraz

Well, I didn't mean to optimize your distancing for the challenges - obviously, how it performs in real battles is all that matters. But since you were looking for the reason you couldn't get high scores against FloodHT, I'd say the distancing is probably a strong reason. Since you can probably count on your gun being stronger than the majority of RoboRumble opponents, you will likely benefit from staying a bit on the "far away" side in real battles, too. But what PEZ says is true - it's all about the flawless implementation with WaveSurfing. It's a lot easier to get decent scores in the CurveFlatteningChallenge and such than it is to hold Barracuda to ~50 points every time, at least in my experience. -- Voidious

Whatever the case, nice work with WaveSerpent! You shot right into the 1900 club, and halfway past it to 2K. -- Voidious

Thanks for the advice all, I really appreciate it. The next version of WaveSerpent has simple distance control and replaces bins and bin smoothing with an interesting AntiGravity style approach. I'm getting 99+ scores vs. WaveSurfingChallengeBotA now. I still haven't found any bugs in the wave surfing code, but my previous direction finding algorithm was horrible and got WaveSerpent occasionally stuck in corners, most likely the culprit of low MovementChallenge scores. -- Kev

Mad bullet-dodging skill :):

1st: kc.WaveSerpent 4071 1750 350 1643 3280 0 35 0 0
2nd: rz.HawkOnFire 0.1 14 0 0 14 0 0 0 0 35 0

1st: kc.WaveSerpent 5285 1750 350 2639 496 2 47 35 0 0
2nd: radnor.DoctorBob 1.42 56 0 0 56 0 0 0 0 35 0

-- Kev

Still hasn't faced everyone, but... 2062!!! Friggin' awesome work dude. I think it'd be officially 5th, since CC 2pi.08 got 2067. Rock on, congrats! -- Voidious

Giant jump, looks you are flying! Now you are really dominating one-on-one. And as a sidenote: you are pushing RaikoMX, who was 2nd when I started with Robocode, to rank 18! -- GrubbmGait

Thanks!!! And there was I thinking it might go up 15 points :). Having precise, bug free, and KISS wave surfing really makes a difference. I found a lot of inaccuracies in WaveSerpent's old movement (the most embarrassing being it segmenting movement data on the other robot's wall ahead instead of its own). -- Kev

Very nice! --David Alves

When i run WaveSerpent against CopyCat? (MirrorMovement) it suddenly sits still. Is it supposed to do that, or is it just because CopyCat? doesn't fire when it has low energy (and so WaveSerpent doesn't have to move)? --Starrynte

WaveSerpent is not in the MeleeRumble?... --Starrynte

That's right, WaveSerpent currently isn't in the melee rumble, and the latest version isn't melee compatible. However, Logic uses almost the same melee gun and movement as WaveSerpent, so it acts pretty much the same. I'm not to sure what caused it to stop against CopyCat?. WaveSerpent automatically stops against bots on the later rounds if it hasn't been hit yet (to avoid the other bot getting a score of zero, which don't count for the rumble). So if you put WaveSerpent in a one round match it will stop automatically. Besides that, I can't think of anything that would make it stop. When there are no waves to surf, WaveSerpent tries to get into a good position by moving away from walls and the other bot. -- Kev

Looks like you've solidified that #4 position, congrats! (I know you had it before, but it was very very close.) Funny seeing everyone messing with BulletHitBullet? events after Simonton mentioned gaining points with it in WeeksOnEnd. =) -- Voidious

Yeah, nice improvement. I think this issue was on almost everyones to-do list, but Simonton triggered us to increase its importance. It is quite an easy gain on movement (9 points for me) -- GrubbmGait

Thanks! I had no idea bullet collisions were that common in battles, or that it would be so easy to implement learning from onBulletHitBullet? (I only just figured out you can use getX() and getY() for bullets). -- Kev

I'm glad you're trying pattern matching in your VG array. Pattern matching is my favorite :). I'll be interested to see how it turns out. -- Simonton

Pretty well! I see green scores against 2k bots such as Garm, PhoenixOS?, X2, GresSuffurd, RaikoMX, PulsarMax, Lukious, PowerHouse, and Engineer. It looks like a good pattern matching works well at killing surfers and getting those PL wins. -- Kev.

So do your a/b versions each just have a single gun, no VirtualGuns at all? If so, will that be the next step after finishing tests with each? -- Voidious

Hey Kev, did you forgot to take the second WaveSerpent out of the rumble? I can't help but think Krabb and GrubbmGait want that #20 spot ;) -- Voidious

Are you aware of how much memory your bot uses? I had to push the heap space up to 512MB and java was taking 500 megs of it, and right now robocode sits around 30 megs by itself with sample bots. -- Ntroutman 2007-09-08

This is great! Everyone is jumping on the DynamicClustering wagon! I'm having fun. It makes me happy. I never liked VCS. Never. Not for one minute, not one bit. -- Simonton

So, if you have a DC gun now, then don't you qualify for the TopTenDCParty? =) --David Alves

Congrats on the rating jump, dude, really awesome! -- Voidious

Robo Home | Changes | Preferences | AllPages
Edit text of this page | View other revisions
Last edited November 3, 2007 1:22 EST by David Alves (diff)