Hitting Pure Flattened Movement?
The highlighted comment was created in this revision.
Has anyone made a targeting system capable of hitting a good sandboxFlattener (Perhaps a top bot with surfing disabled and flattener enabled by default) better than top bots hit strong random movement? This would be a good start for hitting combined surfing and flattening, which is driving hitrates of top guns into the ground ( Below 10, sometimes even 9%).
What makes you think you could predict a curve flattening movement better than a "random" movement? A good curve flattening movement is a lot like random with a forced even distribution, like Java's Math.random(). It should always have a higher entropy than a naive random, I think.
It seems like its theoretically possible to get a higher hitrate (without simulating their movement) because you know that they will move away from where they have moved before, while in random movement there shouldn't be a correlation between where they have moved and where they do move.
It's possible. A random with an even distribution is less predictable than a skewed random, but it's only a hunch that curve flattening resembles the former.
But while knowing where they won't be is something, and could increase your hit rate, it's really quite far from knowing where they will be. You could know where they won't be 100% of the time and never hit them. :-) And of course there is a correlation in random movement between where they have moved and where they will move, since they are determined by the same algorithm. Isn't it more useful to know where they will be vs where they won't be?
To know where a flattener will be, you'd have to figure out quite a lot about their stats to be able to shoot at the least visited reachable point with any accuracy. And that truly is the holy grail of Anti-Surfer guns, since you could also destroy a normal surfing system if you knew that much (ie, not just a flattener). When surfing first came along (~2005), a lot of folks thought this would happen almost immediately, but so far they are still wrong.
Knowing where they won't be increases your average hitrate over time, by limiting the places they could be. Imagine a targeting system which fires outside of their MEA vs one that always fires in the MEA.
Oh for sure. My most sophisticated attempts at fancy Anti-Surfer guns were along these lines - assume they will go to the safest reachable point on all of the waves in the air at fire time, using precise prediction to figure out reachable points, then restrict my choice of firing angles to the range of remaining reachable points.
What I really want is a mask to apply to the whole range of firing angles, deduced from the probability of all possible enemy movements as they surf the waves in the air. I tried a very (very!) crude version of this once in Dookious.
Oh, and I don't mean to sound too discouraging! I actually think of improvements in Anti-Surfer targeting as one of the remaining frontiers in Robocode, and probably one of the nearer ones. I've spent quite a lot of time trying Anti-Surfer stuff myself, including stuff that precise predicts enemy movements or penalizes places they've been hit. But the best I've come up with in Diamond is still just a simple fast-decaying / well-tuned gun.
I think a major problem is that hitting flatteners and surfers is two different things (Despite them often being combined). When running top bots (Diamond vs DrussGT), I notice that once their flatteners are enabled, they often can't decide to use main or anti surfer targeting systems. To me, it seems like an optimized gun for hitting surfers (Fast data decay, fire where they have gone in the past) is not the same as an optimized gun for hitting flattened movement (??? perhaps data decay rate that is opposite of theirs? perhaps a gun that fires at the lowest point of their estimated movement curve in the instead of the highest?), and advanced bots now just have a main + anti surfer gun, with no effective method of dealing with flatteners, let alone flattening combined with surfing. I can imagine the problem would only get worse if bots started having a % rating for their flattener, instead of a simply on or off, allowing to vary how much flattening they do.
YersiniaPestis has a non-binary flattener, like you describe. He is pretty tough, and I do like the idea. I have several thresholds in Diamond's surf stats, as well, not just 2 modes.
But I don't think some thrashing between guns is a big deal - I certainly don't read that much into it. You have fairly little data, two very strong guns, and an enemy that's constantly changing its movement profile, so a lot of fluctuation doesn't seem surprising. I don't see anything inherently bad about thrashing, either. I still think it's the right move to choose the highest rated gun at any given point, even if it changes every shot.
I don't know, I just don't see a strong distinction between targeting vs flatteners or surfers. It's all the same algorithms and using information that's available to both of you. But I'd love to see some innovation vs either or both. :-)
There seems to be a fundamental difference to me: Surfers avoid where they have been hit, and do not change their (segmented) movement profile till their hit. This means that fast learning, fast forgetting guns essentially relearn the new movement profile every time they change (when they are hit). Flattening bots constantly change their movement profile, hit or not. Thus a "classic" anti surfer gun will be constantly lagging behind. My point about the guns was not that rapid switching is a bad thing, but that current anti surfer targeting is not very effective against surfers with flatteners, to the point where guns optimized for non adaptive movement can match or outperform them. One thing to note is that a but that just flattens wouldn't be using adaptive movement.
A few thoughts. First, yes, the difference is one uses bullet hits and the other uses visits to update its stats. If you're hitting the enemy at all consistently, this is more a difference of granularity than of rate of decay. Is there a general correlation of bullet dodging/flattener to decay rate, like flatteners decay faster? Maybe, but that seems like a guess for now.
Against most surfers, my non-decaying gun is actually the strongest gun I have. I guess those surfers have enough exploitable weaknesses unrelated to their surf stats to outweigh what I can gain from a fast decay rate. As a result, I really only tune the Anti-Surfer gun against the very strongest bots - some subset of DrussGT, Shadow, Tomcat, and XanderCat. My Anti-Surfer gun decays based on visits, not bullet hits, which it actually knows nothing about. So in terms of the metric, it's more like a flattener. I guess it probably is more tuned as an anti-flattener than anti-bullet dodger.
And you could look at it another way. Diamond and DrussGT's main guns are pretty much the strongest guns in existence. Against most bots, they crush the Anti-Surfer guns. The fact the Anti-Surfer guns can compete at all in that matchup is notable. And DrussGT is an insanely hard bot to hit - I wouldn't be shocked if both of my guns perform about as well as Random Targeting at certain points in the match.
I've been experimenting with an anti surfer gun which decays on shots and on hits/ bullethitbullets , its working reasonably well vs top bots with flatteners disabled. (Not good enough yet though...) I am suprised the anti surfer gun isn't used vs most surfers, but then again I've only been doing tests vs DrussGT, Diamond, and other high ranking bots... The difference I see is that a pure flattening bot would change its profile every wave, while a pure surfing bot would have the same profile until hit.