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 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告