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: tscmoo Bot Race: zerg Author Name(s): Vegard Mella Affiliation(s): Nationality(s): Norway Occupation(s): (These will be listed on the competition website) Bot URL: https://github.com/tscmoo/tsc-bwai Personal URL: Affiliation URL: Q: How did you become interested in Starcraft AI? I can't recall. Why wouldn't I be interested? :) Q: How long have you been working on your bot? About a year. Q: About how many lines of code is your bot? Global Summary (1.27 MB, actual: 1.10 MB) ----------------------------------------------- Number of lines of code: 30057 Number of directive lines: 142 Number of empty lines: 4345 Number of comment lines: 2840 Number of empty comment lines: 85 ------------------------------------------- Total number of lines: 37469 ----------------------------------------------- Q: Why did you choose the race of your bot? Lack of zerg bots at the time, though the goal is to play every race. Q: Did you use any existing code as the basis for your bot? If so, why, and what did you change? No, it is written from scratch with no external dependencies other than BWAPI. Q: What is the overall strategy/strategies of your bot? Why did you choose them? My bot first picks a "main" strategy, then depending on the strategy it might choose between a 9 pool or 10 hatch opening, then it might pick a follow-up mid-game strategy if the main strat ended early (like a rush that did not kill the opponent). In the end it runs either lategame or lategame2. These are the strategies that were enabled for AIIDE 2015: z 5pool - all-in 5 pool ling rush z 9pool - 9 pool opening z 10hatch - 10 hatch opening z 10hatch ling - all-in 10 hatch into mass zerglings, then hydras z 13pool muta - super fast mutalisk rush, low econ kind of all-in z 2hatch muta - 12 hatch (9 pool in zvz) into economical and safe 2 (or 3) hatch muta z vp hydra - economical mass hydra, mainly for zvp z econ2 - good all-around strat that just tries to survive, mainly for zvt but works decently in zvp too z 3hatch spire - 3 hatch spire, mainly for zvt z econ - older version of econ2, can't recall why it's enabled z hydra into muta - economical mass hydra into muta switch at 110ish supply, mainly for zvp zvz - old zvz strat which tries to make mutas z 9pool -> 10 hatch ling - same as 10hatch ling, but makes pool before hatchery (for zvz) z 9pool speed into 1hatch spire - as it says z lategame - lategame strat z lategame2 - also a lategame strat, maybe slightly better The strategies decide what to build using lots of conditional logic that decides the priority of what to build next. Most of them react to what is scouted, though most things are decided based on scouted army units and less on tech buildings. The actual build order is automatically generated based on tech prerequisites, resource income rates etc. They can also decide when to attack, expand, research upgrades, scout etc. If you want some information about techniques used etc. then.. A little about how my bot decides where to send each army unit when attacking or defending: My bot separates all enemy units into distinct combat groups. Enemy units that are near each other are added to the same group, though one unit can only be in one group. It then sorts each group by a value which is roughly worker units are super valuable and army units have negative value (unless they are attacking our base, in which case they're super valuable too). Then it uses a combat simulation to determine how many army units to assign to each group. It essentially assigns enough units to beat the enemy units. I use my own pathfinding to make sure it only sends units to a group that it can actually reach. If a unit must go through another combat group to reach the target group then it will not be assigned. If my bot has surplus units left after assigning enough units to each group then the rest will simply be sent to the largest group. The result from this is that my bot will assign units to attack multiple locations at once and it will prioritize attacking workers or small groups of enemy units. It will also constantly reschedule units by demand; if one of our bases are attacked it should send enough units to defend, but it will not pull its entire army back unless it is needed. At least in theory. Despite not actually wanting to engage the enemy army, it will often do so regardless, simply because they are blocking the path to any more valuable target, or because enough units has been dispatched to them. Each combat group also generates a threat area around itself, in a radius around each unit slightly longer than its attack range. This is primarily used when units are retreating; for each group the combat simulation is used to determine if our units should attack or retreat. If they retreat then each unit is sent to the edge of the treat area. With large amounts of units, this will create a concave of our units towards the enemy units, where they might regroup or run back and forth like idiots and suffer more losses than necessary. When my bot has much less units than the enemy in that group, the result is often that the opponent bot will chase after our units and they will be led on a sightseeing trip around the map. Q: Do you incorporate learning of any form in your bot? If so, how was it accomplished? My bot has a variety of different strategies that it can execute. The strategy to execute is chosen randomly using weights, and the weights are adjusted based on previous match results. It's pretty simple but I guess it could be called learning. Q: Do you use any interesting AI techniques or algorithms in your bot? If so, which? I don't think so... Q: What do you feel are the strongest and weakest parts of your bot's overall performance? The main strength is the ability to do lots of different strategies, with the hope that they cover each others weaknesses. The biggest weakness might be ability to defend various very early all-in rushes, especially with regards to proxies. Q: If you competed in previous tournaments, what did you change for this year's entry? Q: Have you tested your bot against humans? If so, how did it go? Sure. Win some, lose some. Since humans do some unique builds, it can be difficult to ensure my bot beats it. Need a bot to test and develop against. The main difficulties against humans are early rushes and turtle styles. My bot can be bad at attacking into well fortified positions. Q: Any fun or interesting stories about the development / testing of your bot? Latter part of https://www.youtube.com/watch?v=tacWUlBdwrI. Defilers consuming everything and plaguing things they probably shouldn't. The behavior was amusing so I haven't changed it, though the style of play of my bot has unfortunately changed to where such situations are less likely to occur. Q: Any other projects you're working on that you'd like to advertise? No. 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? I think even very good players will struggle to beat the best bots as long as they don't exploit their weaknesses. Of course that's not entirely fair, but currently bots tend to be quite static and unable to adapt. Q: What do you feel is the biggest hurdle (technological or otherwise) in improving your bot's AI? The starcraft engine is complex and a great deal of code is required for a bot to play. Games can last a long time and complex bots can be resource (cpu) intensive. In addition the method by which starcraft is ran is inconvenient for running multiple consecutive games quickly. This means any learning algorithm that requires hundreds or thousands of games would be impractical. Either way, more learning is the direction my bot needs to go to really improve. It needs to predict what the opponent is going to do and counter it. It needs to quickly determine what works and what doesn't, why and how to fix it. How to implement that I'm not quite sure. Q: Which bots are the most interesting to you and why? Skynet, icelab, krasi0 and killerbot because they've been extremely valuable practice partners :D In particular Skynet's PvZ is very strong. Garmbot is also interesting because it's actually a macro zerg for once, yey.