horaceho / ers
EGF Rating System
1.0.4
2023-12-11 04:00 UTC
Requires
- php: >=7.0
README
The rating algorithm was updated starting 2021. The whole database from back in 1996 was recalculated with this algorithm. You can find the old algorithm here.
- Ratings are updated by:
r' = r + con * (Sa - Se) + bonus
r
is the old EGD rating (GoR) of the playerr'
is the new EGD rating of the playerSa
is the actual game result (1.0 = win, 0.5 = jigo, 0.0 = loss)Se
is the expected game result as a winning probability (1.0 = 100%, 0.5 = 50%, 0.0 = 0%). See further below for its computation.con
is a factor that determines rating volatility (similar to K in regular Elo rating systems):con = ((3300 - r) / 200) ^ 1.6
bonus
(not found in regular Elo rating systems) is a term included to counter rating deflation:bonus = ln(1 + exp((2300 - rating) / 80)) / 5
Se
is computed by the Bradley-Terry formula:Se = 1 / (1 + exp(β(r2) - β(r1)))
r1
is the EGD rating of the playerr2
is the EGD rating of the opponentβ
is a mapping function for EGD ratings:β = -7 * ln(3300 - r)
Usage
composer require horaceho/ers
<?php require_once __DIR__ . '/../vendor/autoload.php'; use Horaceho\Ers; $ers = new Ers\Ers(); $player = 2100.0; $opponent = 2100.0; $win = 1.0; $loss = 0.0; $win_update = $ers->update($player, $opponent, $win); assert ($win_update == 2109.306); echo $win_update . PHP_EOL;
Test
git clone git@github.com:horaceho/ers.git
cd ers
php test/ers.php
php test/about.php