ELO रेटिंग एल्गोरिदम प्रतिस्पर्धी खेलों में खिलाड़ियों को रैंक करने के लिए उपयोग किया जाने वाला एक रेटिंग एल्गोरिदम है। प्रतियोगिता में खिलाड़ी की रैंकिंग रेटिंग पर आधारित होती है जो खिलाड़ी के प्रदर्शन के आधार पर बदलती है:
दो अलग-अलग रेटिंग वाले खिलाड़ियों के बीच खेल के लिए। मान लीजिए दो खिलाड़ी एक-दूसरे के खिलाफ प्रतिस्पर्धा कर रहे हैं:
खिलाड़ी 1 खिलाड़ी 2
खिलाड़ी 1 की रेटिंग खिलाड़ी 2 से अधिक है।
यदि खिलाड़ी 1 खेल जीतता है तो कुछ अंक खिलाड़ी 1 से खिलाड़ी 2 को स्थानांतरित होंगे और इसके विपरीत यदि खिलाड़ी 2 जीतता है।
लेकिन जीत के लिए स्थानांतरित की जाने वाली रेटिंग की मात्रा स्थिर नहीं होती। बल्कि यह जीतने वाले व्यक्ति पर निर्भर करती है:
- यदि खिलाड़ी 1 जीतता है, तो स्थानांतरित अंक कम होते हैं।
- यदि खिलाड़ी 2 जीतता है, तो स्थानांतरित अंक अधिक होते हैं।
स्थानांतरित अंकों की मात्रा सूत्र पर निर्भर करती है:
खिलाड़ी 1 के लिए:
नई रेटिंग = पुरानी रेटिंग + रेटिंगकॉन्स्टेंट * (सक्सेसप्रोब - P1)
खिलाड़ी 2 के लिए:
नई रेटिंग = पुरानी रेटिंग + रेटिंगकॉन्स्टेंट * (सक्सेसप्रोब - P2)
यहां:
- रेटिंगकॉन्स्टेंट एक स्थिरांक है, यह गेमिंग समुदाय द्वारा तय किया जाता है।
- P1, खिलाड़ी 1 के जीतने की संभावना।
- P2, खिलाड़ी 2 के जीतने की संभावना।
- रेटिंग1 खिलाड़ी 1 की रेटिंग है।
- रेटिंग2 खिलाड़ी 2 की रेटिंग है।
- यदि कोई खिलाड़ी जीतता है तो सक्सेसप्रोब 1 है अन्यथा 0।
ELO रेटिंग एल्गोरिदम की कार्यप्रणाली समझने के लिए उदाहरण:
इनपुट: रेटिंग1 = 782, रेटिंग2 = 1432,
रेटिंगकॉन्स्टेंट = 100, खिलाड़ी 1 खेल जीतता है।
आउटपुट: रेटिंग1 = 780, रेटिंग2 = 1434
व्याख्या:
खिलाड़ी 1 जीतता है,
खिलाड़ी 1 के लिए:
सक्सेसप्रोब = 1
नई रेटिंग = 782 + 100*(1 - 0.98) = 782 + 100*(0.02) = 782 + 2 = 784
खिलाड़ी 2 के लिए:
सक्सेसप्रोब = 0
नई रेटिंग = 1432 + 100*(0 - 0.02) = 1432 - 2 = 1430
ELO रेटिंग एल्गोरिदम की कार्यप्रणाली को दर्शाने वाला प्रोग्राम:
उदाहरण
#include <bits/stdc++.h>
using namespace std;
void updateRatingUsingELoRating(float rating1, float rating2, int ratingConstant, bool player1SuccessProb) {
float P1, P2;
if (rating1 > rating2) {
P1 = (1.0 / (1.0 + pow(10.0, ((rating1 - rating2) / 400.0))) );
P2 = 1 - P1;
} else {
P2 = (1.0 / (1.0 + pow(10.0, ((rating2 - rating1) / 400.0))) );
P1 = 1 - P2;
}
if (player1SuccessProb == 1) {
rating1 = rating1 + ratingConstant * (1 - P1);
rating2 = rating2 + ratingConstant * (0 - P2);
} else {
rating1 = rating1 + ratingConstant * (0 - P1);
rating2 = rating2 + ratingConstant * (1 - P2);
}
cout << "Ratings After the game\n";
cout << "Player 1 : " << rating1 << "\t Player 2 : " << rating2;
}
int main() {
float rating1 = 782, rating2 = 1432;
int ratingConstant = 100;
bool player1SuccessProb = 1;
cout << "Ratings before the game: \n";
cout << "Player 1 : " << rating1 << "\t Player 2 : " << rating2 << endl;
if (player1SuccessProb)
cout << "Player 1 wins the game!\n";
else
cout << "Player 2 wins the game!\n";
updateRatingUsingELoRating(rating1, rating2, ratingConstant, player1SuccessProb);
return 0;
}
आउटपुट:
Ratings before the game: Player 1 : 782 Player 2 : 1432 Player 1 wins the game! Ratings After the game Player 1 : 784.316 Player 2 : 1429.68