Kawigi's pattern-matching
NanoBot. After making
FloodNano, a nano that's all movement, it was about time to try out everyone's latest hobby of making nanos that are all gun.
- V. 1.0 - Original version. Managed to cram in a patternmatcher that projects movement and can handle variable power, a reasonably good movement, and some power management in there. Codesize is on the edge, 249.
- Placed 4th in the Semi-pro melee league at the Robocode Outpost, season 7, and was second in bullet damage.
- Opened at 48th place on the EternalRumble, 6/10/2003. If it weren't for SmallDevil's amazing 38-place jump, this would have made it the highest-ranked NanoBot in the contest, as it is, it is 2nd, narrowly ahead of NanoLauLectrik.
- Opened the MiniBot Challenge at 1st for 1-on-1, winning every single match. He was #1 for survival and a close #2 for bullet-damage. I can't say he did it on lucky, easy draws, either, he only faced one opponent who ended with a negative score (-120), and he beat the best Nano Melee bot in the competition, as well as all of the other nano-pattern-matchers, who placed 2nd, 3rd, 4th, and 20th out of the 90 robots, and he also beat NanoDuelist? and SmallDevil. He was also... less than impressive in melee.
- Lost one battle to NanoSatan Kappa in the MiniBot Challenge 20030705, and placed 3rd. Still beat NanoLauLectrik, SmogSP?, Moebius and Kakuru, though.
- Destroyed the competition (including Kakuru, NanoSatan (REVENGE!!), Moebius, and both Smogs) to win the Nano 1-on-1 division, undefeated, by more than 3000 points. FunkyChicken also placed 10th among MicroBots.
- V. 1.1 - Found some room, tuned the gun a little (now rounds the lateral velocity rather than truncating it for better matching and especially better projection), and introduced a new movement vaguely based on Fhqwhgads' movement. Should compete with SmallDevil in the flattest-nano-profile category, and should also be catching up with a few top micros. Pumped it up in time for the "Final MiniBot Challenge Showdown" (TM).
- The pump-up was worth it. It won the nano 1-on-1 division in the last MiniBot Challenge by a large margin (almost 4000 points I think), and then won the Grand Final by a reasonable margin, too (around 2000 points), followed by Vobo, who uses FunkyChicken's gun.
- Drops 10 spots to 65 on the ER. This is really equivalent to going up a couple spots, due to the number of new bots. It is now 4th among nanos, behind SmallDevil, TimDog? and Avesnar. Of course, it beat TimDog? and Avesnar, and any other nano it randomly came into contact with, which is what it was written for somewhat.
What's special about it?
I think it can beat any other currently competitive nano at least 40% of the time over 35 rounds (the standard for the
MiniBot challenge). There may be a few exceptions, of course, but I think that they should be very few at least at the moment. Against some bots it does better over less time, against others it does better over more time.
Great, I want to try it. Where can I download it?
https://www.robocoderepository.com/BotDetail.jsp?id=1512
How competitive is it?
If you're a nano, watch out. Otherwise, well, you should at least be able to beat it.
How does it move?
It's movement, I believe, is completely original, effective, and extremely nano-sized. I thought of it when I was thinking how a Perceptual bullet dodger(bullet-dodger in the sense that the Flood bots are bullet-dodgers) could be made, by using a function on the enemy's energy that will just happen to change direction when the input value changes by bullet-power amounts. I'll tease you with that and make you download it to see exactly what I did. It's so brutally simple you'll hate yourself for not being able to think of a way to hit it.
Edit: 1.1 is no longer a perceptual bullet-dodger.
How does it fire?
It pattern-matches on lateral velocity, and stores its pattern in a string, much like
NanoLauLectrik does. The pattern projection logic (yes, it really exists in this one) is unique to nanos I think, except that a version of it may exist in
Kakuru, and is logically similar to how
Teancum does it.
By plugging its opponent's energy into a function, it changes direction when its opponent fires a good amount of the time (but not always).
How does the melee strategy differ from one-on-one strategy?
It was designed only for
OneOnOne, and it looks somewhat like a fool in
Melee. But not as much like a fool as some of my recent bots.
How does it select a target to attack/avoid in melee?
It doesn't really do that.
What does it save between rounds and matches?
It saves the enemy's pattern between rounds, nothing between matches (the nano that saves data between matches is probably the next useless experiment).
Where did you get the name?
Have you ever been sitting there, about to start a new robot, and just have no idea what to call it?
Can I use your code?
Oh, if you insist. I changed enough of the code related to the concepts I borrowed from other bots that I almost considered not releasing the source, at least not yet, because I wanted to keep the stupidly simple movement algorithm to myself. But I'm too nice for that, and it does end up looking a little like the other pattern-matching nanos.
What's next for your robot?
Eh, don't know. If I thought I could put it in there, maybe wall avoidance.
Hmmm... has problems most often with
FurryLeech and
FloodNano out of any
NanoBots (the second of which I'm not complaining about, really).
What other robot(s) is it based on?
It has a little logic borrowed from
NanoLauLectrik,
Kakuru,
FloodNano, and
Teancum, each in little bits (of course, nanos only have little bits).
Comments, questions, feedback:
Definitely looks like a top 3 nano. --
Kuuran
What can I say? This is a really funky chicken. =) -- PEZ
Kawigi, why exactly is
static String pattern = "" + (char)0 + (char)1 +......
coded the way it is?
Lol, actually, I got that from the dev version of Moebius. I think it was Kuuran who discovered you can make an assignment of whatever length string literal with a cost of something like 2 bytes, so rather than having to add a check if we even have a match at all, we'll always have at least a match of length 1, because all valid characters are somewhere in the string in the beginning. Of course, it might not be that great of a guess. The string doesn't end up looking like "012345", etc, however, those first 16 characters are mostly special characters, so that's why I take their integer counterparts and cast them as characters. -- Kawigi
Big congrats on the MiniBotChallenge results! This is one strong nano. -- PEZ