Feel free to answer as many questions as you like, but it would be great if everyone answered everything! These survey answers will be included in the 2015 competition report, so the more info the better. Please feel free to provide external references/links as necessary Bot Name: GarmBot Bot Race: Zerg Author Name(s): Aurelien Lermant Affiliation(s): EPITA (Paris) Nationality(s): French Occupation(s): programming, video games, music, movies, books (These will be listed on the competition website) Bot URL: http://wiki.teamliquid.net/starcraft/GarmBot Personal URL: a.lermant@hotmail.fr Affiliation URL: http://www.epita.fr/ Q: How did you become interested in Starcraft AI? I worked a lot on artificial intelligence at EPITA university. I enjoy programming as a hobby, and I did some AI-related projects (chess AI, image recognition...). When I discovered the SSCAIT community, I immediatly wanted to participate, since I'm also a big fan of the Starcraft games. Q: How long have you been working on your bot? I started working on GarmBot in february 2015. However, it is not a full-time occupation at all : I worked on it maybe like 2 or 3 hours a week on average. I have not been working on it since october 2015, as I wanted to see the results and replays of the AIIDE competition before making more changes. Q: About how many lines of code is your bot? GarmBot is written in Java and is 6701 lines long (not including the BWAPI libraries), with 40 different files. The biggest file is the one containing the drone behaviour : 716 lines. Q: Why did you choose the race of your bot? The Zerg race is the most original of any strategy game I have ever seen, I really like the gameplay and the units. There are also some great advantages for a Zerg bot : all units and buildings regenerate health, and all the production is centered on larvas. They can also take bases for less ressources, making the Zerg a amazing race for a multi-base strategy. Q: Did you use any existing code as the basis for your bot? If so, why, and what did you change? I started from (almost) scratch when writting GarmBot. I used the JavaBot sample provided on the SSCAIT website, which was able to collect minerals, create SCVs and build supply depots. Since Garmbot is a Zerg bot, almost all of the sample bot code was re-written, except the building placement algorithm which is still used. Q: What is the overall strategy/strategies of your bot? Why did you choose them? GarmBot is a heavy macro bot. The main strategy is to take as much bases as possible, and produce a mass of units all over the map. The units don't fight as a group, but act individually and use hit-and-run tactics to compensate for being outnumbered. For example, zerglings and hydralisks use burrow when in danger to avoid getting killed one by one. Air units will attack, then flee any anti-air units. Usually, this results in dealing very little damage to the enemy's army or structures : but it keep the enemy forces occupied, chasing fleeing units or playing hide-and-seek with burrowed units. Making the enemy waste time is very important in this strategy, as Garmbot is taking all bases on the map. Eventually the ressource/production advantage is so overwhelming that the enemy army is defeated by units attacking from everywhere. I choose this very late-game strategy for 2 reasons : - It give more space for improvement. I intent to improve Garmbot as much as possible, and I will continue to work on it in the next months. If it was a simple rush bot, there would not be many improvements to make once the ideal build order is reached, appart from a little more micro-management. With a macro bot, there are a ton of ways to improve it : build different units, research upgrades, micro-manage each type of unit, decision making for expansions/army composition/build order... - It make the games more interesting to watch. It gets a little boring to see matches where one player rushes and wins in 2 minutes before the other started to build military units. It is a lot better to see the two players build armies, fight, and show interesting techniques (spells, drops, harassment...). Q: Do you incorporate learning of any form in your bot? If so, how was it accomplished? GarmBot doesn't have any form of learning. Using learning techniques effectively is quite complex and not always necessary (although some others bots in the tournament are using very impressive learning techniques). This means Garmbot won't have any particular knowledge about its opponent or the map. This can be a strength if Garmbot is facing old opponents that have modified their strategy : Garmbot will always fight based on the information from the current match. Q: Do you use any interesting AI techniques or algorithms in your bot? If so, which? The heart of GarmBot's algorithm is a multi-agent system. This means that each individual unit is independent and makes its own choices. Why : - It gives less bugs. Using a simple army group and commanding all units at once is surprisingly tricky to use effectively. All bots that command a single army have at least some bugs related to it. For example : - How do you regroup all your units ? Unless the bot uses complex pathfinding algorithm, it is not unusual to see individual units getting killed one by one when walking towards the main army. - How to know where the "army" is ? You can compute the mean of every unit's position, but what happens if you have units on both sides of the map : the average position is in the middle, even if no unit present ! You can center the army on a particular unit, but what if this unit gets killed ? - When do you attack or defend ? There are some bots that will retreat every unit to their base if it is under attack, even by a single weak enemy. This means a few enemy units can immobilize the whole army, by forcing it to walk back and forth across the map. I have tried myself to regroup all units in groups to command them, but it was a total failure. It is not suited at all for a bot with a lot of bases all over the map. Q: What do you feel are the strongest and weakest parts of your bot's overall performance? In short : Main strengths : - Macro-management abilities, robustness, spell usage, adaptable army composition. Main weaknesses : - Units not regrouped, bases very vulnerable to attacks Main strengths : - Garmbot's main strength is its macro-management. It will take as much bases as possible during the whole game, build tech buildings and produce as many units as possible. It has specials algorithms for dispatching ressources (buildings/units/upgrades), it will adapt the number of drones on every base depending on the mineral patches available (and if a geyser if present or not). Sending more or less drones to mine gas is decided in real time, based on the ressources needed. - Garmbot is also a very robust bot, as it is able to rebuild destroyed buildings and bases. It has special algorithms to handle drones getting stucked or killed while trying to build something. No base is considered the "main base", so any building can be built anywhere. This can be seen with rush bots that attack only the main base. If they don't check the other locations on the map, Garmbot can build a hidden base and restart from there. In the late game, when a tech building is destroyed, it is usually rebuilt immediatly somewhere else. - Garmbot can build several different units : zerglings, hydralisks, mutalisks, queens, guardians, devourers. But, even more important, the army composition is adapted in real time based on the enemy units encountered. Each different units in the game is associated with an appropriate army composition (example : firebat = 40% hydralisk, 40% mutalisk and 20% guardian). Only zerglings in the enemy army ? Garmbot will only build mutalisks and guardians. Dragoons ? Build queens, hydralisks and zerglings. This helps a lot against bots that build a single type of unit (zerglings, zealots...) and is still effective against enemies with a balanced army composition. It is also done in real time, so if an enemy builds only zealots for 15 min then only scouts, Garmbot will switch to an appropriate response. - There is also at least some micro-management on each unit. Zergling and hydralisks will use burrow, while mutalisks, queens, guardians and devourers will dodge anti-air units. - The following upgrades are researched : metabolic boost, adrenal glands muscular augments, grooved spines ground melee attack (lvl 1-2-3), missile attack (lvl 1-2-3), ground carapace (lvl 1-2-3) This allows the ground army to be a lot more effective in the late game, being able to travel across the map faster is a huge bonus. - Garmbot also uses some spells : Queens will use spawn broodlings whenever they have the energy, if a target if in range (prioritizing high-value units). Parasite is used on the neutral critters of the map to gain additionnal vision. Zerglings, hydralisks and drones use burrow/unburrow to hide from enemy units whenever it is needed. Weaknesses : - Because Garmbot is strong when it has a lot of bases, it is very vulnerable to base destruction. In the early game, losing a single base is a huge setback for Garmbot's economy, possibly leading to losing the game. In particular, Garmbot is very weak against bots that attack around the 8-14 minutes timer. Before 8 minutes, attackers are usually defeated with the zerglings/sunken colonies alone. After 14 minutes, Garmbot is starting to have enough bases so that the loss of one doesn't really matter. Between 8 and 14 minutes, enemy attacks are usually devastating. - Another weakness of Garmbot is facing oponents who attack everywhere at once. Since the bases aren't particularly well defended (1 or 2 sunkens and no military units coming to defend), a small group is usually enough to destroy Garmbot's bases, which allows to kill Garmbot's economy a lot faster. - Drones are very vulnerable when travelling across the map to build exapnsions. The use burrow to hide, but they usually always get killed when they come across enemy units. - Some Zerg units and buildings are not used at all. In particular, Garmbot doesn't use the Overlords for anything else than supply. None of their upgrades are researched, and they will not try to come near cloacked units to reveal them. Q: If you competed in previous tournaments, what did you change for this year's entry? This is the first Starcraft AI tournament I participate in. Q: Have you tested your bot against humans? If so, how did it go? Garmbot played in the bwapi mini tour 4 (19 september 2015). All of its matches were against humans, and it was a defeat each time. Q: Any fun or interesting stories about the development / testing of your bot? I named my bot after the "Garm brood" from the Stacraft campaign, because the orange color of the Garm brood units was my favorite coloring for zerg units. A few month later, I read the Garm brood's lore on Starcraft wiki : by a fun coincidence, it is said to use a similar strategy as Garmbot ! "The Garm Brood was part of the Zerg Swarm's attack wing. The small brood was employed using guerrilla tactics, emphasizing ferocity, speed, and surprise. The minions of this brood excelled at hit and run raids that weakened their enemies' defensive formations. Zasz, the cunning cerebrate of this brood, delighted in preemptive attacks, relying chiefly upon surprise to throw enemy forces into total chaos" (from http://starcraft.wikia.com/wiki/Garm_Brood) Q: Any other projects you're working on that you'd like to advertise? One of my big projects at EPITA was a simulation of combat between AIs in a 3D map. It includes a state of the art on AI in video games. Feel free to look at it here : http://pierre-alban.itch.io/ai-combat Optional Opinion Questions: Q: What is your opinion on the current state of StarCraft AI? How long do you think before computers can beat humans in a best-of-7 match? Humans are still superior to StarCraft AIs, because humans can learn and adapt to new situations a lot better than bots do. Bots are superior in micro-management and multi-tasking, but it is not enough to beat humans. That being said, the bots are progressing fast ! With all the new bots in the tournament and all the learning techniques being used, it is totally possible to have a bot beat the best humans players in a couple of years. Q: What do you feel is the biggest hurdle (technological or otherwise) in improving your bot's AI? It is very hard to test every situation when coding a new functionnality for a bot. There are some situations that only happen on particular maps, against a particular unit, sometimes after 30 minutes of game... I discovered a lot of bugs just by watching my bot playing on the SSCAIT stream. Globally speaking, it is very hard to keep a balance between simpleness and effectiveness. A simple bot means less code, less bugs, and more maintainability. On the other hand, to be more effective, the bot needs to be able to build and use different types of units, use multiple strategies, react to different situations : which means it will be a lot more complex, with more code and more potential bugs. When I'm working on my bot, some of the time is spent to add a new unit or building being built : this is the easy part. Then a LOT of time is spent to try to include it correctly in the bot's strategy and build order, and make sure it didn't break some other part of the code. The bwapi itself is very intuitive to use, however recently I encountered some issues with it. For example, upgrades can't be researched at the greater spire (both the evolution chamber and the spire works). This is probably due to the fact that I'm still using the 3.7.4 version. Q: Which bots are the most interesting to you and why? I like Ximp a lot because its cannon wall/carrier fleet is one of the most original strategies in the tournament, and is very hard to counter. Tscmooz is also a very impressive bot, that uses every Zerg units and spells effectively.