[Home]Komarious

Robo Home | Changes | Preferences | AllPages

Sub-pages: Version History - Source Code

Bot Name

Komarious

Author

Voidious

Extends

AdvancedRobot

What's special about it?

It's a MiniBot that uses WaveSurfing, which is not a first, but kinda special. Also, it's the first bot that I've released at version 1.0 =)

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

http://www.dijitari.com/void/robocode/voidious.mini.Komarious_1.78.jar

How competitive is it?

For a MiniBot, it's about as competitive as it gets. It's at #1 in the MiniBot rankings, around #20 in the general rankings, and has recently just peeked its head above 2,000 in the general rumble.

How does it move?

A fairly simple WaveSurfing, using WaveSurfing/PrecisePrediction (courtesy of rozu's mini-predictor from Apollon), segmented on LateralVelocity and distance.

How does it fire?

The gun is based on the one from RaikoMicro (though has been changed a fair bit now), using GuessFactorTargeting.

How does it dodge bullets?

WaveSurfing!

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

No melee strategy...

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

No melee awareness at all.

What does it save between rounds and matches?

Between rounds, GuessFactor data for gun and movement; nothing between matches.

Where did you get the name?

It's named after [Komari Vosa], an ex-Padawan of Count Dooku's that turned to the dark side. It seemed appropriate since this tank is built using everything I've learned from Dookious.

Can I use your code?

Yes, it's released under the RWPCL.

What's next for your robot?

I'd really love to take the #1 spot in the mini-rumble, and after some recent improvements as well as code shrinking, I'm optimistic about being able to do it. But the top version of Pugilist is still a long way ahead of the best Komarious...

Does it have any WhiteWhales?

Raiko, Cigaret, Smoke, and Vyper are its biggest PL challenges. Pugilist beats her sometimes, too, and is certainly the main WhiteWhale in the ranking tables.

What other robot(s) is it based on?


Comments, questions, feedback:

It's nice to realize that Jikes would save me 18 bytes right now... This MiniBot thing is more fun than I expected. I basically just got the urge to try a WaveSurfing MiniBot while I was waiting for Dookious's rating to stabilize last week, and I got more into it than I had expected. She may take a back seat for a bit, as I'm a bit consumed with Dookious at the moment and I've got a lot of school work in the coming week, but I will definitely be coming back to Komarious later on... -- Voidious

It seemes that Komarious does not really like rammers, does that mean that rammers belong to the good side? Only six red results in the minirumble, all against those pesty zero-distance fighters. Improving this will not help your ranking, but removing those red results could give some (PL)satisfaction. Btw, when do you start with micro's and/or nano's? -- GrubbmGait

Actually, I've finally got some anti-rammer code into the next version... It's as simple as firing power 3 bullets against rammers, but it seems to do the trick. I figure that whatever they are worth rating-wise, it is double in the mini rumble, since there are half as many entrants there and most rammers are MiniBots. No idea if/when I'll start with micro's and nano's - I would like to make a push for that general RoboRumble throne =) In fact, I can't believe I'm spending any time on this MiniBot thing, but I have just gotten sucked in! -- Voidious

Also, yes, it must mean RamBots are good. -- Voidious

A couple fine results this evening in my dev versions...

1st: voidious.mini.Komarious 1.2*	3867	1750	350	1469	294	3	0	35	0	0
2nd: kawigi.sbf.Barracuda 1.0		80	0	0	77	0	2	0	0	35	0

1st: voidious.mini.Komarious 1.2*	2988	1000	200	1586	189	1	12	20	15	0
2nd: pez.mini.Pugilist 2.3		2266	750	150	1211	153	1	0	15	20	0

Don't worry, PEZ... It gives a close match, but usually loses to Pugilist =) -- Voidious

I'm glad I wrote that WaveSurfing Tutorial: Tonight I changed K's surfing to precisely predict the intercept tick (like I did there), instead of just precisely iterating over a guesstimated # of ticks. I don't know what I was thinking with that - it saved 10 bytes, too. This is just sweet in a MiniBot:

1st: voidious.mini.Komarious 1.23	3639	1750	350	1283	256	0	0	35	0	0
2nd: kawigi.sbf.Barracuda 1.0		34	0	0	34	0	0	0	0	35	0

=) And seems to be beating Raiko consistently now. Maybe I'll take that MiniBot PL crown for a while, but the gun could still be improved quite a lot, I think. We'll see... -- Voidious

