* 0072: filter scans that put the enemy out-of-bounds *before* adding them to the cluster, so that the cluster always reaches the desired size.|
* Dynamic weighting system 2: take a large cluster as the first cut of the algorithm. This cluster uses unweighted distances. Then iteratively try pulling shooting-sized clusters out of that first cut using different weightings. Finally fire using the weighting that gave the densest firing angle. 35/500 indicates a shooting cluster size of 35 from a first cut of 500 scans. +/- means each iteration tries adding one to each weighting in turn, for each one that didn't create a denser cluster subtracting one & trying again. 2/.5 means multiply by 2, then .5 instead of incrementing/decrementing. "rand" means just try a bunch of random weightings.
More things to try:
(5*time-since-dir-change + last-time-since-dir-change)/6. Maybe try giving them more weight than regular attributes, since they have more state information.
How big of a log are you keeping and searching through in that first gun? "All firing waves" sounds like all of them through the whole match, but that wouldn't fly with my algorithm (similar to Chalk and DCBot). Other question - how can you get a TC score of -1 against a bot? =) -- Voidious
It's kind of funny, Skilgannon and I are taking opposite sides on the issue by saying Vista sucks in different ways. =) -- AaronR
Hey Simonton, are you weighting all your waves equally? How about weighting ALL the waves by the inverse of how close they are to the current scan? Thus a 'distance' of 0 would have a weight of infinity. -- Skilgannon
I see that your "Chalk version" had tick waves, but other than that, are you generally only using firing waves? I see 010 and 023 are your best non-surfer versions - neither of them use tick waves? I know DC is a lot different from VisitCountStats in many ways, but I can say for sure that in VCS there is a LOT to be gained from using tick waves. -- Voidious
This morning I discovered a bug in a LOT of my results up there (as you can now see). But there's still interesting things to learn from them, so I'll leave them here. -- Simonton
I feel now as if I wasted alot of time. There isn't much farther I can push my NN. --Chase-san
I think everyone feels like they are wasting a lot of time with Robocode recently. Since we can be reasonably confident that there can be no further revolutions in the current version of Robocode, everyone is just sitting around and waiting for someone to actually say, "Lets start coding Robocode 2!". -- AaronR
That's not true for me. I have a whole page of things which wait to be implemented, some are common knowlege and others are unique. And the whole robocode community is currently quite active! If you want to do something new, try yourself at melee or team bots. Especially team battles are underdeveloped. You might be right, that there will not be any further revolutions in 1on1. But I think Robocode 2 would not really change much, propably mutations of GF or patternmatching guns and WaveSurfing movements would dominate the rankings again. And i highly disagree with your assumption that there can't be any further revolutions, time will tell. I think it's astonishing that there is no method which dominates all other. I like robocode as it is, because of its simplicity. --Krabb
If you are not #1, then you are not wasting time, you definitely can have goals within the current version. Namely, becoming #1. Incidentally, the basic rules and physics of Robocode have not been changed since I started (in 2003... or was it 2002?). During that time I've written maybe 50 bots. I don't consider any of that time wasted. If you really think you're wasting time, maybe you should consider a different hobby? --David Alves
Waste of time or not, I am enjoying myself. The problem, I think, is that this is too much fun, and pulls me away from more important things (currently most notable: reading the Bible, prayer, and spending time with the lonely). -- Simonton
Hey, I look forward to Robocode 2 as much as anyone, but I have to agree with the other responses. There is still plenty to explore in the current Robocode. It's been thought many times that bots could not evolve any further - and most of those times were before I even started, during which time they have continued to get even better. Even in (arguably) the most developed division, 1v1, we've raised the bar in the top 10 by 30-50 points (with rating drift) in the last couple years; NeuralNetwork methods, DynamicClustering, evolutions of VCS/GF, or something else entirely could very well take us even higher.
If the steep hill of 1v1 or Melee are still discouraging, maybe you can try Teams, or get involved with making the TwinDuel, HatTourney, or another fresh new style of play a reality. I think it's only natural to get sick of the traditional modes of play and to want something else - hence the MiniBotChallenge, the ImplementsDroidCompetition, the ExtendsRobotCompetition, the PassiveKillChallenge, the LongThinLeague, RobocodeDeathMatch, the TwinDuel, and probably others I'm unaware of. While Robocode 2 will surely provide a lot of fun new ground to cover, I say there is still plenty left unexplored in Robocode 1 in the meantime.
Whoa, I just got back from classes and saw all of the responses. I am sorry that you are misinterpreting what my original post was trying to say. I agree that there can be further evolutions of DynamicClustering, VCS, NeuralNetworks, etc. I also agree that there are many things that can be done in Melee and Teams. (I have several melee bots and a TwinDuel team that I haven't released, in case anyone was wondering.) But, in my opinion, there will be no further major revolutions in the current version of Robocode. Revolution in the sense that PatternMatching was a revolution compared to LinearTargeting, and that GuessFactorTargeting was a revolution compared to PatternMatching, and that WaveSurfing was a revolution compared to random and SandboxFlattener movements. Because every Robocode bullet can be represented in terms of a single Wave and a GuessFactor, I suspect that it is possible to rigorously prove that some version of WaveSurfing is an optimal movement strategy. (Wouldn't that make a fun CS paper?) But, of course, there is still vast room for improvement outside of the basic techniques. I was just trying to point out how, because the base set of strategies (WaveSurfing, GuessFactorTargeting, and PatternMatching) have been worked out, there is no longer as much of a sense that the entirety of Robocode bot-building might change in an instant. If I have offended anyone, I apologize. -- AaronR
I agree that AdaptiveMovement is the best strategy for moving, and maybe we're already close to making the best possible AdaptiveMovement, who knows? But there might still be room for a revolution in the aiming world. But that's only in the 1v1 world, I think teams are almost totally unexplored; there's room for 3 or 4 "revolutions" there. So far most of the good teams don't really cooperate, they're just a bunch of good melee bots put in together with a few tweaks. --David Alves
So anyway, back on the original topic of this page... Those are some really impressive anti-surfer scores. Was there any one change that really made the difference against surfers? My DC gun can't hit them at all, but even my GF antisurfer gun doesn't score nearly as well as this monster. =) --David Alves
It seems to me like someone entering the DC race ought to share a bit about his gun before asking for others' secrets ... -- Simonton
Sure, there isn't much of interest to share though. I store 40000 "states", each of which has speed, acceleration, distance, etc. When I have more than 40000 I drop the oldest ones. I store states for both turns that I fired and turns that I did not fire. When it is time to fire I find the 50 states which most closely match the current state (minimizing sum of squares of error for each number in the state), making sure that if the enemy followed that same movement pattern it would end up on the field. Then I shoot at the densest cluster of destination points. I think it's a pretty standard implementation of a DCGun as described by ABC. I guess the main thing I'm curious about is not so much the exact line of code you used to beat surfers, but rather which area the improvement was in, e.g. weighting of the factors, trying non-traditional factors, or whatever. Or maybe there's a ton of different minor things that all contributed to your AS prowess rather than one "magic bullet"? --David Alves
Ha! Ok, ok, I guess I'll share about equally bland info, then. 0037, my best anti-surfer for 35 round battles (which are the ones that count) is just 0007 with bugfixes. I'm pretty sure you can figure out exactly how it works from the version notes above. I wouldn't mind swapping source with you. The part I'm interested in is the weighting, since I think that's where DC guns' potential really lies. -- Simonton
Well, it seems I got a dynamic weighting system that helps, but I still have a long way to go to be fighting with the best. Well ... actually ... maybe not as much as I think if I can get virtual guns working better. Hmm ... I am hitting non-surfurs on par with CassiousClay?, that's decent. And in this challenge my anti-surfer is the best. So that's not all bad. When I get back after this weekend maybe I should run some of the other challenges to see if I'm actually that close! -- Simonton
So I wrote a gun last night that gets 83 against the non-surfers in fast learning. But the same gun scores a pitiful *67* against surfers. I just can't seem to get this anti-surfer DC thing down. --David Alves
Do you account for firing vs non-firing waves at all? I'm not focusing on surfers at all, but I do account for that somewhat and I get decent surfer scores. How do you do vs Cigaret or FloodMini? If you have poor performance there, too, that's gotta be it. I'm way jealous of your non-surfer score, but couldn't care less about your surfer score. =) -- Voidious
I give non-firing waves an extra bit of "error" to make them less likely to match than firing waves (at least once I'm near capacity). I should probably test against Cigaret though, good idea. --David Alves
I'm not exactly sure what you mean. When I'm matching the current state to the states in my huge list, I always count the current state as "firing", even if it is a few turns before I will actually fire.. --David Alves
Just as a point of interest (for myself) - 0043 used dynamic weights but chose the best from a pool of random weightings for each shot (0041-0043 evolve weights for each shot). I added an explanation of the dynamic weighting system I'm using above. It'll be nice when we get these KD-tree like structures going. -- Simonton
Almost done with those trees. --Chase-san
Hey Simonton, would you mind running more fast-learning seasons of 37 and 38? In my experience 15-20 seasons isn't enough seasons to be accurate (it's probably within 1 for the total) and I'm really curious what the average would be for those guns in the long run. I'd be happy to run it for you if you like. --David Alves
Added Phoenix DC12 to your "all random movers fast learning" table. =) --David Alves
I'm pretty surprized at just how close the scores are when using velocity / attack angle (0053) when compared to advancing / lateral velocity (0051). With pattern matching it causes a lot more fluctuations. (At least with single-tick pattern matching) -- Simonton
Wow. If those numbers hold, that's a really strong gun. --David Alves
Indeed. about a 1/2 point away from taking over as the strongest gun in the random movement super-challenge. Too bad nobody has a perfect virtual gun system to lend me :). -- Simonton
Congrats with 0055, 90.03!!!!! --Starrynte
Very, very impressive, Simonton! Major congrats. Time for me to play catch up. =) However, about that "king of hitting random movers" title - seems like my latest Dookious FL results (1.23 and 1.543, which are not all that different) total 90.20, and that's with a performance hit from the VirtualGuns. ;) -- Voidious
Hmm, funny, by my calculations it's (92.02+92.61+83.68)/3=89.44. :P -- Simonton
That's sad. Now that the "forcing stop" bug has been removed from robocode & results are more reliable, I see that the dynamic weighting system does absolutely nothing except make my bot skip turns on a normal CPU constant. :( That's a letdown. I'm about to give up on dynamic weighting. Unless ... hmm ... let's give it one more shot with 0066. -- Simonton
Hmm. It looks like 0069 wasn't the best version, but I've posted comprehensive TC tests for it (here and on the TC pages). A couple notes: 1) DC seems to be a great way to learn surfers in the long haul (using every tick wave of 500 rounds), but the same technique is not so hot in 35 rounds. That's without weighting firing waves any different from the rest. 2) The surfers of the TC2K6 seem to be a bit easier to learn than those of the TC2K7.
In case you didn't look at this already, I was comparing Dookious to Dookiton, and the difference breakdown was pretty much what I expected: almost no difference against the weaker bots, but Dooki's gun is a bit stronger vs mid-top bots. The difference (Dookious minus Dookiton) across each quarter of the RoboRumble is: +62.4 vs the 25% lowest scores (toughest bots), +172.4 vs 25-50%, +57.5 vs 50-75%, +7.8 vs 75-100%. That's a very, very strong gun you have there, as I'm sure you already know! Taking it straight from the TC lab into the rumble, it's already either the #3 or #4 gun, and not too many points from #1. -- Voidious