Energy Management & Firepower Selection
You know, your description of using score estimation based firepower selection, reminded me that back in 2010 I was working on a thing akin to that for Midboss 1s. Unfortunately that version had to be pulled from the rumble (replaced with an older version without this feature) for being a bit too slow and having a habit of skipping turns, and I never actually got around to re-introducing a bot using the technique or optimizing it.
I never released the code to that before, but posted it here for interest's sake: Midboss/Score-Estimation_based_Firepower_Selection
I find it interesting to compare what I built back then to what BeepBoop is doing.
It had some score estimation formulas that were pretty similar to BeepBoop's.... but what really made it slow is it performed that score estimation formula absurdly many times per tick. Rather than be content with some continuous-time estimate based on average rate of damage, it did brute force prediction of discrete future waves, all the permutations of hits/misses, for up to 30 waves into the future (though with caching to effectively re-join alike branches, since 2^30 would get silly), only performing the sort of score estimation BeepBoop does at a depth or minimum probability limit.
I'm not sure how much extra going for simulating discrete branching possibilities with discrete waves gained me, but the idea was that it this would give it some more interesting emergent 'cleverness' around the precise timing of things or amount of energy left for firing toward the very very end of the round. Boy did it chew up CPU though.
The fact that BeepBoop is using a form of score estimation in it's firepower selection, tempts me to some day go back to try to refine what I had started back then, so thanks :-)
That's really cool, I didn't see that! I also built a bullet power simulator that took into account discrete firing, bullet flight time, etc. However, it didn't use tree search: I just did monte-carlo rollouts of running it a couple hundred times and averaging the results, so it's probably much slower than yours! It's not used in BeepBoop, but I did use it to validate that BeepBoop's fast estimates assuming continuous time, normal distribution for hitrate, etc. were about right. For example, here and here are some plots showing that BeepBoop's approximations work pretty well, although not perfectly and with some edge cases (it says file uploads are disabled so I can't add them to the wiki). I sometimes see interesting emergent behavior from BeeBoop like firing high-power bullets when it's losing, presumably either to get more bullet damage and take less bullet damage before it dies or in the hope that a lucky high-power hit turns things around.