XanderCat

From Robowiki
Revision as of 06:55, 20 August 2011 by Skotty (talk | contribs) (→‎Version 8.2: Updated version 8.2 notes)
Jump to navigation Jump to search


XanderCat
Author(s) Skotty
Extends AdvancedRobot
Targeting GF / Linear / Circular / Anti-Mirror
Movement WS(Hybrid) / Anti-Mirror / RamEscape / IdealPosition
Released 2011-5-20 (v 1.0)
Best Rating #42 (v 6.8)
Current Version 8.1.2
Code License GCWCD
Download

Introduction

MegaBot based on my "Xander" robot framework with pluggable guns, radars, and drives. XanderCat is the flagship of my robot fleet. It is a multi-mode robot using multiple guns and drives, but it's main drive is a Go-To/True hybrid wave surfing drive I call the Evolution Drive, and it's main gun is a guess factor gun.

Versions up through 2.1 and from 3.1 onward are handcrafted without borrowing code from other robots. Version 3.0 uses a variation on the Wave Surfing drive from BasicGFSurfer, but a wave surfing drive of my own design is used in version 3.1 and beyond. XanderCat could be made smaller by removing unused Xander components and taking advantage of some of the newer classes like Rules, but it's so far above the next smaller weight class that it doesn't really matter.

Best against: Any robot that spends too much time standing still, going straight, going in circles, or doing basic mirroring.

Worst against: Nothing specific, but still need to improve against the middle pack.

Arch Nemisis: lazarecki.mega.PinkerStinker 0.7

Past Version Notes: For information on versions prior to the current series, see the XanderCat/History page.

Drive Tree:

               Ram Escape Selector
          /-------------^-----------\
  Ram Escape Drive        Anti-Mirror Selector
                     /-------------^-------------\
          Anti-Mirror Drive         Active Bullet Waves Selector
                               /----------------^--------------\
                   Ideal Position Drive            Head-On Detection Selector
                                                      /-------^--------\
                                      Head-On Avoidance Drive    Linear Detection Selector
                                                              /---------^------\
                                                Linear Avoidance Drive     Evolution Drive

Gun Tree:

         Opponent Disabled Check
       /-----------^------------\ 
 Head-On Gun         Bullet Shield Protected Wrapper
                                  |
                         Ram Escape Selector
                         /--------^--------\
                   Linear Gun       Anti-Mirror Selector
                                     /--------^----------\
                         Anti-Mirror Gun            Virtual Hit Ratio Selector
                                        /-----------/----------^-----\--------------\
                                 Linear Gun     Circular Gun      Stat Gun     Advanced Stat Gun                       

Version Notes

Version Ranks

Note: Best Change and Worst Change are the change from previous version against the given opponent.

Note: Starting from version 6.4 onward in the table, I am ignoring nat.BlackHole 2.0gamma and nat.Samekh 0.4, as scores against them always fluctuate rather wildly.

