DangerPrediction
Wave surfers use onBulletHit and onBulletHitBullet events to learn how the opponent is targeting at you. It is a lot more versatile and adaptable than simply assuming the opponent is using head-on, linear or circular targeting.
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.
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page.
Return to Thread:Talk:AgentSmith/DangerPrediction/reply (17).
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.