Difference between revisions of "ScalarBot/Version History"

From Robowiki
Jump to navigation Jump to search
m (Rethinking movement...)
m (Now retired and replaced by ScalarN.)
 
(32 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
| page2 = Understanding ScalarBot
 
| page2 = Understanding ScalarBot
 
}}
 
}}
 +
Now retired and replaced by [[ScalarN]].
 
----
 
----
 
<!--
 
<!--
** '''{{subst:rumblestats:roborumble|aaa.ScalarBot 0.012n2.7.70|RumbleStatsDefault}}'''
+
** '''{{subst:rumblestats:roborumble|aaa.ScalarBot 0.012n2.7.101|RumbleStatsDefault}}'''
 
-->
 
-->
  
* Planned Migrate to [[Scalar]].  
+
<!--* Working {{SimpleVersion|date=2017-12-?|version=0.012n2.11.1}}
 +
** Manually migrate Scalar's framework.
 +
-->
 +
* Current version — {{SimpleVersion|date=N/A|version=0.012n2.9.14b}}
 +
** '''{{RumbleStatsDefault|link=http://literumble.appspot.com/BotDetails?game=roborumble&name=aaa.ScalarBot%200.012n2.9.14b|rumble=RoboRumble|scorelabel=APS|score=89.56|rank=3rd|win=1156|loss=1|plrank=2nd|glicko2=N/A|pwin=99.91|vote=9.77|anpp=94.42|score2label=Survival|score2=97.07}}'''
  
 +
* Old version — {{SimpleVersion|date=N/A|version=0.012n2.7.101}}
 +
** '''{{RumbleStatsDefault|link=http://literumble.appspot.com/BotDetails?game=roborumble&name=aaa.ScalarBot%200.012n2.7.101|rumble=RoboRumble|scorelabel=APS|score=89.54|rank=3rd|win=1153|loss=2|plrank=2nd|glicko2=N/A|pwin=99.83|vote=9.66|anpp=94.51|score2label=Survival|score2=97.08}}'''
 +
** Put old version back to see the difference
  
 +
* {{SimpleVersion|date=2017-11-30|version=0.012n2.9.14b}}
 +
** '''{{RumbleStatsDefault|link=http://literumble.appspot.com/BotDetails?game=roborumble&name=aaa.ScalarBot%200.012n2.9.14b|rumble=RoboRumble|scorelabel=APS|score=89.52|rank=3rd|win=1154|loss=1|plrank=1st|glicko2=N/A|pwin=99.91|vote=9.57|anpp=94.5|score2label=Survival|score2=97.06}}'''
 +
** New risk evaluation mechanism: shadow processing complexity reduced from O(n<sup>2</sup>) to O(nlogn). Also shadow handing is "more correct".
 +
** Brand new wave graphics inspired by [[Scalar]].
 +
 +
* {{SimpleVersion|date=2017-11-21|version=0.012n2.8.14c}}
 +
** '''{{RumbleStatsDefault|link=http://literumble.appspot.com/BotDetails?game=roborumble&name=aaa.ScalarBot%200.012n2.8.14c|rumble=RoboRumble|scorelabel=APS|score=89.5|rank=3rd|win=1154|loss=0|plrank=1st|glicko2=N/A|pwin=100|vote=9.94|anpp=94.49|score2label=Survival|score2=97.06}}'''
 +
** Migrate logging SkippedTurns to files from 0.012n2.6.12
 +
** tweaks
 +
 +
* {{SimpleVersion|date=2017-11-20|version=0.012n2.8.6}}
 +
** Restore DistanceLast* weight in DynamicFinalFormula
 +
** Disable RecentFlattenerFormula in ProbabilityView & disable TimeSinceFormula in RecentView to see the difference
 +
 +
* {{SimpleVersion|date=2017-11-19|version=0.012n2.8.5}}
 +
** Fix BftWallFormula bft not normalized.
 +
** Lower DistanceLastHalfBft weight in DynamicFinalFormula.
 +
** It works against Pattern Matchers. (finally!)
 +
** But the DistanceLast* attribute as weighted 0.1 times occasionally in DynamicFinalFormula
 +
 +
