एलो रेटिंग एल्गोरिथम एक रेटिंग एल्गोरिथ्म है जिसका उपयोग प्रतिस्पर्धी खेलों में खिलाड़ियों को रैंक करने के लिए किया जाता है। प्रतियोगिता के खिलाड़ी की रैंकिंग रेंटिंग पर आधारित होती है जो खिलाड़ी के प्रदर्शन के आधार पर निम्नानुसार बदलती है,
विभिन्न रेटिंग के दो खिलाड़ियों के बीच एक खेल के लिए। मान लें कि दो खिलाड़ी एक दूसरे के खिलाफ प्रतिस्पर्धा कर रहे हैं-
खिलाड़ी1 खिलाड़ी2
खिलाड़ी1 की रेटिंग खिलाड़ी2 से अधिक है।
अगर खिलाड़ी1 खेल जीतता है कुछ खिलाड़ी खिलाड़ी 1 से खिलाड़ी 2 में स्थानांतरित कर दिए जाएंगे और इसके विपरीत यदि खिलाड़ी 2 जीत जाता है।
लेकिन जीत के लिए ट्रांसफर की जाने वाली रेटिंग की मात्रा स्थिर नहीं है। इसके बजाय यह गेम जीतने वाले व्यक्ति पर निर्भर है,
यदि खिलाड़ी 1 गेम जीतता है, तो ट्रांसफर किए गए अंक कम होते हैं।
यदि खिलाड़ी 2 गेम जीतता है, तो ट्रांसफर किए गए अंक अधिक होते हैं।
हस्तांतरित अंकों की मात्रा सूत्र पर निर्भर करती है,
प्लेयर1 के लिए,
नई रेटिंग =पुरानी रेटिंग + रेटिंग कॉन्स्टेंट * (successProb - P1)
प्लेयर2 के लिए,
नई रेटिंग =पुरानी रेटिंग + रेटिंग लगातार * (सफलता की समस्या - पी2)
यहां,
रेटिंग कॉन्स्टेंट एक स्थिरांक है, यह गेमिंग समुदाय द्वारा तय किया जाता है।
P1, खिलाड़ी1 के जीतने की प्रायिकता।
P2, खिलाड़ी2 के जीतने की संभावना।
रेटिंग 1 खिलाड़ी 1 की रेटिंग है।
रेटिंग2 खिलाड़ी2 की रेटिंग है।
अगर कोई खिलाड़ी जीतता है तो सक्सेसप्रोब 1 होता है नहीं तो यह 0 होता है।
ईएलओ रेटिंग एल्गोरिथम की कार्यप्रणाली को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: रेटिंग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
ईएलओ रेटिंग एल्गोरिथम की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#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); rating1 = rating1 + 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