archive by month
Skip to content

Steamhammer is ready for AIIDE 2021

Steamhammer is all set for AIIDE. I’m still making checks and running tests to be extra-duper-sure, but I’m convinced that this is the strongest and least-buggy Steamhammer ever. It hasn’t been uploaded anywhere, so nobody will be 100% ready for it... though I guess Stardust will be 99% ready. I plan to submit it today, a day ahead of time.

I’ll post the change list in a day or so, and the code after the submission deadline is safely past.

close proxy game

Here’s a short and surprising game from SCHNAIL, Steamhammer vs leftchange (T) on Heartbreak Ridge. Terran played an unusual and sneaky proxy. Steamhammer scouted it thanks to the anti-proxy overlord, and its first reaction was almost good; it did things right except for misplacing the sunken because sunken placement is optimized for stupid bot opponents. Steamhammer countered the empty enemy main, and soon neither player was able to mine. But there was a clear winner!

Today’s ASL 12 matches had another surprising and close proxy game with much better play, Soma vs JyJ on Polypoid. It starts at about 34:00 in this round of 16 group A vod with commentary by Nyoken and Scan. (I watched it “excluding restricted content” and didn’t miss anything that I noticed.)

Steamhammer is frozen for AIIDE

Steamhammer is feature-frozen for AIIDE 2021, so that I don’t risk breaking my good version. Well, maybe not entirely frozen, but reduced to a low temperature (keyword simulated annealing). I will fix bugs and prepare for specific opponents, and I’ll probably also make small feature tweaks if they are safe.

My change list right now has 54 items on it, 14 of them marked as important changes that significantly improve play. With that many, obviously none of them is a big project—there hasn’t been time! But major weaknesses are fixed or reduced, affecting the whole range of strategy, tactics, and micro; all levels have important improvements. I’m pleased and optimistic. (Of course I was optimistic before AIST S4, and then Steamhammer lost 0-4, so....)

For one new feature, I ran a test that involved adding a spore colony at every base. At supply 7 (very early, before the spawning pool), Steamhammer started an evolution chamber and made a spore in the main, and then added a spore at every new base for the rest of the game. The opponent didn’t matter for the test, so I ran it against the protoss built-in AI. I was tickled that, even with the giant handicap, Steamhammer won several games in a row with apparent ease.

Big Game Hunters on SCHNAIL

The popular map Big Game Hunters (BGH) has been added on SCHNAIL. It is very different from standard maps: There are 8 start positions, the mineral patches and geysers have 10x or more the usual resources per item, the layout is irregular, and there are imbalances everywhere. Strategy is different than on a tournament map, and bots need different knowledge and tuning to play on it.

Nevertheless, when I noticed last night that BGH was added, I quickly enabled it for Steamhammer. It should be fun, and I expect that different bugs and weaknesses will show. Steamhammer has played 3 games on the map so far. It lost them all, but I did learn stuff—so far, so good.

From the game history, it looks as though Krasi0 is the only other bot to have BGH enabled. I see one game as far back as 8 September. I recommend the map for authors who have time to learn from their bot’s SCHNAIL games, or who just want more fun.

A Fastest map is also added. I did not enable that for Steamhammer. (The layout is different from Fastest AfreecaTV, the closest corresponding map in Liquipedia.) I think it is not as much fun, and without trying it I guess Steamhammer is not likely to work there. Again, Krasi0 seems to be the only bot to enable it.

Aside: If I were in charge, Big Game Hunters and Fastest would only be enabled for practice games. They should not be inflicted on human players when they’re being serious. But SCHNAIL allows it. I see ranked games in the history.

the sunken range bug and AIIDE 2021

In Steamhammer 3.5.1 (see the “zerg” section) I added a defense against cannon rushes which exploits the sunken range bug. The bug makes it possible, under specific conditions, for a sunken colony to target an enemy which is outside the sunken’s range. Exploiting the bug is allowed in human tournaments. In fact, it’s a standard defense against cannon rushes, one that players know and use. An example is ASL 11 Semifinal A, Mini vs Queen, game 1—see about 32 minutes into the vod for a complicated sequence where Mini eventually abandons the cannon rush knowing that it has been countered, and notice that casters Nyoken and Scan have little trouble understanding what happened and why.

