ইলো রেটিং অ্যালগরিদম হলো প্রতিযোগিতামূলক গেমে খেলোয়াড়দের র্যাঙ্ক করার জন্য একটি রেটিং অ্যালগরিদম। প্রতিযোগিতায় খেলোয়াড়দের র্যাঙ্কিং তাদের রেটিংয়ের ভিত্তিতে করা হয় যা খেলোয়াড়দের পারফরম্যান্স অনুযায়ী পরিবর্তিত হয়।
বিভিন্ন রেটিংয় 가진 দুটি খেলোয়াড়দের মধ্যে একটি গেম হলে। মনে করুন দুটি খেলোয়াড়র একে অপরের সাথে প্রতিযোগিতা করছে:
খেলোয়াড় ১ খেলোয়াড় ২
খেলোয়াড় ১-র রেটিং খেলোয়াড় ২-র চেয়ে বেশি।
যদি খেলোয়াড় ১ জিতেন তবে কিছু পয়েন্ট খেলোয়াড় ১ থেকে খেলোয়াড় ২-এ ট্রান্সফার হবে এবং বিপরীত হলে খেলোয়াড় ২ জিতলে।
তবে বিজয়ের জন্য ট্রান্সফার হওয়া পয়েন্টের পরিমাণ কনস্ট্যান্ট নয়। এটি বিজয়ী খেলোয়াড়ের উপর নির্ভর করে,
যদি খেলোয়াড় ১ জিতেন, ট্রান্সফার হওয়া পয়েন্ট কম।
যদি খেলোয়াড় ২ জিতেন, ট্রান্সফার হওয়া পয়েন্ট বেশি।
ট্রান্সফার হওয়া পয়েন্টের পরিমাণ নিম্নলিখিত সূত্রের ওপর নির্ভর করে,
খেলোয়াড় ১-এর জন্য,
নতুন রেটিং = পুরনো রেটিং + রেটিং কনস্ট্যান্ট * (সাক্সেসপ্রব - P1)
খেলোয়াড় ২-এর জন্য,
নতুন রেটিং = পুরনো রেটিং + রেটিং কনস্ট্যান্ট * (সাক্সেসপ্রব - P2)
এখানে,
রেটিং কনস্ট্যান্ট একটি কনস্ট্যান্ট, এটি গেমিং কমিউনিটি দ্বারা নির্ধারিত হয়।
P1, খেলোয়াড় ১ জয়ের সম্ভাবনা।
P2, খেলোয়াড় ২ জয়ের সম্ভাবনা।
Rating1 হলো খেলোয়াড় ১-এর রেটিং।
Rating2 হলো খেলোয়াড় ২-এর রেটিং।
যদি খেলোয়াড় জিতেন তবে successProb ১, অন্যথায় ০।
উদাহরণ দিয়ে ইলো রেটিং অ্যালগরিদম বুঝি
ইনপুট: rating1 = 782, rating2 = 1432,
ratingConstant = 100, player1 wins the game.
আউটপুট: rating1 = 780, rating2 = 1434
ব্যাখ্যা -
Player1 wins,
For player1,
successProb = 1
New rating = 782 + 100*(1 - 0.98) = 782 + 100*(0.02) = 782 + 2 = 784
For player2,
successProb = 0
New rating = 1432 + 100*(0 - 0.02) = 1432 - 2 = 1430
ইলো রেটিং অ্যালগরিদম minhaj করার প্রোগ্রাম
#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