* {{SimpleVersion|date=2017-11-18|version=0.012n2.8.4}}
 +
** Replace FinalFormula with DynamicFinalFormula
 +
** Every movement view got temporal attributes. Thanks [[Skilgannon]] for his APM advice!
 +
** Designed a data structure that calculates average-latvel-last-n (n is arbitrary, with upper limit) in O(1), and uses O(upper limit of n) space. Adding latvel is also O(1).
 +
** Bug: In BftWallFormula, bft is not normalized.
 +
 +
* {{SimpleVersion|date=2017-11-12|version=0.012n2.7.101}}
 +
** '''{{RumbleStatsDefault|link=http://literumble.appspot.com/BotDetails?game=roborumble&name=aaa.ScalarBot%200.012n2.7.101|rumble=RoboRumble|scorelabel=APS|score=89.61|rank=3rd|win=1151|loss=1|plrank=1st|glicko2=N/A|pwin=99.91|vote=9.59|anpp=94.51|score2label=Survival|score2=97.14}}'''
 +
** Disable light flattener
 +
 +
* {{SimpleVersion|date=2017-11-12|version=0.012n2.7.100}}
 +
** '''{{RumbleStatsDefault|link=http://literumble.appspot.com/BotDetails?game=roborumble&name=aaa.ScalarBot%200.012n2.7.100|rumble=RoboRumble|scorelabel=APS|score=89.46|rank=3rd|win=1150|loss=2|plrank=3rd|glicko2=N/A|pwin=99.83|vote=12.26|anpp=94.01|score2label=Survival|score2=96.98}}'''
 +
** Try some light flattener which enables at very low threshold.
 +
** Re-enable legacy flattener along with recent flattener, and weight both 1/4 as before.
 +
<!--
 
* ?
 
* ?
** After watching and thinking (and after a lot of failed experiments) about pattern matchers hitting me so well — I think I discovered why. I'm pretty sure my surfing algorithm is "perfect", which means for the same input, it always give the same output, without obfuscating (like chaos theory) it. E.g. Even in mid-battle (when there's already a lot of data), I can see ScalarBot often repeats the same pattern for a long time — until hit. Since guns using waves learn after BFT, but pattern matchers learn immediately after u switch pattern, change pattern only when hit won't work that well against PMs. Flatteners won't work that well as well. Past improvements can be thought from accidentally weighting new recentFlattener very high (and the new flattener uses 1-nn only), which makes it repeating it self less often.  
+
** After watching and thinking (and after a lot of failed experiments) about pattern matchers hitting me so well — I think I discovered why. I'm pretty sure my surfing algorithm is "perfect", which means for the same input, it always give the same output, without obfuscating (like chaos theory) it. E.g. Even in mid-battle (when there's already a lot of data), I can see ScalarBot often repeats the same pattern for a long time — until hit. Since guns using waves learn after BFT, but pattern matchers learn immediately after u switch pattern, change pattern only when hit won't work that well against PMs. Flatteners (meaning recording your own movement using waves, and dodge then as they were hits) won't work that well as well. Past improvements can be thought from accidentally weighting new recentFlattener very high (and the new flattener uses 1-nn only), which makes it repeating it self less often.  
 
** So, as a conclusion, unpredictable movement is about never repeating yourself.  
 
** So, as a conclusion, unpredictable movement is about never repeating yourself.  
** But a perfect unpredictable movement is not the movement that gives you the most robocode score. Scoring is about exploiting "bugs" in others. We are actually "attacking" opponents via our wave surfing movement, by doing the reverse thing like they do. But wave surfing is not the silver bullet. We still need some fallback movement when we can not "attack" the opponent's gun via movement.  
+
** But a perfect unpredictable movement is not the movement that gives you the most robocode score. Scoring is about exploiting "bugs" in others. We are actually "attacking" opponents via our wave surfing movement, by doing the reverse thing their guns do. But wave surfing is not the silver bullet. We still need some fallback movement when we can not "attack" the opponent's gun via movement.  
 +
-->
  
 
* {{SimpleVersion|date=2017-11-09|version=0.012n2.7.70}}
 