Version 1-on-1 Rank Top Best Change % Score Change Worst Change % Score Change
1.0 ~475 / 805 59% N/A N/A N/A N/A
2.0 386 / 806 48% mld.Wisdom 1.0 4.18 -> 76.13 SuperSample.SuperCrazy 1.0 61.97 -> 37.00
2.1 320 / 805 40% dz.MostlyHarmlessNano 2.1 20.90 -> 63.01 jf.Dodger 1.1 78.98 -> 41.10
3.0 148 / 805 18% gg.Wolverine 2.0 41.08 -> 94.57 xiongan.Xiongan 1.1 100.0 -> 74.39
3.1 145 / 804 18% zyx.nano.RedBull 1.0 53.4 -> 85.3 pulsar.PulsarNano 0.2.4 89.3 -> 64.2
3.2 116 / 806 14% ags.polished.PolishedRuby 1 28.5 -> 83.5 rsim.micro.uCatcher 0.1 91.7 -> 31.8
3.3 115 / 806 14% nat.Samekh 0.4 24.9 -> 64.9 simonton.micro.GFMicro 1.0 62.2 -> 39.2
3.4 85 / 806 11% dsx724.VSAB_EP3a 1.0 67.2 -> 93.4 intruder.PrairieWolf 2.61 65.6 -> 48.4
3.5.1 94 / 805 12% rsim.micro.uCatcher 0.1 21.3 -> 96.4 nat.BlackHole 2.0gamma 69.2 -> 42.5
3.8 81 / 805 10% synapse.rsim.GeomancyBS 0.11 36.5 -> 49.8 mn.Combat 1.0 80.1 -> 60.8
3.9 75 / 805 9.3% pez.mini.ChironexFleckeri 0.5 42.2 -> 64.9 rsim.mini.BulletCatcher 0.4 57.7 -> 7.0
4.0 92 / 805 11% rsim.mini.BulletCatcher 0.4 7.0 -> 72.1 nat.Samekh 0.4 73.3 -> 45.2
4.1 74 / 805 (73.66 APS) 9.2% nat.Samekh 0.4 45.2 -> 75.7 staticline.whiskey.Whiskey 0.6 75.5 -> 57.5
4.2 74 / 805 (73.73 APS) 9.2% mladjo.iRobot 0.3 53.8 -> 69.9 jcs.AutoBot 4.2.1 60.1 -> 35.1
4.3 74 / 805 (73.92 APS) 9.2% kc.mini.Vyper 0.311 33.0 -> 53.0 positive.Portia 1.26e 60.0 -> 36.2
4.4 71 / 805 (74.11 APS) 8.8% pez.frankie.Frankie 0.9.6.1 45.9 -> 62.8 fromHell.CHCI3 0.1.4 74.4 -> 55.7
4.4.1 71 / 805 (74.11 APS) 8.8% brainfade.Fallen 0.63 45.7 -> 65.5 jam.micro.RaikoMicro 1.44 64.0 -> 49.8
4.5.1 71 / 805 (74.25 APS) 8.8% spinnercat.CopyKat 1.2.3 51.6 -> 69.3 synapse.rsim.GeomancyBS 0.11 54.4 -> 38.6
4.6 71 / 805 (74.35 APS) 8.8% deo.virtual.RainbowBot 1.0 54.8 -> 69.1 jab.DiamondStealer 5 80.6 -> 61.7
4.8 57 / 803 (76.46 APS) 7.1% ar.QuantumChromodynamics 1.2.1 69.2 -> 90.5 nat.BlackHole 2.0gamma 60.8 -> 42.0
5.0 70 / 805 (74.37 APS) 8.7% deo.FlowerBot 1.0 53.4 -> 84.6 kcn.unnamed.Unnamed 1.21 79.1 -> 58.0
5.1 49 / 815 (78.59 APS) 6.0% ary.SMG 1.01 35.5 -> 90.3 nat.BlackHole 2.0gamma 54.4 -> 33.0
5.1.1 49 / 815 (78.75 APS) 6.0% rz.Apollon 0.23 69.6 -> 94.0 nat.Samekh 0.4 72.7 -> 53.6
6.1.8 59 / 806 (76.65 APS) 7.3% cx.Princess 1.0 47.8 -> 65.1 toz.Gnome 1.1 88.4 -> 61.6
6.2 59 / 806 (76.84 APS) 7.3% nat.BlackHole 2.0gamma 42.1 -> 67.0 stelo.RamTrackSurfer 1.2 89.2 -> 72.9
6.3 56 / 806 (77.04 APS) 6.9% kid.Gladiator .7.2 47.7 -> 65.5 nat.BlackHole 2.0gamma 53.4 -> 33.3
6.4 51 / 806 (78.22 APS) 6.3% dmp.micro.Aurora 1.41 62.1 -> 79.1 myl.micro.NekoNinja 1.30 77.3 -> 61.3
6.5 48 / 808 (78.70 APS) 5.9% ncj.MoxieBot 1.0 76.9 -> 92.6 bayen.nut.Squirrel 1.621 89.3 -> 74.9
6.7 45 / 807 (79.17 APS) 5.6% apv.ScruchiPu 1.0 57.9 -> 79.5 trab.nano.AinippeNano 1.3 91.4 -> 74.7
6.8 42 / 808 (79.69 APS) 5.2% trab.nano.AinippeNano 1.3 72.2 -> 89.5 rampancy.Durandal 2.2d 81.5 -> 69.4

Version CPU Usage

All values are averages in milliseconds with the exception of those listed as Peak values, which are the maximum time in milliseconds encountered during a typical 35 round battle.

Version Gun Gun Peak Drive Drive Peak Drive Array Select Drive Hit Logging Drive Predictions Drive Adjustments Drive Rolling Avgs
6.5 1.01 13.41, 8.77, 8.41, 7.15, 6.94 0.21 7.70, 7.61, 6.93, 6.93, 6.49 1.19 (5.53 peak) 0.02 (0.04 peak) 0.88 (6.77 peak) 0.09 (1.51 peak) 0.07 (0.89 peak)

Series 1.x

This series of robots was released while work on the Xander framework was still ongoing. Targeting and drive strategies were somewhat simple. No surfing or guess-factor targeting.

Series 2.x

