This is an idea that I have been thinking about for some time, but I don't know if I'll ever have the ability to do anything about it, so here it is and maybe it could be of use to someone. Perhaps there are bots that already use it.

Have you noticed how movement mostly is about how to avoid getting hit? Seems obvious that it should be so, doesn't it?

Well, when anything is obvious I think it is time to do the opposite. How about letting movement be the main form of attack? (OK, Ramfire does this)

Anyone who has ever had some decent success at a fighting sport like boxing or fencing knows that for certain moves you make, the opponent reacts in some way and you can use that reaction against him/her.

This is to some extent true of robocode robots too. For example, many bots perform badly when they get "crowded" by the other bot, which made grafis Geek series very successful.

I think a lot of bots do this already. It is quite common to approach an enemy until you are close enough to hit it. Isn't that sort of thing what you mean? And using an enemies movement against them is what targeting is all about, isn't it? I'm not sure i understand what's new about this. :-/ -- Tango

Well, many bot have weaknesses in their movement that could be exploited by ProvocativeMovement. Take Gouldingi for instance. It tries to move perpendical to the enemy and uses a too simple way to avoid hitting walls. It just translates the destionation point into the battle field. (Check Movement/CodeSnippetGoTo, it's Goudlingi code.) When Gouldingi and its enemy is close to the same wall this makes half of Gouldingi's moves be very short (it can move 90 degrees from the enemy in one direction but in the other direction lies the wall). Now if the enemy moves out from the wall, say 20 degrees, while Gouldingi stays, half of Gouldingi's moves will take it closer to the enemy due to the inside-field translation. If Gouldingi has decided to this time make a long travel this will bring him much closer to the enemy, becoming a very easy target. Also Gouldingi tries to keep it's distance to the enemy which makes a movement like Walls proactive against Gouldingi if the two bots are close to the same wall. Gouldingi tends to just back away slowly from Walls, sticking to the wall. Since Walls fires with HeadOnTargeting this brings home some easy hits to his account. Further more many bots of mine has had problems with getting an easy target when in a corner. I'm sure other bots must have, or have had, similar problems. So if you move proactively you could force these bots into that position and kill them there. SandboxDT and Lacrimas seems to be good at this, even if it might be a coincidence. -- PEZ

The problems with proactive movement would be that bots tend to have different kinds of weaknesses and you must find out what they are and how to exploit it. I have been reading some of delayed learning (mainly Temporal Difference learning which is a special kind of neural networking). With these methods you could maybe train a movement based on a ratio on how much damage you can do to the enemy and how much it can do to you. But I suspect this will be a slow learning process. The success of Temporal Difference learning can be apprecited by studying the history of TD-Gammon, a Back Gammon AI that has achieved much. It has even managed to alter the opening tactics of the top human players in the world. The creators of TD-Gammon put two Temporal Difference NNs against each other and let them play tens of thousands of rounds. -- PEZ

I was just thinking the other day about trying to see how the enemy reacts to you getting close to it and trying to possibly push it into a corner. One example of completely different and fairly simple ProvocativeMovement would be NanoStalker, which manages to beat some robots that it really shouldn't be able to. The movement I've been working on recently (first practically applied to MakoHT addresses your idea of trying to move to hit as well as moving to not be hit. It puts together several factors - penalties as well as benefits for both players. shooting a power 3 shot will give a penalty of 3 at that distance, but hitting with a power 3 bullet will give a benefit of 9 at that distance, and gives your opponent a penalty of 16. The distance with the greatest perceived advantage between both robots' benefits and penalties. (Against a really good robot, this will still be a negative number for all distances). -- Kawigi

I just thought of a movement that is similar to this idea, Hiding?, basically you try to stay out of the enemies radar so they can't get uptodate info on you. I doubt this would be possible with any kind of advanced radar code, but with simple TurnRadarRight(360) strategies it might work. -- Tango

Heya, I'm new to the wiki so don't rip me in half if this has been done, but.. I'm more one of those thinker than doer types, and this concept has occured to me before. The major thing I think you haven't hit on is moving to hook your opponents into inferior strategies. Ie: You move a straight line for ten, then veer off rapidly, it's at least eleven before your opponent cools down, see if you can hook them into a linear prediction shot. See if you can do it again. If you can, congratulations, you've just found a foolproof way to never be hit. Opponent have too sophisticated a matcher? Fair enough. Try again with line - regular arc - line, each for ten. See if you can hook them into a shot at circular and a shot at linear, of course careful to move so that they wouldn't hit. This to me if the potential beauty of this kind of movement, reacting you can only dodge so much before bullets are everywhere, provoking you can tell the bullet where to be. It shouldn't be too hard to write a little module that iterates through all the common hooks and tries to snag robots on them, the only real trick would be to avoid being torn up while doing so. This is kind of similar to the stop'n'go strategies you see, but it takes something more complex than averaging to defeat it. -- Kuuran

This wouldn't work with most advanced robots because they learn how each robot moves, and would know to fire at the point they'll be at after the dodging move. Take a look at RandomMovement and SandboxFlattener.

I think it can work. At least if you randomize the dodge move enough. Many pattern matchers would find this kind of behaviour hard to deal with since a pattern matcher never can look ahead of the current (non-dodging) pattern. And PatternAnalysis? would prove not just to be complicated, but also quite ineffective against this kind of movement. Though I suspect that StatisticalTargeting would still be as effective against this as anything else. -- PEZ

Thanks PEZ, that's what I was hoping to hear from someone other than myself. :) In practice you could probably throw in a function to try and skew the statistical center of mass as much as possible every time he pulls the "switch" half of the bait'n'switch. I'm going to try and make a proof of concept for it, but it takes me awhile to actualize code, so don't expect something brilliant tomorrow. -- Kuuran

I made a little experiment with Provocative movement... maybe with a little polishing, it could be what people use to test movements that tend to move away from their opponent or look for escape envelopes. Basically, he tries to either keep his opponent directly between himself and the closest corner to the opponent while he moves in, or he tries to keep himself between you and the middle if you're not closer to the corner (having the effect of either moving toward a corner or putting you up against a wall). Maybe I'll upload it as a test bot some time... -- Kawigi
---

I was thinking of using a sort of provocative movement for WaveSurfing. In your precise prediction, by keeping track of the enemy's gun heat, you check when he would fire. Then you see which segments he would have chosen if you did that movement, and you try to choose different segments every time. This could make a stupendously effective anti-gf movement, and you could also use this to see what segmentation the enemy is using. -- Skilgannon

Sounds like an interesting idea. One problem is that you don't know what segments they use. So if you switch from speed 5 to speed 3 thinking that they split speeds into 0-2, 2-4, 4-6, 6-8, that wouldn't help if their actual segments are 0-2.5, 2.5-5.5, 5.5-8. --David Alves