C++中的Elo評級演算法


Elo評級演算法是一種用於對競技遊戲中玩家進行排名評級的演算法。比賽中玩家的排名是基於評級,評級會根據玩家的表現發生變化,具體如下:

對於兩個評級不同的玩家之間的比賽。假設有兩個玩家互相競爭:

玩家1                          玩家2

玩家1的評級高於玩家2。

如果玩家1獲勝,則一些評級將從玩家1轉移到玩家2,反之亦然,如果玩家2獲勝。

但勝利後轉移的評級數量不是恆定的。相反,它取決於贏得比賽的人,

如果玩家1獲勝,則轉移的點數較少。
如果玩家2獲勝,則轉移的點數較多。

轉移的點數取決於以下公式:

對於玩家1,

新評級 = 舊評級 + 評級常數 * (獲勝機率 - P1)

對於玩家2,

新評級 = 舊評級 + 評級常數 * (獲勝機率 - P2)

這裡,

評級常數是一個常數,由遊戲社群決定。

P1,玩家1獲勝的機率。
P2,玩家2獲勝的機率。

Rating1是玩家1的評級。
Rating2是玩家2的評級。

如果一個玩家獲勝,則獲勝機率為1,否則為0。

讓我們舉一個例子來理解Elo評級演算法的工作原理:

輸入:rating1 = 782,rating2 = 1432,
ratingConstant = 100,玩家1贏得比賽。

輸出:rating1 = 780,rating2 = 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);
      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

更新於: 2021年1月22日

518 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.