-
Notifications
You must be signed in to change notification settings - Fork 3
/
elo.cpp
56 lines (46 loc) · 1.15 KB
/
elo.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// CPP program for Elo Rating
#include <iostream>
#include <math.h>
using namespace std;
static float Ra = 2500, Rb = 2200;
// Function to calculate the Probability
float Probability(int rating1, int rating2)
{
return 1.0 * 1.0 / (1 + 1.0 * pow(10, 1.0 * (rating1 - rating2) / 400));
}
// Function to calculate Elo rating
// K is a constant.
// d determines whether Player A wins or Player B.
void EloRating(float Ra, float Rb, int K, bool d)
{
// To calculate the Winning
// Probability of Player B
float Pb = Probability(Ra, Rb);
// To calculate the Winning
// Probability of Player A
float Pa = Probability(Rb, Ra);
// Case -1 When Player A wins
// Updating the Elo Ratings
if (d == 1)
{
Ra = Ra + K * (1 - Pa);
Rb = Rb + K * (0 - Pb);
}
// Case -2 When Player B wins
// Updating the Elo Ratings
else
{
Ra = Ra + K * (0 - Pa);
Rb = Rb + K * (1 - Pb);
}
cout << "Updated Ratings:-\n";
cout << "Ra = " << Ra << " Rb = " << Rb;
}
int main()
{
// Ra and Rb are current ELO ratings
int K = 30;
bool d = 1;
EloRating(Ra, Rb, K, d);
return 0;
}