Summary


Analyse a file (utf-8 encoding) of game results and display performance calculations.

The results are checked to confirm that each player is connected to every other player by some chain of results.

All results for players who played exactly one opponent are ignored and the remaining results are checked to confirm that each player is connected to every other player by some chain of results.  This is repeated, for players who played exactly two opponents and so on, until the check fails.  The number of games played by each player is ignored.

The performances of all players is calculated for each population using the games against the other players in the population.  1000 iterations is usually far more than enough to make all performances constant to 11 significant figures.

A further performance calculation is done on all games in the file for each population.  The calculated performance numbers are used as constant values against which the performances of the other players, removed from the original calculations, are calculated. 

Game results must be presented like:

Player One 1-0 Player Two

where '1-0' is the result and 'Player One' and 'Player Two' are the player names or some other player identifier. '0-1' and 'draw' are the other results recognised.  One result per line.  Lines that are not like this are ignored.


Getting Started

The calculation is done in three stages.

1. Open the file
2. Find the player populations
3. Calculate the performances

Click leftmost button on the menu to do the next stage.

The following sections give details for each stage.


Open


Select a file from which the game results to be processed are taken.

The file encoding must be 'utf-8'.

Game results are:

name result name

where result must be separated from the two names by whitespace.

Anonymous names like 'one', 'two', and so on, may be appropriate in some circumstances.  A guess is made at which bit of the name is the surname for sorting purposes when displaying reports. 



Find Populations


The following populations are generated:

all players
all players except those playing one opponent
all players except those playing two opponents or less
all players except those playing three opponents or less
...

until the population generated by removing a set of players fails the check that each player is connected to every other player by some chain of results; or the population is empty.

A player may play an opponent more than once.  The number of games played by a player is ignored.



Performance


The performance of each player in each of the generated populations is calculated using just the games played against the other players in the population.

Choose the number of iterations to be done.  50 to 100 iterations is usually good enough, while 1000 iterations will almost always generate performance numbers constant to 11 significant digits.

Each iteration calculates a performance number for each player which is used in the next iteration as follows:

Players performance number = (Sum opponent's performance numbers +
                              Sum rewards for game results) /
                             Number of games played

Reward for win:   50
Reward for draw:   0
Reward for loss: -50

An extra step is done after the iterations, followng the ECF grading rule, where an opponents's performance number is assumed to be no more than 40 away from the player's performance number.

All players start with 0 as their performance number.

The report for each player in each performance calculation will be like:

Player One     9    -5    -4.7836212122

or

Player One     9    -5    -4.7836212122   -4.7836212106    -4.7836212089

meaning 9 games played, 'grade' -5, and performance number -4.7836212122 after all iterations.  The performance numbers from the two previous iterations are given if different in the most signiificant 11 digits.

The statistics for each population compare expected and actual total score for each player, and expected and actual scores in games between players separated by 0, 1, 2, ..., 49, 50, >50 performance points (labelled Gap).

This pattern of player's performance and statistics is repeated, removing the players with fewest opponents each time, until all players have been removed or the removal fractures the population into two or more sets of players where no player plays an opponent outside the player's set.

The performance calculation for the initial population (all players) is done again for each of the populations just found.  This time the calculated performance number, such as -4.7836212122, is used where available throughout the iteration process.  The numbers for players appearing in the earlier calculation for '... less than n opponents ...' will be the same in both.

A summary of these calculations by player is given with each player's entry like:

Player One		-5   -5   -9   -9   -9   -14   1   2   6   6   9   2
		-5   -5   -10  -10  -10  -16

The bottom row is the 'grade' calculated for the player until the player is removed because too few opponents are played.  The top row is the 'grade' calculated using the performance number associated with the 'bottom row grade', or the 'grade' calculated by comparison with the players remaining in the population once the player is removed.
