কম্পিউটার

C++ এ ইলো রেটিং অ্যালগরিদম


Elo রেটিং অ্যালগরিদম একটি রেটিং অ্যালগরিদম যা প্রতিযোগীতামূলক গেমগুলিতে খেলোয়াড়দের র‍্যাঙ্ক করতে ব্যবহৃত হয়। প্রতিযোগিতার সেরা খেলোয়াড়ের র‍্যাঙ্কিং র‍্যান্টিংয়ের উপর ভিত্তি করে যা খেলোয়াড়ের পারফরম্যান্সের উপর ভিত্তি করে পরিবর্তিত হয়,

ভিন্ন রেটিংয়ের দুই খেলোয়াড়ের মধ্যে একটি খেলার জন্য। ধরা যাক দুইজন খেলোয়াড় একে অপরের বিরুদ্ধে প্রতিদ্বন্দ্বিতা করছে—

প্লেয়ার1 প্লেয়ার2

প্লেয়ার 1 এর রেটিং প্লেয়ার2 এর থেকে বেশি।

যদি player1 গেমটি জিতলে কিছু প্লেয়ার প্লেয়ার1 থেকে প্লেয়ার2 তে স্থানান্তরিত হবে এবং প্লেয়ার2 জিতলে বিপরীতে।

তবে বিজয়ের জন্য যে পরিমাণ রেটিং স্থানান্তর করতে হবে তা ধ্রুবক নয়। পরিবর্তে এটি নির্ভর করে গেমটি জয়ী ব্যক্তির উপর,

যদি প্লেয়ার 1 গেমটি জিতে যায়, স্থানান্তরিত পয়েন্ট কম হয়।
যদি প্লেয়ার 2 গেমটি জিতে যায়, তাহলে পয়েন্ট স্থানান্তরিত হয় বেশি।

স্থানান্তরিত পয়েন্টের পরিমাণ সূত্রের উপর নির্ভর করে,

প্লেয়ার1 এর জন্য,

নতুন রেটিং =পুরানো রেটিং + রেটিং কনস্ট্যান্ট * (সফলতা - P1)

প্লেয়ার2 এর জন্য,

নতুন রেটিং =পুরানো রেটিং + রেটিং কনস্ট্যান্ট * (সফলতা - P2)

এখানে,

ratingConstant একটি ধ্রুবক, এটি গেমিং সম্প্রদায় দ্বারা নির্ধারিত হয়৷

P1, খেলোয়াড়1 জয়ের সম্ভাবনা।
P2, প্লেয়ার2 জয়ের সম্ভাবনা।

Rating1 হল player1 এর রেটিং।
Rating2 হল player2 এর রেটিং।

একজন খেলোয়াড় জিতলে সফলতাপ্রবণ হয় 1 অন্যথায় তার 0।

ইএলও রেটিং অ্যালগরিদমের কাজ বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট: রেটিং 1 =782, রেটিং 2 =1432,
ratingConstant =100, player1 গেমটি জিতেছে।

আউটপুট: রেটিং1 =780, রেটিং2 =1434

ব্যাখ্যা -

প্লেয়ার1 জিতেছে,

প্লেয়ার1 এর জন্য,

সাফল্যপ্রবণ =1

নতুন রেটিং =782 + 100*(1 - 0.98) =782 + 100*(0.02) =782 + 2 =784

প্লেয়ার2 এর জন্য,

successProb =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

  1. C/C++ এ বার্কলের অ্যালগরিদম

  2. C++ এ কম্পিউটার গ্রাফিক্সে পয়েন্ট ক্লিপিং অ্যালগরিদম

  3. সর্বোত্তম পৃষ্ঠা প্রতিস্থাপন অ্যালগরিদমের জন্য C++ প্রোগ্রাম

  4. C++ এ বেলম্যান ফোর্ড অ্যালগরিদম?