This series introduced my earlist concept on guess factor targeting. Drive strategy was still simple.

Series 3.x

This series introduced wave surfing, and improvements to the guess factor gun. Version 3.0 used a modified version of the BasicGTSurfer wave surfing drive as a reference point, with all later versions in the line using a wave surfing drive of my own design. Towards the end of this line, I introduced virtual hit ratios, where all guns would provide aiming information for every shot to determine whether or not their aims would have hit the target or not.

Series 4.x

This series focused largely on drive improvements, including improvements to the wave surfing drive, dive protection, and a new Ram Escape drive. This series also improved how fire power is selected.

Series 5.x

This series focuses on using a new strategy for calculating factors in guess factor guns and wave surfing drives, surfing multiple waves simultaneously, paying more attention to robot width, improving wall avoidance, and improving segmentation selection and processing.

Series 6.x

XanderCat series 6 focuses on taking everything learned so far and evolving it into a new set of components, or at the very least, cleaning up old components or features that did not work out. Series 6 introduces the new Evolution Drive, an updated Wave Surfing drive, and new ways of handling factor arrays.

Series 7.x

XanderCat series 7 uses the first release-ready version of the Xander framework. With the knowledge gained over prior versions of XanderCat, the Xander framework has undergone a final refactoring and cleanup and is now considered ready for public use. The Xander framework can be considered as version 1.0. In addition to using the finished Xander framework, series 7 may see updates to the main drive and gun, as well as a first release into the melee competition.

Version 7.0

This version is mostly about using the refactored and cleaned up version of the Xander framework. There should not be much change in the Rumble rank with this version. If the rank drops significantly, it means some bugs slipped through and I will need to embark on a new round of debugging.

