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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C编程
C++
C#
MongoDB
MySQL
Javascript
PHP