Sunday 16 April 2017

How to Use ELO Ranking for Team Deathmatch with Formula and Example

Include example file, you can get it here if you don't want to scroll :)

Have you ever wondered about Ranked Play mechanism of League of Legends, DOTA2 and Overwatch? Maybe you read about it somewhere, that they use the so-called ELO system to calculate the points gained/lost after match.



Let's assume you want to  build the same thing for the coming game, and Riot or Valve isn't going to reveal how they implement the system, which let us to this post.

So, make it short, I'm going to show you how to use the ELO system for Team Deathmatch (a mode in which two teams consist of player with the same skill are gathered and fight for victory). Although this term is widely used for FPS game,

I believe it's OK if we considered League of Legends and DOTA 2 are, at core, Team Deathmatch

Introducing ELO Rating System

I'm not going into details about this system since you can find a lot of useful information here on Wiki

In a nutshell, this system introduces a way to calculate the relative skill levels of players in competitor-versus-competitor games, such as chess. And although it was first used as a way to improve chess rating system, ELO Rating system has found its way into many video games with the PvP mode.

Please note, ELO itself has its own strong and weak points and isn't the only rating system in the world, so you can find other system to suit your needs.
In my opinion, the strong and weak points of the ELO system are

Strong Points 

  • Easy to Understand: it does require doing some MAth stuff, but don't worry, it's easy.
Weak Points
  • If implement in game, especially in Team Deathmatch, the ELO system doesn't care about your performance in the game, it just gives you a flat point based on the final result. If you played well and your team loses, sorry, the points are lost.
Note :

This is what I came up using my own research and I have no idea if Riot and Valve or any big game company could use the same thing as mine. They surely have their own system and we don't know the heck about it. 

This is a very basic ELO system and it may have errors (I'm not so good in Math :) ), I'm open to your comments and contributions. (And use it in your own risk)

OK, let's go

ELO Rating System for Team Deathmatch

Methodology

  • Since ELO system is initially built for personal match, to use it for Team Deathmatch, we must assume two teams are two players, each with the ELO summed up from all teammates.
  • If one team has bigger ELO points than the other team, the team is more likely to win. So if it's not, then it loses more points.
  • The member with the most ELO Point in team will get smallest share in ELO points when team wins, and lose more points when the team loses.

Calculation

(this site provides the calculation of ELO system for chess, which I use for my method https://metinmediamath.wordpress.com/2013/11/27/how-to-calculate-the-elo-rating-including-example/)


Step 1 : Get current ELO Points for each team






Step 2 : %ELO Point of each team mate



Step 3 : Compute transformed ELO rating points of each team

           

r(1) and r(2) : current Elo points of each team.

Step 4: Compute the expected score of each team (E)



                                   
Step  5 : After the match is over, get the actual score





Step 6 : Get the updated ELO point of each team





r’(1) và r’(2) : updated Elo point of each team.
K -factor: K = 32

Step 7 :Get delta_r of each team


It's the difference between old and new ELO Point


Step 8 : Compute new ELO Point of each teammate

Multiply %r  of each member with the Dr, sort the result in ascending order
·         If the team lost: The member with the biggest %r will get subtracted the most point.
·         If the Team Won: The member with the biggest %r will get the smallest point..

Confused? Get this file and I'll illustrate the system in step by step

https://drive.google.com/open?id=0BzRDev8MAFcaZEp1bjlKWWNtWkE

Do you have any comment, please share with me.

Reference


12 comments:

  1. There is "và" in r’(1) và r’(2) bro ;)

    ReplyDelete
  2. Thank you for the clearly explained article btw.

    ReplyDelete
  3. I think we should calculate the average Elo rating each team before we compute transformed ELO rating points of each team

    ReplyDelete
  4. Thanks for spotting that type lol

    I think it's another approach, although I'm not so sure.

    The aim of this method is get the share of ELO points from each player in a team, hence using the total instead of the average value

    The last part is to get the difference between the old and new ELO of each team, so if we use the average value, do we have to multiply it again to the number of player to get the correct value?

    ReplyDelete
    Replies
    1. Hi @Tom Nguyen,

      Using total Elo is definitely a correct way to define the Elo for each member after the match. However, the Elo concept is for one player, not multiple players.
      So we must calculate the average Elo after we have the total one, do the maths and when we have the new Elo for each team, calculate the Elo for each member.
      You can try your formula in the speadsheet with 5 or more member, you will see that the result seems not correct.

      Delete
  5. Thank you for joining the discussion.

    As I stated clearly in the post (Methodology), ELO is the concept for single players, so adapting this one into a Team Deathmatch needs modification.

    And, could you be more specific about your steps? An Excel file is welcome. As I can't figure it out when and why should we calculate the average ELO, and when should we get the total one based on your response.

    About the errors in the formula, thanks for telling me it has error. But, I need the details (Excel file is welcome)

    Thank you, looking forward to your contribution.

    ReplyDelete
  6. Here it is: https://docs.google.com/spreadsheets/d/1AvLMzqOFZbAbw6IYwZTJxMmccNAOEOotqaSNh5hqsTw/edit#gid=442530460

    ReplyDelete
  7. Hi Mr.Anh

    Thank you for posting your work. I'd appreciate it.

    But, I can't understand your point.

    Your version is using a DIFFERENT approach than mine (use average ELO instead of Total ELO)

    And you claimed that my method is wrong? I can't get it.

    Please take a look at your worksheet and review it again, because I can't correct something which is not mine.

    ReplyDelete
    Replies
    1. Hi Tom,

      You can check your formula by add more player to each team, ex: 10 players per team. Then you check the final Elo of each player using your method and you will notice the problem.
      Btw, I need to ask you another scenario: There are more than 2 players but they compete to the rest ones instead of only 2 team. Ex: A free for all match in shooting game. So 10 players will be 10 teams. And we need to calculate the Elo for each player after the match.
      I found this article but since I'm bad at math, I cannot transform it to a real spreadsheet formula.
      http://sradack.blogspot.ru/2008/06/elo-rating-system-multiple-players.html

      Thanks,
      Anh

      Delete
    2. Hi Mr.Anh

      Thanks for the heads up, I"ll look into it (please note that I'll pass on your method because you're using a different approach than mine)

      But could you please tell me briefly about the problem? Thanks in advance

      About your problem, please take a look at my latest post about Deathmatch ELO.

      Delete
  8. Hi Tom,

    I may be wrong but the principle of Elo system is used for 2 players. Therefore, If you use the total Elo for the team, there will be big range between 2 Elo number (the gap between 2 team could be big) and the formula (which is only used for smaller number) could be wrong.
    I'm waiting for your test anyways since I'm not good at math. I just see the result using my method is reasonable (comparing with K-factor, the biggest possible Elo change).

    ReplyDelete
  9. Thanks a lot for this.

    The calculation in the google sheet for the losing team is wrong. Cells K3,K4,K5 should use $J$7(r(2) instead of $C$7 (r(1))

    ReplyDelete