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