Hmm. "Fixing" that bug from 1.53 in 1.551 - I was trying to do a distancing trick that I use in Dookious, but used Math.min instead of Math.max by accident - resulted in a 4 point loss. I know there's a lesson here... =) -- Voidious


Ok, 140 bytes free and 20-30 points off the top spot in the mini-rumble. Time to make a push for #1 =) -- Voidious

So I look at the changes in 1.64, and I'm thinking that the correction to the segmentation is probably responsible for most of the points, and the energy tracking stuff is probably negligible. So I run some (fairly long / reliable) tests with just the segmentation stuff changed, and it is about the same as 1.59. I'm quite surprised, but it seems accounting for energy loss / gain from bullet hits was really quite significant! -- Voidious

I am surprised that Komarious lacked that issue till now. Especially a wavesurfer (or any other dodger for that matter) needs to know exactly when the other fires. I know it is a mini, but these details improve your information gathering. Without proper information, your surfing can not be perfect. -- GrubbmGait

Here's a little MiniBot-ism I'm proud of, though you'll surely groan if you dislike CodeSize constraints ;) Segmentation slices: 0.25, 2.25, 6.25, 7.75: array[(enemyLatVel >= 7.75)? 4 : (int)(LOG_BASE_E_TO_2_CONVERSION_CONSTANT * Math.log(enemyLatVel + 1.75))]. -- Voidious

Alright! Sooo close to 2K in the general rumble, and I think K now has the MiniBot throne by a decent margin. Either that Segmentation Research is really good stuff, or it's just helping me to focus my thoughts as I make segmentation changes. Either way, I've now gained quite a few points just guided by that research, with very little outside testing otherwise. -- Voidious

Dunno how long it will last, but Komarious barely got above 2K in the general rumble just now =) Woohoo! [Komarious 2K listing] -- Voidious

Bloody hell! I actually doubted that was possible in todays RR@H environment. And a really great mini score too. Way to go! -- PEZ

Voidious's bots are the new DT's!! His bots must be stopped! (lol, good luck there huh) -- Chase-san

And I thought getting over 2000 with a mega bot was hard. Amazing job!!! I'm just waiting for the number 1 melee bot now ;). -- Kev

Thanks, guys =) I'm flattered by the DT comparison, but I don't think my bots are anywhere close to the level DT was at compared to the competition of its time. Kev, do you mean #1 melee bot from me?! You are 100 times closer to that than I am, dude ;) (But I might try my hand at melee again soon...) -- Voidious

You're so dominant in one-on-one there's not much else for you to do :). I might move into melee again soon, I just need the motivation to make a decent melee pattern matcher. --- Kev

I know what your doing! Your attempting to make Komarious break 2100 in the Minibot rankings... and there is no bot powerful enought to stop you. Reaching for the sky once again. In a few years you will have a nano surfer in the nano 2100's. If Komarious existed back in 2003 its power would be ubsurd, not only for being more powerful then even the latest DT (the king at the time, which was a number of versions behind aswell), but the facto that its a minibot. --Chase-san

You flatter me =) But you forget one thing - all the bots post-DT that guided me in creating my current bots! I do want to break MiniBot 2100, but I'm really a little clueless on how to do so at the moment... -- Voidious


You'd better watch out. WeeksOnEnd is neck & neck, and I just found about 20 bytes last night (kinda cheap trick, but this is no holds barred now). Not sure what to do with them at this point ... but ... -- Simonton

I noticed, and I wish you the best of luck! :) Definitely impressive what you've done with WeeksOnEnd. I have had a hell of a time trying to find any more points in Komarious since 1.712, but maybe losing the MiniBot crown to you will inspire me... By the way, do you use any shortcuts from the new Robocode, like the Rules class? I could find some bytes there, too, I think. -- Voidious