* {{SimpleVersion|date=2017-11-09|version=0.012n2.7.70}}
** '''{{RumbleStatsDefault|link=http://literumble.appspot.com/BotDetails?game=roborumble&name=aaa.ScalarBot%200.012n2.7.70|rumble=RoboRumble|scorelabel=APS|score=89.52|rank=3rd|win=1147|loss=5|plrank=4th|glicko2=N/A|pwin=99.57|vote=15.77|anpp=94.24|score2label=Survival|score2=97.05}}'''
+
** '''{{RumbleStatsDefault|link=http://literumble.appspot.com/BotDetails?game=roborumble&name=aaa.ScalarBot%200.012n2.7.70|rumble=RoboRumble|scorelabel=APS|score=89.56|rank=3rd|win=1149|loss=2|plrank=3rd|glicko2=N/A|pwin=99.83|vote=11.13|anpp=94.39|score2label=Survival|score2=97.08}}'''
 
** Tuned against Waylander
 
** Tuned against Waylander
 
*** Introducing RecentFlattenerFormula which uses every time-since attributes I’ve ever heard of and distance last-x covering a wide range of x, with the traditional attributes.  
 
*** Introducing RecentFlattenerFormula which uses every time-since attributes I’ve ever heard of and distance last-x covering a wide range of x, with the traditional attributes.  

Latest revision as of 05:59, 19 January 2023

ScalarBot Sub-pages:
ScalarBotVersion History - Understanding ScalarBot

