You are here




Quoridor is a strategy game where each player has a pawn. The goal of the game is for the players to move their pawn to the opposite side of the board. One characteristic of the game is that the players have walls at their disposal that they can place on the board to slow down their opponents.


For the AI course (teacher: Yves Deville, teaching assistants: Jean-Baptiste Mairy and Cyrille Dejemeppe), students had to develop artificial agents playing Quoridor. A contest between these agents was held.

Students formed groups of two. Each group was responsible to produce an AI agent for the contest. This AI agent would play Quoridor autonomously. For this, the students were allowed to use any technique they wanted. Of course, unfair play (such as overloading the CPU when another AI agent is computing its move) was forbidden. For the competition, the AI agent had a time credit of 20 minutes per game, meaning that the time repartition for each individual move was up to the agent.

We received 29 valid submissions for the contest. The agents were divided into 4 pools of agents. Inside one pool, each agent played four matches against each other agent. For each match won, the winner got 1 point. The four first agents of each pools were selected for the playoffs. The total time taken by the agents has been used as a tie breaker: in case of equality, the quickest player was selected.

The 16 selected players were partitioned in groups of two for the playoffs. The format of the playoffs was “best-of-four”. Indeed, within each group, four matches were played with each agent being the beginning player twice. In the case of an equality, the fastest player was selected as winner. The winners of each playoff went to the next level, until having a final between two players. A third and fourth place playoff was also played to determine the third and forth places between the losers of the semi-final.

Here is the video of one of the games for the final match. In this video, the blue player is the agent of the group 10 (Joseph Lange, Quentin Devos) and the red player is the agent of the group 25 (Fabian Souris, Sebastien Tack).

The traces (i.e. record of the games) of games performed for the contest are available for download at the bottom of the page. To replay a game, use the following command:

python3 -r TRACE

Replace TRACE by the path to the trace file of the game you wish to replay.


Position Students
1 Fabian Souris, Sebastien Tack
2 Joseph Lange, Quentin Devos
3 Mathieu Bourgeois, Marco Guido
4 Romain Vanwelde, Olivier Colson

The winning group and the second group received prizes kindly sponsored by Case Départ.

Match against Human

The winning AI was challenged by Prof. Vincent Blondel, which is an occasional player of Quoridor. After a thrilling game, the AI won the game!

The best AI playing against Prof. Vincent Blondel   The best AI playing against Prof. Vincent Blondel

The best AI playing against Prof. Vincent Blondel   The best AI playing against Prof. Vincent Blondel

Prof. Vincent Blondel (Dean of the Louvain School of Engineering) Playing against the best AI Player of the 2013 Contest

Time-lapse of the Event

Here is a time-lapse of the full event.

The code

The code of the game has a GPLv2 license and is downloadable at the bottom of the page. Python 3.x is required.

To play against an AI, use one of the following commands:

python3 AGENT human
python3 human AGENT

Replace AGENT by the number of the port on which you have launched an agent. You can get a list with python3 -l. Note that many agents were designed to run with a time limit of 20 minutes and may be broken otherwise. Use the -t 1200 option to enforce such time limit. Human players are not affected by the limit.

There are also many other options. See python3 -h for an exhaustive list. Each agent can also be launched as a small XML-RPC server with python3 -m agents.AGENT -p PORT. This was used to make the agents play against each other in separate processes and without sharing source code.

Package icon quoridor.zip1.04 MB
Package icon traces.zip870.22 KB