How to Compete
Both the AIIDE and CoG competitions will have the same guidelines for registering, submitting, and competing in the competitions. The schedules and rules for each competition can be found in the menu above.
Be sure to read all of the rules for whichever competition you are submitting to, available in the menu above.
Registration
You must register by the deadline of a given competition in order to compete. All registered bot names and race selection will be made public at the end of the registration deadline, before bot submission.
To register, send an email to Dave Churchill with
the this template: register.txt
Submission
You must be a registered competitor in order to a submit a bot to the competition. The submission must be made in full by the submission deadline in order to compete. Any registered bot that does not submit by the deadline will be disqualified.
When submitting your bot, *please* follow these guidelines for submitting your bot's final version. To submit the final version of your bot, email dave.churchill@gmail.com a single zip file containing:
- A compiled binary version of your bot we will use for immediate testing. (proxy/exe/Java bot files must contain a file named run_proxy.bat which runs your bot - see this section of the Tournament Manager Software instructions for details)
- A folder containing the full source code of your bot (if required)
- A readme file containing compilation instructions, including any environment variables or external libraries (boost, etc) used in your bot, with links to the official download pages for those libraries (we will have the latest version of boost and all versions of BWAPI installed)
- You can find previous bot submissions in the results page as an example
Additional Notes
- DO NOT include BWAPI or large external libraries with your submission
- We *WILL NOT* compile your project with any submitted BWAPI library code as it has to compile with the standard versions available on the BWAPI websites
- If you do not have any additional files other than your compiled .dll and your source code, your submission probably shouldn't be over 5mb, so if your final submitted .zip file is larger than that, go through it and see what it is you are submitting that is so large. For example, UAlbertaBot from 2013's .dll + code submission was 3.1mb when zipped, so yours shouldn't be much larger than that.
- To ensure your bot works on our systems, please test your code on a fresh copy of Windows 10(easiest on a Virrtual Machine) before submitting. Please do not have any code that only works on a specific version of windows, or has any hard-coded directories for includes, linking, or configuration files that we may not have
- Make sure your Visual Studio projects do not contain any links to headers or link to files on your specific machine, for example no linking to c:\users\yournamehere\whatever.h, this will cause a lot of headaches for us. Use windows environment variables to point to libraries if you are using them and tell us which ones you are using somewhere. A *very good* way to test this is to install a clean windows XP virtual machine and try to compile your code on it. However hard it was to compile on that machine, it will be at least 19x as hard for me to do it after all the code is submitted.
Environment Variables / Project Settings
Trying to compile all of your submissions can result in a bit of a headache, due to the number of different configurations in your Visual Studio project files. To make this year's submission / compilation process much easier, PLEASE adhere to the following scheme inside your Visual Studio (and possibly Java) projects: If you are using Windows (which you probably are) create Environment Variables named "LIBRARY_DIR" for each included library. For example, if your bot uses BWAPI and BOOST, you would make the environment variables BWAPI_DIR and BOOST_DIR. Then, inside your IDE's project settings, point your project to these Environment Variables rather than hard-coded directories on your computer.
This will not only make it MUCH easier for us to compile your code, but for you to compile your code as well, if you (for example) change your BWAPI version. All you need to do is change the environment variable as opposed to changing multiple instances of the hard-coded directory in your project. If you stray from these suggested settings at all, please provide the details and a GOOD reason for doing so in your submission's README file.
Competition Rules
The following common rules apply to both the AIIDE and CoG competitions.
BWAPI Version
The official versions of the BWAPI libraries we will use are here, your bot must work with one of these downloads, depending on which you chose when you registered. Your bot MUST be compiled with one of the official release versions of BWAPI to ensure that it does not have any advantage due to API modifications.
Bot Naming
Each bot will be given an in-game name identical to the bot name used during registration. Names will be case-sensitive. No special characters are allowed.
One Bot Per Author
No individual person may appear as an author for more than one bot.
Game Type
The game type for the competition will be 1 vs 1 full game of StarCraft: BroodWar 1.16.1 with fog of war enabled. No cheat code will be enabled or allowed during the competition.
Time Limit
Games will have a 'frame limit' of 86400 frames, to simulate one hour of gameplay. If a game goes this long, it will be stopped and the in-game score will be used to determine the winner.
Bot Time-Out
Make sure that each onframe call does not run longer than 42ms. Entries that slow down games by repeatedly exceeding this time limit will lose games on time. In particular a bot will be given a game loss if one of the following occurs:
>= 1 frames exceed 10 seconds, or
>= 10 frames exceed 1 second, or
>= 320 frames exceed 55ms
Game Speed
All games will be played at setLocalSpeed(0) (fastest setting). Please make sure that your bot functions correctly on this setting. To avoid problems, base your 'timings' on unit counts or currentFrame() and not machine time. The in-game lobby game speed slider will be set to Normal (i.e. latency frames = 3)
Persistent File I/O
Bots will have read access to folder 'bwapi-data/read/' and write access to folder 'bwapi-data/write/', both of which will be in the standard location under the StarCraft root directory. IMPORTANT: File I/O works as follows:
- Before each game, the contents of the server-side read directory for your bot are copied to the client machine under 'bwapi-data/read/'. For the first round of the tournament this directory will be blank since a full round has not yet been played.
- During a game, you have write access to the 'bwapi-data/write/' folder and read access to the 'bwapi-data/read/' folder on the client you are currently playing on
- After the game ends, the contents of the 'bwapi-data/read/' folder are deleted, and the contents of the 'bwapi-data/write/' folder are sent to the server and stored in your bot's server-side write folder.
- WARNING: Step 3 may overwrite previous results if you are not careful in specifying unique filenames for each opponent that you play against.
- After each bot has played each other bot on the current map (one round robin on that map) the contents of each bot's server-side write folder are copied into the respective server-side read folder and the write folder is cleared.
- WARNING: Step 5 will over-write previous round data inside the server-side read folder. Your file output must either be cumulative, or have a filename scheme such that no overwrites will happen in order for your data to be preserved.
- The bot's server-side read folder is NEVER deleted throughout the tournament
- The next round starts, and from step 1 you will have access to your server-side read data from the previous rounds inside the client's 'bwapi-data/read/' folder
Again, due to the nature of overwriting the read folder with the contents of the write folder, your file names should be unique at least to the current opponent. Two popular choices for file naming schemes are:
- Results_EnemyName.txt - Inside this file you store all data about your matches against bot EnemyName. This file will be overwritten every round on the server, so make sure to read its contents each game, and write out the cumulative results into the write folder so you do not lose data after a round
- For example, you can store one line per map played inside this file so you have something like "EnemyName MapName Wins Losses ExtraData", then if you win a game on that map against that enemy, you read in the contents and then output "EnemyName MapName Wins+1 Losses ExtraData+NewData"
- Results_EnemyName_MapName_TimeStamp.txt - If you don't want to have a single file per enemy storing cumulative results, you can instead have a single file per game to store results with a unique time stamp or random number suffix. Please not that this is much slower, as your bot will play thousands of games and then have to process each file in the directory each time. Any time-out due to file processing is still a timeout and you will get a game loss. I strongly recommend the first option.
Software Rules
- Programs that attempt to cheat will be disqualified. Bots must disable the perfect information flag in the full-game tournament
- Bots that perform malicious behavior will be disqualified and banned from all future contests. This includes but is not limited to: Intentionally crashing StarCraft, Installing worms/viruses/malware on the host machine, Malicious utilization of resources such as sockets, files, zombie processes, Spamming the in-game console.
- Bots will be run on bare metal hardware running Windows 10. Entries must be tested on native Windows 10 before submission. If you have any Windows-version specific features we highly recommend you remove them. We will not be held responsible for entries that crash StarCraft due to our configuration of the system.
In-Game Rules
- Programs that attempt to cheat will be disqualified. Bots must disable the perfect information flag in the full-game tournament
- Games in which an agent crashes StarCraft will be counted as a loss
- Bots are not allowed to pause the game, games in which a bot pauses the game will be counted as a loss
- The following StarCraft bugs/tricks are permitted: Plague on interceptor, Units pressed through, Drops to defuse mines, Mineral walk, Manner Pylon, Lurker hold position, Observer over turret, Stacking air units.
- All other bugs/exploits are forbidden. Bots caught attempted these exploits will be disqualified. This includes but is not limit to: Flying drones and templars, Terran sliding buildings, Stacking ground units, Allied mines, Gas walk to get through blocked entrances or ramps