บทนำ
Elo Rating Algorithm ใช้อันดับผู้เล่นในเกมแข่งขัน คะแนนจะเปลี่ยนตามผลการแข่งขัน
หลักการทำงาน
ผู้เล่นสองคน มี Rating คือ R1, R2
- ถ้าผู้เล่น 1 ชนะ: คะแนนที่โอนน้อย (เพราะคาดการณ์ไว้ว่าเขาจะชนะ)
- ถ้าผู้เล่น 2 ชนะ: คะแนนที่โอนมาก (เพราะเป็น Upset)
สูตร:
P1 = 1 / (1 + 10^((R2-R1)/400)) // ความน่าจะเป็น P1 ชนะ P2 = 1 - P1 New_R1 = R1 + K * (S1 - P1) New_R2 = R2 + K * (S2 - P2) K = Rating Constant (เช่น 10-40) S = 1 ถ้าชนะ, 0 ถ้าแพ้, 0.5 ถ้าเสมอ
ตัวอย่าง
R1=782, R2=1432, K=100, Player 1 ชนะ
P1 ≈ 0.02, P2 ≈ 0.98
New R1 = 782 + 100×(1-0.02) = 782 + 2 = 784
New R2 = 1432 + 100×(0-0.98) = 1432 - 98 = 1334
โปรแกรมตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
void updateEloRating(float r1, float r2, int K, bool p1Wins) {
float P1 = 1.0 / (1.0 + pow(10.0, (r2 - r1) / 400.0));
float P2 = 1 - P1;
float s1 = p1Wins ? 1 : 0;
float s2 = p1Wins ? 0 : 1;
r1 = r1 + K * (s1 - P1);
r2 = r2 + K * (s2 - P2);
cout << "New Ratings: Player 1 = " << r1 << ", Player 2 = " << r2;
}
int main() {
float r1 = 782, r2 = 1432;
int K = 100;
bool p1Wins = true;
updateEloRating(r1, r2, K, p1Wins);
return 0;
}