Today's blog about StarCraft bots is inspired by the mini bot tournaments hosted by the Student StarCraft AI tournament. Specifically the match between "5 pool" and iron bot:
(at the 41:36 time mark if autoplay doesn't work)
That match reminded me of the finals of the first StarCraft AI tournament between Krasi0 and the berkeley overmind:
Although you can probably see a lot of similarities (mutalisk micro, mech terran TvZ), there are also some difference (early aggressive opening from zerg, more defensive terran)
In general, this blog post is going to be about a short recap of the strategy Meta of Brood War bots. This change will hopefully explain how the similarities and difference of 2010 vs 2017 bots came to be.
Pre-StarCraft, the ORTS days
Before the BWAPI, there was research done in RTS AI using an open source RTS games called ORTS.
Even back then, general concepts like hit&run and resource management were already part of the top bots:
2010
The start of the StarCraft bots was a bit of a wild west as you can expect.
Each bot had a short description:
http://web.archive.org/web/20141122235145/http://eis.ucsc.edu:80/StarCraftParticipants
https://web.archive.org/web/20130804171747/http://eis.ucsc.edu/Tournament4Results
The Berkeley overmind starts out with what looks like a 13 pool muta variant with early zergling pressure.
Even back then, krasi0 bot was capable of holding off these kinds of early attacks.
But the mutalisk micro was too much, even with the repair micro.
Out of all the participants of 2010, only krais0bot is still in active development in 2017.
Dave Churchill still runs UAlbertaBot in the tournaments.
BTHAI and Skynet also still participate in the tournaments.
2011
After the success of the Berkeley Overmind, most bots focused on a strategy that would defeat the Berkeley Overmind.
This kind of pattern, of coming up with a way to defeat the top bot is something you will see repeated often.
Two new tournaments (CIG and SSCAI) started this year as well. With the SSCAI more focused on student (after 2011, non-student could participate but were not eligible for prizes)
The AIIDE and CIG both saw Skynet and UAlbertabot on the 1st and 2nd place respectively.
Both were protoss bots that participated in the 2010 tournament as well (UAlbertabot as a Zerg in 2010 ).
UAlbertaBot used build order optimization to perform a zealot rush as fast as possible, and transition in case it didn't work.
Andrew Smith (Skynet bot) had its own terrain analysis instead of using the BWTA toolkit.
It also used Cartesian geometry calculations to perform the dragoon micro.
This gave it an edge over UAlbetabot, who at the time didn't have good micro.
The SSCAI was for students only back then, the finals was a ZvZ between a mass ling bot and a bot that build sunkens to safely tech to mutalisks
2012
It was still the battle of the protoss bots in AIIDE and CIG.
Skynet still remained dominant, but AIUR gained more dominance this year.
AIUR has different kinds of moods (build orders + strategy). Back in 2012 when there was no file I/O it simply picked one of the options at random.
The framework for AIUR was used in IceBot who won the SSCAI 2012.
IceBot was up against a zerg rush bot (a common theme in the SSCAI)
2013
In 2013, the tournament manager was capable of handling file I/O for bots, so learning now became a thing in the AIIDE (the CIG had some problems getting it running and used the old tournament manager)
More info on the learning of the bots can be found here:
http://www.cs.mun.ca/~dchurchill/starcraftaicomp/report2013.shtml
The new combat simulator SparCraft, combined with the hardcoding in UAlbertaBot to do a DT rush vs Skynet, caused UAlbertabot to gain the throne.
With skynet now in 2nd place and AIUR in 3rd.
In the CIG, where the file I/O wasn't available yet, Skynet still remained on top with its Dragoon micro, with UAlbertabot in 2nd place (mainly caused by losing vs a certain bot that skynet was able to defeat easily).
In the SSCAI 2013 though, UAlberta only got 3rd place in the student division, and lost vs IceBot.
It seems that UAlbertabot was mainly good vs other protoss bots.
IceBot got to the finals of the SSCAI 2013, but was defeated by Krasi0.
It was here that you already saw tank lines form in TvT
Another bot of note was Ximp, whose was very good but crashed on certain maps and used too much CPU time (A problem which plagued Killerbot as well)
2014
2014 is where my bot (LetaBot) comes in.
StarCraft AI got more popular this year based on the total number of bots submitted.
The dominance of the protoss comes to an end this year.
In professional Brood War, there is the concept of the Six Dragons
http://wiki.teamliquid.net/starcraft/Six_Dragons
It was a period in time where protoss players were dominant. The same can be said about 2011-2013.
In StarCraft AI, there were 3 protoss bot dragons:
- UAlbertaBot
- Skynet
- AIUR
However, the Terran bots adapted. Ximp also had its bugs fixed.
Back then, there were two main ways to dethrone these protoss dragons.
The first idea would be to build a bot that can withstand all kinds of rush builds, while building up for a solid push.
This is the idea that both IceBot and Ximp used.
Both were metaphorically forged in the rush pit of the SSCAI, which consisted of a lot of rush bots (mostly zerg rush)
They focused on building bunkers or cannons to hold off any rush and building a massive Tank or Carrier push.
The second idea would be to create a rush bot that would be able to perform a rush like no other bot has done before.
That is the approach I took.
With the new mineral gathering algorithm that I created, my bot could perform a rush faster than any other bot:
http://www.teamliquid.net/forum/brood-war/484849-improving-mineral-gathering-rate-in-brood-war
Unfortunately, I messed up the learning algorithm, causing my bot to only stick to a bunker rush.
It was still enough to defeat all other bots that weren't that good at holding such a rush.
With Icelab able to attack before Ximp got enough carriers, it got 1st place.
Ximp got 2nd place, and LetaBot got 3d (AIIDE and CIG)
The SSCAI 2014 is when things got more interesting.
Just like Ximp, my bot played significantly better once the bugs were removed.
Since most rush bots on the SSCAI were zerg rush bots, most bot weren't quite capable of dealing with a Terran rush bot,
let alone one that was capable of many different kinds of rush builds.
LetaBot easily got 1st place in the student division, and got to the finals in the mixed division without any trouble.
The finals was vs the Carrier bot Ximp. To make things interesting, we were both allowed to change our bot before the final match (no longer a thing in SSCAI after 2014)
Ximp of course worked on the rush that defeated it.
But it probably didn't know that LetaBot was already capable of much more than a simple rush.
Anticipating a counter-rush, I enabled the wall building that I was working on and set my bot to go for the strategy that IceBot used vs Ximp (early Tank attack).
Essentially by then, LetaBot was already capable of both types of strategies used to dethrone the top bots from 2013.
Combining the two, it managed to defeat Ximp. Only losing 1 game because the wall algorithm wasn't finished yet, causing the barracks to not lift in 1 game.
VODs can be found here:
https://www.youtube.com/playlist?list=PLS6Qj916df6KECJQRcmsvNMPa_tvCpn4h
2015
(this video is recorded very softly, so you will have to run up the volume. Don't forget to turn it down afterwards)
From 2011-2014 it was very rare to see a Zerg bot participating.
Most of the zerg bots in SSCAI were zergling rush bots.
The top zerg bot (KillerBot, probably named after the pro-gamer "Killer") was a Lurker bot that was very good, but crashed a lot (another pattern that repeats itself in these years).
This all changed in 2015, where 3 zerg bots took the 3 top spots in the AIIDE and CIG:
- TscmooZ (1st place AIIDE, 2nd CIG): A zerg bot that uses dark swarm and army formation
- ZZZKBot (2nd place AIIDE, 1st CIG): The most sophisticated 4 pool bot.
- OverKill (3rd place both): A mutalisk harass bot
A detailed report on the 2015 competition can be found here:
http://www.cs.mun.ca/~dchurchill/starcraftaicomp/report2015.shtml
The general trend of rush or macro continued, with ZZKBot and OverKill following the rush style.
The first major tournament of 2015 was the CIG tournament. There, the 4 pool bot ZZZKBot caught everyone by surprise.
Just like LetaBot in 2014, ZZZKbot perfected a rush to such an extend that the anti-rush defence of most bots wasn't adequate.
In general, most bots couldn't deal with the new Zerg bots.
The only major zerg opponent back in 2014 was the Berkeley overmid, which only participated in 2010.
Being closed source, no forks were made.
CIG and AIIDE 2015 were the last times that my bot predominantly used a rush strategy.
In CIG it finished at the 4th place, just below the 3 new zerg bots.
By the time of the AIIDE, other bots have caught up to rush strategies, causing LetaBot to drop to 10th place.
Most bots still had some problem with 4 pool though.
They were only able to defeat ZZKbot on a 3/4 player map when wrong scouting caused a delay in the zerg rush.
By the time SSCAI 2015 came around, Marian Devecka fixed the bugs in Killerbot, making it the strongest bot on SSCAI.
Other strong bots (newcomers or new updated) were:
- Stone: a SCV rush bot
- Garmbot: a bot somewhat reminiscent of the Mass expand bot from AIIDE 2010. Can rebuild its production if the main base is lost
- tscmooP: Protoss version of the tscmooZ
By this time, rush bots were already phasing out. Even a sophisticated 4 pool bot will get countered.
But ZZKBot got changed as well, and thus still remained strong (it had some more build orders than 4 pool in SSCAI 2015 IIRC)
My bot managed to defeat ZZKbot on 3/4 player maps, but unfortunately during the tournament it played twice on 2-player maps and was thus eliminated.
KillerBot struggled a bit as well, but only lost one game to ZZKbot, thus getting into the finals.
The SCV rush bot Stone caught other bots off guard as well, even defeating the robust UAlbertaBot.
But just like Killerbot, Ximp was used to rush bots as well and was thus able to hold off Stone (only losing 1 game).
Thus the finals was between two macro bots. KillerBot went for mass hydras which countered the mass carriers from Ximp.
In the bronze match, it was the 4 pool rush bot vs the SCV rush bot. An easy win for the SCV rush bot
2016
2015 was the last time that a pure (1 base) rush bot managed to win a major tournament.
ZZKBot adapted by adding in more build orders, keeping the 4 pool in case of certain maps/opponents.
There were a lot of viewers for the SSCAI 2015 tournament.
Several games news outlets wrote about it. I did an interview with "Philippa Warr" about my bot.
https://www.rockpapershotgun.com/2015/01/15/student-starcraft-ai-tournament/
https://www.rockpapershotgun.com/2016/01/28/starcraft-ai-bots/#more-343753
The press coverage from these sites brought in many more people interested in RTS AI.
2016 was also the start of the blog of "Jay Scott". Currently author of SteamHammer.
http://satirist.org/ai/starcraft/blog
The biggest newcomers were:
- Iron bot: succeror to "Stone". Just like Andrew Smit (Skynet) it uses its own terrain analysis
- tscmooT: Terran version of the tscmoo bot. It could now play all 3 races
- MegaBot: A bot that mixed several protoss bots into 1 bot. Using machine learning to select which bot to use.
Unfortunately for megabot it also copied all the bugs in the protoss bots. Causing it to crash a lot.
CIG results:
https://sites.google.com/site/starcraftaic/result
Detailed finals: https://cilab.sejong.ac.kr/sc_competition2016/posting_data/final_stage/html/index.html
Results discussion on Jay Scott's blog: http://satirist.org/ai/starcraft/blog
In 2015, the top 3 bots were all zerg, now it is all terran. Protoss is no longer dominant at all.
This is also the first time that a random bot entered the tournament (UAlbertabot).
As can be seen from the detailed results, ZZKbot's new build orders helped it stay relevant.
In terms of TvT, the strategy of all top 3 bots was to set up a contain on the enemy base as fast as possible.
This aggressive style was reliant on things like mine placement, explaining the average 55% winrate of LetaBot over the other 2 bots
AIIDE:
https://www.cs.mun.ca/~dchurchill/starcraftaicomp/2016/
discussion on Jay Scott's blog: http://satirist.org/ai/starcraft/blog/archives/128-AIIDE-2016-results-discussion.html
main changes compared to CIG:
- UAlbertabot expanded the rush builds.
- More updates to ZZKbot
- Better TvT from Iron Bot
The time between CIG and AIIDE saw major changes to Iron Bot and ZZKBot.
Irob bot got a better TvT strategy, causing it to win to LetaBot.
However it could not deal with the new aggressive style of ZZKBOT.
Most other bots got close to 50% winrate with ZZKBot though.
The steady improvement of early aggressive defence caused the all-in style to lose its effectiveness.
SSCAI:
http://www.sscaitournament.com/index.php?action=2016
The latest major AI tournament as of right now.
Noticeable newcomers:
- SteamHammer: A zerg bot based on Ualbertabot. Made by the author of the StarCraft AI blog ( http://satirist.org/ai/starcraft/blog/ )
- Bereaver: Protoss bot with a good reaver drop micro
- Zia Bot: zerg bot that uses learning to determine build order.
This tournament saw the power of build orders in play.
- LetaBot added some of the Build Orders text mined from Liquidpedia (done by Demmis Soemers)
- tscmoo uses neural networks to create new build orders for its protoss bot
- Bereaver gets its strategies form a .json file
- Krasi0 already had different build orders implemented. These have been optimized more (better rush defence)
- Zia bot uses ML as mentioned above
In this tournament, it became clear that 1 base all-in rush build were simply not enough anymore.
Only against certain bots would such a strategy work.
Ironically the top bot Iron Bot, who started out as a SCV rush bot, was itself susceptible to a SCV rush.
So was the top contender to the throne Krasi0.
Although I have no regrets abusing this with LetaBot, I promised the authors that the newest versions of LetaBot won't use these cheese strategies anymore.
Anyway, the bot that everyone was rooting for was Bereaver. A bot that got to the top of the ladder shortly before the tournament.It's reaver drop is something to behold. In the round robin, it got 2nd place.
Another interesting match was krasi0 vs Iron bot, where the classical tank lines were used.
It usually resulted in 1 bot getting a contain, but the other bot breaking that contain and winning.
The cross table can be found here: https://purplepie.bitbucket.io/sscait.html
With the added rush defence in LetaBot, it never lost twice against a bot.
The performance of LetaBot is still map dependent, causing it some loses that were avoidable (it still uses the old BWTA)
Despite good results in PvT, bereaver wasn't as good in PvP, causing it to lose vs Ximp.
Ximp itself was still too reliant in Carriers, causing it to be countered by mass goliath this time.
As mentioned before, my bot abused a weakness of Iron bot and krasi0.
If it wasn't for that, my bot would do its contain strategy from the CIG/AIIDE with some adjustment.
Although effective, it would have been a much closer call as to who was going to win if that was used vs Iron bot and krasi0.
Regardless though, it would have most likely been 3 terran bots on top either way.
(early) 2017
As is usually the case, more bots were submitted after the tournament.
Especially now that there would be a bot API for StarCraft 2 soon as well (currently scheduled to be released in the summer).
Shortly after the tournament, I predicted that the all-in bots would no longer be at the top 3 of any major StarCraft AI tournament.
http://www.teamliquid.net/blogs/518683-the-end-of-rushbots-in-starcraft-ai-tournaments
The top 3 bots in the SSCAI tournaments were all mainly macro bots (with my bot only using rush builds vs certain opponents).
As expected, the bot developers adopted.
Now, the bots that want to use such a strategy go for early aggressiveness to keep the opponent on 1 base as long as possible.
All the while expanding and teching up to a tier 2 unit to be used as a massive push.
So here we come back to the berkeley overmind and the new "5 pool" bot.
As mentioned before, the berkeley overmind also build early lings to help defend against a rush build, and put pressure on the opponent otherwise.
However, the berkeley overmind then went into building sunkens to safely get to mutalisks.
After that it only used mutalisks. Not really building any other combat unit.
The bot named "5 pool" on the other hand ,can transition into different build orders and unit compositions if its initially strategy doesn't work.
By the looks of it, it tries a certain aggressive style, then switches if that style doesn't work.
The best example of this would be "5 pool" vs krasi0:
http://www.sscaitournament.com/Replays/5 POOL/194320-5 Po_kras-ZvT.rep
(you can watch it online on http://www.openbw.com/replay-viewer/ , since BW is free you can get the files needed easily).
As expected from the bot that faced the berkeley overmind, Krasi0 can deal with anything that "5 pool" trows at it.
Iron bot on the other hand usually loses against this style of play.
The LetaBot version currently on SSCAI doesn't have the full build order set from liquidpedia, and can thus also not deal with it yet.
Watching that replay and the match of krasi0 vs berkeley overmind, you can clearly see the differences. Bots nowadays tend to be better at both putting on pressure and defending against such pressure. Switching strategies mid-game has also become commonplace compared to 2010 where krasi0 and the berkeley overmind stick to a certain plan the entire game.
conclusions
As you might have noticed, there are some general themes here.
The most important is of course bug fixes

Then there is also the obvious case of bots not being able to handle new situations that well.
In a sense the micro simulators of bots like the UAlbertabot could deal with them, but you need the appropriate micromanagement as well.
Right now, most bots handle this by either going for a generic build that can handle most cases,
or using machine learning to adapt their build order.
The more successful bots do a mix of both, where they pick a safe build order and deviate based on scouting.
This of course was always a thing in RTS AI, but the difference between then and now is that there are more replays available of the unusual playstyle.
There are also a lot of bots outs there that you can use to see if your bot can hold a rush build.
Another common theme is building a bot specifically to take down a top bot. In SSCAI 2016, Beebot (15th place) managed to consistently defeat Iron bot (5th place)
In professional Brood War, this concept is known as

It is things like these that will force top bots to be more robust.
This leads to the overall theme. Each year the bots get better.
If you put top bots from a certain year against top bots from a year before, you will see how the playstyle has improved.
There is of course still a way to go before these bots can beat Flash,Bisu,Jaedong etc. but with enough active development most people reading this blog post will eventually no longer be able to defeat the top bots.
Just don't expect it to happen this year though

What the future hold
For now the AIIDE,CIG and SSCAI are still using Brood War.
The AIIDE and CIG are too close to the release date of the StarCraft 2 bot API to host a StarCraft 2 AI tournament as well, but the SSCAI will consider it.
Since some bot developers are using the BWAPI in anticipation of the SC2 API, you can expect bots with more generic algorithms.
I myself have been working on using MCTS for micro-management.
Making sure that it can be reused not just for StarCraft 2, but any RTS game like it.
Another interesting approach is the one that "imp42" is using. You can read more about that on his TL blog:
http://www.teamliquid.net/blogs/imp42
Also keep an eye out for Tscmoo,Iron bot,krasi0,SteamHammer and "5 pool bot".
You can find most of these bots playing on twitch:
https://www.twitch.tv/sscait
The VODs of the SSCAI tournaments can be found here:
https://www.youtube.com/user/certicky/playlists
And of course you can ask your questions below.




