Felo calculates Felo ratings for fencers. Felo ratings give a good impression about a fencer's fencing strength. The program is intended for fencing groups for having an additional incentive, or even for having a criterion for team selections and seedings.
Quite reliable ratings for a couple of fencers is already possible after a few intensive training days. There is no real upper limit. The only thing necessary is that the results of as many bouts as possibly must be collected and typed into the computer; the calculation itself is very quick.
The program can be used conveniently through a graphical user interface. Additionally, for the enthusiasts among you, it is possible to use just the core of this program in order to build own applications around it, e.g. for updating a club webpage automatically.
The Felo program is Free Software. In particular, this means that it can be distributed freely, and everybody is allowed to download the source code and to modify it. Its author, however, would be very happy if you – in case you use the program – send him a postcard (T. Bronger, Lochnerstraße 7, 52064 Aachen, Germany; please include the RWTH fencers in your greetings, we are glad to hear from fellow fencing groups). Additionally, you can help by providing a translation to a foreign language.
This manual also exists as Collection of HTML files (also zipped), as one single HTML page, and as PDF file.
This manual is about the Felo program which allows to estimate sport fencers in an objective manner. It is inspired by the Elo rating system in chess.
Copyright © 2006 Torsten Bronger <email@example.com>.
This documentation is Free Software; you can distribute it and modify it freely under the terms of the MIT license.
==================================== Alexander 1600 Julia 1400 Christian 1600 Mike 1300 ...
The initial estimates typically lie between 1300 and 1800 points. The greater, the better the fencer.
==================================== 2006-05-01 Alexander -- Julia 5:3 Alexander -- Mike 5:1 Julia -- Mike 5:3 Julia -- Alexander 1:5 Mike -- Alexander 2:5 Julia -- Mike 5:10 Alexander -- Mike 9:10 2006-05-08 Christian -- Mike 10:5 ...
Dates and result must be separated by tab stops <Tab>, and opponents by two dashes.
Felo ratings are a wonderful new method to estimate the strength of sport fencers, without this annoying luck component which is typical of elimination tournaments and single bouts. The new Felo rating is calculated after every training day. Thus, it is always present and up-to-date. As a result, the fencer has a quite clear impression about how good he or she is currently. Whithin a group, the Felo ratings are very accurate, however, they can even be compared globally.
The underlying idea isn't new. It is inspired by the Elo ratings in chess. There, they have been used for 40 years for determining the official word ranking list, which works terrificly. Not only that it yields a plausible ranking, it also allows for precise calculations of chances in upcoming chess matches.
Over the years, the Elo ratings have been adapted successfully to other sports such as Go, college football, and international soccer. With the Felo program, they can now be used in fencing, too. “Felo” is nothing else but “fencing Elo”. In contrast to other Elo sports, Felo ratings take also the exact bout result into account. Therefore, a 15:14 win is rated lower than a 15:0. This sounds obvious but in chess, there's only win, loss, and draw.
In typical leisure fencing groups, the Felo ratings will be between 1300 and 1800. Here is a rough overview of how Felo ratings should be interpreted:
The tables shouldn't be taken too seriously because there isn't much experience with Felo ratings so far.
If you have problems or questions regarding the Felo ratings in general and the Felo program in particular, there are the following places where to ask:
Moreover, firstname.lastname@example.org is the email address of the current maintainer of Felo. So in case you want to become a co-developer ...
By and large, Felo is – sigh – the product of a lone fighter so far. (Please no pity, it was fun.) However, I did have some help from others. Help still is welcome, just have a look at the Felo translation guide.
Start the Felo program. This opens the program window with an empty editor area. There you can enter the Felo file. The Felo file contains all fencers and bouts of a fencing group for which Felo ratings should be calculated. Over time, the felo file will grow further and further while new bouts are continually appended to it.
At the moment you probably don't know yet how a Felo file looks like. No problem. Just click an the menu “File” – “New”. This loads a sample Felo file into the editor:
A Felo file consists of three parts:
These three parts are separated by lines made of equal signs (their length is irrelevant). Let's have a look at what the parts contain:
Every parameter is in a row of its own, with two columns. In the first column, the name of the parameter (e.g. “groupname”), and in the second column, the value of this parameter (e.g. “foil”) is given.
You may well leave the parameter part empty. In this case, Felo assumes
default values which will be sensible mostly. For more info, see List of all parameters.
An important feature is that all fencers whose names are put in
parentheses ‘(...)’ won't get a Felo number. This is for fencers
who are afraid of knowing their fencing strength, or who are concerned
about their privacy. Nevertheless, their bouts should be included
anyway because it helps with calculating the other's Felo ratings,
unless of course they object to it.
The opponents must be given in the form ‘first -- second’, i.e. both fencers are separated by two dashes.
|Important: In Felo files, columns are separated by tab stops <Tab>. It doesn't matter how many, but it must be at least one.|
You may add comments at arbitrary places in a Felo file. For example, you may mark bouts for which you'd like to double-check the result, or you may mark places where a couple of bouts are still missing. Lines with commens start with a ‘#’ sign. Felo ignores such lines completely.
Most of the time you will enter bouts. There are a couple of further things you should know about it. In principle, the format of a bout is very straightforward:
2006-12-24 Jesus -- Gabriel 15:3
The three columns are separated by tab stops <Tab>.
If you have a sequence of bouts of the same day, only the first one needs to have a date. This makes the bout list somewhat clearer:
2006-05-01 Anakin -- Elmer 5:3 Anakin -- Wile Coyote 5:1 Elmer -- Wile Coyote 5:3 Elmer -- Anakin 1:5 Wile Coyote -- Anakin 2:5 Elmer -- Wile Coyote 5:10 Anakin -- Wile Coyote 9:10
If you know the chronological order of the bouts of one day, you can be very fussy and add a so-called day index to the date, counting from 1:
2006-12-07.1 Peter -- Mike 15:12 2 Peter -- Julia 13:15 3 Julia -- Mike 8:15 4 Mike -- Max 10:15
(Bouts without an index get the index `0' internally.)
Every single bout within a team relay match is a quite ordinary single bout – so why not use it for the Felo rating. Unfortunately, it happens that a strong player beats a weak player with an extremely high result, say, 18:1. Mathematically, this doesn't effect the fairness and reliability of Felo ratings, however, beginners could become reluctant to take part in a team match at all. Therefore, you can mark team bouts with a ‘*’:
2006-10-12.1 Anakin -- Elmer 5:0 * 2 Wile Coyote -- Anakin 3:10* 3 Wile Coyote -- Elmer 5:5 * 4 Anakin -- Elmer 8:0 * 5 Wile Coyote -- Anakin 3:10* 6 Wile Coyote -- Elmer 3:5 *
Such bouts are weighted like a 5 point bout, no matter of the result. Weighting them not too highly probably is a good idea anyway since team matches seem to follow their own rules.
Foreign fencers are fencers who belong to another club or college (for example) but they visit the local group. They may also be fencers you meet on a tournament. Be that as it may, they have a current Felo rating, yet they are not listed in the Felo file. It wouldn't make sense to add them since they fence in another group normally, so you cannot keep track of their Felo rating.
Despite this, bouts with them should be used in the calculation:
2006-10-14 Anakin -- Riker <1764> 0:5
Thus, you give their Felo rating (hopefully they don't fib about it) in angle brackets ‘<...>’. You can add their name, too; the Felo program doesn't care.
This works in both directions of course. If a fencer of your group reports to have won in another group or on a tournament against a 1452 fencer 15:11, you can add it accordingly.
By the way, it may be appropriate to mark bouts with foreign fencers with a ‘*’ as well because their Felo rating is not as credible and/or compatible as a local Felo rating.
Calculating the current Felo numbers is almost trivial. Click on the menu “Calculate” – “Calculate Felo ratings”. A window with the Felo ratings table for the current group opens. Freshman are excluded from this list, see Estimating freshmen, as are fencers who doesn't want to have a Felo rating.
By clicking on “copy to clipboard”, the table is copied to the Windows clipboard in a form which can easily be inserted into Word or Excel, in order to make it fancier, or to print or archive it.
The simplest way to tell all fencers in the group their Felo ratings is to publish in on a Web page. How to get webspace and how to manage it is beyond this manual, however, the Felo program can help you with generating the Web page itself.
Click on the menu “Calculate” – “Generate HTML”. The following dialog window opens:
First you should check whether the folder Felo wants to write the Web page makes sense. Per default, it is the folder of the Felo file. You can set this folder explicitly with the parameter “output folder”. For example, you can say in the parameters part of your Felo file
output folder C:\Documents and Settings\myname\My Files
Then all Web-relevant files are written to your “My Files” folder.
But let's go back to the dialog window above. When you click on “Okay”, the HTML file with the Felo ratings list is written to the given folder and – in case your marked the checkbox – a preview window is displayed.
A special feature is the generation of plots on which the fencer can see the chronological development of his or her Felo rating. Attention: Gnuplot, Ghostscript, and ImageMagick must be installed so that this works, see Installation of auxiliary programs. On the screenshot below you can see the whole picture, i.e. with plot.
At the same time, Felo reports in an extra windows which files must be uploaded to the Web server.
By the way, the HTML file includes a CSS stylesheet called felo.css. If it exists, it influences the whole layout of the Web page. I cannot discuss it in further detail here, people capable of CSS will know what to do anyway.
There are two quite different situations where it is necessary to estimate an initial Felo rating: First, when the whole fencing group must get initial values, and secondly, when a freshman without a Felo rating arrives at a group with Felo ratings.
Estimating the initial Felo ratings for a fencing group is the only tricky part when using Felo. Fortunately, it has to be done only once. It is necessary because the Felo system can only calculate changes in the Felo rating, hence the initial value must come from somewhere else.
So, the starting point is a bunch of fencing Felo-virgins. Somebody of the group who is trustable must estimate everybody with preliminary initial values. This shouldn't be too critical since Felo will recalculate all numbers anyway; more or less, it is only about determining the mean fencing strength of the group.
I recommend to use the table in section Felo ratings as a guide, and to round all values to 100 points. Thus, a possible result could be:
Alexander 1600 Julia 1400 Christian 1600 Mike 1300 Max 1500 George 1500 Peter 1700 Christine 1400 William 1700
The second important ingredient are bout results, the more the better, although they should not be spread over a too long period of time. Five to ten bouts per fencer are a soft minimum, having taken place within half a year. It's not a big deal if you don't fulfil these preconditions, though. You enter the bout results and do the so-called bootstrapping. It means that the Felo program calculates the best initial values from the preliminary ones provided by you.
For doing this, click on “Calculate” – “Bootstrapping”:
Then you click on “Yes” and wait for a couple of seconds (at most). The new initial values are inserted into the file. You should save the file and you shouldn't touch the initial Felo ratings again, unless you know what you're doing. From now on, only bouts and new fencers are added to the file.
If you haven't recorded any bouts for far, you can use the preliminary initial values, too, however, you must expect some wild behaviour during the first weeks, until the Felo ratings have found their true values.
On the other hand, if you already have a lot of bouts data, you should use only the first part of it (e.g. the first six months) for the bootstrapping.
A completely different task is adding freshmen (well, this includes all fencers who come new into the group of course). If the freshman already has a current Felo rating, this is used for his or her initial value. However, if he has not, it must be estimated. Bootstrapping is impossible since not all fencers must get a new initial value.
This works this way: The fencer is included into the fencer list as “freshman”, which means that his initial value is set to a symbolic `0'. After approx. ten 5 point bouts (or, e.g., four 15 point bouts), the Felo program can estimate an initial value. Just click on the menu “Calculate” – “Estimate freshmen”:
In this case, Obi Wan hasn't had a Felo rating yet. After the “Estimate freshmen”, his estimate is inserted into the file.1 If the number of bouts of Obi Wan is not yet enough for estimating a reliable initial value, his initial value remains `0'. In this case, he simply has to fence a little bit more, and you must try again a couple of training days later.
If you don't give a groupname, Felo constructs one from the filename. For example, the file foil.felo gets the groupname “Foil”.
These parameters modify the appearance of the plot and the handling of the HTML output, see Putting the Felo ratings on the Web.
min distance of plot tics
earliest date in plot
maximal days in plot
fencers per plot
overlap in plots
The following parameters are only interesting to Windows users. On Linux, these programs are usually found without problems. For information about installing these programs, see Installation of auxiliary programs.
path of gnuplot
path of convert
5 point bouts for estimate
These parameters should only be used if you really know what you're doing.
k factor top fencers
felo rating top fencers
k factor others
k factor freshmen
5 point bouts freshmen
minimal felo rating
weighting team bout
First, download the program from Felo's project page on Sourceforge as an EXE file, and start it. There are two alternatives: You can start is as an ordinary user or as an administrator. In the latter case, it is installed for all users on this computer.
Installation itself is very simple. It should be sufficient to click on “Ok” a couple of times. The uninstallation is equally simple but assure that you are logged in on the same account you used for the installation because otherwise, Felo may not be completely removed.
If you are not interested in graphical plots of the Felo ratings, you can skip the rest of this chapter.
First you have to download Gnuplot as a ZIP file. The file name is gp400win32.zip or something similar, where 400 is the version number. Extract this ZIP file into the folder C:\Programme\gnuplot.
Ghostscript can be downloaded from the FTP mirror for Ghostscript (you need the EXE file). It is important to be administrator when executing this file!
On the homepage of ImageMagick you click on “Binary Releases” – “Windows”, download one of the EXE files and start is (as administrator if possible).
The program is available at Felo's project page in two variants for Linux, namely as an RPM and as a tar ball. The RPM contains Python as its only dependency, however, it also needs wxPython, at least for the GUI part. Since this has become a standard package, it shouldn't be a problem.
If you are interested in having plots, you need the very same three programs as the Windows users, namely Gnuplot, Ghostscript, and ImageMagick. They are standard packages, too, so it shouldn't be a problem either.
The calculation of new Felo ratings is a three-steps process:
This k factor is some sort of damping parameter. If it is too high, the Felo ratings will oscillate too heavily. If it is too low, the Felo ratings will converge too slowly.
Some find it unusual or even irritating that the Felo ratings uses the complete score rather than just using win or loss.
The rationale for this is very simple: It makes Felo ratings converge very quickly, i.e., they find their true value much earlier. This is advantageous when a fencing group starts with Felo ratings, so that everybody has a real Felo rating quite soon. Similarly, it means that the Felo ratings reflect changes in your abilities or condition rather accurately. If Felo counted only wins and losses, such subtle developments would not be noticeable.
There is another mathematical issue with pure win/loss ratings. Normally, you have bouts with 5, 10, and 15 win points. Sometimes, even other values are possible. Unfortunately, they are incompatible because the win/loss probability in a 15 point bout is more extreme than that in a 5 point bout. Consequently, the ratings calculated from 5 point bouts only are much closer together than for longer bouts. Putting them all into one ratings would mean you measure tallnesses both to the head and to the shoulders, and calculate an average tallness from the whole set of values. This is ridiculous obviously.
Thus, you'd have to make the results compatible first. Mathematically, this works, however, it means that you estimate the single-hit probability for every bout. Thus, you end up with the single hit again, just with less accuracy. So you gain little (if anything at all) and lose much.
The Felo ratings – as they are – are a good combination of rapid adaption and accuracy.
Felo ratings can only compare relatively fencers within a fencing group. In order to compare between groups (e.g. between two fencing clubs), the initial values must have been estimated realistically and carefully. Unfortunately, descriptions like “above 1600 are the strong leisure fencers” are not very precise. The comparison should work quite well nevertheless.
Of course, it is much better if some fencers fence in both groups. They connect the groups statistically and make the Felo ratings compatible. If appropriate, you may merge the groups in one Felo file, although only few fencers fence in both groups. Theoretically, one common fencer is sufficient, however, he has a lot to do then. For example, if one of both groups was estimated too highly, he shovels the points to the other group until everything is consistent.
Additionally, you can use tournaments for this but it is a lot of work: You must collect all current Felo ratings of all opponents of your fellow fencers.
Be this as it may, the experience with Felo ratings is still to little in order to know how well you can make Felo ratings of different groups comparable by common fencers or tournaments. At least, within a group they work very nicely.
By the way, Felo ratings of different weapons can never be made really comparable because they can never fence against each other. Here, a good initial estimation is the only way to get close to it.
Can one use the Felo program for other sports, too?
Yes, one can, however, Felo doesn't work well with team sports. Moreover, sports that are ended after a certain amount of time doesn't work well either.
As far as team sports are concerned, Felo isn't usable at all if you have a group of people, and on every training day, you compose two completely new teams out of it. The only possible situation is a set of teams rather than people. Every team can be treated like one fencer in a Felo file. This limits Felo heavily in team sports, especially for leisure sport groups.
As far as sports with time limit are concerned, you can only use the three possible results 1:0, 0:1, and 1:1 for win, loss, and even. However, I don't know a sport with time limit that isn't a team sport at the same time.
For all other sports with a sportsman vs. sportsman bout like tennis, badminton, table tennis, arm wrestling, and staring contest, there shouldn't be problems. If there is no real score but only winner and loser, see above, in all other cases you simply put the result in the Felo file.
By the way, it is not very important whether you count single point, (tennis) games, or sets. It won't make much difference. For example, in tennis you may record a 6:4 6:3 either as 2:0 or as 12:7. (If you have too much time, you may even count the single points.) On the other hand, the more information, the better.
This section is intended for programmers who want to use Felo in their own programs.
A graphical user interface is a nice thing to have but you cannot automate anything with it. For example, it is impossible to get really custom-made web pages, maybe with all weapons on a single HTML page.
For most of Felo's users, this limitation is unimportant. However, those who want to have full control will get it, and even in two ways.
First, you can call the Python module felo_rating.py as a command-line program. This is its help text:
usage: felo_rating.py [options] options: -h, --help show this help message and exit -p, --plots Generate plots with the Felo ratings -b, --bootstrap Try to estimate good initial values for all fencers --max-cycles=NUMBER Maximal iteration steps during bootstrapping. Default: 1000 --estimate-freshmen Try to estimate freshmen --write-back Write the new initial values back into the Felo file --version Print out version number and copying information -o FILENAME, --output=FILENAME Name of the output file. Default: output to the screen (stdout)
If you have understood the GUI version of this program, you should intuitively know what the options mean. Of course, its input file format is the very same used by the GUI version. The output format is very simple and can be parsed by an own program.
Secondly, you can write a program in Python that imports the
felo_rating module. You can then use
Felo's API to write own Felo
 This needn't be the same number which is calculated as the current Felo rating after calculating all bouts but it should be very close to it.