Now retired and replaced by ScalarN.


  • Current version — 0.012n2.9.14b – N/A
    • RoboRumble ‒ APS: 89.56% (3rd), PL: 1156-1 (2nd), Survival: 97.07%
  • Old version — 0.012n2.7.101 – N/A
    • RoboRumble ‒ APS: 89.54% (3rd), PL: 1153-2 (2nd), Survival: 97.08%
    • Put old version back to see the difference
  • 0.012n2.9.14b – 2017-11-30
    • RoboRumble ‒ APS: 89.52% (3rd), PL: 1154-1 (1st), Survival: 97.06%
    • New risk evaluation mechanism: shadow processing complexity reduced from O(n2) to O(nlogn). Also shadow handing is "more correct".
    • Brand new wave graphics inspired by Scalar.
  • 0.012n2.8.14c – 2017-11-21
    • RoboRumble ‒ APS: 89.5% (3rd), PL: 1154-0 (1st), Survival: 97.06%
    • Migrate logging SkippedTurns to files from 0.012n2.6.12
    • tweaks
  • 0.012n2.8.6 – 2017-11-20
    • Restore DistanceLast* weight in DynamicFinalFormula
    • Disable RecentFlattenerFormula in ProbabilityView & disable TimeSinceFormula in RecentView to see the difference
  • 0.012n2.8.5 – 2017-11-19
    • Fix BftWallFormula bft not normalized.
    • Lower DistanceLastHalfBft weight in DynamicFinalFormula.
    • It works against Pattern Matchers. (finally!)
    • But the DistanceLast* attribute as weighted 0.1 times occasionally in DynamicFinalFormula
  • 0.012n2.8.4 – 2017-11-18
    • Replace FinalFormula with DynamicFinalFormula
    • Every movement view got temporal attributes. Thanks Skilgannon for his APM advice!
    • Designed a data structure that calculates average-latvel-last-n (n is arbitrary, with upper limit) in O(1), and uses O(upper limit of n) space. Adding latvel is also O(1).
    • Bug: In BftWallFormula, bft is not normalized.
  • 0.012n2.7.101 – 2017-11-12
    • RoboRumble ‒ APS: 89.61% (3rd), PL: 1151-1 (1st), Survival: 97.14%
    • Disable light flattener
  • 0.012n2.7.100 – 2017-11-12
    • RoboRumble ‒ APS: 89.46% (3rd), PL: 1150-2 (3rd), Survival: 96.98%
    • Try some light flattener which enables at very low threshold.
    • Re-enable legacy flattener along with recent flattener, and weight both 1/4 as before.
  • 0.012n2.7.70 – 2017-11-09
    • RoboRumble ‒ APS: 89.56% (3rd), PL: 1149-2 (3rd), Survival: 97.08%
    • Tuned against Waylander
      • Introducing RecentFlattenerFormula which uses every time-since attributes I’ve ever heard of and distance last-x covering a wide range of x, with the traditional attributes.
      • Replace AntiPatternFormula with RecentFlattenerFormula
      • Replace flattener with recentFlattener which uses a bunch of trees using RecentFlattenerFormula
  • 0.012n2.7.69 – 2017-11-09
    • RoboRumble ‒ APS: 89.41% (3rd), PL: 1152-1 (1st), Survival: 96.96%
    • This version is optimized for mc2k7 =)
      • Orbit enemy instead of wave source
      • Check stop danger on second wave (but not on first wave)
      • Fix movement using exponential weight accidentally instead of gaussian weight
      • Replace PatternFormula with AntiPatternFormula
      • Changes in shape function of FinalFormula
      • Correct handling of bullet shadows when outside bot width
  • 0.012n2.6.5 – 2017-10-27
    • RoboRumble ‒ APS: 89.35% (3rd), PL: 1151-1 (2nd), Survival: 96.96%
    • Correct margin of error in flattener threshold.
  • 0.012n2.6.4 – 2017-10-26
    • RoboRumble ‒ APS: 89.31% (3rd), PL: 1148-3 (3rd), Survival: 96.9%
    • Gun tweaks:
      • Aim gun 3 ticks before cool
      • Use gaussian function for virtually in AS gun
      • Divide TimeSince attributes by BFT before calling 1 / (1 + x)
  • 0.012n2.6.1 – 2017-10-23
    • RoboRumble ‒ APS: 88.9% (3rd), PL: 1148-4 (3rd), Survival: 96.64%
    • Fix a bug that the PreciseMEA in movement is reversed sometimes.
    • Helps my score against bots around APS 77.5, but hurts after that, especially the top bots ;)
  • 0.012n2.6 – 2017-10-23
    • RoboRumble ‒ APS: 88.83% (3rd), PL: 1147-5 (4th), Survival: 96.6%
    • the 10.27 vote is crazy...
    • Restore 0.012n2 gun
  • 0.012n2.5.2 – 2017-10-23
    • RoboRumble ‒ APS: 88.77% (3rd), PL: 1147-5 (3rd), Survival: 96.47%
    • Fix a bug that was incidentally introduced when putting old bugs back.
  • 0.012n2.5.1 – 2017-10-23
    • Rewrite radar so that it won't lose lock most of the time even when skipping turns heavily, and it is now able to recover when it loses lock anyway.
  • 0.012n2.5 – 2017-10-23
    • Try to match 0.012n1.14c bahavior
    • Put bugs found & fixed in 0.012n2 back
  •  ?
    • Well, just forgot that 0.012n2 fixed two bugs:
      • One is that the use of time when fire is detected (actually, when wave data is calculated) instead of time when enemy scan happens as decay (although this should never make a difference before I calculate wave data on demand, e.g. on virtual wave breaks).
      • The other is the use of lat dir when fire is detected rather than scan happens in PreciseMEA calculation. This bug swaps forward mea and reverse mea when two lat dir differs. Not sure whether this is some performance enhancing bug.


  • 0.012n2 – 2017-10-21
    • RoboRumble ‒ APS: 85.74% (17th), PL: 1162-0 (1st), Survival: 96.13%
    • Experimental version — no threshold for simple guns
    • Instead of finding out where they are targeting — try to figure out where they are less probable to fire at.
    • Score diff distribution is impressive — much worse against anything below APS 75.0, much better against almost everything above APS 75.0. But even against APS above 75.0, it is still much worse than Diamond, since its AS gun is tuned to hit random movement ;)
  •  ?
    • Just created a new version that wins 66% constantly against 0.012n1.14c
  • 0.012n1.14c – 2017-10-18
    • RoboRumble ‒ APS: 88.68% (3rd), PL: 1154-7 (7th), Survival: 96.52%
    • AS gun: much faster decay and much higher bulletsFired weight. The AS gun since 0.012n has been using almost the same decay and weight as Main gun.
    • VG: no decay in rating
  • 0.012n1.14a – 2017-10-17
    • Fix a bug in kd-tree that causes endless StackOverflow and ArrayOutOfIndex exceptions when the data set has all the same location.
    • Seems that current movement is having some trouble with pattern matchers. Not surprised as the fact that it is tuned against RaikoMircro ;)
  • 0.012n1.14 – 2017-10-17
    • RoboRumble ‒ APS: 88.49% (3rd), PL: 1157-3 (3rd), Survival: 95.44%
    • Take data point distance into account when calculating (VCS style) time decay
  • 0.012n1.12a – 2017-10-17
    • RoboRumble ‒ APS: 88.68% (3rd), PL: 1159-1 (1st), Survival: 96.53%
    • Try some powerDownEnergy inspired by Diamond. It's shamelessly almost the same (hope it be) now, but should be tuned later.
  • 0.012n1.12 – 2017-10-16
    • RoboRumble ‒ APS: 88.49% (3rd), PL: 1157-3 (3rd), Survival: 95.44%
    • Tune bandwidth
    • Be more aggressive about bullet shadow; Be more conservative about calc optimization
  • 0.012n1.11 – 2017-10-16
    • RoboRumble ‒ APS: 87.94% (7th), PL: 1154-6 (5th), Survival: 94.99%
    • cover 99.7% danger in bot width; optimize gaussian calculation
  • 0.012n1.10 – 2017-10-16
    • RoboRumble ‒ APS: 88.09% (5th), PL: 1150-10 (8th), Survival: 94.96%
    • Use definite integral of gaussian function for precise bullet shadow
    • Bandwidth is not tuned and very small comparing to older versions
  • 0.012n1.9 – 2017-10-15
    • RoboRumble ‒ APS: 88.26% (4th), PL: 1154-6 (5th), Survival: 95.11%
    • Refactor movement views
    • Re-enable AS gun
    • Re-enable flattener with threshold = 1.0 (meaning better than random targeting)
  • 0.012n1.7.1 – 2017-10-15
    • RoboRumble ‒ APS: 88.13% (5th), PL: 1146-13 (12th), Survival: 94.92%
    • Disable AS gun
  • 0.012n1.7 – 2017-10-13
    • RoboRumble ‒ APS: 88.18% (5th), PL: 1149-11 (11th), Survival: 95.03%
    • Add RecentViews to play the role as legacy ArrayViews, which replaces the nearest point when full. Thanks Diamond by Voidious for the idea of using kNN Views in the same way as VCS Buffers so that they behaves the same, except for the selection of cluster ;)
    • Add PatternProbabilityView to better dodge pattern matchers — but still way behind Diamond, really wondering what’s the secret of anti-pm.
  • 0.012n1.5 – 2017-10-12
    • RoboRumble ‒ APS: 87.08% (9th), PL: 1147-12 (12th), Survival: 94.14%
    • disable flattener
  • 0.012n1.4 – 2017-10-12
    • Catch every possible exception in the framework and save it to file. Should help a little against 0 score bugs, as uncaught exceptions are now isolated to each component, and will generally not cause me disabled.
  • 0.012n1.3 – 2017-10-12
    • RoboRumble ‒ APS: 86.56% (10th), PL: 1158-2 (3rd), Survival: 94.04%
    • Add a flattener threshold which is theroatically the same as Diamond, which indicates that I’m not dodging weaker bots hard enough to make those bots not breaking though the threshold.
  • 0.012n1.2 – 2017-10-11
    • Color Scheme: Now uses some interpolation between Night Rider and Tyrian Purple. It is now easily distinguished from DemonicRage.
  • 0.012n1.1 – 2017-10-11
    • Finally got a color scheme. While it looks similar to DemonicRage initially, my color is more purplish (Night Rider). Anyway, it's still better than having the same color scheme as near half of the population ;)
  • 0.012n1 – 2017-10-11
    • RoboRumble ‒ APS: 86.25% (10th), PL: 1158-2 (3rd), Survival: 94.63%
    • Base on 0.012m8.4
    • Experimental version —
      • always enable flattener, and only keep the probability view (traditional surfing buffer).
      • re-enable AS gun & copy weights from main gun.
  • 0.012m8.9 – 2017-10-10
    • RoboRumble ‒ APS: 88.35% (3rd), PL: 1154-6 (5th), Survival: 95.33%
  • 0.012m8.8 – 2017-10-10
    • Tweak predicted-distance danger factor again
    • Seems that it is throwing exception on every round after some hidden bug is triggered occasionally. That bug is probably introduced in 0.012m series.
  • 0.012m8.7 – 2017-10-10
    • Small tweak about predicted-distance danger factor
  • 0.012m8.6 – 2017-10-10
    • RoboRumble ‒ APS: 88.57% (3rd), PL: 540-4 (617th), Survival: 95.44% (not finished)
    • Try to normalize and cap predicted-distance danger factor, which is inspired by Dookious by Voidious.
  • 0.012m8.4 – 2017-10-09
    • RoboRumble ‒ APS: 88.46% (3rd), PL: 1154-6 (4th), Survival: 95.31%
    • Minor tweaks in VG
    • Should be the same as 0.012m8.1 (except the use of StrictMath in gun kde, again)
  • 0.012m8.1 – 2017-10-08
    • RoboRumble ‒ APS: 87.79% (6th), PL: 1151-8 (7th), Survival: 94.71%
    • Disable AS gun
  • 0.012m8 – 2017-10-08
    • Use full cluster in main gun
    • Tune main gun hard against RaikoMicro
    • Add VG graphics
  • 0.012m7 – 2017-10-08
    • RoboRumble ‒ APS: 87.99% (5th), PL: 1155-4 (4th), Survival: 95.07%
    • Base on 0.012l29
    • Migrate wave graphics and hit score from 0.012l45
    • Gun refactor
    • Add VG System
    • Add an Anti-Surfer Gun
  • 0.012l45 – 2017-10-08
    • RoboRumble ‒ APS: 87.8% (6th), PL: 1154-5 (5th), Survival: 94.77%
    • Disable flattener
    • Use legacy energy management
    • Use fast math again in gun
  • 0.012l42 – 2017-10-07
    • New wave risk graphics
    • Rework hit score
    • Add Virtual Gun System
    • Add a random gun but disabled for now
    • Rework flattener
  • 0.012l40 – 2017-10-06
    • RoboRumble ‒ APS: 88.3% (3rd), PL: 1152-7 (6th), Survival: 95.22%
    • Refactor
    • Use native math in gun kde
    • Match legacy bullet power behavior
  • 0.012l37 – 2017-10-05
    • RoboRumble ‒ APS: 88.3% (3rd), PL: 1153-6 (5th), Survival: 95.23%
    • Try to match legacy bullet power behavior when hit rate under 33.3%
  • 0.012l35 – 2017-10-05
    • RoboRumble ‒ APS: 88.21% (5th), PL: 1150-9 (6th), Survival: 95.11%
    • Make one shot power smarter (if cannot one shot energy + hit bonus, one shot energy without hit bonus)
    • I know my gun behaves poorly when changing bullet power after introducing the bullet power dimension (strange thing though), therefore the score decrease may result from poor gun performance when trying to save energy.
  • 0.012l34 – 2017-10-05
    • RoboRumble ‒ APS: 88.24% (4th), PL: 1150-9 (7th), Survival: 95.16%
    • Ignore enemy hit when my hit rate is not very high (33%) to save energy
  • 0.012l33 – 2017-10-05
    • Some refactors
  • 0.012l31 – 2017-10-05
    • RoboRumble ‒ APS: 88.22% (5th), PL: 1154-5 (4th), Survival: 95.13%
    • Be more conservative about killing power (never raise power for kill)
  • 0.012l30 – 2017-10-04
    • RoboRumble ‒ APS: 88.05% (5th), PL: 1153-6 (5th), Survival: 94.95%
    • Use precise one shot power. (Bullet power to one shot the opponent even if one of his bullets in air hits me before that)
  • 0.012l29 – 2017-10-03
    • RoboRumble ‒ APS: 88.38% (3rd), PL: 1152-7 (6th), Survival: 95.25%
    • Base on 0.012l21
    • No longer match bullet power higher than 1.95
    • No noise in bullet power any more
  • 0.012l22 – 2017-10-02
    • Be more conservative & stable (remove manually added randomness) on energy management.
  • 0.012l21 – 2017-10-02
    • RoboRumble ‒ APS: 88.15% (5th), PL: 1152-7 (4th), Survival: 94.71%
    • Try to exploit x.y5 bug in gun
    • Fix incorrect decay bug introduced in 0.012l15
  • 0.012l20 – 2017-10-01
    • Revert movement change in 0.012l17 (no noticeable difference after ~500 pairings)
    • Tweak energy management a little
  • 0.012l17 – 2017-10-01
    • Add enemy wall damage detection (no behavior change yet)
    • Make graphics switch better
    • Tweak movement array view
  • 0.012l13 – 2017-09-28
    • RoboRumble ‒ APS: 87.82% (6th), PL: 1150-9 (7th), Survival: 94.36%
    • Revert to 0.012l7
    • Gun:
      • Enable bug fix in my kd-tree (performance enhancing bug against surfers ;) )
      • Use Precise GF
      • Use Precise Intersection
      • Multimode on Disabled bots (no log, shoot head-on)
      • Add bulletsFired, power, advVel, averageLatVelLast11 attributes & try some non linear normalization function
      • Use 11 nearestNeighbors' averageDistance as one sigma (cluster size is still sqrt(tree.size)).
      • Tune weights against RaikoMicro & previous version of ScalarBot (to find a balance between hitting RM & WS)
  • 0.012l8 – 2017-09-28
    • RoboRumble ‒ APS: 86.56% (9th), PL: 1154-5 (5th), Survival: 93.11%
    • Use Runnable interface instead of onTurnEnded Custom Event to execute(), which is MUCH faster when battle speed set to max on my computer, especially on short battles.
  • 0.012l7 – 2017-09-27
    • RoboRumble ‒ APS: 86.69% (9th), PL: 1155-4 (4th), Survival: 93.28%
    • Revert to 0.012k3
    • Fix time decay bug about globalTime again ;/ (the fix in 0.012k2 is not complete and actually breaks it)
    • Change wave graphics color to black.
  • 0.012l2 – 2017-09-26
    • RoboRumble ‒ APS: 86.6% (9th), PL: 1150-9 (8th), Survival: 93.17%
    • Revert changes in WallArrayView.
  • 0.012l1 – 2017-09-26
    • Base on 0.012k3
    • Try tuning movement weights
  • 0.012k4 – 2017-09-26
    • RoboRumble ‒ APS: 86.58% (9th), PL: 1146-13 (11th), Survival: 92.87%
    • Some experiments toward traditional Wave Surfing.
    • Survival and PWIN decreased a lot, but APS a little.
  • 0.012k3 – 2017-09-25
    • Migrate better bullet shadow graphics, round hit score log and better energy drain log from 0.014 branch.
  • 0.012k2 – 2017-09-25
    • RoboRumble ‒ APS: 86.61% (9th), PL: 1153-6 (6th), Survival: 93.2%
    • Fix time based decay bug that uses round time instead of battle time, which affects MoveProbabilityView greatly.
  • 0.012k1 – 2017-09-13
    • RoboRumble ‒ APS: 86.53% (9th), PL: 1150-9 (8th), Survival: 93.04%
    • Re-enable bullet shadow
  • 0.012k – 2017-09-13
    • RoboRumble ‒ APS: 86.21% (12th), PL: 1142-16 (12th), Survival: 92.57%
    • Disable bullet shadow & flattener temporally
    • Add a probability view reworked based on flattener view.
  • 0.012j8 – 2017-09-12
    • RoboRumble ‒ APS: 86.1% (13th), PL: 1152-6 (5th), Survival: 92.91%
    • Tune against the problem bots of previous versions to make sure the flattener is not enabled against weak bots, but enabled & disabled periodically against top bots.
  • 0.012j5 – 2017-09-12
    • Fix a LONG LIVING BUG in my kd-tree which prevents me from getting enough points in a cluster. However the bug is kept in gun temporally as I don't want to touch the gun yet.
    • Fix a long living bug which counts bullet collides as bullet hit.
    • The flattener now uses gaussian function to 1. as weight to cut down unrelated data while including the relevant ones 2. as kernel density to help the true surfing algorithm. No fast math is used yet.
    • Weight flattener based on hit rate minus a threshold. Non-positive weight means turned off.
  • 0.012j1 – 2017-09-12
    • Add a broken flattener which is always on without any weighting. Should be worse against the majority, but a little bit better against those with anti-surfer guns.
  • 0.012i – 2017-09-10
    • RoboRumble ‒ APS: 86.04% (12th), PL: 1149-8 (5th), Survival: 92.84%
    • Base on 0.012g5
    • Merge beautiful wave graphics & keyboard events fix from 0.012h
    • Add BulletShadow and graphics
  • 0.012h – 2017-09-10
    • Fix keyboard events bug which was introduced after switching to implementing interfaces instead of extending AdvancedRobot
    • Rework wave graphics
    • Try a big tree with kernel density in movement. Not better.
  • 0.012g5 – 2017-09-09
    • RoboRumble ‒ APS: 85.73% (13th), PL: 1142-14 (14th), Survival: 92.34%
    • Add LatTreeView and LatArrayView. Uses BFT, LatVel, AdvVel and AverageLatVelLast10
  • 0.012f – 2017-09-09
    • REFACTOR: no longer extends AdvancedRobot, implements interfaces instead; Use my own event object in place of StatusEvent and ScannedRobotEvent. Remove degrees version API to prevent potential bugs (the mix of both in API is really annoying).
  • 0.012e – 2017-09-08
    • RoboRumble ‒ APS: 85.38% (14th), PL: 1142-14 (14th), Survival: 92.07%
    • Use TreeView with ArrayView; Remove most recentGF.
    • Fix a bug causing second wave danger to be NaN when they hit at the same time (thus every danger is NaN)
  • 0.012d – 2017-09-08
    • RoboRumble ‒ APS: 85.03% (20th), PL: 1139-17 (15th), Survival: 91.84%
    • Base on 0.011
    • Merge bug fixes from 0.011e
    • Replace SimpleTreeView with SimpleArrayView, limit max entries, tune weight against RaikoMicro.
  • 0.011e – 2017-09-07
    • Make gun heat condition less strict, to prevent dropping real waves accidentally.
    • Weight waves on time to touch.
    • Add stationary danger in both waves but turned off temporary.
    • Forgot to revert danger function change in 0.011d
  • 0.011 – 2017-09-05
    • RoboRumble ‒ APS: 85.15% (18th), PL: 1134-20 (16th), Survival: 91.99%
    • Turn on second wave surfing (weight two waves on damage only, should change in later version)
  • 0.01f – 2017-09-05
    • RoboRumble ‒ APS: 84.62% (22nd), PL: 1137-18 (14th), Survival: 91.78%
    • Refactor for second wave surfing, but turned off in this version. Hope it don't break anything.
    • Have tried some dynamic distancing based on average distance, but not working.
    • Have tried some other preferred distance, but nothing else worked.
    • Fixed a bug causing a lot of enemy waves to be ignored when I'm firing power 0.1 bullets.
  • 0.01e – 2017-09-04
    • RoboRumble ‒ APS: 84.52% (23rd), PL: 1131-24 (19th), Survival: 91.59%
    • Fix a bug preventing me from matching enemy power
    • Tweak danger evaluation
    • Have tried higher LOW_ENERGY_THRESHOLD, but nothing else works.
    • Disable movement debug graphics by default.
    • Remove all object allocation in loops.
  • 0.01b – 2017-09-03
    • RoboRumble ‒ APS: 84.15% (26th), PL: 1062-40 (79th), Survival: 92.88%
    • Take SimpleBot's Gun
    • Take SimpleBot's Move Tree View
    • Replace BadWallSmooth with PreciseWallSmooth
    • Write a True Surfer with PreciseIntersection from scrach (yet surfing one wave only)