Changes from previous version:

  • Xander framework refactoring and cleanup. XanderCat now uses the Xander framework version 1.0.
  • Drive tree changed to use separate branches for head-on and linear targeting detection rather than having that functionality jammed into the main Evolution Drive.
  • Number of Gun bins for the factor array based guns reduced from 121 to 91 (I don't think this will degrade performance, but it should help reduce turn time)
  • Further increased bullet shielding detection threshold, as it was still occasionally getting false positives.

Version 7.0.1

  • Linear and Head-On Avoidance Drives were accidentally set up without distancing. Applied same distancing to these drives as is used on the main drive.
  • Fixed issue where NullPointerException could occur in the Linear Avoidance Drive.
  • Fixed issue in Mirror Detector that was causing mirror detection to be inconsistent.

Version 7.0.2

  • Reverted back to using targeting detectors within the main Evolution Drive.
  • Adjusted various drive and gun selectors.
  • Fixed bug where head-on gun wasn't getting used for disabled opponents.

Version 7.0.3

  • Fixed bug where disabled robot gun was not getting properly initialized, resulting in NullPointerExceptions.
  • Minor change to early-game factor array initialization to be more consistent with version 6.8 and 6.9.

Version 7.0.4

  • Fix recurring exception due to how guns were set up in previous version. Not expecting this to change performance though.
  • No longer using rolling history on main gun. There wasn't much value to it and code will run faster without it.

Version 7.1

Changes from the previous version:

  • This version replaces the original main gun segmentation set with a segmentation set very similar to what the main drive uses. Specifically, the segmentation changes are:
    • Defender speed segmenter reduced from 4 to 3 slices.
    • Bullet travel time segmenter removed.
    • Defender acceleration segmenter added.
    • Defender time since last velocity change added, with time slices at 3, 6, and 9 ticks.

This version was not tested against a large sample base before release, so it was unknown whether this version would yield a higher or lower score. However, my gut told me it was the right thing to do.

Version 7.2

Changes from the previous version:

  • Try balancing factor array combinations in the main gun by dividing by the number of combined segments rather than the number of visits in the combined segments.
  • In the main gun, switched to using visit count instead of calculating factor array "load" to determine if there is enough data to use an array. This change technically should not effect score, but it should make the code run faster.
  • Required load/visits that determines whether or not there is enough data to use a factor array in the main gun reduced from 8 to 4.

Version 7.2.1

Changes from previous version:

  • Looks like dividing by the number of combined segments makes things worse. Switch back to dividing by number of visits.
  • Further reduce required visits before using a factor array from 4 to 2. A relatively low value should be optimal when version 7.3 changes are put into effect.

Version 7.3

Changes from the previous version:

  • Version 7.1 resulted in a slightly lower score than version 7.0.4 after modifying the gun segmentation. I believe this is because it gave the gun more dimensions to process, making it a slower learning gun. A solution to this problem (if I am correct) is to implement neighboring segment bleed (a term I just came up with), which may be similar to using dynamic clustering (DC), but I've never looked closely enough into DC to know for sure. The idea is, for each logged visit, instead of just adding weight to the specific segment combination for the wave, also add lesser amounts of weight to "nearby" segment combinations. I previously tried this in the drive, so it will be easy to adapt to the gun. It didn't help the drive (for whatever reason), but I think it may work much better for a gun.

Version 7.4

Changes from previous version:

  • Remove neighboring segment bleed. Effect is minimal and it's not worth the extra computing time.
  • Revert main gun segmenter back to original (as it was in v7.0.4)
  • Try increasing the significance and sensitivity of the head-on and linear targeting detectors.

Series 8.x

This series will use my own take on using a K-nearest-neighbor (KNN) approach for the main drive and gun. It may also finally introduce surfing multiple waves at once.

My KNN approach to to create a KNN Factor Array Processor that can be used in both drives and guns. I already have a FactorArrayProcessor interface built into my guess factor / wave surfing framework that it will utilize. However, instead of saving a large number of factor arrays and combining them, it will instead store a tree of data points, retrieve the closest data points to the current situation, and build a single factor array from those data points. One advantage of this approach is that is should allow for a greater number of segmenters and slices per segmenter.

Version 8.0

This version is my first stab at using a KNN approach, and initially it is used only in the drive. While I am hopeful that it will perform well, it is not an expectation, as array initialization is not well fleshed out, it does not presently use targeting detectors to modify the array, and the various adjustable parameters have not been tuned. This version is like an early beta.

Changes from previous version:

  • New KNN Factor Array Processor used in the main drive. No targeting detectors in this version. Head-on avoidance used only when no data points are available.
  • Segmenters used for new factor array processor are:
    • Defender Speed Segmenter (8 slices)
    • Bullet Travel Time Segmenter (12 slices)
    • Defender Acceleration Segmenter (currently fixed at 3 slices)
    • Defender Time Since Last Velocity Change Segmenter (slices at 2, 4, 6, 8, and 10 ticks)
    • Wall Smoothing Segmenter (currently fixed at 4 slices)

Version 8.1

This minor series (8.1.x) focuses on adding the KNN Factor Array Processor to the main guess factor gun. This involved replacing the old StatTargeter with a new GuessFactorTargeter that utilizes the FactorArrayProcessor interface for handling factor array selection, implementing the KNN Factor Array Processor as the factor array processor for the main gun, and tuning it's parameters.

Changes from previous version:

  • Use KNN Factor Array Processor in the main gun. Same segmenters as is used in the main drive. Still using TriangleDistributer for the data points.
  • A few minor changes to the KNN Factor Array Processors:
    • Points used is now further restricted by a minimum match percent. (e.g. if the desired number of points is 12 and 12 points are available, but 4 of them are under the minimum match percentage, only the closest matching 8 points are used.)
    • Artificial Head-on data point is now used up until the number of data points exceeds the set minimum (as opposed to only using a Head-on data point when no data points are available).

Version 8.1.1

Changes from previous version:

  • Adjusted KNN Factor Array Processor parameters in main gun from default to values that should work better for a gun (though may need further adjustment later):
    • Minimum data points changed from 4 (default) to 10.
    • Maximum data points changed from 18 (default) to 200.
    • Optimal data point percent of total changed from 0.08 (default) to 0.18.
    • Minimum data point match percent changed from 0.35 (default) to 0.75.

Version 8.1.2

This version relies on RoboResearch results from a custom challenge set to further tweak the gun parameters.

Changes from previous version:

  • Further adjusted KNN Factor Array Processor parameters in main gun.
    • Maximum data points reduced from 200 to 100. (may be further adjusted slightly before release)
    • Minimum data points increased from 10 to 20.
    • Minimum data point match percent reduced from 0.75 to 0.50

Version 8.2

This version focuses on tuning the KNN Factor Array Processor parameters for the main wave surfing drive (something I should have done as 8.0.x versions, but since I didn't, it will go into this version).

Changes from the previous version:

  • KNN Factor Array Processor parameters in the drive adjusted (first pass).
    • Minimum data points increased from 4 (default) to 12.
    • Maximum data points increased from 16 (default) to 50.

Version 8.3

This version will explore a few other tweaks for the KNN Factor Array Processor, such as multiplying the weight of a data point by it's match percent. This version will also explore using a new form of WeightDistributer for the drive, and reimplementing targeting detectors in the drive. Unlike many other versions, changes will only be released to the Rumble if performance improves against a test bed in RoboResearch.