Head on gun in melee
I think you are right, the average distance must be the parameter in question. How could I forget about it.
Also, thanks for warm words with my humble progress. One thing in my mind is anti Diamond gun :) It is amazing how your bot survives with relatively short motions around a given conner in melee. I am thinking about a gun which instead of the most common GF would aim at the most visited location. I think it would score quite well against Dimond. But from the other hand, it looks like your bot is quite unique in this regard.
Do you have any recollections if this was tried in the glory days of robocode?
I don't remember anything like that. There were schemes like that for movement, I think, with different areas being considered safe/unsafe.
One thing I found helped a lot in Neuromancer was the bullet power formula, and taking distance of the target I was aiming at into account. Close targets get lots of bullet power, further targets get less bullet power. If lots of targets are bunched together, they also get lots of bullet power.
Good luck. I've been tempted a few times over the last few weeks to pull Neuromancer out and implement some of the features that are missing. If I do that I'd also like to open-source the current version of Neuromancer, since it seems nobody else has seriously tried a surf-everybody strategy.
It's very interesting watching the different movement strategies of different bots - Diamond sticking in the corners and picking off anybody who approaches, Shadow finding empty spots and aggressively clearing out close bots, Neuromancer skipping through the middle of the chaos and somehow dodging bullets.
The bullet energy formula is probably the most important ingredient, but every time I touch this even a little, my score drops down like a rock.
I am actually surprised by how few bots aim at Diamond in melee. It dances in a corner with a relatively simple triangular path with short motions. I would think a pattern matching gun should follow it quite well. But yet Diamond tend to out survive quite a lot of bots. But my old pattern matching gun is so sloooow, I did not even put in EvBotNG. From other hand, Diamond seems to be quite unique with this corner hugging strategy, so having a special gun just for it would not bring a big score boost.
Also, I think my old EvBot is dodging everyones bullets, it did not do surfing in the canonical form of predicting the bullet hit position, but it did take in account every wave. With new bot,I am hitting the skipped turns a lot, since I do exact path calculation and precise intersection now. I have a feeling that I do it wrong and it should not take so much CPU. But iterative procedures sucks, I should pull out my linear algebra skills and do non iterative hit position calculation.
As for Neuromancer, this one tend to survive in impossible situations. I use to think that you knew some hacks and actually see the bullets :)
Seeing Neuromancer in the open-source would be great. I do not see what stops you, I would not expect literate copies from true developers. But it would be loverly to see the tricks you use.
But even more exiting, would be to see new wave of discussions which comes with new developments. The wiki seems to be very quite lately, with not much going on.
Strictly speaking, Diamond doesn't have any deliberate corner movement strategy, and he certainly doesn't have a hard-coded triangular pattern that he follows. It's just a well-tuned minimum risk movement with some randomness based on recent locations. So hopefully it looks more predictable than it is. :-) One thing he does is precisely predict a few ticks ahead to avoid hitting walls, so his wall smoothing is pretty graceful and that may help him stay in the corners (where it's safer) and still avoid recent locations. Looking at it now, his melee movement is actually a very small amount of code: MeleeMover.java.
As for what's been tried before - my attitude is generally that everything has been tried before ;), but that doesn't mean it's not worth pursuing. Those attempts could have been suboptimal or outright broken and the landscape of competition has changed over time. If I were climbing the Melee ranks, I would certainly consider specialty guns for the top bots. And I have certainly considered it for Shadow and DrussGT in 1v1. :-)
But no, I don't remember anyone trying that. oldwiki:AreaTargeting came to mind, but looks like something different. Maybe you could formulate something like a GF that's based on a corner / quadrant of the field, the way a GF assumes orbital movement and factors out orbit direction. Like polar coordinates from nearest corner, with 0/north being towards the center of the field.
I am shocked. Am I right to observe that there is no bullet/wave dodging in melee code? I.e., the bullet avoidance is all in the randomized motion.
Does it mean that I over think the problem, and should stop wasting CPU on bullet tracks predictors? This is somewhat depressing, but I've seen HawkOnFire as surviver of a melee, so it should not be such a surprise.
Both Neuromancer and DemonicRage use some kind of bullet prediction - Neuromancer full waves, while I believe DemonicRage just predicts a few simple kinds of targeting. Diamond is the outlier among the top 3 for using a simple minimum risk movement that does not use waves.
Correct, no melee bullet dodging at all for Diamond. Up to you whether to believe it is a waste of effort to pursue it. :-) Clearly Skilgannon doesn't think it's a waste and he's at #1. Portia also dodges simple targeters, tho I don't believe his dodging learns at all.
I am still skeptical that any effective bullet dodging is possible in Melee. I just think the data is too noisy while wave surfing thrives on precision. So I still personally suspect that Neuromancer and DemonicRage are successful largely due to the minimum risk and unpredictable aspects of their movements. It's not like Neuromancer is that far ahead - nothing like when surfing showed up in 1v1.
Skilgannon and Justin are both super smart dudes that have surely done plenty of testing, but it's a hard thing to prove is doing what you think it's doing. I do think that melee surfing HOT or even Linear Targeting certainly seems possible. IIRC Portia had some impressive results vs a field of HawkOnFires.
I know that it is proven by a lot of bots, that GF guns and statistical guns are way superior, but my intuition rebels. There must be a way to predict a bot path, at least for a short amount of time.
If you play my bot against yours you would see that it often beats you in first round. This is the time when the circular gun is the most efficient. Than you learn to surf it.
In melee a bot does not live that long to collect a real hit stats, so I would think it should dodge the simple physical targeting gun like the circular or even linear. But once distance and, thus, time of flight increases, then the circular should be less of the issue, since there are plenty of disturbances to change the path.
I am currently dodging in melee the HOT and circular guns, but the issue is in the uncertainty of the fire time. Looks like I need to implement gun heat tracking. I am also dodging back part of an uncertain wave. I think I should try to dodge the front one, or may be all in between.
The reason I didn't want Neuromancer to be open source was because I wanted there to me more than one implementation style of surfing for Melee. Shadow and SilverSurfer had two very different styles of surfing, but when rozu open-sourced Apollon, everybody took that style (true-surfing) and nobody touched goto style until I came along with DrussGT. Perhaps though, by open sourcing Apollon it kickstarted the wavesurfing movement for 1v1 which may have never happened otherwise. I'll release an open version of current Neuromancer in a few weeks, that will give me some motivation to get these features added =)
It is quite possible to get a fast Play It Forward - the gun in Neuromancer depends on it.
And I think you may be disappointed with how simple Neuromancer is =) I suspect those who read through it will go "Oh, obviously." and proceed to write their own equivalent from scratch, much like others have done with the BasicSurfer.
Well, I am looking forward to get my "Aha" moment. I you kept us in suspense for long enough :) Who knows, may be someone will use it as a spring board to beat the king.
I was trying to avoid PIF, since I would have to redo a lot of code. But deep inside, I believe PIF is more physical than GF targeting. I tend to agree with Voidious that Displacement Vectors in melee make more sense. PIF seems to be a gun which would be in alignment with this idea.
I like PIF for melee because it means I don't have to make assumptions that bots are moving relative to me, or their nearest enemy. I find in melee multiple enemies and walls can all affect movement, so the assumptions for GF and displacement vectors don't necessarily hold true. Of course, they are much faster.