At the time I wrote “Use of this bug seems to be universally legal,” but today I checked the AIIDE rules more closely. The rules include a list of allowed bugs to exploit, and add “All other bugs/exploits are forbidden.” The sunken range bug is not on the list.

I sent e-mail to Dave Churchill explaining the situation and its complexities. He’s busy and I don’t know if he’ll have time to look into it. Basically, I’m expecting to disable the behavior in Steamhammer for the tournament. I’m adding a configuration setting Config::Skills::UseSunkenRangeBug so I can turn it on and off.

Most likely no AIIDE 2021 protoss will cannon rush at all, so in a way the point is academic. But who knows?

what should the rules say?

It’s complicated!

The range bug is a game behavior, and it can happen unintentionally in real games, just because events happen to trigger its conditions. It’s fairly rare, but I expect all who play regularly have seen it (whether they recognized it or not). Bots should not be penalized for game behavior that they did not intend, and have no reason to even notice.

Steamhammer deliberately attempts to exploit the bug to beat cannon rushes. I have to interpret that as a violation of the AIIDE rules as they are written.

If you’re actively trying to enforce the rule, how would you do it? First, you’d have to examine the games, presumably with replay analysis software since there are too many to watch in person. Then you’d have to decide whether at least one instance of the bug was a deliberate exploit. That likely involves reading the code to be sure. Tournament organizers are not going to go to so much trouble, so probably the only practical enforcement would be for other authors or observers to point out possible infractions after the fact.

Then there’s the point that exploiting the bug is legal in human play, so presumably it should be legal in bot play. But that has a hidden assumption behind it: Humans can’t or don’t exploit the bug in any way that seems unfair, therefore bots won’t either. It might be true, but how sure are you? Bots with perfect timing and simultaneous view of all information might be able to exploit the bug in a way that feels unfair. Then the rules would be unfair.

Maybe it’s right to allow exploiting the range bug unless and until some bot implements an unfair exploitation.

Even if it may be a good idea to change the rules, it’s no good to change them close to the submission deadline. The rules for this year should stay put. Next year’s rules may be open to debate.

Update: I have mail from Dave Churchill. After some flip-flopping, the final ruling is “INTENTIONAL use of this bug via any specific code that invokes it is not allowed.” That follows the original rules.

popular opponent Steamhammer

When I uploaded Steamhammer 3.5.1 to SCHNAIL, with new weaknesses, the bot lost 200 elo or more and also lost its popularity as a SCHNAIL practice opponent. I guess it’s not as much fun to play an opponent that sometimes plays fine and other times arrays all drones in front of the natural to make sunkens and then has no money to morph them. The bugs are fixed now. Elo is still lagging—elo changes slowly because there are not many ranked games—but Steamhammer’s popularity for practice returned suddenly. The players are getting information from somewhere.

In unrelated news, the name “Leta” is pronounced by some “Leeta”, by some “Layta”, and by some “Lehta” (which I guess is the correct one). In today’s ASL 12 round of 24 group E cast, Nyoken pronounced it all three ways in the space of a minute! Did anybody else notice?

Steamhammer is progressing

I estimate that the Steamhammer version active on SSCAIT and BASIL, 3.5.2, is about 50-100 elo weaker than the previous active version, 3.5. The improvements are outweighed by new issues, the most important of which came from an “optimization” of combat simulation which sometimes fed it stale data. Oops. Advice to all persons: Do not make mistakes, they can hurt.

I fixed that yesterday. The only remaining new weakness (that I can see) is a tendency to sometimes overdo it on the sunkens. I trimmed that back with limits based on additional information. It is less severe than the earlier weakness of forgetting the sunkens or leaving them until too late, and there are other improvements besides. I have the strongest Steamhammer yet.

I have time for more improvements. Early signs for Steamhammer in AIIDE 2021 look good, provided I can follow my own advice to all persons.

AIIDE 2021 prospects

