What's special about it?
It uses my super-duper pattern matcher
that I thought would never see a real bot (because I thought I had given up this obsession). I'm quite proud to see it in a micro! Though not in it's original tree form, it is functionally equivalent.
Great, I want to try it. Where can I download it?
How competitive is it?
I'm quite pleased to say that it's battling Thorn
as we speak for the #1 position in the MicroRumble?
! But it hasn't fought enough battles to have a stable rating yet, so we'll see.
How does it move?
How does it fire?
It uses my super-duper pattern matcher
Agility? I played around with the random movement in the CurveFlatteningChallenge2K6
, which helped a lot.
How does the melee strategy differ from one-on-one strategy?
How does it select a target to attack/avoid in melee?
What does it save between rounds and matches?
Between rounds it saves every string of moves the enemy made between every span of 1-30 ticks. Nothing between matches.
Where did you get the name?
Well, it hasn't been around for a whole week yet, so that's not it (yet). I made it on Saturday and have been tweaking it since then (it's now Tuesday ... er .. well, now it's Wednesday :) ). It really just fit with the name WeekendObsession
, which is now this bot's little brother (it's a nano, this is a micro)
Can I use your code?
Not unless (until?) you thoroughly understand it and could re-construct it at an intuitive level :). That's the only way I could ever use other people's ideas. But I'm warning you, this is one memory-hungry beast!! Don't try to run it for more than 1 match without re-starting robocode, or just a few matches if you have a lot of memory. (Yes, the memory sticks around between matches. I'm not holding on to it, Java's String class is. It keeps a HashMap?
of every string it has ever seen, and I make a LOT of them).
What's next for your robot?
Maybe a bigger brother? Maybe, WeeksOnEnd
, I'm thinking.
Yes, those pesky random movers. I mean the ones that pick random points to go to, not the ones that pick a random orbit direction. That's one thing GF guns have on me for sure. The pattern matcher never knows which direction they're going to go!
What other robot(s) is it based on?
Well, it's really mostly based on a test robot I spent TONS of time on back in the summer/fall. The new style of pattern matching is entirely my own. But I must tip my hat to Kev
again for showing the value of StopNGo
movement. I don't think he came up with the idea, but I gleaned it from Splinter
in the NanoRumble?
Comments, questions, feedback:
Why you didn't place the link to this bot in Participants List? Give us the link!!!... in Participants List -- DemetriX
Because I'm running it on a modified client. Calm down, I'm not padding my score :). My bot generates TONS of strings to perform its duties, and Java's String class keeps a HashMap? of every unique String it has ever seen. So, after a couple matches, Java's HashMap? becomes so large it runs the JVM out of memory. My client re-starts after every time it runs a match with WeeklongObsession in its name, so that there is a fresh JVM with a fresh, small HashMap?. -- Simonton
By the way, great job with WeeklongObsession, you really rocketed to the top of the MicroBot and MiniBot tables with this little guy. =) -- Voidious
Thank you, sir :). -- Simonton
There is another disadvantage in running your bots exclusive in your client: If your client is not running, new (versions of) bots will not fight yours, so the PL-ranking is not complete for those and your bots. -- GrubbmGait
Yes, you are right. The plug got pulled on my client at work, and I only have dial-up at home. That's why it hasn't been running. I can try to fire it up again at home running offline - it should battle the new bots eventually. This is really turning into a pain. When is that bugfix for robocode going to make it into people's clients again? ... -- Simonton
I know an 'official' version is in the pipeline, so I am not complaining about that. It is just for information that the PL-ranking is not complete. And I hate that I am still not better than the best mini . . . -- GrubbmGait
Very strange.... WeeklongObsession is in the MicroRumble? but not in the RoboRumble....maybe that tweaked client of yours is up to no good? -- Skilgannon
- That's the way it should be. The tweaked client is only running battles for the micro rumble, so I can get results a lot faster. The rumble is set up to only show the scores for the micro rumble if that's all you're running, since you wouldn't want to see WeeklongObsession's micro score as his general rumble score, too! (That would be a little inflated). -- Simonton
- Well, the RoboRumble scores would be calculated using the relative ratings in the RoboRumble instead of the MicroRumble?, so they wouldn't necessarily be inflated. But they would be inflated or deflated depending on whether your bot was better or worse against MicroBots relative to MegaBots - or something. Anyway, we should be past this issue soon, that will be nice... -- Voidious
- Ah, RELATIVE ratings, right. --Simonton
Since I can't download WeeklongObsession to see this new movement of yours, do you mind sharing? It seemed to push your score up a few points. -- Skilgannon
- With the latest upload of results it does not seem to gain me any points, but I think it has potential. I'm thinking the StopNGo needs some work under the new system. Unfortunetly it takes a lot of codesize, so I'm not sure it's worth it. Anyway, the basic idea is to weight whether you flip orbit directions toward the line between the enemy and the center of the field. This has the general effect of moving you into a portion of the field where you can put more space between yourself and your enemy. -- Simonton
Those memory errors are odd, very odd. I'm not sure you are correct in saying the JVM keeps track of all strings it has seen, it wouldn't make since, but it easily tested ... let me check real quick *codes up a test program concat'ing Math.random(), sets heap size to 1meg* ... yeah, its not, didn't think so, that or my test program is borked, which is possible. But I think its some other issue. I might check into it. -- Ntroutman 2007-08-28
- Sorry, those are old comments. You are right, it is not because of the String class. It was because Robocode did not release the classloader for robots from previous battles. Fnl took care of the problem by running through all the static variables of each robot class and setting them to null (via reflection, I think). So as long as I don't set those variables to final, there is no problem with the latest versions of Robocode. -- Simonton
- Okay, I'm glad to hear that the problem is non-existent now. Ntroutman 2007-08-29
You could probably shed those bytes by taking the getGunTurn?(<lots of args here>) and inlining it. And WeeklongObsession is seriously slow! Have you considered dividing the matchlength by 2 every time instead of subtracting 1? You could probably take out the match-only-when-gun-is-cold then, which would save you those bytes. -- Skilgannon
- The algorithm for matching is going to be a lot different in the next version. The getGunTurn? was necessary because of the randomly placed return statements .... but actually it saves codesize :). -- Simonton
- Hmm... have you tried making all those variable non-private? I seem to remember something about modifiers increasing your codesize. -- Skilgannon
- "Private" does not change CodeSize. The "static" modifier will decrease your codesize. "static final" will decrease it even more, at least for primitives. The codesize doesn't come from declaring variables, it comes from using them - and "private" only dictates where you can use it. -- Simonton
Now that you're releasing into the general rumble, maybe you could mod your client to also upload results to all the other rumbles? I'll be getting priority battles for WeeklongObsession even after it has 2000 battles in the MicroRumble?, because your client isn't uploading them to all the other rumbles. Thanks. -- Skilgannon
- Well, I'm really more interested in seeing micro results faster. I don't care much about the rest. So ... I could stop release to the general rumble again ... unless somebody else has a better idea. -- Simonton
- General rumble release is fine. I'm just wondering if you could somehow also upload your microrumble battles to the mini and general rumbles as well, so that the number of battles increases there, and it doesn't get priority battles even after it has 2000 in the micro. Whichever. ;-) -- Skilgannon
- Oh, well that's not my design. It's part of Roborumble that: if you're only running against micros, it only gets uploaded to micros. I've always been curious exactly how scoring works in the rumble, though. Does anyone know if it would affect the score to have a dis-proportionate # of battles from the micro league? -- Simonton
- Having 1 battle or 50 battles against a particular bot doesn't matter, it only makes the score against that bot more accurate. In Melee, it does affect things, because if your bot performs better / worse against MegaBots, it will also affect your score against MicroBots in those battles (since you're always fighting 9 bots at a time). In 1v1 it should make no difference at all how many times you fight the MicroBots (as long as you do face everyone in the end). -- Voidious
- Ok, sweet. It's been done. Starting now with GFMicro the results will be uploaded to all possible leagues.
I just thought up a reason that using latvel/advvel in your gun isn't as good as using 'absolute' matching: by using latVel you are assuming that you were staying still last time, when you took the recordings, because you are reconstructing a GF, which should assume that the wave center stays still. But because the center of the 'wave' you are recording from moves, you get inaccurate results. My explanation is kind of lacking, but basically it all boils down to latvel/advvel not being as accurate for reconstructing enemy movements. But only if you are moving, which is why the PMResearch didn't show any problems with it =) -- Skilgannon
- Changing from absolute to adv/lat velocity cost me 0 points and saved me 50 bytes with this bot. The rumble says it's about the same either way, at least at the micro level. But you are right, adv/lat velocity has a margin of error because you are moving. It apparently doesn't matter in the end though. I guess I should say that I tried it both ways in the rumble using single-tick matching, but not the standard style. -- Simonton