GuessFactor Targeting (traditional)

From Robowiki
Jump to navigation Jump to search

We now do a pretty good job separating out gun terminology like Visit Count Stats, GuessFactors, Pattern Matching, and Play It Forward, instead of using confusing names for multipart systems, like "GuessFactor Targeting" (VCS + Segmentation + GFs), or "TronsGun" (KNN + PIF).

Voidious (source)

Traditional GuessFactor Targeting is the specific combination of GuessFactors and Segmented Visit Count Stats. It uses these algorithms to statistically generate a good firing angle. It is one of the most popular and successful methods of targeting in all of Robocode. Alternatives to GuessFactor Targeting include Dynamic Clustering and Pattern Matching.

Note that despite its name, GuessFactor Targeting is not the only targeting method to use GuessFactors.

History

This article may require cleanup to meet RoboWiki's quality standards.
Please improve this article if you can.

Early description

Paul Evans and David Alves were the first authors who implement a form of GuessFactor Targeting, though their first systems did not yet use segmentation. The following description by David (from 2003), and the paper by Paul that he mentions, were what first brought GuessFactor Targeting to the rest of the Robocode community:

My targeting is similar to the SandboxLump/SandboxDT method. Here's how it works.

  • Calculate how far forward the other bot could go if it suddenly went top speed forwards for as long as it would take my bullet to reach the other bot. Call this Point A.
  • Calculate how far backward the other bot could go if it suddenly went top speed backwards for as long as it would take my bullet to reach the other bot. Call this Point B.

Now take a guess between -1 and 1 at where the bot is going to be. -1 would mean going straight back and ending up at B, 1 means going straight forward and ending up at A. 0 means sitting still. I just keep track of how well different numbers work and fire with the best one. You can find a better description (with code!) at this url. However notice that the algorithm that Lump uses (the bit where he says he uses the bot's current acceleration) is a bad idea, because it won't hit bots that sit still for a long time and then suddenly hit the gas. He fixed this when he came out with DT. (And I fixed it in Duelist! :-D) However, pretty much any targeting method will work well enough as long as it isn't simple linear or circular targeting, because some bots (like Fermat) will guess where you would fire if you used circular and dodge accordingly.

Good bots for testing targeting are:

  • Wolverine: A superb dodger, though it's very old.
  • JollyNinja: Open source! Stays as far from you as possible most of the time.

Also try the Nano bots – they're almost all open source and have some cool ideas.

David Alves, 2003

Evolution and refinement

While the same fundamental principles have applied since its creation, several key factors have helped GuessFactor Targeting become increasingly powerful and popular over the years:

  • Perhaps the most important was the addition of segmentation, which allows separate sets of statistics to be collected for different firing situations. Things like proximity to walls, current velocity, and distance from the firing bot have a large impact on what GuessFactor will hit the target, so segmenting your stats on these attributes helps a lot.
  • Kawigi, through his open source bot FloodMini and the GuessFactor Targeting Tutorial that he authored, showed many people how to implement GuessFactor Targeting.
  • There have been many incremental improvements to GuessFactor Targeting guns by a variety of authors, including:
    • Refining what attributes make the best segments.
    • Using Virtual Guns systems with multiple GuessFactor Targeting guns.
    • Using multiple Visit Count Stats buffers (and summing their values or switching between them).
    • Using precise maximum escape angles in GuessFactor calculations.

Description

This article is a stub. You can help RoboWiki by expanding it.

See also