The AIIDE registration list is available today. There are 14 bots on the list, compared to 15 last year. I count 7 protoss, 5 zerg, 1 terran, and 1 random, though among the updated returning bots protoss and zerg are 3-4. Zerg seems to be gaining in popularity. (As it should, ahem. I have been ahead of the curve the whole time!)

The familiar bots, in order of their BASIL ranks today:

botauthor
StardustBruce Nielsen
BananaBrainJohan de Jong
PurpleWaveDan Gant
MicrowaveMicky Holdorf
McRaveChristian McCrave
Fresh MeatHao Pan
WillyTNico Klausner
SteamhammerJay Scott

Protoss dominance is showing, but it already cracked in CoG without the help of Monster. Terran shyness is also showing, but I notice that WillyT has improved a lot in the last year. I counted new zerg Fresh Meat as a familiar bot even though neither Fresh Meat nor its terran counterpart Halo by Hao Pan has participated in AIIDE before—Hao Pan is an old stalwart. It will be interesting to see how Fresh Meat performs in the different world of a long tournament. Steamhammer is last on this list, but I have already fixed key weaknesses. It will perform better in the tournament.

We have 3 newcomers, a fair number. Last year there were 4 newcomers, and unfortunately only EggBot ended up playing.

botauthor
Blue SoupEujain Ting
real5droneKim TaeYoung
TaijiWang Bin

Eujain Ting seems to have some experience. I found old repos related to Broodwar and BWAPI on Bitbucket: Eujain Ting repositories. And I see Eujain Ting registered for the 2011(!) AIIDE tournament without playing. The name “Blue Soup” (after the debris of a destroyed dragoon) suggests either low expectations or a sense of humor! Kim TaeYoung last year registered protoss DanDanBot (which did not play). This year, the zerg name “real5drone” suggests a 5 pool strategy, whether honestly or otherwise. Wang Bin last year registered Taij, which I’m guessing was a typo for this year’s allusive name Taiji (and which also did not play). From past experience I do not have high hopes for the newcomers, but occasionally a great one appears. And I think it’s valuable experience to participate no matter how good or bad your bot is.

Plus 3 holdovers from previous tournaments, with their win rates from last year.

botauthor
Dragon 62.38%Vegard Mella
DaQin 50.14%Lion GIS
UAlbertaBot 31.14%Dave Churchill

It’s too bad that we don’t get an updated Dragon. It’s a complicated and interesting opponent. UAlbertaBot is here for yet another year, I gather, mainly as a long-term baseline to measure progress. I forecast that it will score less than 15% against the updated bots, and this year or next it is likely to lose its value as a baseline. 2017 champion ZZZKBot scored 39.89% last year and is not being carried over—now that’s a sign of progress.

ZvZ lurker game

Here’s a ZvZ SCHNAIL game where the human played an unusual strategy. It was a ranked game, so maybe the human shouldn’t be playing around... but they were clearly playing around. The game is Randomhammer - jki, appearing in the replay as Anonymous AI (rolling zerg) versus jk.

Randomhammer made an unfortunate choice of build, a hidden base with each base protected by a sunken. The goal is to survive a rush and hit back. Jki (who didn’t know at first that Randomhammer was zerg) went overpool then natural ahead of the hidden base, gaining an advantage from the start. And used the advantage ingeniously.

1. Contain Randomhammer to its main base with zerglings.
2. Get a spire.
3. Make scourge and repeatedly kill overlords. Overlords don’t cost gas and are usually a poor choice of scourge target, but since Randomhammer was already behind, it kept getting supply blocked and was unable to make enough units, air or ground, to break out. It didn’t help that it fought poorly.
4. Get lurkers too! The plan costs a lot of gas.
5. Win. If an overlord approaches to detect the lurkers, scourge it.

The picture shows the lurkers breaking down the hidden base. The lair is there because Randomhammer tries to morph the lair where it won’t be seen right away. Notice the human player’s much larger army supply.

lurkers versus hatchery

In other ZvZ games, jki has played normal ZvZ strategies. The lurker plan was apparently an on-the-fly decision to have fun with Randomhammer’s poor start. Bots can’t do that... yet.