Ok using FloodGrapher, so far the flattest i've ever been able to get was some dev version of Lasers:
As you can see im trying to fix that horrible 0.5 spike...oh and the red is Lasers, green is SnippetBot's graph, I just added it for reference... --Starrynte
This profile graph is drawn from data collected by StatistRobot. Never mind the blue curve. The red curve shows the "guess factors" visited by Mako as measured after StatistRobot has fired a virtual bullet, or 6792 virtual bullets to be more exact. Like so:
For a comparison check this profile which is from Mako 1.5 (not released as of June 8 2003). It is from a longer run against StatistRobot so it looks smoother. But it's also much flatter. I think it's the flattest I've managed to create so far.
You will note that acording to statistRobot, Mako's movement at this range is better than DT's - (acording to DT's internal stats Mako has better movement than DT between the range of 360 and 440) alot of battle takes place in this range. Why does Mako lose?
Even so Mako has reasonably sound movement and is not very susceptable to the highly segemented guns of DT well done PEZ. However the bad news is that Mako has also shown that there is room for DT movement to improve (especially against 3.0 Bullets) so watch out for the next version of DT if you fire 3.0 bullets. -- Paul Evans
Thanks! I don't mind making you feel you must improve DT. =) After all DT has been forcing me to keep improving my bots all the time. Also thanks for feeding the wiki with all this valuable knowledge of yours. I have suspected Mako is weaker against bullets fired with other power than 3. I will work on that. Though I think most of the difference between Mako and DT performance is due to the guns. Especially the later versions of Mako have crippled guns and they can never even start to compare with the best guns in the population. It's amazing Mako gives DT the fight it does. -- PEZ
Did I say that - I think I was refering to DT1.81 --Paul Evans
Sorry jim, but right now I'll keep it a secret. It has been hard work for my PowerBook and straining on my sanity to tune this movement and I think it right now gives Marshmallow an edge that it needs to kling on to a top-5 ranking. I can say this much:
Further, if you run Marshmallow against StatistRobot you will notice that it is not a very flat profile at all. I've seen other bots have flatter profile, including some of my own. Flattness is only a means to an end. The end in my case being to avoid DT's bullets. -- PEZ
Paul has also tested Kawigis HT-movements and said that it is good, even better than DT 1.71 at close ranges. So it can be worth studying the movement code in MakoHT/Code. All of Kawigis' bots are OpenSource so you could also check FloodMini I guess. -- PEZ
Thanks for the pointer guys. I am interested in techniques on controlling my movement profile and these are all good suggestions. I am going to suspend development on Jekyl a bit as I work on my Poison movement system. These are all ideas that should find their way into it. Thanks again. (PS: Congrats PEZon getting M to #4) jim
I'm still confused about the blue curve. What does 'the more increasable probability' mean? - Vuen
I can't remember precisely how it's done, but i remember reading somewhere that the blue curve shows the data when the virtual bullets are weighted according to some factor. All i know for sure is that the blue curve tends to make my movement look bad so i tend to ignore it... --Brainfade
The red curve is the entire history of dodging statistics. However, the blue curve is the curve the bot actually uses to fire. It is "weighted" in a sense in that the most recent values get the most weight. It uses what Paul Evans calls "rolling averages". -- nano
Just ignore the blue curve as long as you are using the graphs to tune your movement profile. It's impossible to keep the blue curve flat. -- PEZ
can someone explain the graph in a little more detail?i'm completly lost-andrew
What is the best way to awoid 0 guess factor spikes. Any suggestions are well come. --SSO?
With a simple movement system, GF0 spikes occur when you change direction too often, from what I've found during my testing. Of course, if you change direction too rarely, you get spikes at GF1. That's the key to a good simple movement, getting the balence right. Most people seem to be going in the direction of AdaptiveMovement though, which I would guess has different problems. -- Tango
I changing the directions quite often couses this problem, as least in my case I think. I'll further look at the two sugesstions. --SSO?
Another source of GF0 spikes has been from ramming bots I recall somone not being able to explain their own GF0 spike only to discover it was as a result of ramming when the enemy had stopped firing. -- Paul
That was me... Switch of ramming when profiling your movement is the lesson. -- PEZ
Yep, Thats an other lesson learned. Are there any small code sniplet that I can get better negative spikes. In my tests I get negavie spikes when deselating over all I have posive spikes. -- SSO?
I can tell u that a good thing to give you negative spikes is synchronizing your turns with the enemy firing. But i can tell u that this would make you a hell-good-tasting bot to PM guns (like mine:). I am very truthly convinced that the search for the negative GF is like a saint-graal search (i believe in The Graal, but stop searching). -- Axe
I actually stumbled across a movement yesterday (quite on accident, I assure you) that's almost flat from GF -.4 to 1.0 and doesn't react to bullet fire in any way. The problem is that it's still not a good movement - under further segmentation (acceleration to be exact), it's just awful. If you have FloodGrapher 2, you can download it [here] and look at it (I was trying it with F-Micro). It's in FloodGrapher format. It just goes to show how you can make a movement that looks good at first glance in FloodGrapher but still be way too predictable, even for a guess factor gun. -- Kawigi
I've had a similar experience. I even produced one which could be tuned to produce a spike in the negative-GF range with no reaction to bullet fire, while always either moving at max velocity or turning. It was plain lousy, regrardless.
One way to produce negative peaks may be to go forward, say, half a bullet travel time at velocity 2, then change direction and go at max velocity. Unfortunately you will obviously be murdered by acceleration segmentation and pattern matchers, unless you can see some way of introducing a good random component to it. -- Jamougha
I saw somewhere discussion about predicting when your enemy will fire by keeping track of their gunHeat, so you can dodge the bullet a tick or so before it is fired, so start the decceleration earlier (just be careful not to start it so early that you are going the other way by the time they fire). It is also vulnerable to acceleration segmentation, of course. -- Tango
This one just kind of came up that way with very little tweaking (the first version of it had a spike at +1.0 and was exactly flat from about -.5 to .8, but still had the weakness it has now, of course). I don't know why it happens, but maybe you could give it a shot, Jam, as you are a little more sound than me in analyzing mathematical functions.
I was participating in your "excercise for the reader" and trying to figure out how to generate the Raiko movement with a function that tells me how long to go in one direction at a time. I thought that maybe using a function with the Poisson distribution would work, and so I looked around for code that generated a poisson distribution and eventually found some. I used projected bullet flight time as the supposed average and tried it out (later I tweaked it to .85*projected bft). Then I figured out that the code I was using was basically equivalent to some I could use to decide to change directions on any turn, but unlike Raiko, it doesn't have a uniform chance of changing direction at any chance. Basically, I have a variable called "product" that starts out at 1, and every turn I multiply it by Math.random(). Once it gets to be less than a certain boundary, e^(-.85*bft), it switches direction and sets product back to 1. Any idea why that would give me a big, gradual hump on the negative side? -- Kawigi
Interesting problem... I have no idea how to model successive calls to Math.random() analytically, but intuitively it will give you a generally fairly constantly declining factor with large local variations. So, for a given value of bft you will hit the e^(-.86*bft) factor at, say, an average time of x with most values quite close to x, though probably not normally distributed, more like evenly close to x and tailing off super-exponentially far from it. However this is all basically (not-so) educated guesswork. I know from experience that this sort of movement gives you negative humps, but I'm not 100% sure why; partly because I've never bothered analysing it, as it's clearly not a good movement type. :-) Part of the reason is that you're spending so much time turning; more time turning gives more time at low velocities, which makes it easier to reach low guess factors. But then acceleration segmentation cuts that up pretty well. -- Jamougha
please check the link http://www.honeylocust.com/RngPack/ it says "RngPack? is a pseudorandom number generator package for Java. Pseudorandom means that the "random" numbers are generated by a deterministic mathematical process, not by a fundamentally random physical process such as radioactive decay or Johnson noise." may be of the intrest. SSO?
Ok using FloodGrapher, so far the flattest i've ever been able to get was some dev version of Lasers: As you can see im trying to fix that horrible 0.5 spike...oh and the red is Lasers, green is SnippetBot's graph, I just added it for reference... --Starrynte