How is the preferans rating calculated?
Why rating is needed
Preferans is traditionally played for stakes. SmartPref does not use real money because that would violate the app stores' rules, but a game still needs something at stake. Winning a single pool is less important than having a result that stays with you after the game. Rating fills that role: every deal affects it. It gives players a shared result they can compare and something meaningful to play for.
How it used to work
Originally, rating was calculated once the entire game had ended. That sounds logical enough because Preferans itself is scored at the end of the game. A win was supposed to increase the rating, while a loss reduced it proportionally. But this caused several problems. Players sometimes leave before the game ends, including when their connection drops. Taking away rating for the whole game is too harsh when the system cannot tell a deliberate exit from a lost connection.
There was a more serious reason to abandon that system. Rating was not intended to be cumulative, but even with smoothing it gradually became just that. The longer someone played, the higher their rating tended to be, and the overall values kept rising. This inflation was especially discouraging for newcomers, who immediately found themselves facing players with an enormous and ever-growing head start. Seeing the top players with ratings in the millions is discouraging, wouldn't you agree?
How it works now
- Each player's rating change is calculated after every deal, not after the whole game. Each Preferans deal is also a zero-sum game, just like the game as a whole.
- The calculation uses the current ratings of every opponent at the table.
- Each bot difficulty has a maximum rating. This prevents players from farming bots indefinitely, though it still allows farming up to fairly high values.
- Rating changes are smoothed near the edges of the scale. A highly rated player is not penalized too heavily for playing against a new opponent whose rating is still too low to reflect their actual skill. A low-rated player also does not gain too much from a rare win against a strong opponent.
How rating is calculated
Rating is calculated after each deal. The final rating for the game is the sum of the ratings for all played deals. (Jump to rating calculator)
Main points:
- The initial player rating is 1000
- In the amateur league, the rating can decrease
- You need 1800 to move to the Pro league
- The leaderboard can be sorted by current rating or by the highest rating achieved
- Rn - new rating; Rs - current rating; Rd - delta gained for this deal
Rn = Rs + Rd
- Rd - rating delta after each deal (after rating 4000, smoothing is applied)
Vs - your whists scored (see Kd coefficient below)
Vs > Vf: Rd = + Kd * sqrt(Vs - Vf)
Vs < Vf: Rd = - Kd * sqrt(Vf - Vs)
- Vf - expected whist result
Vf = min((Rs - Rt) / Kv, 4) (see Rt and Kv below)
The maximum Vf is limited to +4, assuming that 4 whists (the minimum possible win in a six-game) should not be penalized
- Kv - expected whist factor — depends on your rating. Makes expectations fairer: high-rated players are expected to do well, but not unrealistically. Players with a rating of 1000 should not gain rating if they score less than -5 whists against the current normal bot (1800).
if (Rs > Rt): Kv = 60 + (Rs - Rt) / X (X=6 found empirically)
else: Kv = 60 + (Rt - Rs) / Y (Y=22 found empirically)
- Kd - dynamic deal coefficient — decreases as the gap between your rating and the table rating grows.
High-rated players do not lose rating despite winning.
Low-rated players do not gain too much for rare wins.
Kd = clamp(baseKd / (1.0 + log10(1 + diff / 100)), minKd, maxKd)
baseKd = 2.0 (base value)
minKd = 0.3 (minimum limit)
maxKd = 2.0 (limit for low-rated players against strong tables)
diff = abs(Rs - Rt) - absolute rating difference
- Rr1, Rr2, Rr3 - opponent ratings; the higher a user’s rating, the more it influences the table average:
Rs - your rating
Rt - table rating
Two players:
Rt = Rr1
Three players:
Rt = (Rr1 * 2 + Rr2) / 3 (where Rr1 ≥ Rr2)
Four players:
Rt = (Rr1 * 3 + Rr2 * 2 + Rr3) / 6 (where Rr1 ≥ Rr2 ≥ Rr3)
Below is a calculator you can use to better understand how the rating is calculated: just enter numbers and the values will update automatically.
Each row is your rating. Columns are the average rating of your opponents.
