DangerPrediction
Ahh right, sounds like there is a bit of miss-naming here. I would say that what you described was nothing to do with wave surfing, and is in fact a technique for predicting enemy bullet positions more accurately - which is what I intend to do next.
Wavesurfing I would say is taking that predicted bullet information and building up a "wave of danger" which you then use to move. This part is different in Agent Smith because it does not use one dimensional (along a line, guess factors) "waves of danger", instead it considers 3 dimensional data, predicted bullet x,y at time t and using that to choose its movement path.
Considering you know the fire-time and bullet power, surely you can then eliminate all points not on the wave as possibly holding the bullet at that point in time. So it seems like wavesurfing to me.
Yes, I use waves to work out predicted bullet positions at time t. What I don't do is use that information to build up a 1 dimensional array of danger values and then surf those danger values left or right.
Instead I use the absolute bullet positions relative to my bots predicted position to work out a path in the future that maintains the minimum possible danger. It is more of a minimum risk movement that wave surfing.
I don't restrict the predicted positions to left or right, I try numerous possible paths within the movement sphere of my bot. Each of those paths I predict up to 50 ticks ahead into the future. This is the key point - because I predict precisely the paths for 50 ticks the path may move into what a wave-surfer would traditionally call a danger zone but my bot is not in danger because it knows that the path it is traveling on will take it out of the way by the time the bullet hits.
Because it does not use a 1d array of danger values it takes into account every single bullet in the air at the same time, which means it can be extended for melee very easily.
Once a path has been chosen it will follow that path (with no need for recalculation) until a new enemy bullet has been fired, at which point it recalculates again.
Yes I believe it shares some similar ideas to wave surfing but I think it is different enough to be called a different technique.
Sorry, but I'd call this wave surfing. It's a broad category of movement, tho, and that doesn't change how similar or different what you're doing is from everyone else. Curious to read more when you write it up.
Te-he-he! I didn't mean to cause a stir! :)
This all boils down to your definition of "Wave Surfing". I see Wave Surfing as quite a narrow category of movement. But I assume then that you lot think Wave Surfing is any movement that tries to dodge predicted bullet positions then? In which case, yes, its a variant of wave surfing.
I think it is more akin to http://robowiki.net/wiki/Minimum_Risk_Movement because it picks a series of points (but in my case its actually a series of 50 tick long paths) to move to, and evaluates the danger for each of those points (paths).
:-) For what it's worth, I consider Wave Surfing a form of Minimum Risk Movement too. That's pretty close to how I'd define it, actually - Minimum Risk where the risk is based on enemy waves.
Haha! Talk like that and you will have everyone thinking that all movement in Robocode is Minimum Risk! ;)
Nah, I don't think it's much of a stretch. I know it's come up before on the wiki. Minimum Risk = each tick, generate a bunch of destinations, evaluate the risk of moving towards each one, and choose the safest. Wave Surfing is pretty much exactly that. The destinations are most commonly orbit forward, orbit reverse, and full stop until the wave intersects, and the risk calculation is usually primarily based on estimated probability of the opponent firing at various angles. And as we've started to augment our danger calculations with other things like distancing factors, it's even more reminiscent of melee style risk calculations.
That sounds similar to what I did in Neuromancer, although there I predict until all waves have passed. I generate movement options by calculating paths to reach all the points in a circle around the current location. It is definitely Minimum Risk, but the inclusion of wave-based dangers makes me call it a variation of goto wave surfing.
If it takes in account every single bullet in the air, then it is a form of [enemy] virtual bullets. Which does the same thing as waves, except in a more complicated way. It was the most used data structure, until someone had the insight of representing shots as circumferences growing in radius over time.
I use waves now, but also store a collection of headings inside the wave to cache k-NN search results. Combine a circumference and a heading and you have an exact x,y coordinate to use in danger estimation. Combine all circumferences with all headings and you have all x,y coordinates of enemy virtual bullets flying in the battlefield.
MN - thats pretty much exactly what I do. However, the interesting thing is what I do after I have the predicted x,y positions of bullets! :)
In 1v1, I don't use x,y coordinates, I use "one-dimensional" headings alone to estimate danger at each GF.
In melee/team, I use x,y coordinates to generate anti-gravity points. I tried using minimum risk once and x,y coordinates to estimate risk (melee surfing), but it performed poorer than anti-gravity/shrapnel dodging and it was never uploaded to the rumble. Probably a tuning issue which I never fixed.