StarCraft AI Competition Results
bgweber writes "The StarCraft AI Competition announced last year has come to a conclusion. The competition received 28 bot submissions from universities and teams all over the world. The winner of the competition was UC Berkeley's submission, which executed a novel mutalisk micromanagement strategy. During the conference, a man versus machine exhibition match was held between the top ranking bot and a former World Cyber Games competitor. While the expert player was capable of defeating the best bot, less experienced players were not as successful. Complete results, bot releases, and replays are available at the competition website."
am terrified we're actively pursuing the ability for our robot overlords to have the perfect micromanagement strategies.
By default, I'd say that a well-designed bot in an RTS would have an advantage over all but the best players. Since there is so much to keep track of, software would win out over wetware.
Bots in an FPS are one thing, but when you have dozens of units, a build order, multiple fronts, resources, and more to track all at the same time, the infinitely scalable multitasking of a bot would certainly come in handy.
Or maybe I'm off base?
Living With a Nerd
Uses Broodwar, not Starcraft 2, and not just the original.
Just saying. (Cause when they mentioned Ultralisk Microing, I thought about SC2 and how Ultralisks are terrible units there simply because they block your units making Micro a huge pain, and it wasn't so bad in BW when your units could take a bit more of a beating).
So the winner is just a Muta harassment bot? I have to wonder if the top level human player just spammed some Corsairs or Valks? It didn't seem like the AI was particularly good at changing strategy if the opponent countered. Spreading out the Mutas would help against a Corsair or Valk counter though, since both of those units rely on the Mutas natural tendency to clump to get maximum effectiveness.
I read the internet for the articles.
When you play a game yourself, you only have to come up with a counter strategy to what your opponent is doing. When you program a bot, you have to think of all the possible strategies to counter and find reliable ways to recognize them in addition to having the counter.
Anyone know if anyone has ever created a bot that has the ability to learn from losses and wins, to figure out what works and what doesn't (both what it is doing and what the enemy is doing, then use that in the future to predict what the other player is *trying* to do and come up with a counter)?
I've not played a lot of RTS's, but I've played a few, and the thing I've noticed is, if a strategy works against a bot, even if there's a fairly obvious counter, it will always work against that bot.
The RTS I've played the most is Supreme Commander: Forged Alliance, so I'll use an example from that: There are a collection of different bots available which will use different strategies. Now, the player can build a strategic missile launcher, which builds nukes. You can also build a strategic missile defense which will build 'seeker' missiles which will shoot down incoming nukes.
Some of the bots will build SMD's, some won't, but in no case does it build an SMD based upon the player/opponent's actions. That is, it doesn't check to see if you have started to build any Strategic Missile Launchers before it begins to build the defenses. The bots that don't build defenses won't build them even if you are building one. This means on the one hand that the bot wastes resources which it could have used otherwise, to build defenses, while on the other hand, if it doesn't build them, you can pretty easily and quickly defeat the bot with a nuke or two. Alternatively, instead of building a strategic missile defense, the bot *could* try to use someattack method (for example, if you don't have good air defenses, it could hypothetically try a targeted attack with a bunch of bombers or gunships to either destroy the SML, or the engineer units which are constructing the SML).
However, the bots never seem to be smart enough to attack the obvious threat of a strategic missile launcher. It seems like the only way the developers found to make the bots harder is to make them much more efficient at building up their economy and spamming out lots of land-units to try to attack the player.
When I get a chance, I want to try SC2, but right now, I'm in a period where I'm not playing games as much as I used to, and trying to reduce my gaming down to almost none while I get some more important things done in RL. It'll be interesting to see how the AI differs in that game.
Competitions like these are great, but they (and games like SCII) really make me pine for an RTS with a robust in-game scripting language. I would like to write complex auto-executing instructions for my units like "Pursue but never enter the firing zone of a known enemy turret or siege tank" or "If your energy > X and enemy of type Y in range R, cast spell S" or "If you are unit type X, always position yourself between friendly unit type Y and the enemy". You could confine the script to some reasonable specifications (say, no more than 1000 queries and 100 orders given per second) if you want to deter brute-force approaches.
This is a totally different problem than writing a good AI, you would be focused on writing powerful tools that aid, not replace, a human player by letting him specify his intent on a higher level than "go here" or "attack that". Better visualization of what's happening would be an integral part of this too. I would love to have SCII give me an overview of what units/building I have, what they are doing/queued to do -- even better if they are grouped into functional 'squadrons'. Being able to have multiple panes/monitors looking at different things would help to.
I guess what I'm saying is that I'm old and slow and want to leverage my experience writing rule-based logic to beat the whippersnappers that can click faster than I can and keep more things going in their heads at once :-P.
There seems to be a very wide range in the abilities of the winner and runner up bots that might not be noticed by someone unfamiliar with Starcraft. In order of appearance:
1) In the flying units versus flying units match, mutalisks (guys with wings) should have focused the scourges (little 'c' shaped guys) because scourges have about 1/5th the health of a mutalisk, but can suicide to take out 5/6ths of a mutalisk's health. Red ai focused scourges, the other ai didn't, with disastrous results for the other ai.
2) In the match with infantry, the players had medics, which heal other units but can't attack, and marines/ghosts, which can do damage but can't heal each other. One ai moved medics with ghosts such that the medics could actually heal. The other ai just left the medics a mile away from the combat, and got slaughtered. Furthermore, the AIs didn't bother with formations, which meant that half their units spent the entire fight trying to get into range. A precombat formation lets almost all the combat units start firing as soon as the fight begins.
3) The red zealots retreated in the face of numerically superior opponents, while the teal zealots just attack moved no matter how many they had. Teal zealots didn't focus fire, which meant that they lose units sooner, and thus had less damage output compared to red. In addition, red failed to kill the pylons (600hp) powering the buildings (a lot more than 600hp). Neither player built their bases to maximize the number of pylons powering their vital gateways; each pylon usually powered only one building.
4) In the fight with dragoons (orange spider things) versus tanks, the protoss (orange) could have frozen half the enemy tanks with a single stasis spell by sneaking the arbiter (flying spider thing) to the back of the tank formation. Furthermore, the protoss could have focused the science vessel (floating teal circle) that was preventing them from being invisible. It would have been a slaughter if the vessel had been focused, as teal would have had no real way to hit the orange units.
5) In the match between Overmind and Krasi0, the article talks about mutalisk clumping preventing some of the mutalisks from attacking. However, the point of the stack is that when one guy is in range, everyone else is. Also, the attack animation is so fast that for all practical purposes, the flyers can shoot while moving. They use their mobility to get out of range of infantry units, then zoom in to pick off outliers when their attack cooldown is finisihed. In actual competition, the terran player would usually rely on a strategic placement of static defenses and a highly mobile cluster. However, the terran (defending force) built tanks, vultures, and goliaths (mech guys that shot missiles) with the flaw that tanks and vultures can't shoot air, and are thus almost useless versus the mutalisks. The mutalisks spent the second half of the clip shooting tanks rather than focusing down the goliaths volleying missiles into them. The terran AI prioritized repairing tanks as much as goliaths, and didn't place tanks next to goliaths to soak up bounce damage from a mutalisk.
In general, the AI had problem with understanding the priority in a fight. That is to say, they often had no sense of what units are critical to a position or what units pose the most threat. They didn't arrange their units to maximize their effectiveness, and often failed to alter their behavior based on the other party. It's a fun contest, but I'm not sure the AIs could beat a moderately skilled player who understands tactics AND strategy.
Signatures are the new names.
Have a look at the Spring Engine if you haven't already. There are a variety of RTS games, including some high-quality variants of Total Annihilation, which use the Spring Engine and allow for all sorts of client-side scripting through Lua. There are a variety of client-side lua "gadgets" that players have written already. You can move your units into custom formations by drawing lines or squiggles with the mouse; there are widgets to automate using air transports to ferry units between factories and rally points; there are even widgets to automatically alert the player when certain dangerous units are spotted. IIRC, someone was even working on a script for kiting with long-range units.
I think quite a bit of this can be attributed on generic versus specific behavior. I am not an AI programmer, and I just glanced at the page and videos, but from what I gathered most of the AIs had hardcoded strategies that they would follow blindly. Then, the strength of the AI was directly proportional to the quality of the strategy that was implemented. They would use very specific patterns and follow them systematically.
What I would be curious about would be a more generic AI. Instead of using known strategies, the AI would analyze the battlefield and would, for instance, focus fire on support units (not on "medics" or "science vessels", but using the stats of the unit to determine its usage and purpose) or the most dangerous units (air-to-ground would prioritize fire on ground-to-air units) or the most important buildings (using ratios and comparisons to determine this, instead of hardcoding that building A is critical). Technically, it could then be able to react to a lot more situations and would also be adaptable if the fight changes or if the enemy bot has a counter for whatever strategy had been planned. Obviously, a generic bot is harder to build and it might also not be as efficient when compared to singular strategies, but it would be an interesting experiment to make.
I'm with the winning UC Berkeley Overmind team. ( http://overmind.cs.berkeley.edu/ ) We're very excited to have won the competition, and we're hopeful that soon we'll be able to create an agent that can beat the very best humans.
Here's an overview of our strategy. Broadly, our agent always plays Zerg, and its primary objective is to apply constant pressure to our opponents, which will let the agent continually expand to improve its economy. To that end, our agent had three primary tools: a scouting worker that harassed early, zerglings that provided early defense, and mutalisks which basically force the opponent to stay in their base. Our agent would make decisions, based on what it observed, to trade off between these different forces. It might build more zerglings if it sensed more early pressure, or it might skip them altogether if our opponent wasn't going to attack early.
Our choice of mutalisks was deliberate. They are a highly mobile all-purpose air unit that can mass up and cause significant damage in a short period of time. Also, they don't have bounding boxes, meaning that they're more amenable to computer control. That choice proved to be really valuable, because a lot of the opponents seemed to have preferred ground armies. However, there are many other strong units. For example, the other agent in the finals (Krasi0) was truly impressive with its ability to repair units.
Anyway, on our page we have a couple of videos, and we'll have several more by tomorrow (Saturday).