# Thread history

Viewing a history listing

In movement, Bin Smoothing helps bots dodge bullets with a margin of safety.

In radar, why would you use bins?

In guns, Bin Smoothing helps spot crowds in melee/team if combined with swarm targeting. In 1v1 I don't see any use.

@MN and Skilgannon: While those things are true, I think those descriptions miss the underlying point of why bin smoothing is helpful. In both targeting and dodging, what one is trying to do is to estimate the PDF (probability density function) curve of the opponent's movement/targeting. Whenever one is estimating a PDF curve (not just in Robocode) from a finite number of observations, and the system has some inherent noise or unpredictability, it will give a more accurate estimation of the true PDF curve if one applies the correct amount of smoothing. Now, how much is the "correct amount" is a complicated question that depends on how much noise/uncertainty your measurements have, how much noise/uncertainty the process being measured has, and how many measurements you have (reminds me of Kalman filters, similar principals come into play). In Robocode most people just pick a certain amount of bin smoothing that seems to work for them, but I feel it is worth pointing out that this is just one application of PDF curve estimation, and that there are methods of estimating the correct amount of smoothing which to my knowledge have not yet been applied to Robocode. (I'd guess you two already are well aware of this, but I just feel like rambling)

Instead of applying methods of estimating the correct amounts of bin smoothing, people tend to switch to kernel density and tune the kernel function. There was a lot of discussion about the best kernel function and the best function width. The optimal changes for each opponent and some kind of averaging is needed, which is usually estimated through genetic tuning.

In guns, smoothing usually has no effect because you don't need to estimate the PDF, you only need to find the peak. But when you superpose many PDFs together (swarm targeting), things change.

Estimating the PDF can still a useful component of finding the peak when not superimposing things, particular when the density of observations is sufficiently low. The main reasons you don't see much effect in targeting is that the usual bin sizes inherently act similar to a certain amount of smoothing anyway, and for targeting you have a larger number of observations than movement which reduces the amount of smoothing that makes sense as well. Consider what happens when your bins are significantly smaller than what is typical without any additional smoothing. (A targeting system that accounts for botwidth also reduces the amount of smoothing that makes sense, but that's a bit of a different matter)

For me two things make smoothing more useful in movement than in targeting:

- Movement needs to estimate probability at arbitrary points, instead of a single peak, so the location the probability is required at isn't related to where data is available.
- Movement has much less data than targeting, so smoothing is needed to fill in gaps in knowledge.

Theoretically smoothing might help in targeting, but all my testing has shown that a simple square kernel works just as well or better, while running many times faster.

I've also considered something like Kalman filters, but they are Unimodal which doesn't work for targeting or movement at all. Perhaps particle filters, although the histogram filters we have right now in VCS also work pretty well.

re: why in movement, agreed 100%.

With WaveSim, I've tested different kernel densities (effectively smoothing formulas) in my main gun over a huge data set. There were differences, but IIRC on the order of thousandths of a percent in hit percentage (eg 12.004% vs 12.002%). Not sure of the margin of error, either... 5k battles * ~25k ticks = millions of records, and both algorithms were running on the same data set.