Tabletop Games Competition: Pandemic
!!! WINNER PRIZE: $500 (Sponsored by IEEE CIS)
General Information
Pandemic: a collaborative 2-4 player game where players have to work together in order to eradicate 4 types of diseases. Pandemic features partial-observability, reactive turn orders, asymmetric roles and long term planning. It is one of the most challenging games in the TAG framework and none of the baseline agents can solve the full game without carefully crafted domain knowledge.
The objective of the competition is to submit an agent that performs well across multiple variants of Pandemic. The test configurations are not going to be too different from the original game, they are aimed at providing different levels of difficulty by changing some parameters such as #epidemic cards, #players. The best entry is going to be determined by the overall score accumulated on the hidden set of game configurations.
The competition features 2 rounds from which the first one is optional, but can be a great opportunity to see how your agent does on the test set.
- Programming language(s) recommended: Java.
-
Keywords: collaboration, planning/search, board games, forward model, strategy games
- Active Codebase: “pandemic-competition” branch in TAG repository
- Class to run for testing: games.pandemic.PandemicGame.java
- How to play in TAG GUI: Pandemic GUI Description
Timeline
-
April- Training configurations released. Now available here!
- June 3rd - First round submission (optional)
- June 24th - First round results released
- July 29th - Final submission
- August 24th - Winners announced at IEEE CoG 2022
Development
- A set of “training” configurations are provided which are similar to the test set to help in the development of your agent.
- The competition evaluation setup can be found under the
pandemic-competition
branch ingames/pandemic/PandemicGame.java
. Note that this branch may change and it is expected to merged into the master branch soon. - It’s recommended you add an element to the
players.PlayerType
enum for your agent with the correct constructor to be used for the tournament. This will allow you to quickly test it in the competition setting and check its ranking against other agents in the framework using therunCompetition
function ingames.pandemic.PandemicGame.java
.
Submission
- Your agent should have a main
Java
file that extends fromAbstractPlayer
. You can use other classes contained within your agent’s package. - You may use external Maven packages.
- No changes to the framework are allowed. Report any bugs here.
- File I/O is allowed.
- More details soon!
Please submit your agent’s source code as a zip
file to tagframework@gmail.com with instructions on how to set it up.
Evaluation
- We are going to follow the Pandemic Survival rules. The players are going to be evaluated on the same seeds and some event cards that reshuffle the decks are removed to reduce randomness at evaluation.
- The evaluation is done on a set of held-out configurations (2-4) players. All entries get evaluated on all configurations and points are awarded based on the highest win rate with several tie-breakers:
- How fast you win (#turns)
- Most diseases cured
- Fewest outbreaks
- Fewest cities that are about to outbreak
- Fewest cubes on the board
- Most diseases eradicated
- All evaluation is going to be done by duplicating the entries for each player in the game (entries are not going to be mixed with each other).
- Points are going to be awarded based on ranking for all hidden configurations.
- The final ranking is determined by the entry with the highest overall score.
The game configuration can be defined in a JSON
file. The original Pandemic setup is shown below:
{
"class" : "games.pandemic.PandemicParameters",
"loseMaxOutbreak" : 8,
"nCardsForCure" : 5,
"maxCardsPerPlayer" : 7,
"maxCubesPerCity" : 3,
"nEpidemicCards" : 4,
"nCubesEpidemic" : 3,
"nInfectionCardsSetup" : 3,
"nInfectionsSetup" : 3,
"nCubesInfection" : 1,
"nInitialDiseaseCubes" : 24,
"survivalRules" : true,
"player0Role" : "Any",
"player1Role" : "Any",
"player2Role" : "Any",
"player3Role" : "Any"
}
All the released configurations can be found in data/pandemic
.
Pandemic parameters
loseMaxOutbreak
: The maximum number of outbreaks before game over (default 8),nCardsForCure
: The number of city cards required to cure a disease (default 5),maxCardsPerPlayer
: The maximum number of cards a player can hold in its hand (default 7),maxCubesPerCity
: The maximum number of disease cubes a city can hold (the next time one is added, an outbreak occurs; default 3),nEpidemicCards
: The number of epidemic cards in the Player deck (default 3),nCubesEpidemic
: The number of disease cubes added to the city of the bottom card in the infection deck during epidemic infection (default 3),nInfectionCardsSetup
: The number of infection cards to draw during setup for each “city infection” step* (default 3),nInfectionsSetup
: The number of steps to have during the infection setup (default 3),nCubesInfection
: The number of infection cubes to place when a city gets infected (default 1),nInitialDiseaseCubes
: The number of disease cube tokens in the game, per colour (if there are no more disease cubes to place the game ends; default 24),nCardsDraw
: The number of cards players draw at each turn after their actions (default 2),survivalRules
: Whether the survival rules are active or not (default true),player0Role
: Player 0’s role (available for all players 0-3), possible roles:- “Any” (role is randomly assigned from all others)
- “Scientist”
- “Quarantine Specialist”
- “Researcher”
- “Dispatcher”
- “Contingency Planner”
- “Medic”
- “Operations Expert”
* During setup there is a phase when cities get infected, in the original rules this happens 3 times, with 3 infection cards being drawn at each step. The associated cities receive 3 disease cubes in the first step (for 3 random cities), 2 cubes in the second step (for 3 random cities), and 1 in the final step (for 3 random cities). The nInfectionSetup
parameter controls how many steps there are during this infection setup, and the nInfectionCardsSetup
parameter controls how many cards to draw at each step.
Getting Started
- Follow the instructions and clone TAG from Github
- Read about the existing AI players and how to create one in the TAG wiki
(Image by: wombo.art, Prompt: "Tabletop Games Competition: Pandemic")
Tips
- Reuse agents from the framework (and optimise their parameters): Monte Carlo Tree Search, One-Step Look Ahead, Random Mutation Hill Climber.
- Customise and tune heuristics.
- Write rule-based agents.
- Add new agents, e.g. Rolling Horizon Evolutionary Algorithms.
- Use macro-actions / strategy planning in your agents.
- Experiment.
- You may design your own game configurations to augment the training set.
- Join the TAG discord!