About Rating-Budget Tournament System
The Rating-Budget Tournament System creates the complete schedule
before the first round. Unlike a Swiss tournament, later pairings
do not depend on results.
Each player has a personal group of nearby players in
rating order, containing approximately one-third of the field and
excluding the player themselves. That group’s average rating,
multiplied by the number of scheduled games, gives the player’s
rating budget: a target for the combined ratings of all
their opponents. For example, an average of 1800 over
nine games gives a budget of 16,200. Some opponents
may be stronger and others weaker—the aim is to
bring their combined ratings close to that target.
Matching these budgets is the system’s main priority. It
also tries to arrange at least half of each player’s
games against opponents from their personal group, although
this is a preference rather than a guarantee.
Players never face the same opponent twice. White and
Black totals are balanced as evenly as possible, and
the system tries to avoid long runs of the same
colour. With an odd number of players, one player
rests each round, and nobody receives more than one
scheduled rest. A rest adds no opponent rating and
reduces the player’s budget by one personal target.
Rest-round standings points are separate from the rating budget.
The schedule is fixed once generated, so rounds can
be played in any order. Colour-streak improvements apply
to the generated round order. The system searches for
a good overall balance, but does not guarantee the
best possible schedule.
Personal rating groups
TPN 1 is assigned to the highest-rated player. Equal ratings
retain roster order. Each player has a personal neighbourhood
in rating order, excluding the player themselves.
N = number of players
R = number of scheduled rounds
x = the player’s one-based TPN
h = ceil(N / 6)
g = 2 × h
FirstTPN[x] = max(1, min(x − h, N − g))
LastTPN[x] = FirstTPN[x] + g
PersonalGroup[x] =
all TPNs from FirstTPN[x] through LastTPN[x],
excluding x
The group size is N / 3 rounded upwards to an even integer.
Ideally there are h opponents above the player and h below.
Near either end of the field, unavailable places are transferred
to the other side. Every personal group contains exactly g
eligible opponents.
With 60 players, h = 10 and g = 20. TPN 1’s group contains
TPNs 2–21; TPN 30’s group contains TPNs 20–29 and 31–40;
TPN 60’s group contains TPNs 40–59.
With 50 players, h = 9 and g = 18.
Individual rating targets and budgets
PersonalTarget[x] =
sum of the ratings in PersonalGroup[x] / g
ScheduledGames[x] = R − ScheduledRests[x]
PersonalBudget[x] =
ScheduledGames[x] × PersonalTarget[x]
Primary objective:
Minimize Σ over players
|AssignedOpponentRatingSum[x] − PersonalBudget[x]|
Each player has their own target opposition mean and rating
budget. The player’s own rating is not included in their
personal-group mean. Budgets depend on scheduled games,
not on how many results have been recorded or how many
games were actually played.
Overlapping personal-group means do not necessarily preserve
the field’s total rating. Consequently, zero total budget error
is not always possible. Diagnostics include an aggregate
budget-error lower bound. For an odd field, that bound applies
to the schedule’s current rest allocation.
Secondary personal-group preference
RequestedGroupOpponents[x] =
ceil(ScheduledGames[x] / 2)
GroupShortfall[x] =
max(0, RequestedGroupOpponents[x] − GroupOpponents[x])
Optimization priorities:
1. Total absolute personal-budget error
2. Total personal-group encounter shortfall
3. Total TPN distance
At least half of each player’s scheduled games should preferably
be against members of that player’s personal group.
There is no additional +1 for an even number of games.
A scheduled rest is not a game.
Rating-budget accuracy takes precedence. The half-group rule
is a secondary preference, not a guaranteed constraint.
It may remain unsatisfied because of budget priorities,
structural limitations or the bounded search.
Without rematches, a player cannot face more than g distinct
personal-group opponents.
Group membership is directional: an opponent can belong to
one player’s personal group without the reverse being true.
Each game’s group contribution is therefore counted separately
for its two players.
How scheduling works
Several valid round-robin-derived schedules are generated.
Round selection and legal within-round exchanges improve the
rating-budget objective. Exchanges never introduce repeated
opponents or multiple appearances in a round.
A balanced Euler orientation assigns colours. Every player
receives equal White/Black totals when their number of games
is even, or a difference of one when it is odd. Directed-cycle
reversals and round-order exchanges then reduce colour streaks
without changing opponents or colour totals.
This is a bounded heuristic search. A remaining budget error,
personal-group shortfall or long colour streak is reported
explicitly. Failure to eliminate a shortfall is not proof that
doing so is mathematically impossible. Because the search is
randomized, generating the schedule again may produce a better
result, but improvement is not guaranteed.
Odd fields
One player rests in each round, and no player receives more
than one scheduled rest. A rest adds no opponent rating.
A player without a rest has a budget of R × PersonalTarget.
A player with one rest has a budget of (R − 1) × PersonalTarget.
This keeps the target average opposition rating unchanged.
For example, in a nine-round tournament, a player with a
personal target of 1800 has a budget of 16,200 for nine games,
or 14,400 for eight games and one rest.
Both the rating budget and the requested personal-group count
use scheduled games: R games without a rest, or R − 1 games
with a rest. If an exchange changes who rests, both values
are recalculated for the affected players.
Rest points are configurable and default to one point.
They are awarded when all games in that round have recorded
results. Rest rounds do not count as White or Black games.
Colour streaks count consecutive actual games, ignoring
intervening rests.
Standings and tie-breaks
WNT uses the following formula, where R is the scheduled number
of rounds, Pᵢ is an opponent’s recorded tournament score,
and rᵢ is the player’s awarded result against that opponent:
WNT = 100 × Σᵢ [(Pᵢ / R) × (rᵢ + Pᵢ / (2R))]
Progressive adds cumulative scores after rounds with recorded
results, in scheduled round order. It therefore remains
provisional when rounds are played out of order.
Buchholz Cut-1 adds recorded opponents’ scores and removes
the lowest entry. Each credited rest contributes a zero-point
opponent. This is a simple application-specific treatment,
not a claim of FIDE-compliant unplayed-game adjustments.
Recorded forfeits contribute their awarded points to these
tie-breaks. Players still tied after the selected tie-break
share a position; TPN only determines their display order.
Withdrawals and saving
Withdrawal does not regenerate the schedule or change personal
groups, scheduled-game budgets or targets. Blank games from
the effective round receive automatic forfeits. Existing manual
results remain unchanged. Reinstatement removes automatic
forfeits that no longer apply.
Browser storage saves the tournament automatically when
available. Download JSON backups regularly. No data is sent
to a server, and separate browser tabs do not synchronize.
Close