Bot Name
RabidWombat
Author
RobertWalker
Extends
PluggableRobot (which in turn extends
AdvancedRobot)
What's special about it?
It's the robot that the
PluggableRobot architecture was built to support. Hopefully one day that might be considered special.
Great, I want to try it. Where can I download it?
You can't yet. I want to improve it some more before I release it.
How competitive is it?
It's not done yet, so it's not that competitive. It beats the
SampleBots, of course. I've also been pitting it against
SpareParts with good success.
How does it move?
It uses a variation of
AntiGravityMovement. The enemy robot exerts an attractive or repulsive force on
RabidWombat, depending on how far away it is, in order to maintain a particular distance from the enemy. (It's pretty much working on
[Hooke's law].) That distance grows if
RabidWombat is losing and shrinks if it's winning, so that it'll run away or close in for the kill as appropriate. Walls exert a repulsive force. Bullet dodging is done with force vectors as well.
How does it fire?
It has a
virtual gun array containing (currently) a
head-on targeting gun, a
LinearTargeting gun, a
CircularTargeting gun and a
GuessFactorGun. (I suppose the
LinearTargeting gun is probably redundant.) It fires
Waves (for
GuessFactorTargeting) and
VirtualBullets (for tracking the success of the various guns) every turn and fires the real bullets with the best gun. Stats decay over time so that it will adapt more readily to changes in enemy behavior. I might add a
PatternMatching gun to the array, but if I did I'd probably have to change things around a bit. Currently, all my guns pretend to fire every turn, which from what I understand would be pretty slow for a
PatternMatching gun.
For the moment, it assumes that the opponent is using
head-on targeting and runs away from that spot. I'm still somewhat undecided on the final bullet dodging strategy.
How does the melee strategy differ from one-on-one strategy?
RabidWombat is a one-on-one only bot.
How does it select a target to attack/avoid in melee?
RabidWombat is a one-on-one only bot.
What does it save between rounds and matches?
Currently, it saves gun accuracy, guess factor and energy stats between rounds and nothing between matches. I'm currently working on a testing harness that will allow me to see how tweaks affect a number of performance metrics not reported by the RobocodeResults
? class.
Where did you get the name?
It sounded cool. Its initials happening to be RW didn't hurt, either.
Can I use your code?
For now,
RabidWombat is closed source. I intend to open it up eventually, after I see how well I can get it to perform, or when I get tired of it, whichever comes first.
What's next for your robot?
- Finish tweaking and testing harness
- Improve bullet dodging
- Add a PatternMatching gun
- Take wall bumping into account for virtual gun calculations
- Weight virtual gun stats based on hit probability
- Segment statistics
- Tweak, tweak, tweak...
- For now, I've been pitting RabidWombat against SpareParts, with good results. I'm looking for another bot to pit it against.
What other robot(s) is it based on?
PluggableRobot was developed in parallel to support
RabidWombat. Other than that, it wasn't directly based on any other robot, although I've culled many ideas from the wiki. I'm trying to be good about giving attribution in the source, so when it's released you can see where I got ideas.
Comments, questions, feedback:
Segment your GF gun on LateralVelocity, and the linear gun will be redundant. Also segment it on change in enemy's heading, and circular targeting will be redundant (though I'm not sure whether that one would be useful). -- Simonton
For a GF-gun to replace CircularTargeting, you need both heading and change of heading. As alternative also LateralVelocity and AdvancingVelocity could be used. I still have to see a GF-gun though with more than 75% hitrate against SpinBot. CircularTargeting does in most cases make the LinearTargeting obsolete, as the hitrate against f.e. Walls would be the same for both methods. -- GrubbmGait
True dat. -- Simonton
You'd also need bullet time (and a very fine grained one, at that) for either combination, but the strength of GuessFactorTargeting doesn't lie in getting high hit rates against SpinBot =) -- Voidious
True dat, too.
Thanks for the advice, guys. I've been thinking about modifying my guns so that I can use them to provide possible firing angles that the enemy might be using and compare that against the actual hits. Basically,
RabidWombat would be dodging its own guns. The problem with that strategy is when it's up against another robot with a virtual gun array; pitting
RabidWombat against itself with that setup would have them constantly switching guns and never settling on any one dodging method. Anyone else have experience with making a robot dodge its own guns? --
RobertWalker
In general, I think dodging your own guns will give you what seems like a pretty powerful RandomMovement, but not the same level of true bullet dodging as WaveSurfing with PrecisePrediction. If you're going to the trouble of simulating guns and dodging them, it doesn't seem like much of a step up to just do true WaveSurfing, where you use onHitByBullet to update the data in the gun you're dodging instead of just simulating how you'd make it learn. But I think you'll find that you learn a lot trying to implement the fresh ideas you come up with yourself, so I say go for it and let us know how it works out ;) -- Voidious
- I should be more careful: conceptually, it's not much of a step up. Getting WaveSurfing working bug-free can quickly become late nights full of WaveSuffering! Ask anyone... -- Voidious
- Also, if you dodge your own gun, persey, enemy mirror movement could make it impossible to hit them! --Chase-san
- Dodging HeadOnTargeting and Linear / CircularTargeting alone would have great effect on your performance. It is not a bad idea to try that first just 'to get the hang of it'. After that the WaveSurfing/Tutorial is an excellent next step. (I like small steps) -- GrubbmGait
See Vyper, Thorn, and GrubbmGrb for examples of how good a non-surfing dodging system can perform. I hope you find the WaveSurfing Tutorial useful; I'm sure it could be improved, so please do give feedback on it. As for more advanced surfing systems that you might be able to learn from, I'd recommend Dookious (of course =)), CassiusClay, and Chalk as great OpenSource surfers with clean code. Kev's WaveSerpent, Alcatraz's Cyanide, and David Alves' PhoenixOS? are probably good references, too, but I can't vouch for them as much just because I haven't looked at them as much. -- Voidious
Most of the bigger ones, ergo the ones listed above can be confusing, misleading, badly formatted, or are just confusing. Thought koduos to PhoenixOS? and Chalk. Dookious is just to big in my opinion for someone just starting into it to try and make out. My suggestion however is GresSuffurd as its structure is simple, and at the same time, it models closely to the tutorial bot, making it easier to understand. --Chase-san
- Just curious - have you looked since the full rewrite? The movement rewrite is like 1.3x and since... I acknowledge it was a horrible mess before, but I'm pretty happy with it now. Definitely the truth that the best surfers are complex, though. -- Voidious
PhoenixOS? isn't bad. One of these days I might even go through and comment it. =) --David Alves
- Yah, I found the PowerNeededToKill? rather nice, though it had a clause that wasn't needed. --Chase-san
Before I go delving into those, I should probably mention that RabidWombat uses AntiGravityMovement. So do any of the above-mentioned bots also use AntiGravityMovement? Has anyone done OneOnOne bots with AntiGravity bullet dodging? -- RobertWalker
- My original attempts at bullet dodging and WaveSurfing were in a modified AntiGravity system, but my code got much simpler and I got much better results when I finally ditched the AntiGravity stuff. It's certainly possible to do it, though. -- Voidious
- The main problem I've had with anti-gravity bullet dodging is that one tends to run directly away from the bullets instead of moving to the side... of course, this means you just get pummeled into a corner until you're dead. No fun. -- Ne
- True, unless you only use the component of the force that is perpendicular to the enemy, which is what I'm doing. -- RobertWalker
- A quick backlink search on AntiGravityMovement reveals that TheArtOfWar uses AntiGravityMovement in both OneOnOne and Melee, so maybe I should look closer there. I could make completely different movement systems for OneOnOne versus Melee, but I'd rather not because 1) it's a lot more work, of course, and 2) my current AntiGravityMovement is actually working pretty well in OneOnOne. Granted it's not beating Dookious or CassiusClay or anything, but then I wasn't expecting it to because I'm pretty new to Robocode. However, with only very basic bullet dodging (running away from HeadOnTargeting), it's regularly beating some bots that I thought would waste it, such as SpareParts and MakoHT, which appears the land RabidWombat in the middle of the RoboRumble OneOnOne pack. Not bad for a newbie bot, I think. Since I'm not really expecting to topple any of the Robocode Goliaths out there, I'm actually pretty pleased with this.
- (Edit Conflict) A lot of times, what you want to do with Robocode comes down to how much of your life you're willing to sacrifice for programming Java tanks. =) Sounds like AntiGrav? 1-on-1 movement works well for what you want to do right now. TheArtOfWar is an ancient tank, once one of the absolute greatest and still quite capable in melee. At the higher levels, you definitely need specialized 1v1 or Melee movement to stay competitive, of course. -- Voidious
- I have a wife and baby, so I think you can probably guess how much time I have for Java tank programming. :) -- RobertWalker
Speaking of the rumble, does the latest Robocode client allow you to run a "local rumble" based on just the bots that you have? I haven't been brave enough to download the newest version. --
RobertWalker
- I don't know how to setup a "local rumble", but there is a program called RoboLeague that might suit your needs. It's really a must-have Robocode utility, IMO. I use it with 1.07, I'm not sure how it will work with later versions, but we'll need to get it working with 1.3 because I absolutely need to have RoboLeague! -- Voidious
- Hmm, I'll have to give RoboLeague a look. Thanks for the tip. I'm thinking of just going ahead and unleashing RabidWombat into the RoboRumble wild and seeing how it does. It's currently using the Rules class, though, which I'd have to address.
- You can grab the Rules source from the cvs, ergo here: [Rules.java]. Then just put it into your package itself, updating the package as needed. --Chase-san
As far as white whales go, my testing standard has always been
Freya for melee and
GrubbmGrb for duels. Freya 0.31 was one of the first bots I downloaded, and
GrubbmGait the first robocoder I conversed with. I think those tanks will give you a good run but are beatable without being a demigod of Robocode. -- Martin
ACtually the first robot I downloaded was Dustbunny and RaikoMX, and I attempted to beat MX with a chopped version of dustbunnies anti-gravity. Good times.. --Chase-san
Hmm, this actually sounds like an interesting topic for its own page... I'm thinking WorthyOpponents... --RobertWalker