Steamhammer 1.1.1 retrospective
Now that Steamhammer 1.2 is out, I want to think back over the lessons of version 1.1.1.
Steamhammer 1.1.1 was shockingly successful. The high end of my expectation was that it might reach an elo a little over 2200, and that seemed unlikely. In fact it had a final elo of 2285 and maintained a position as the #3 bot on SSCAIT, behind only Iron and Krasi0. Even when it hit a losing streak (which I helped along by voting for lower-rated opponents that were likely to beat it), it quickly bounced back. What did I accidentally do right?
Compare Steamhammer to AILien. They’re about the same age and both are descended from UAlbertaBot. We’ve helped each other out with bug fixes and ideas. AILien is ahead of Steamhammer in most zerg skills: It has better scouting, better tactical decisions, better building placement, better worker defense, better overlord safety, better cooperation of mobile units with sunkens—I have a lot to do to catch up with it, if I ever can. And yet Steamhammer is stronger by 100 elo, a large difference. What’s going on?
I didn’t expect it and I can’t explain it. Some of the bugs introduced in this version seem devastating, but they turned out to hurt results only against a small number of opponents. All I can do is explain my choices and conclude that somehow they were good choices.
1. Play efficient openings. Steamhammer’s builds are not all perfectly tight, but they’re pretty good and they put pressure on the enemy. I haven’t seen such good builds from any automatic code, whether BOSS or AILien or Steamhammer’s own strategy boss or any other bot. Handmade is still better—so far!
2. Keep the pressure on. Steamhammer plays the full range from fast rushes to economy-heavy openings, but it prefers low-economy pressure builds. I thought: Bots are good at attack and poor at defense, so keep attacking! AILien prefers a strong economy; it’s not a mistake, but it may be less effective at exploiting weaknesses in other bots.
3. Stay strategically crisp. Zerg larva management means that zerg can switch its unit mix suddenly to push the opponent off balance. I took the attitude: Don’t adapt to the situation, drive the situation so that the opponent has to adapt. That’s why Steamhammer makes explicit unit mix and tech target decisions. I directly coded in bias and hysteresis, so that it doesn’t change its mind lightly:
bool StrategyBossZerg::vProtossDenOverSpire()
{
// Bias.
int denScore = 3;
int spireScore = 0;
// Hysteresis. Make it bigger than the bias.
if (_techTarget == TechTarget::Hydralisks) { denScore += 13; };
if (_techTarget == TechTarget::Mutalisks) { spireScore += 9; };
...
4. Fix bugs and stay resilient. As it stands, at least half of Steamhammer’s lost games show severe bugs—maybe not game-losing bugs, but deeply harmful bugs that destroy resilience and take away opportunities to come back. The bugs I fixed between version 1.0 and 1.1.1 likely made a big contribution to Steamhammer’s strength.
Are these the real reasons? Well, I already said that I don’t know. If you’ve watched the games, what do you think?
Tomorrow: Early returns from Randomhammer.
Comments
Ail on :
Also Ailien contains a crash bug that struck about every 10th game. Not much but enough to drop quite a bit of Elo.
You say Ailien has better scouting and better overlord safety? I think this contradicts a little. McRave is particularly avid to punish my better scouting by viciously hunting down every overlord it sees. Luckily he's the only one doing it in this manner.
But overall you are spot on with the handcrafted aggressive low-economy builds. A good trick to beat Ailien is a timing push where you don't let it see your units until it is too late. Letabot does it all the time.
BTW. About Randomhammer: When it rolls Protoss and does that 9-10 build I have a really hard time. I play my 9 pool opening against random and it is much worse at holding the Fastexpand than is 12hatch.
Jay Scott on :
krasi0 on :
Jay Scott on :