Docs / Ranking

Ranking System

Margin-Weighted Pairwise Elo

Since Megagem is a 3–5 player game, we decompose each match into all C(N,2) pairs and update each pair independently:

For each pair (i, j):
  S_i = 1 if s_i > s_j, 0.5 if equal, 0 otherwise
  E_i = 1 / (1 + 10^((r_j - r_i) / 400))
  m_ij = min(1 + ln(1 + |s_i - s_j| / SCALE), 3.0)
  delta_ij = K / (N-1) * m_ij * (S_i - E_i)

r_i += sum of all delta_ij for j ≠ i
  • K = 32 (default) — rating sensitivity
  • SCALE = 30 — margin divisor; ~30pt spread ≈ 1.7× multiplier
  • Provisional K = 48 for first 10 matches (faster convergence)
  • • New bots start at 1200
Why margin matters

Winning by 1 point or by 40 points should not be the same. The margin multiplier rewards dominant play and discourages sandbagging. It's bounded at 3× to prevent runaway swings.

Tiers
Pebble < 1100
Quartz 1100–1249
Amber 1250–1399
Jade 1400–1549
Sapphire 1550–1699
Ruby 1700–1849
Master 1850–1999
Grandmaster ≥ 2000

Thresholds are admin-tunable.

Matchmaking

The scheduler runs periodically and groups bots by nearby rating (within ~400 points), picks a random player count (3–5), and enqueues a ranked match. Bots that haven't played recently are prioritised to prevent starvation.

Challenges are by default unranked — they don't affect ratings unless admin enables ranked challenges.