※Base Rules come from AIIDE StarCraft AI Competition Rules
We will get “Seed Number” from each participant at Submission Questionnaire. Accumulated Seed Number will be used as “Random Seed” to select maps.
5 maps will be selected randomly from the Map-pack and used in the competition.
We will randomly select one 2-players map, two 3-players maps and two 4-players maps.
We will use Java Standard Random Generator to choose maps.
The only game type for the competition will be 1 vs. 1 full game StarCraft: BroodWar 1.16.1 with fog of war enabled.
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.
- This year competition is in two stages.
- The 1st stage will select top half from the all entries. The results will not be used in the 2nd stage.
- In the 2nd stage, only the top half entries will compete to produce the final rank.
- The final ranking will be determined just based on the 2nd stage results.
- In stage 1 of the competition, all entries will participate in a round-robin tournament. Top half will advance to the second stage (for example, 3 best entries from 5 submissions). In stage 2 of the competition, the top half will compete in a round-robin tournament. The final rank will be given based on the stage 2 results.
- The file I/O will be deleted between the 1st and 2nd stages. The results of the 1st stage will not used in the 2nd stage competition ranking.
- The two stages will use a round-robin tournament style with as many as possible.
- The two stages will be set as the same number of rounds.
Persistent File I/O
File I/O will work the same way as AIIDE StarCraft AI Competition Rules. You 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.
- Any reading or writing of other directories is forbidden. You have a 1GB limit for all files in the read directory. If you go over this, it will be deleted.
Any reading or writing of other directories is forbidden. You have a 1gb limit for all files in the read directory. If you go over this, it will be deleted.
All source code and data files needed to compile and run the competition entries will be made available to the public as free software with a license that is compatible with the GNU public license.
We received a variety of opinions on this matter and decided, in the end, that to foster research it is best to have the next generation of programmers stand on the shoulders of giants, rather than re-invent the wheel. Please note, that program authors retain the copyright of their code. Also, releasing code as free software will allow new authors to take code from the previous competition and improve it. This has worked well in the past in the International Planning and ORTS competitions.
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.
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:
In a match a bot LOSES (immediately) on time iff
>= 2 frames exceed 10 seconds, or
>= 10 frames exceed 1 second, or
>= 200 frames exceed 55ms
We reserve the right to reject entries if we feel the authors attempt to obfuscate their code (like using silly or deceiving variable names or encoding their algorithm in a 10MB FSM transition matrix stored on disk). Authors who are concerned about the source code leaking information that has not been published yet, are encouraged to submit a technical report to their institutions that describes their entries prior to submitting the code.
To simplify this process we ask authors to only use standard development tools, that can be invoked via shell commands (such as Visual C++). In case remote access is not feasible, we will need detailed instructions for building each DLL.
Conflict of Interest
Organizing AND participating in events like this can be tricky, in particular if some choices, like which maps we use, are made “randomly”, and we get access to competitors source code prior to running the tournament.
We address these problems as follows:
- For choosing maps we will use the standard Java pseudo random number generator that will be seeded by the XOR combination of “random numbers” all program authors provide when they submit their entry. Our random number is (TBA).
- Before accepting zip files, we will distribute the SHA-1 check sums of our zip files to all participants. This way, participants can be confident that we don’t change our entry after seeing their source code.
- No entry fee
- Maybe some prizes
- All replay files and source code will be made publicly available after the contest
- StarCraft Brood War version 1.16.1 will be used for all games
- StarCraft is a trademark of Blizzard Entertainment
- Blizzard will not held liable for any damage caused
- We will not be held liable for damage caused. This includes getting your CD key banned on Battle.net due to running a 3rd party StarCraft launcher
- Entries must use the version of the Brood War API provided on this site
- 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 (Using 100% RAM and 100% CPU is permitted)
- Spamming the in-game console
- 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 will be run in a native Windows XP SP3 environment.
- Entries must be tested on native Windows XP SP3 before submission
- We will not be held responsible for entries that crash StarCraft due to our configuration of the system
- Games will be run in a semi-automated fashion.
- Internet access is forbidden, bots will be run on a LAN
- Only 1 entry is permitted per affiliation. However, the different lab in affiliation is permitted.
- Bots must not slow down the game speed
- Games will be run on the FASTEST setting, which is 24 fps
- See the details on writing a remote process for your AI here
- Games in which a bot slows down the game speed significantly will be counted as a loss
- Participants are required to disclose all source code and to provide a short description of implementation details.
- Entries are only allowed to make use of free software components – including BWTA and BWSAL
- Entries are allowed to utilize a single socket to communicate with a remote process
- The remote process must be a 1-click to run application (e.g. we are not going to install a LISP compiler on the host machine to run a bot)
- Additional details on writing a remote process are available here
- 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
- Bad mannered in game behavior is discouraged, but not forbidden