Yes I do. Twice, I think, for bullet velocity (mine and the enemy's). Are there shortcuts besides using the Rules class? I also have the questionable practice of running only on my own machine. I wish I didn't have to, though! It would be a lot nicer to see faster results. Darn strings. -- Simonton

A shortcut I like from Java 1.5 is Math.signum :-) -- Kawigi

(Edit conflict) There's only two other useful methods, robocode.util.Utils.normalRelativeAngle and Utils.normalAbsoluteAngle?, for normalizing angles from -Pi to Pi and 0 to 2*Pi, respectively. I think that's right, you could check the Komarious source to make sure. -- Voidious

I think you switched them, relative angles are from -pi to pi. -- Kawigi

Er, right. Sorry, I was hungry and rushing off to pizza ;) I edited the comment so as not to confuse anyone. -- Voidious

Oh, I see. I didn't even know those were new. Well, yes, I also use all of those listed. :) Except maybe the absolute angle one. What would checking the Komarious source do again? -- Simonton

The Utils ones aren't new, but they are useful. I just mentioned it as a reference for the Utils.* methods because I thought I might have gotten them wrong. ;) -- Voidious

If you really got in there I cranked on the code size I bet you could free up a lot. I'm continually surprised - just when I'm starting to think I've got it down as far as it will go, something else gives. Hey - I'll race you to 2100 ... -- Simonton

Totally up for a race to 2100, but I'm skeptical of my own chances of winning =) I dunno, at one point when I thought it was already quite CodeSize optimized, I managed to squeeze another 150 or so bytes out of it (that was with zero change in code functionality); I am really not sure there's much left. But I do still have 20 bytes free, I could possibly shrink things a little more, and there's the Rules.* methods. Really, though, I just don't even know what else I can do even if I had 50 bytes free... -- Voidious

Let me know if you come up with any great ideas. I have - I think it is 44 bytes free now. ;) To be fair, I'll go log my version history, since I get to benefit from studying yours :). (Though, to tell you the truth, I don't know if it has changed anything I've done so far). -- Simonton

I have had ideas that I thought were good, but none of them has gained me any points lately. Komarious always moves away from the enemy at a specific angle - I thought making it move away more when it's closer and stay perpendicular at the "desired" distance would be preferable, but it gained me no points at all (can do this in maybe 20 bytes in Komarious). I also thought further refinement of bullet power management could gain a few more points, but I haven't been able to do any better than my first attempt at it. I figured the RollingAverage depth I used in my surfing or the length of the WallStick? could probably be tuned a little more, but again, no luck. If you don't have any anti-rammer code, that might help; a CurveFlattener? against bots that are beating you hard might help if you have room, but it would be tough to get it right. For now, I am probably just going to keep trying some little tweaks to things that I think could probably be tuned up... -- Voidious

A simple and effective (I think ;-) ) curve flattener would be to simply log every wave as a hit, whether it hits or not. If you can think up a simpler one, tell me! =) -- Skilgannon

You are right about that. However, you will lose performance against most bots if you don't weight "real" hits a lot more; you will also lose performance if you enable your flattener at all against weak or mid-range opponents. (Both just based on my own experiences, of course.) -- Voidious

Yeah, you want to score better agains HOT than against a learning gun. I was just thinking of a lightweight (in codesize) way to implement this, and something like

 if(flat)onHitByBullet(null);
would work very well. If I remember right, DT did this exclusively as movement, correct? -- Skilgannon


It will feel a little weird if Komarious 1.78 takes back the MiniBot throne - both the huge impact of using onBulletHitBullet and the CodeSize crunching to fit it in were shown to me by Simonton! =) I guess that's how it goes with OpenSource Robocode bots sometimes, though. I'll just have to give him some big fat credit in the bot info above... -- Voidious

It works both ways, my friend. WeeksOnEnd wouldn't be good at all if I hadn't studied Komarious. Besides, I bet I can free up about 60 more bytes in WeeksOnEnd with no sweat - one of them a change that I'm 80% confident will boost my score. -- Simonton

Watch out! WeeksOnEnd is slowing creeping up to dethrone Komarious upon the wonderful, mysterious tide of The Rating Drift! -- Simonton


Robo Home | Changes | Preferences | AllPages
Edit text of this page | View other revisions
Last edited November 1, 2007 20:37 EST by Simonton (diff)
Search: