Standard · Version 1.0 · 15 November 2026
Open Geo-Guessing Rating Standard (OGRS) 1.0
One rating model for every game in which players look at a place and guess where on Earth it is. It covers duels, free-for-alls, team games and solo play, and puts them all on one scale.
Abstract
Geography guessing games (often called geo-guessing games) show a player a street-level photograph or panorama and ask them to place a pin on a map. They are scored by distance and played as duels, free-for-alls, team games and solo runs. No common rating exists. Each game invents its own, and the ratings cannot be compared, are often opaque, and usually count only a narrow "ranked" queue. Most games people actually play then never move a rating.
OGRS 1.0 fixes that. It specifies (1) the Glicko-2 model in continuous time with exact parameters; (2) how each format becomes rating evidence: pairwise decomposition with information-saturating weights for free-for-alls, composite sides for teams, and a player-versus-place model for solo play in which each place carries its own difficulty rating; (3) a people-only rule: every game between people is rated, whatever its custom rules, unless something makes it unfair; (4) integrity, display and data-exchange requirements; and (5) conformance test vectors.
A reproducible simulation study measures the result. With matchmaking, a new player leaves provisional status after a median of 11 duels (10 solo games of five rounds). After 50 games the rating error is 70 points against 214–285 for Elo, and the rank correlation with true skill reaches 0.985. Once established, a rating moves by a median standard deviation of 13.6 points against 28 for Elo with K = 32.
1 Introduction
1.1 The problem
A geo-guessing round has a hidden answer (a point on Earth) and one or more guesses. The game turns the error, a great-circle distance, into points. Rounds make up formats: duels, where two players lose health by the gap between their scores; free-for-alls of 3–100 players ranked by total points or by elimination; team games; and solo runs against the places themselves.
Ratings in this genre fail in three recurring ways:
- Starvation. Only one exact rule set counts, typically a world map with set movement, clock and health. Everything else, including most games played with friends, is "casual". On geoguess.es before this standard, one of a player's 51 finished games had been rated. Their rating could not settle because it was almost never fed.
- Opacity and drift. Undocumented formulas, scales that drift, and no way to tell a settled rating from a guess.
- Incomparability. A "1500" in one game, mode or format means nothing in another.
1.2 Goals
| Goal | Requirement it leads to |
|---|---|
| G1 Fed. Every fair game between people counts. | The people-only rule (§7). |
| G2 Fast to settle. A newcomer is placed in about ten games. | Glicko-2 uncertainty with a self-assessed start (§4, §8). |
| G3 Stable once settled. A settled rating moves little game to game. | An RD floor and capped volatility (§4.3). |
| G4 One scale. Duels, free-for-alls, teams and solo mean the same thing by the same number. | One engine with format weights (§5); solo on a calibrated scale (§5.4). |
| G5 Honest. A rating says how sure it is and resists manipulation. | Provisional marks, intervals, integrity rules (§8, §9). |
| G6 Verifiable. Any two implementations give the same numbers. | Exact maths, parameters and test vectors (§4, App. B). |
1.3 Non-goals
OGRS does not prescribe a game's imagery, scoring curve, map or user interface. It does not rate locations for anything except solo play. It does not detect cheating, though it says what must happen when cheating is confirmed (§9.4).
1.4 Conventions
The key words MUST, MUST NOT, SHOULD, SHOULD NOT and MAY are to be read as described in BCP 14 [RFC 2119, RFC 8174] when, and only when, they appear in capitals. Ratings are printed on the familiar Elo-like scale (1500 at the centre). Glicko-2's internal scale uses . Logarithms are natural unless written .
2 Terminology
- Round
- One place shown to every player at once, then answered. It yields a score per player.
- Match
- A sequence of rounds with a result for every seat: a placement, or win, draw or loss.
- Place
- One round's subject: a panorama or photograph with a known position. In solo play a place is rated like a player (§5.4).
- Pool
- A separate rating kept per player: one per time class for duels, plus Team, Battle and Solo (§6).
- Player record
- The triple (, RD, ): rating, rating deviation and volatility, plus the time of the last update and a game count.
- Established / provisional
- A record is provisional while its current RD is at least 110, and established otherwise.
- People-only match
- A match in which every seat is a person: no bots, no stand-ins.
- Standard rules
- A game's own reference rule set for a class (for example its ranked queue). Under OGRS it identifies a queue. It does not decide whether a game is rated (§7).
3 Round scores
OGRS rates results, not points. A game MAY use any scoring rule, provided it is (a) a monotone non-increasing function of the error distance for a given place, and (b) bounded in . Only solo play (§5.4) uses the score itself, as the fraction .
A game without a scoring rule of its own SHOULD use the reference rule:
with km for the whole world. For a smaller map, , where is the 98th percentile of pairwise great-circle distances between the map's places and nice() rounds to 1, 2 or 5 times a power of ten. At km a guess 25 km off scores 4877, 100 km off 4524, and 1000 km off 1839. In the geoguess.es bot model, the separation in score between neighbouring skill levels peaks for between 750 and 1000 km on a world map (reference implementation notes, §14 [GG]).
4 The rating model
4.1 Glicko-2
OGRS uses Glickman's Glicko-2 system [Glickman 1999, 2001, 2022], a dynamic paired-comparison model in which skill drifts as a random walk with a per-player volatility. It is preferred to Elo [Elo 1978] because a rating carries its own uncertainty (G2, G5). It is preferred to TrueSkill-style factor graphs [Herbrich et al. 2006] because one closed-form engine serves every format on one familiar scale (G4, G6). For a rating with deviation RD:
Every observation is an opponent (or a place, or a composite side) with , a result and a weight (§5). The update for one match is:
The new volatility is the root of Glickman's function, solved by the Illinois method with tolerance :
With every and , this is exactly Glickman's algorithm. Vector V1 in Appendix B reproduces his published worked example.
4.2 Continuous time
Players expect a new rating the moment a match ends, so OGRS applies the update per match, not per batch period. The inflation step uses the real time since the player's previous rated update, counted in rating periods:
This value is lichess's, chosen so that an RD of 60 grows to 110 over a year at (vector V4). Ten matches within one period add up to one period of inflation, as in the batch algorithm. An opponent's deviation in and MUST be their current deviation:
4.3 Parameters
| Parameter | Value | Why |
|---|---|---|
| Centre, scale | 1500, 173.7178 | Glickman's scale (Elo-compatible) |
| System constant | 0.75 | Players improve fast (they learn regional clues), so volatility may follow. Glickman suggests 0.3–1.2; lichess uses 0.75. |
| Starting , maximum | 0.09, 0.10 | lichess values. The cap stops runaway volatility. |
| Starting RD, ceiling | 350 | Glickman's unrated default. A self-assessed start makes 350 honest (§8.1). |
| RD floor | 50 | An even win is worth about +7 at the floor and about +10 at RD 60. |
| Periods per day | 0.21436 | RD 60 → 110 in one idle year (V4). |
| Provisional while RD ≥ | 110 | Placed in about ten matchmade games (§10.2). |
| Rating floor, ceiling | 100, 4000 | Safety bounds. |
| Largest change per match | ±700 | A safety net. Normal play never reaches it. |
| Free-for-all saturation | 2 | An FFA is worth at most three duels (§5.2). |
| Team member weight | §5.3 | |
| Solo scale | §5.4 |
A conforming implementation MUST use these values. It MAY publish a different value for a parameter marked as tunable in Appendix C, but then it MUST name the parameter and value beside every rating it publishes (for example "OGRS 1.0, = 0.5").
5 From formats to evidence
Every format reduces to the update in §4 with a list of observations . All players in a match are updated simultaneously from their pre-match records.
5.1 Duels
One observation against the opponent: for a win, for a draw, for a loss, . The format that decides the winner does not matter: health to zero, most points after rounds, first to a target.
5.2 Free-for-all
A free-for-all of players is pairwise games per player, each scored by placement (better 1, equal , worse 0). Counting them as independent games would over-count, because one match's luck (a lucky round, a bad connection) is shared by all of a player's pairings. The information saturates [Ebtekar & Liu 2021]. OGRS weights each pairing so the whole match is worth duels:
This gives (a duel), , (eight players), and at most 3. A better placement always earns more (vector V5). Ties in a placement are draws.
5.3 Teams
Each side of members is a composite with the mean strength and the uncertainty of a mean:
Each member plays one observation against every other side's composite. The expectation uses the member's own side's composite , because the team won or lost together. The update uses the member's own , so an uncertain newcomer moves more than an established teammate. The weight is , where is the number of other sides. A strict chain rule would give , but then a member of a team of four would need about 40 games to be placed. is the compromise (a 2-v-2 win is worth about 72 % of a duel win: V2, V6). Uneven teams (2 v 1, 3 v 2) are allowed: the composite already accounts for size.
5.4 Solo play: players against places
In solo play there is no opponent, so the place is the opponent. Each place carries a difficulty rating , defined as the Solo rating at which the expected round score is half the maximum. This is the Rasch idea [Rasch 1960] in Glicko form, as used for adaptive learning [Pelánek 2016] and chess puzzles. A round is one observation with a fractional result:
A whole solo game is one update (one Glicko-2 rating period) containing all of its rounds. The order of the rounds therefore does not matter, and a five-round game counts once for inflation (vector V7).
Scale. One round decides much less than a whole duel. In simulation, mean points against rating run about 2.3 times flatter than the duel win curve. The Solo pool and place ratings therefore use a doubled scale, (Elo base 800), so a Solo rating means roughly the same skill as the same number in Rapid duels.
Places learn slowly and only from established players. A place starts from a prior by difficulty tier (RD 300) and is updated, with result , only by players whose Solo RD is at most 150. Place parameters: , starting , RD floor 30, ceiling 300, no inflation with time. An implementation MAY also teach places from a duel class it has calibrated to the Solo scale (geoguess.es uses Rapid and Classical rounds). It MUST NOT teach them from provisional players.
What a Solo game may vary. Clock, movement, region and difficulty tiers MAY vary: each place's own difficulty absorbs the region and tier. The view rules and the clock make a place harder. OGRS 1.0 accepts that bias in exchange for G1. Version 1.1 is expected to add a per-condition offset (§13).
6 Rating pools
A record is kept per (player, pool). A duel's pool is its time class, from the viewing time per round (seconds):
| Pool | Fed by | Viewing time per round |
|---|---|---|
| Bullet | Duels | 1–5 s |
| Blitz | Duels | 6–10 s |
| Rapid | Duels | 11–30 s |
| Classical | Duels (also untimed and custom-clock games of that length) | 31–180 s, or untimed |
| Daily | Correspondence duels | days |
| Team | Team duels and team free-for-alls, any clock | — |
| Battle | Free-for-alls of 3–100 players, any clock | — |
| Solo | Solo games (§5.4), on the doubled scale | — |
The reference implementation does not yet offer rated Daily duels. A chess-clock bank of seconds over rounds with increment is classed by . Movement rules do not split pools. When a pool is opened for the first time, the start is the inverse-variance mean of the player's established people pools with RD 250, or the self-assessed level (§8.1) if none is established.
7 What is rated: the people-only rule
Rule 7.1. A finished match MUST be rated when (a) every seat is a person, (b) its format has a pool (§6), and (c) nothing in §7.2 applies, whatever its custom rules: clock, movement, panning and zoom, map region, difficulty tiers, health on or off, answer kind (pin, city or country), team score (best player or team average), team sizes.
Why. Custom rules change the game for both sides equally, and Glicko-2 measures relative performance. Restricting rated play to one rule set made the rating starve (§1.1), and a starved rating never settles. A game MAY still keep a separate leaderboard for its standard rules. Players MAY choose a casual game, and the choice MUST be shown before the game starts.
7.2 What keeps a game unrated. A match MUST NOT be rated when:
- any seat is a bot or an automated player (OGRS 1.0; see §13);
- any player had assistance the others lacked: reference panels, hints, guides;
- the places could be known in advance: a replayed set, or a user-made map whose author is playing;
- it was aborted before the first round closed, or voided (§9.3);
- a player is under a rated-play ban (the game MAY then go ahead casual);
- the same two players have already played the pair limit of rated games in the window (§9.1).
7.3 Solo. A solo game is rated in the Solo pool when its rounds are panoramas or photographs answered with a pin and scored by distance. Card, quiz, city-name and country-only rounds, and places without a difficulty rating (user-made maps), are not rated, because a place's difficulty is defined for pin rounds on rated places.
7.4 Calibration statement. An implementation SHOULD publish how its rating relates to accuracy, as rating points per halving of the median error, estimated as in §10.4.
8 Starting, provisional status and display
8.1 Self-assessed start
A new player MAY answer one question at sign-up. The answer sets the start, always with RD 350, so a wrong answer costs only a few games:
| Answer | Start |
|---|---|
| New to geography games | 600 |
| Plays now and then (also the default if skipped) | 1000 |
| Usually gets the continent, often the country | 1400 |
| Knows the regional clues (bollards, scripts, road lines) | 1800 |
| Competes in ranked geo-guessing | 2200 |
8.2 Display
- A provisional rating MUST be marked, for example "1534?", with a tooltip saying it is still settling.
- An established rating SHOULD be shown with its 95 % interval, , at least on profiles.
- Before a rated game, the stakes (rating change on a win, draw or loss) SHOULD be shown. Win chances shown to players MUST combine both uncertainties: .
- Displayed ratings are rounded to integers and never digit-grouped. Records MUST keep full precision.
9 Integrity
9.1 Pair limit. Win-trading is bounded by a pair limit: the 6th and later rated games between the same two players within 24 hours are casual (geoguess.es: 5 per rolling 24 h).
9.2 Aborts and disconnects. A player who leaves before the first round closes aborts the match (unrated). Repeated aborts SHOULD earn a queue cooldown. After a disconnect, the server clock keeps running and missed rounds score 0. A resignation is a loss.
9.3 Voiding. A voided match is removed by marking its rating events void, restoring each player's record from just before it, and replaying their later rated matches in order. Refunds and adjustments made after it keep their deltas.
9.4 Refunds. When cheating is confirmed, every person who lost a rated game to the cheater within the past 30 days MUST get those points back as a separate refund event.
9.5 Leaderboards. A record SHOULD appear on a leaderboard only when RD ≤ 80, it has at least 20 rated games (10 of them against people), it has been active within 90 days, and the account is at least 7 days old.
9.6 Idempotence. Rating a match MUST happen at most once, atomically, keyed by the match. Applying it a second time MUST change nothing.
10 Simulation study
10.1 Method
All studies use the reference engine and a seeded generator (mulberry32). The script, its output and the seeds are published with this standard (§12.3), and any implementation can re-run them. Ground truth: every simulated player has a fixed true skill , and a duel is won with probability . Matchmaking pairs neighbours in the current ranking with noise (standard deviation 120), or finds opponents within ±150 of the player's rating (§10.2). The Elo baselines start everyone at 1500 with a fixed .
10.2 How fast a rating settles (S1)
The number of games until a new player (1000, RD 350) is no longer provisional, over 400 players per row:
| Opponents | Median | 10th–90th percentile |
|---|---|---|
| Matched (±150), established (RD 50) | 11 | 11–12 |
| Matched, half established, half RD 150 | 12 | 11–13 |
| Matched, all newcomers (RD 350) | 22 | 22–23 |
| Unmatched (anyone), established | 19 | 15–30 |
| Solo games of five rounds against places (RD 200) | 10 | 9–11 |
Matchmaking matters: evenly matched games carry the most information, because peaks at . The Solo pool places a player as fast as matched duels do. This is why OGRS rates solo play (G1, G2).
10.3 Accuracy and stability (S2, S4)
1000 players, 100 rated duels each. The error is measured after removing the population-wide offset (a rating scale has no absolute zero):
| Games each | OGRS error | OGRS rank corr. | Elo K16 error | Elo K32 error | Elo K40 error | Elo K32 rank corr. |
|---|---|---|---|---|---|---|
| 5 | 200 | 0.815 | 330 | 316 | 309 | 0.801 |
| 10 | 147 | 0.911 | 321 | 299 | 288 | 0.881 |
| 20 | 105 | 0.959 | 309 | 276 | 261 | 0.886 |
| 50 | 70 | 0.985 | 285 | 236 | 214 | 0.917 |
| 100 | 54 | 0.993 | 253 | 186 | 160 | 0.959 |
Error = root-mean-square of rating minus true skill, in rating points. Rank corr. = Spearman correlation with true skill.
Elo has to choose between speed and calm: a larger converges faster but swings more. Glicko-2's deviation gives both. Once players are established, the median standard deviation of a player's rating over their last 40 games (true skill fixed) is:
| System | Movement once settled (SD, points) |
|---|---|
| OGRS (Glicko-2, RD floor 50) | 13.6 |
| Elo, K = 16 | 15.3 |
| Elo, K = 32 | 27.9 |
| Elo, K = 40 | 34.6 |
OGRS is calmer than Elo K16 once settled, and in the same simulation it converged faster than Elo K40. This is G2 and G3 together.
10.4 From guesses to results (S3)
To check that a logistic win model suits the genre, 20 000 simulated duels were played from distances. Each player has a median error (km). A round's error is log-normal around (log-SD 0.9) and is scaled by the place's difficulty (log-SD 0.5). Points follow the reference rule (§3). Duels are played to 6000 health with ×1, ×1.5, ×2 and ×3 damage bands over at most ten rounds. Fitting by maximum likelihood, where is the difference in , gives . One halving of the median error is then worth about 424 rating points in this model.
| Skill gap (halvings of error) | Duels | Observed P(win) | Logistic fit |
|---|---|---|---|
| −3 … −2 | 1496 | 0.001 | 0.002 |
| −2 … −1 | 3236 | 0.030 | 0.025 |
| −1 … 0 | 4704 | 0.266 | 0.228 |
| 0 … 1 | 4539 | 0.733 | 0.772 |
| 1 … 2 | 3342 | 0.966 | 0.975 |
| 2 … 3 | 1529 | 0.998 | 0.998 |
The logistic fits within 4 percentage points everywhere. It is slightly over-confident for close matches, because health duels add luck that skill alone does not explain. The 424-point figure depends on this noise model. Each game SHOULD estimate its own figure from its own data (§7.4).
10.5 Free-for-all weight (S5)
The winner of an 8-player free-for-all among equals (all 1500, RD 350) gains 267 points and ends at RD 244. Two duel wins in the same situation give +250 and RD 256: one eight-player win is worth a little more than two duels, as intends.
10.6 Limitations
The simulations assume a fixed true skill, while real players improve. exists for that, but the study does not measure tracking of a moving skill. Real matchmaking is thinner than ±150 at quiet hours, which sits between the "matched" and "unmatched" rows of S1. The solo study draws places from a population with known difficulty. In practice place ratings are learned, and their own error adds to the player's. These are the measurements the reference implementation will publish from live data.
11 Data exchange and comparability
11.1 Records and events
An implementation that exposes ratings SHOULD use these JSON shapes (numbers at full precision; times as milliseconds since the Unix epoch, UTC):
// a player record in one pool
{ "standard": "OGRS/1.0", "pool": "rapid", "rating": 1534.2, "rd": 71.9, "vol": 0.0601,
"lastAt": 1794761234000, "games": 48, "provisional": false }
// one rating event (append-only; one per player per rated match)
{ "standard": "OGRS/1.0", "matchId": "7D3ZN60XZ6", "pool": "battle", "at": 1794761234000,
"format": "ffa", "fieldSize": 8, "placement": 2, "result": 0.857,
"before": { "rating": 1520.0, "rd": 80.1, "vol": 0.06 },
"after": { "rating": 1533.6, "rd": 77.4, "vol": 0.06 }, "delta": 14, "voided": false }
result is the player's mean . For solo games, fieldSize is the number of rounds observed.
11.2 Comparing games
Ratings from two games that both conform to OGRS share a model, parameters and starting levels. They are comparable only to the extent that their populations overlap. A game SHOULD NOT present another game's rating as its own. Games MAY link scales through players who are rated on both, by publishing the mean offset between their ratings with its standard error and the number of shared players.
12 Conformance
12.1 Levels
| Level | Requires |
|---|---|
| OGRS Core | §4 exactly (vectors V1–V4 and V8), duels (§5.1), the people-only rule (§7), provisional display (§8.2), idempotence (§9.6). |
| OGRS Full | Core, plus free-for-alls and teams (§5.2–5.3, V5–V6), solo play with place ratings (§5.4, V7), pools (§6), integrity (§9), and a published calibration statement (§7.4). |
A game claims conformance by stating the level and version ("OGRS 1.0 Full") and any tunable parameter it changed (§4.3).
12.2 Passing the vectors
An implementation passes a vector when its output matches Appendix B to within 0.01 in rating, 0.01 in RD and 0.00001 in volatility (stakes match exactly).
12.3 Published material
- ogrs-reference.mjs: the reference engine (pure JavaScript, no dependencies; MIT).
- simulate.mjs and results.json: the study in §10 (
node simulate.mjs ./ogrs-reference.mjs). - vectors.mjs and vectors.json: Appendix B.
- parameters.json: Appendix C.
13 Versioning
A version number is MAJOR.MINOR. A minor version only adds requirements or tunable parameters, so a 1.0 rating stays valid under 1.1. A major version may change parameters or the model, and ratings move to it by replaying the event history. Every version stays published at its own address.
Open questions for 1.1:
- Bots as anchors. Fixed-rating bots could tie the scale to fixed reference opponents and give quiet hours a rated game. One option: half-weight observations (, as lichess halves rating changes against bots) with a daily cap.
- Solo condition offsets. A learned offset per clock and movement class for place difficulty (§5.4).
- Measured calibration. Replacing the simulated figures in §10 with live-data estimates, including how well a moving skill is tracked.
14 References
- Bradley, R. A., & Terry, M. E. (1952). Rank analysis of incomplete block designs: I. The method of paired comparisons. Biometrika, 39(3/4), 324–345.
- Ebtekar, A., & Liu, P. (2021). Elo-MMR: A rating system for massive multiplayer competitions. Proceedings of The Web Conference 2021, 1772–1784.
- Elo, A. E. (1978). The Rating of Chessplayers, Past and Present. Arco.
- Glickman, M. E. (1999). Parameter estimation in large dynamic paired comparison experiments. Journal of the Royal Statistical Society, Series C (Applied Statistics), 48(3), 377–394.
- Glickman, M. E. (2001). Dynamic paired comparison models with stochastic variances. Journal of Applied Statistics, 28(6), 673–689.
- Glickman, M. E. (2022). Example of the Glicko-2 system. Boston University (revised 22 March 2022). glicko.net/glicko/glicko2.pdf
- Herbrich, R., Minka, T., & Graepel, T. (2006). TrueSkill: A Bayesian skill rating system. Advances in Neural Information Processing Systems 19.
- Pelánek, R. (2016). Applications of the Elo rating system in adaptive educational systems. Computers & Education, 98, 169–179.
- Rasch, G. (1960). Probabilistic Models for Some Intelligence and Attainment Tests. Danish Institute for Educational Research.
- Bradner, S. (1997). RFC 2119; Leiba, B. (2017). RFC 8174. Key words for use in RFCs to Indicate Requirement Levels. IETF.
- lichess.org rating implementation (scalachess and lila, open source): τ 0.75, starting σ 0.09, σ cap 0.1, 0.21436 periods per day, provisional RD 110.
- [GG] geoguess.es (2026). Reference implementation and research notes: rating engine, bot calibration and scoring scale studies.
A Update algorithm
function update(player, observations, now, o = OGRS): // observations: [{ mu, phi, s, w }]
if player.fixed: return player
mu = (player.rating - 1500) / o.scale
phi = player.rd / o.scale
t = days(now - player.lastAt) * o.periodsPerDay // 0 for a first game
info = Σ w · g(φj)² · E(mu, μj, φj) · (1 - E)
if info == 0: // nothing learned: only inflation
return { ...player, rd: min(o.rdMax, o.scale · sqrt(phi² + t·σ²)) }
v = 1 / info
sum = Σ w · g(φj) · (s - E(mu, μj, φj))
σ' = min(o.volMax, illinoisVolatility(phi, v, v·sum, player.vol, o.tau))
phi* = min(o.rdMax / o.scale, sqrt(phi² + t·σ'²))
phi' = 1 / sqrt(1/phi*² + 1/v)
mu' = mu + phi'² · sum
rating = clamp(1500 + o.scale·mu', player.rating ± o.maxDelta, [o.floor, o.ceil])
rd = clamp(o.scale·phi', o.rdMin, o.rdMax)
return { rating, rd, vol: σ', lastAt: now, games: player.games + 1 }
// duel: update(a, [{ μb, φb_now, s, w: 1 }])
// FFA: per opponent j: { μj, φj_now, s by placement, w: W(n)/n }
// team: per other side T: { μT, φT, s by rank, w: W(n)/n / sqrt(m), expectation from own side's μ }
// solo: scale 2q; per round: { μ_place, φ_place, s: points/Smax, w: 1 }; one update per game
illinoisVolatility is Glickman's step 5 exactly (A = ln σ²; bracket B = ln(Δ² − φ² − v) if Δ² > φ² + v, else step down by τ until f < 0 is left; iterate the Illinois update until |B − A| ≤ 10⁻⁶).
B Test vectors
All players have and last played at the same instant as the match, unless stated otherwise. Inputs are (rating, RD).
| # | Input | Expected output |
|---|---|---|
| V1 | Glickman's example: (1500, 200), σ 0.06, τ 0.5, one batch period, no clamps; beats (1400, 30), loses to (1550, 100) and (1700, 300) | 1464.05 · RD 151.52 · σ 0.059996 (the paper prints 1464.06 after rounding intermediate steps) |
| V2 | Duel (1500, 60) beats (1500, 60) | winner 1509.89, RD 59.15 · loser 1490.11, RD 59.15 · σ 0.060000 |
| V3 | Newcomer (1000, 350, σ 0.09, first game) beats (1400, 60) | 1470.07 · RD 302.96 · σ 0.09004 |
| V4 | (1500, 60), σ 0.06, idle 365 days: current RD | 110.00 |
| V5 | 8-player FFA, all (1500, 60), placements 1…8 | 1st 1522.26 · 4th 1503.18 · 8th 1477.74 |
| V6 | 2 v 2 team duel, all (1500, 60), team 1 wins | each winner 1507.11 · each loser 1492.89 |
| V7 | Solo (doubled scale): newcomer (1000, 350, σ 0.09) plays one five-round game against places (680, 300) 4950 pts · (1190, 250) 3600 · (1280, 200) 2100 · (1340, 200) 900 · (1500, 150) 0 | 1072.24 · RD 252.64 · σ 0.08996 |
| V8 | Stakes for (1500, 60) against (1700, 60) | win +15 · draw +5 · loss −5 |
C Parameters (machine-readable)
{
"standard": "OGRS/1.0",
"scale": 173.7178, "centre": 1500,
"tau": 0.75, "volStart": 0.09, "volMax": 0.1,
"rdStart": 350, "rdMin": 50, "rdMax": 350, "periodsPerDay": 0.21436,
"provisionalRd": 110, "leaderboardRd": 80,
"ratingFloor": 100, "ratingCeil": 4000, "maxDelta": 700,
"ffaC": 2, "teamMemberWeight": "1/sqrt(m)",
"solo": { "scale": 347.4356, "placeLearnsFromRdAtMost": 150 },
"place": { "tau": 0.3, "volStart": 0.03, "rdMin": 30, "rdMax": 300, "periodsPerDay": 0, "maxDelta": 300 },
"seedRd": 250,
"onboarding": { "new": 600, "casual": 1000, "experienced": 1400, "seasoned": 1800, "expert": 2200 },
"pairLimit": { "games": 5, "windowHours": 24 },
"tunable": ["tau", "periodsPerDay", "ffaC", "pairLimit", "leaderboardRd"]
}