Robo Home | Changes | Preferences | AllPages

Movement takes lots and lots of testing. Much more so than targeting. At least it takes much longer since you can't move virtually, and it's harder to measure. For me it's a bit of an art I think. Or like Voodoo if you like. With Marshmallow I have been working about 2% with its guns and maybe 5% with strategy issues and the rest with tuning its movement. The movement can always be tweaked a bit more, but the Voodoo makes this hard labour. 98% of the tweaks destroys the movement for me. I think Kawigi has wrapped his mind around this more completely and thus doesn't have the Voodoo relationship to it.

Lol, sure I have. I've been lucky in a few places, and I'm getting better and better at deciding how good my movement is, but I still dread having to tweak it. The next version of FloodHT may well have the same movement as the last simply because my days of 1-on-1 movement tweaking have been so futile. -- Kawigi

I spent 2 weeks trying to tweak my gun because I wanted better results in the rumble. Ten minutes after Kawigi looked at it he said the gun was fine but the movement is weak. Maybe you should look there. I then proceeded to run a grapher against Jekyl and indeed the movement was awful. *Note to self: Its the movement, dummy* -- jim

It's always the movement. Well, not for Marshmallow I think. Its guns are probably the weakest in the top 20. Yet its movement can be improved which I am trying to do now. This is because my new secret-gun doesn't fit very well in the gun structure of M and I'll have to sit down by the drawing board for quite a while before redesigning it. So, I'll try to maximize my movement in general and curve flattening in particular first. Some observetions from my recent visit in the movement laboratory (Note to the beginner, this is somewhat of an advanced topic, even if it doesn't seem so at first. Try get some flattening tests of your own under your belt before figuring too much about this. It'll all be clearer then.):

Have you for instance struggled with a spike at guess factor 0 only to realise after days or weeks that it's caused by your bot getting stuck in corners? I have had this and when not realising the cause of the problem I have tweaked away the spike and with a silly smile of satisfaction looked at my flat curve. Now enters guns like those of SandboxDT, FloodHT, Chameleon and Ender's new Zoomtargeting. They are heavily segmented and quickly realise that looking at your curve in the different segments it's not flat, it's the sum that's flat. But given a few rounds they don't shoot from the sum and your middle spike in the corner segment and side spikes of the other segments get exploited. Ergo, fix your movement in corners and against walls and what have you first, and leave the flattening until this is to your satisfaction.

I have designed a new movement for Marshmallow now where the first step is dealt with better than any other bot I think. Yes, better than DT even. You just never see this new M even noticing the corners, nor the walls. Of course I don't really know that it's better than DT's, it's just from what I have observed when looking at the action. StatistRobot is great, but since it doesn't yet segment on these aspects it doesn't tell you about it. I haven't gotten around yet to try out Kawigi's statistics measuring pack (other than I couldn't get it to run the first times I tried). But I do have one more thing that tells me I have succeeded with the corner/wall avoidance. Phase two (flattening) is much simpler now! It's less voodoo, so to speak. Changing this or that parameter more often results in something expected. How about that! =) I have actually already created a flattener that's four times simpler than the old one and yet works accross the full bullet power range (the old one had a seperate function for power above 2.4, YUK!). Simplicity is very important here. Since I'm not out to create hype here I must also admit that it still needs some tweaking. It doesn't perform as good as the old flattener yet. -- PEZ

I used FloodMini almost exclusively for testing of Fhqwhgads's movement. The interesting thing is I changed the goal a bit. It doesn't have the absolute flattest-looking profile, but I'll tell you what it does have. According to the dev version of FloodMini's internal stats, it doesn't have any segments that make up more than 1% of it's total movement time on a normal battle field that has a peak that makes up more than 8 or 8.5% of the whole. The point of Fhqwhgads is that tighter segmentation will help, but it won't help too much. The movement could yet be made to realize that further, but that was my goal. I hacked my grapher to print out the percentage of the samples that is on the highest peak for each "MicroSegment?" so I could see where I was weak. I played with some parameters, and settled on a movement where all the major segments are under 8% (meaning I spend 95% of my time in segments that are under 8%). The MOST common segments (like going full speed at constant velocity at a normal distance) are down around 6%. Some mountain-like profiles are ok if they're not too spiky and they're somehow uniform. Any kind of targeting is bad if you're fundamentally unpredictable. -- Kawigi

