C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのEloレーティングアルゴリズム


イロレーティングアルゴリズム は、競争の激しいゲームでプレーヤーをランク付けするために使用される評価アルゴリズムです。競技会の選手のランキングは、選手のパフォーマンスに応じて次のように変化する暴言に基づいています。

異なる評価の2人のプレーヤー間のゲームの場合。 2人のプレーヤーが互いに競争しているとしましょう-

Player1 Player2

player1の評価はplayer2よりも大きいです。

player1の場合 ゲームに勝った場合、一部のプレーヤーはプレーヤー1からプレーヤー2に転送され、プレーヤー2が勝った場合はその逆になります。

しかし、勝利のために転送される評価の量は一定ではありません。代わりに、ゲームに勝った人に依存します。

player1がゲームに勝った場合、転送されるポイントは少なくなります。
player2がゲームに勝った場合、転送されるポイントはさらに多くなります。

転送されるポイントの量は、数式によって異なります。

player1の場合

新しい評価=古い評価+ratingConstant*(successProb-P1)

player2の場合、

新しい評価=古い評価+ratingConstant*(successProb-P2)

ここで

RatingConstantは定数であり、ゲームコミュニティによって決定されます。

P1、player1が勝つ確率。
P2、player2が勝つ確率。

Rating1はplayer1のレーティングです。
Rating2はplayer2の評価です。

プレイヤーがsuccessProbに勝った場合、それ以外の場合は0になります。

例を挙げて、ELOレーティングアルゴリズムの動作を理解しましょう。

入力: レーティング1=782、レーティング2 =1432、
ratingConstant =100、player1がゲームに勝ちます。

出力: 評価1=780、評価2 =1434

説明-

Player1が勝ちます

player1の場合

successProb =1

新しい評価=782+ 100 *(1-0.98)=782 + 100 *(0.02)=782 + 2 =784

player2の場合、

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

  1. 最適なページ置換アルゴリズムのためのC++プログラム

    与えられたページ番号とページサイズ。タスクは、最適なページ置換アルゴリズムを使用してメモリブロックをページに割り当てるときのように、ヒットとミスの数を見つけることです。 最適なページ置換アルゴリズムとは何ですか? 最適なページ置換アルゴリズムは、ページ置換アルゴリズムです。ページ置換アルゴリズムは、どのメモリページを置換するかを決定するアルゴリズムです。最適なページ置換では、実際には実装できませんが、近い将来に参照されないページを置換しますが、これは最適であり、ミスが最小限であり、最適です。 例を使って図式的に説明して理解しましょう。 ここで、1、2、3を割り当てた後、メモリが

  2. C ++のベルマンフォードアルゴリズム?

    ベルマンフォードアルゴリズムは、開始頂点として扱われる頂点から計算された頂点の最短経路を見つけるために使用される動的計画法アルゴリズムです。このアルゴリズムは反復法に従い、最短パスを継続的に見つけようとします。重み付きグラフのベルマンフォードアルゴリズム。 このアルゴリズムは、1955年にAlphonsoshimbelによって提案されました。アルゴリズムにはRichardBellmanとLesterFordによる改訂があります。 1956年と1958年に、このアルゴリズムのためにベルマンフォードアルゴリズムと名付けられました。 。このアルゴリズムは、1957年にEward F. Mooreに