1v1 Skipped Turns / Missed Scans Tweak
In version 12.8 of XanderCat, I partially fixed my bullet shielding components that were being seriously hampered by skipped turns due to what we believe to be a garbage collection issue that occurs on some platforms for bots that produce a lot of garbage (yeah, XanderCat is a trashy bot). This partial fix now has me neck and neck with Gilgalad (up from 7th to roughly tied for 4th).
The skipped turns remains a problem, but the bullet shielding is working much better now regardless. Originally I thought the problem was due to the time loss, but the real culprit was with how the opponent waves were being generated. When XanderCat sees an energy drop from scan to the next in an opponent that cannot be explained by anything else, it logs it as the opponent firing a bullet and creates an opponent wave for the assumed bullet. This is fairly standard. However, what happens if your robot has missed scans in a time period when the opponent has fired a shot (in my case, due to skipped turns)?
XanderCat would just assume that the opponent bullet was fired on the previous tick. For example, assume you have a scan from time 40, then have skipped turns, then the next scan you get is from time 50. XanderCat would assume the bullet was fired at time 49, when it could have been fired at any time between ticks 41 and 49. This resulted in incorrect opponent waves often being created. This error doesn't affect other strategies all that much, but it does break bullet shielding quite badly.
My initial fix for XanderCat 12.8 is fairly simple. If the scans are not back to back, the wave is just flagged as "estimated". Any components that then rely on processing opponent waves can take that flag into account if needed. I just have my bullet shielding controller ignore "estimated" waves so that I do not attempt to shield those waves and don't count misses against those waves in whether or not to continue shielding.
A better solution, which I may consider, is to try to actually figure out what missed tick was the tick when the shot was actually fired, and then use that tick in the opponent wave creation. This could be done by analyzing opponent gun heat. Most bots will fire as soon as their gun heat reaches 0, so if you know when the previous shot was fired, you can figure out on which tick the next fired shot should have happened on. How much additional help might this be?
Now, most 1v1 bots don't have problems with missed scans or skipped turns, so concerning oneself with this issue may not be worth the trouble. But it's something interesting to think about.
Nice work and congrats!
It's hard to guess how much the gun heat tracking would help, but to me it seems to have potential for a decent gain and thus seems worth trying. Even if it just lets you shield one more wave once in a while, that can be a big APS difference when you're holding opponents to so few points (as I'm sure you've noticed =) ).
Nice improvement indeed. In my opinion, gun heat tracking and assuming they shot as soon as possible will gain you approx the same amount of APS you got with this update, say 0.25. Not enough to threaten #3 yet, but surely a noticable jump. I think that the "improved estimated wave" can safely be regarded as "true wave", but that is something for you to test and decide. Note that such an improved estimated wave not only helps your shielding, but also your regular surfing.