OK, so I needn't be too upset about M not hitting Fhqwhgads then. (If you add some distanceing to the TC version of it we will probably see how its movement compares to other top bots.) Still, it probably is coming to a point where the choice of segmentation dimensions will bemore important. A test version of M segmentet not only on closeness to walls, but if it was close to the same wall as M or not and whether it was approaching the wall or not. This made many, many bots (including Fh...) vulnerable to Ms VG array. I couldn't keep this though, because Ms current segmentation of data is structured in a way that makes it consume lots of disk space when saving the stats and having four dimensions made each file take 80+K!. Also it made it a nightmare to use the same way as before to accumulate dimensions when there was too little data in a segment. But I have looked some at how the F bots with open source does the segmentation and saving of data so I might come back with a killer gun some day. =) -- PEZ

I think that having highly-segmented VG stats is a bad idea, just having pretty rudimentary VG stats and making your statistical gun look at smaller segments. What I'd like to do in the near future is have my guns 'aware' of each other a little more so they just all come up with their guesses and if one is sitting in the back like, "I know I miss a lot, but this time I'm really sure!", I can take advantage of that. I suspect SandboxDT does a little of this, actually you can see some of it in action with SandboxMini - that bot actually uses two methods for calculating Guess-factors, one that's based on maximum displacement (like the F bots) and one that's based on % of linear aim (like SandboxLump). Either one could have the most hits, and SandboxMini will use the factor with the best hit rate, whether it was a linear-projection-type one or a max-displacement-type one. Not all VG's need to be rated purely on 'experience', some times you can look at the data of the guns themselves to judge which to use. About adding Distancing to the TC version of Fhqwhgads, that's not a bad idea. All you'd have to do is increase some numbers in there... there's a line that says "if (distance < 300)" (or maybe it was 250 or something), just change that to like 500, and then the next statement has an " || distance > 600" in there, just make that 700, and you'll see Fhqwhgads hang back a little more. Of course, the TargetingChallenge isn't really meant to rate the challengers' movements so much, but it might make it look like a more significant opponent. -- Kawigi

Just to give you a hand, I just polished and uploaded FloodGrapher 1.3. It should be fine to use regular old FloodMini to rate yourself against, in spite of some petty weaknesses his gun may have. You may also want to modify FloodMini's code a little to make him fire a wave only when he fires a bullet if you're reacting to bullet fire directly in any way. If FloodMini is extracted into your robots directory (and FloodGrapher is in your robots directory), the grapher will use that data by default. If not, you will have to specify a data directory to use on the command line (there are instructions on the Repository). -- Kawigi

Zillions of thanks! Now I get it to work right away. I'm using Fhqwhgads 1.0 (my performance patched version). I also added a segment to both Fhqwhgads and FloodGrapher. I wrote a bit more of that on the FloodGrapher page. An interesting thing is that FG shows a peak at guess factor 0 for about all segments of my new Marshmallow movement. This peak does not show with StatistRobot / StatistPainter?. Do you have a clue about why? Also it seems guessfactors above/below (-)0.8 are never recorded. Or am I reading the graph wrongly? Again thanks. FloodGrapher will surely help me create my new killer movement! -- PEZ

About "fundamentally unpredictable". Running 10000 rounds Marshmallow doesn't have a very good clue as to where to shoot to hit Fhqwhgads 1.0. F quite comfortably deals with M and wins easily. But DT, on the other hand, does have a clue. A very, very good clue it seems. It doesn't print it's hit rate but it looks like it must be around 40%+! It took DT some 300 rounds to get there, but after that F was wiped of field almost immediately after having entered it. Amazing. I really must give my guns a huge rethink!

Also, since I have now patched FloodGrapher and Fhqwhgads 1.0 so that I can profile and graph on the dimension of "Real bullet or continous virtual bullet", I also see that, although Ms new movement is much of a dodging scheme it's profile is about the same in these two dimensions. But, DT has a wider (often flatter) profile on real bullets. I have long guessed that DT actually does some dodging, at least on closer ranges (like the 1 - 1.5 bullets in the air range). Am I guessing correctly Paul? If you ever feel like loosing up some on your secrecy I would welcome your thoughts on the subject of movement development on this page. =) -- PEZ

