Chalk/Archived Talk
Hey man, nice tank! I actually ended up looking through your source (cool that you included it) because I noticed the codesize was so small, and your tank is doing well in the RoboRumble. As a newcomer to Robocode, I am also just starting to do WaveSurfing, and I had a couple thoughts to share with you if you don't mind. (I am as eager to be corrected as to hear that the idea is good, just fyi!)
One thing I do with my multiple buffers is multiply the bin score by the number of total segments in that buffer (after retrieving the value); I do this because the buffer with far fewer segments would have, on average, much higher values in their bins, but they would actually be giving less accurate data as the match goes on. (You kind of provide a natural weighting by not doing that, in favor of the lesser segmented buffers.)
The other idea, which I'm more convinced is a good one, is that for velocities near 0 I tried incrementing the bin for that factor *and* for its negative, since you're technically not oriented to either direction over the other. (You are using relative factors, I think, as in 1.0 is forward and not "clock-wise"...) I just did this in the dev version of Dookious, and my WaveSurfingChallenge scores went from 90% for both to 95%/91.5%. (Edit: Actually, that ChallengeA score must have been out of date, because all the factors should be 0 in that one anyway. :)) (CurveFlatteningChallenge didn't change noticeably over 100 matches, but I'm still convinced it's the right move.) Anyway, please don't think I'm just trying to be critical of your code, it's very clean and efficient. -- Voidious
Nice tank to you too! While I was wrapping up the first version of Chalk, I had a pretty good idea of where I stood against most bots. Then suddenly, WHAM!, add Dookious v0.50 to my loss list.
Regarding WaveSurfing, thanks for the tips. My surfing has some issues. I noticed Chalk lost his second RoboRumble battle to Gruwel. This isn't a comment on Gruwel's quality but GrubbmGait describes its gun as an 'Iterative circular gun' with '(rolling) averaged velocity'. Seems the gun should be vulnerable to WaveSurfing when it's implemented correctly. Mine, obviously, isn't
I like the idea of favoring highly segmented buffers. It makes good sense - though currently I'm not even sure if I'm using the right segments let alone weighting them correctly. I can't see anything wrong with mirror incrementing at low velocities, either. Hope you won't mind seeing your tips in Chalk 1.1. ;) Thanks again. --Corbos
Any adequate WaveSurfer should score 90% against Gruwel, as it really uses an 'Iterative circular gun with bullerpower adaption against wallshots' (no averaging on velocity). If you have the figures, please fill in the WaveSurfingChallenge. It is nice to see some recent bots there, although a good score is no guarantee for real-life performance. -- GrubbmGait
Corbos, not at all, I'd be honored. :) Congrats on the ranking jump of 1.01, too. I'd been waiting until he scored better to fill in the WaveSurfingChallenge scores for Dookious, but I'll test and post 0.50's scores for the heck of it. I'm more concerned with the MovementChallenge and Dookious's gun at the moment! -- Voidious
I'm proud to be a ProblemBot for another top-40 tank :) Nice work! -- Voidious
Well, I'm certainly intrigued... I would definitely be interested in a more detailed description of its WaveSurfing methods. (Though I am planning to read through the source some when I'm less tired.) Pretty interesting RoboRumble results so far. Neat! -- Voidious
Glad to see someone else traveling the "no stats buffers" path. Don't give up, a 2060 ranking is possible! ;) -- ABC
Congrats on cracking the 1900 mark, Corbos! (These last couple of versions give Dookious a very close match, too, if you didn't notice.) -- Voidious
Just in cast you thought your humor had gone unobserved, I did catch the element version numbers. -- Martin
Aha, thanks for mentioning that... I'd been wondering =) -- Voidious
Hell, they're sequential. If I run out of elements before the next 'minor' release, I know my versioning scheme (and development) sucks. Which reminds me... how about a new rule - 'All top 10 bots must be versioned 1.* or higher.'? Seems fair to me. --Corbos
Naturally, version 1.0 would coincide with taking over the #1 spot. =) -- Voidious
Making steady progress there, and taking down a few top-25 bots while you're at it - nice work. You've even got me thinking about trying a no-stats-buffers tank. Also, did you realize the irony that your tank is "Chalk" (white), modeled after ideas used in "Shadow" (black)? =) -- Voidious
The interesting thing about the stats-buffer/no-stats-buffer dichotomy is that I'm sure they're mathematically equivalent. I just don't have the math chops (and patience) to prove it. I like the white/black observation; though I currently view pattern matchers as the most evil and "Black" bots. I imagine I could scare up a few more points by shaking a few off my problem bot list. Cheers. --Corbos
Ouch, dealing losses to Dookious once again! Nice work. -- Voidious
Wow, welcome to the top 20! Find a bug in your WaveSurfing, maybe? Keep up the good work. -- Voidious
Actually, 2.3.He was a gun-only update. I knew the gun had issues, but finding 40 points worth of issues was a bonus. --Corbos
Finding 40 points in your gun is amazing - congrats. By the way, I'm not sure if you noticed this, but it seems that some classes used in your code are not packaged in the .jar. Namely, I don't see cjm.Debug and Util, which are referenced in a few places in the source. I was going to run a TC2K6 test of Chalk 2.3.He, but I wasn't sure what Util.ONE_EIGHTH was supposed to be :-\ (I figured 1/8 or Pi/8...) If you could post those, I'd gladly run some TC2K6 tests while I'm playing my new favorite video game, Metroid Prime Hunters :-) -- Voidious
Lucky you! I can't wait for it to be released over here. You probably have Tetris DS too... grr ;) -- ABC
Hmmm. 2.3.He shouldn't reference cjm.Util any longer. I moved those values into cjm.chalk.Evader. A quick 'Find in Files' confirms it. Could you be looking at 2.1.He? As for cjm.Debug, that's actually my answer to conditional compilation in Java - an interface that is never implemented and contains behavioral constants. From what I understand, if an interface constant eliminates a logical branch, the compiler ignores the branch all together. Apparently, the robocode packager ignores it all together, as well. ;) Anyhow, it's simply:
package cjm;
public interface Debug {
public static final boolean IS_MC = false;
public static final boolean IS_TC = false;
public static final boolean PRINT_STATS = false;
}
Sorry for any confusion. I'll probably run some TC2K6 tests as well. --Corbos
You know, I probably was looking at 2.1.He. Thanks for the clarifications; I'll see if I can run some TC2K6-500 seasons tonight. -- Voidious
In case you missed it, I posted a (1 season) TC2K6 score for chalk; 83.68, just behind PulsarMax, and above RaikoMX and Cyanide. I'd guess you could probably break 2K by a decent margin without touching your gun again. -- Voidious
Thanks for running those. I know Chalk has become a bit of a SlowBot so I really appreciate it. I wish I had more time to make the run for 2000. I'm too addicted to ignore it but reality might slow development for a while. Thanks again and keep shooting for that #1 spot. --Corbos
Nice job on Chalk 2.3.B, still plugging along towards the 2K mark. I finally started studying some of the source code this week, and I'm learning quite a lot from it. It's a lot simpler than I imagined the Trons-gun-style methodology to be, though I don't have the experience to know how different your implementation is from Tron/Shadow. (Your source code is always very neat and straightforward, which helps. =)) It's really got me wanting to try a tank of my own that doesn't use GuessFactors, but first I must continue on Dookious for a bit longer... -- Voidious
I've just uploaded an open source version of a simplified Tron/Shadow gun here: http://robocode.aclsi.pt/abc.wiki.DCBot_1.0.jar. I'll make a page for it soon. Have fun. ;)-- ABC
Wow. Thanks for sharing this. It'll be interesting to see the differences and similarities with Chalk's gun. If you don't mind the publicity, this might be a nice addition to DynamicClustering as well. Thanks again. --Corbos
Yeah, way cool that you posted that! I will definitely be taking a look when I get a chance. Thanks! -- Voidious
Hey Corbos, two things concerning your "BAND_WIDTH" variable. First, what is it exactly? =) Second, your calculation:
static final double BAND_WIDTH = 20 / 3;
From what I can tell, and testing it in a stand-alone Java program, this will assign the value "6.0" to BAND_WIDTH, not "6.66" as you're probably looking for. Best of luck in your hunt for 2K! -- Voidious
Thanks for catching that. I use BAND_WIDTH in my kernel density calculations. This intro explains it better than I could: http://www.stat.mq.edu.au/staff/tduong/seminars/intro2kde/. Also, Albert provides a KernelDensity page with several pluggable kernels. Basically, band width determines the smoothness of a curve estimation. Given n observed bearings, a kernel density estimation "roughs out" a curve that fits the observations. The larger the band width, the fewer peaks and valleys the curve will have. Once you have an estimated curve, you either move away from or shoot at the densest part of it.
...makes me wonder if I have other integer/double math bugs. Thanks again for the heads-up. --Corbos
Wow! This is not a step, not a jump, but a leap forward to #4. Congrats on this amazing improvement! -- GrubbmGait
Wow, amazing... Big congrats, Corbos, absolutely incredible rating jump with 2.5! I patiently await your post to the version history to see what you did =) -- Voidious
Holy crap, did you just gain 50 rating points with one update? I thought my 30 point gain was impressive, but man... huge congrats from me! =) --David Alves
Thanks everyone. I'm really happy with the result - couldn't have done it without so many shared ideas. --Corbos
Which of the changes do you think produced the biggest gain in rating? Incidentally, that's how Phoenix surfs too. =) --David Alves
The min/max calculation was definitely the biggest factor. Squishing a couple of bugs in Chalk's movement prediction amplified the effect. Gun changes gave a nominal boost, at best. I always assumed the nearest wave was most important with the second, third, etc, waves providing fuzzy pressure. After a little thought (and watching the result), predicting completely through at least two waves makes a lot of sense. The nearest wave is important, obviously, but it's the wave you can do the least about. Treating all waves with equal respect gives a little more time to set up a nice surfing sequence.
Out of curiosity, what do you credit for your 30 point jump? That seems far crazier than Chalk's 50 considering Phoenix was already in the thin, thin air. --Corbos
My jump was due entirely to a change in the rolling speed of my surfing stats, rolling them faster than before. --David Alves
Well, it ain't another 50, but another ~10 point jump at that high a rating is still pretty sweet. Great to see Chalk kicking butt in the top 10! Keep it up, man. -- Voidious
Pretty sweet PL performance with that last version, tied for 1st and beating both Dookious and Phoenix. Actually the last several versions have been about draws with Dookious on average. What kinda changes you been making? Haven't seen an update to Version History in a while ;) Cheers, -- Voidious
I always have good intentions for Chalk's Version History but never seem to get it done... anyhow, I added a second gun to up my percentages against surfers. It uses the last 5000 versus 30000 scans and weighs actual shots much heavier than those without a bullet. I've also toyed with flattening easier and harder. Neither idea is well-tuned as evidenced by Chalk's drop in rating while his PL improved. Still, I think they show promise. I'll tighten them up when I get the chance. See you in the Rumble! --Corbos