How to Run a Badminton Tournament
It is October 23, 2000, as I jot this down. For many years now I have
been involved in organizing local and national tournaments in our
Gym, and with the help of many others this has generally been
considered a success. Over the years we have assembled a large number
of notes and now computer programs that may be of some use to the community.
Right now I am in the middle of running the annual DC Open, where
we typically get about 150 or so players from mostly Region-I of the USAB.
Here's an outline of the whole process, from registration to post-tournament
reporting, in terms of TourneyTools, a suite of programs and scripts
to aid in running such a tournament.
I hope to flesh this out sometime later, after the tournament
no doubt. The notes will be a bit technical, and still
incomplete and opaque in places:
- assume you have a webserver running
- write a registration form, e.g. using html form. Look at
this for one of my recent examples.
- write a cgi-script that will process the above form by sending
a set of keyword=value pairs via an email message. See my
example dcopen.c, a small C program
that compiles with the apache source-code, but needs their util.c
to complete the link.
- Here is a version written in perl, that we used for the
senior nationals: seniors.pl. It
contains a few stupid redundant buttons (e.g. number of events,
sum/sum1/sum2) which should have been computed from the entered
- manually, or via procmail, place the incoming emails in a special
mail folder for further processing. this mailfolder will be
- Here comes the dirty work: players cannot spell their own name,
let alone that of their partner. some don't even know first from
last name (that's cultural to begin with), they are not consistent in
use of upper, lower or use of capitilization. some of it can
be programmed, but most not. Basically you will need to edit this database.
To allow users to edit their own entry after submission is
asking for trouble. An expert needs to do this. A set of scripts
(described below) will help identifying these problems.
- A set of scripts and programs will do most of this checking.
For example, it will create a lists of each event with the
teams, and in the case of a (mixed) doubles,
checking if player A and player B both registered with each other
as partner, and encoding errors in the output. In
this example you can see how it came
raw out of the database.
- Pairs of teams, where this is possible, are made up, and a
complete list of teams is studied by the seeding committee. They
will come up with a 1st, and 2nd seed, and depending on the size
of the draw, a 3/4rd seed and shadow seeds for the 5th-8th places.
The remainder of the players is more-or-less randomly
(resolving some geographic conflicts) sprinkled
into a (predefined set of points of the) draw.
Here you can see the sorted list, I've
added some comments in the form of lines that start with
the # symbol.
- A program makedraw
turns this ranked list into a draw.
This is again a
simple ASCII file, but now containing the location
of the players in this draw. Again, you can comment your
files for personal usage. Version 0.8 (march 2002)
now correctly implements
the IBF rules for placing byes in the draw for any
arbitrary size draw using a nice little recursive
formulae I happen to empirically derive. See comments
in the code.
- A program drawplot
turns a draw into a human readable plot,
which can be annotated and filled in during the tournament at the
desk. Normally we now keep a laptop/computer at the desk, and
as matches have been played, fill them into this ASCII file.
Once all the draws have been filled out, drawplot can
also compute some simple statistics, such as the number of
matches played etc.
- The drawplot program can also generate a list of all
players that lost in the 1st or 2nd round. This has always
been the way we create A/B/C/D drop-down events, and can
be very rewarding for the players, but is a major time sink
for the tournmament desk. Now creating a list is just a snap.
The list has only to be sorted by strenght of the players,
and fed into makedraw to create the dropped down
- Another nice idea is the express checkin. Those who pay in
advance, give the correct USAB number, and sent in the consent
form, will get priority checkin, and receive a red card.
All other players need to be processed at registration
time before they get the red card. Only red card holders
will be allowed access on the courts. The red card contains
also their events. It can also be used for other purposes
(e.g. a lottery ).
- Here's a writeup of some of the background of
tournament math, the following two
tables are explained in more details in this writeup:
Number of matches in a full 5 category tournament in various
styles of tournament.
The software mentioned above is available upon request
(the source code links listed here could be outdated),
but usage not well documented
at all at this time. There are quite a few things you will need to
TourneyTools runs on Unix (tested on Solaris and Linux). You need the
NEMO package for the user
interface, and the
plplot graphics library to link the
two C programs. A number of shell and awk scripts simplify running
the tournament in real-time, including live updates to the web if you
desire. (see below for the updated python procedures)
| N || 2N-5 || 3N-10 || 4N-20 ||3N-20 || 3N-5
| 4 || 3 || - || - ||- ||-
| 8 || 11 || 14 || - ||- ||19
| 16 || 27 || 38 || 44 || 28 ||43
| 32 || 59 || 86 || 108 || 76 ||91
| 64 || 123 || 182 || 236 || 172 ||187
| 128 || 251 || 374 || 492 || 364 ||379
The old set of awk, perl and shell scripts have been replaced by a far more
useful and powerul set of python scripts. These were used for the last
dcopen and njopen and will be explained here shortly.
I have a description here, which is part of the
TourneyTools CVS module you can grab via
- DC Open: an annual event
- Regional and National Collegiate Championships (1991?, 1998)
- The first ever BCD Nationals (1992?)
- National Senior Championships (1996, 2002)
- Sharon Cup (twice)
- Thai Open (50yr reign of Thai king)
Last updated: 8-sep-06 PJT