for DT versions up to version 1.91 DT reacts to bullet fire at close ranges (up to 27 tick flight time) by forcing the selection of a new movement plan instead of waiting for the existing plan to timeout. (this is not what I call dodging - for me dodging is predicting where a bullet may be and avoiding that position). At larger distances it has been more productive to selcect movement plans on timeout basis only (perhaps because you can only react sensibly to around 1 in 2 or more bullets at this distance. Reacting on bullet fire means that those bots relying on waves every turn will get false stats, those that don't get better stats but take longer to learn. However I've been working hard on my movement recently (with only slight improvements - don't worry) and I believe that I have been able to create less predictable profiles by moving on timeout only and ignoring opponent bullet fire. It means that opponents using waves every tick will gather accurate stats on my movement - but if it's flat I don't see a problem :). -- Paul Evans

That's interesting, as I haven't detected a significant difference in doing that with DT. Maybe I need to look closer. FloodHT gets plenty of relevant data on DT by collecting continuous stats, and the same against most opponents. He gets fairly irrelevant information against FloodMini, however, but since FloodMini in turn gets irrelevant information on FloodHT, that doesn't bother him. The next version of FloodHT won't have that weakness, of course, just like Fhqwhgads 1.1. If you look at FloodHT's and FloodMini's graphs, you will note that they aren't nearly as pretty with constantly fired bullets. That's because their movement is timed with bullets. Their take at 'fundamentally unpredictable' is that you don't know what direction they'll move after you fire a bullet before you actually fire it. This is especially the case with FloodMini. However, this isn't perfect. A robot could theoretically know that you're going to change direction if it were programmed to look for that. Even that is almost unnecessary, though, as most robots fire bullets pretty rhythmically, so they see me changing direction or speed fairly regularly. You could hit FloodMini up to 1/4 of the time at medium/close distance if you assume he'll change direction now going at full speed and again in 16 ticks when you change direction again, and can predict your own position well enough to see where he will orbit relative to you. I suspect that Iiley's bots sometimes lock on to this and can take advantage of it. If that resulted in the same results at the same distance every time, though, it would be a true weakness. As it stands, part of my strength lies in the orbit movement itself - I have a few probable peaks, but the movement of my opponent moves me around enough to make those blunt humps that blend into each other. In fact, segmenting on my own lateral direction probably wouldn't be a complete waste of time.

As for the difference in the profile reported by Fhqwhgads and by StatistRobot, I'm not sure why that happens, although I've certainly observed it. StatistRobot clearly has more buckets than Fhqwhgads it seems, for one thing. StatistRobot may also handle missed scans and you being disabled differently (although that shouldn't be significant). It also may define which direction you're moving in differently than Fhqwhgads does. A better guess is that the difference is Fhqwhgads's movement. Fhqwhgads 1.0 is likely to look for ways to see your weakest movement (i.e. - DynamicDistancing). You said it tends to hang back after several rounds, but if it was chasing you up close for the first several rounds, it might get you onto walls or into corners, which would cause that center spike. I don't know a way that would happen from a distance, except that most robots do tend to have a more compressed profile at long distances, whether that's because of walls or just because of their period. Anyways, happy unpredictabilitizing. And please send all movements resulting from the grapher to me! (lol, j/k, not that I'd mind). -- Kawigi

Yes, it seems that the DynamicDistancing of Fhqwhgads makes for quite arbritrary choices of distances. Though it also seems that with M1.9.2 movement it (correctly) chooses really close combat and this probably forces forward that middle spike as M gets cornered more easily then. I'll have to work on that. But Fhqwhgads 1.0 also chooses close combat against DT and this is a huge mistake. DT never gets cornered and it rides Fhqwhgads like Lucky Luke rides rodeo, you can almost see DT roll a cigaret while he plays games with Fhqwhgads. After 10000 rounds Fhqwhgads was left with less than 10% of total score. Of course, this Fhqwhgads is very much crippled by my patching since those patches have been about making it a better profiler. Still, this crippled version eats Ms liver out. I'll remove the DynamicDistancing from Fhqwhgads and name it MovementProfiler? or something. Is it OK for me to release such a beast under the wiki package? -- PEZ

Well, I suppose, if you wanted to. You could even take out its movement completely if you wanted. -- Kawigi

Paul, I use dodging in the broader sense. At least in OneOnOne battle. Apart from GlowBlowAPM and similar techniques I feel that the habit of trying to predict enemy fire impact points/lines is a thing of the past. I have slowly reached the same insight as you have about reacting to fire gets in the way of flattening. I have tweaked a movement that does this quite well against power 3 bullets. But since my eternal enemy bot is DT this does not help, and I can't get the flatter profile with power 1.5 bullets. So now I have scrapped that path and am continuing on a more pure time based movement. Marshmallow versions from 1.8 and the released 1.9 does this though, so it feels a bit like a step backward. But that movement was too complex to maintain anyway. It also used movement plans and rewrote those plans on a (somewhat) time based basis. This new movement is more incremental. Or using plans with much shorter time scope if you like. Like some old, succesful, general put it. "In battle planning is crucial, but the plan is useless." =) (Or something like that anyway.) I have been FloodGraphing a 10,000 round battle of DTs for hours now. Since my patched version of FloodGrapher has 6 segments I can do this without seening the same curve twice. =) I must say that if you are able to improve that movement, you are superhuman. It's so smooth and flat that I often gasp. Even without the overlay feature in place you can quickly switch between the same segment and different bots. The way DT outperforms any version of Marshmallow is a bit depressing of course, but I try to reverse that feeling to determination. =) Your curve when approaching a wall is even flatter, which is absolutely awesome! I totally and utterly take back what I said above about having created a wall/corner avoidance movement better than yours. Mine sucks ass in comparison. -- PEZ

PEZ, get a grip! Keep faith, I know I still do ... The day I release my bot (coincidentally the day it defeats DT) you can start worrying ... -- FnH

Yet another lesson learnt: One thing (perhaps obvious to others) I have lately realized is that I must clean my movement from some strategy elements before drawing any conclusions about the movement curve. For instance I long struggled with a quite flat movement that showed a spike at guess factor 0. I did all sorts of desperate changes to the flattener to rid myself of the spike, all of which resultet in a damaged profile. Then I noticed I had this ramming strategy in place and removing that removed the spike. -- PEZ

Yet more insights: If you find a working movement technique, stick with it. I can't count the times I destroy reasonably good movements just because I can't stop tweaking it. I'm sometimes saved by the unlimited undo buffer of VIM or by CVS, but not always. Also I am too quick to completely trash an idea on the basis on too few implementation tests. Consider using versioning control systems. CVS is one of the best and it is free (as in "costs zero bucks"). CVS allowed me to dig up Gouldingi 1.4 movement. A movement that I trashed in my excitment over the Tityus movement which looked so promising at first. Now I must face that all these months trying to tweak it is just waste. It sucks and contains some basic design flaw that I can't see but that is evident. Goulding 1.4 movement is so much better. Now I will try to see what's good with it and try tweak it using Paul's auto-adapter technique. Wish me better luck this time. =) -- PEZ

Having eat.HumblePieLite as a problembot is a good indicator your movement is stronger than your gun. -- Kuuran

I think Tityus 0.3.1 movement and gun are about equal in performance. It's a bit early to say if humblepie is a problembot or not. They've only met once. But, what makes you say that it would indicate that? I know nothing about that bot, other than it was humble pie for David Alves when he once needed it. =) -- PEZ

Humblepie mirrors your movement across the x and y axes. If you can't hit your own movement better than Humblepie's relatively simple stat(I believe it was) gun, then you're going to lose, otherwise you're going to win. ;) -- Kuuran

Just a newb question: You people always speak of graphing movement and getting spikes. My question is: What do you use to graph these things? --Goofy

Most people use FloodGrapher I guess. -- PEZ

Robo Home | Changes | Preferences | AllPages
Edit text of this page | View other revisions
Last edited April 22, 2004 5:21 EST by PEZ (diff)