Not_That Profile Joined April 2011 287 Posts Last Edited: 2012-07-19 18:24:37 #1 We have a working MMR Calculator as an SC2Gears plugin. Simply play games with it installed with SC2Gears open in the background and it will automatically calculate your MMR for you. You can read more about it in the tool's thread.



I've decided to rewrite this post to explain what we know thus far as this thread is quite lengthy. The original OP can be found in a spoiler at the end if anyone is curious.



MMR is the 'skill' rating in the ladder system. MMR represents a player's strength more accurately than league, ladder points, adjusted points, or division rank.





How points change are calculated

When a ladder match ends, the ladder system performs the following calculation to determine each player's adjusted points change:



For players below Master league:

Player A points change = max(CAP(- A_adjusted_points), F(B_dmmr - A_adjusted_points))



For players in Master-GM leagues:

Player A points change = max(1, F(B_dmmr - A_adjusted_points))

(players in Master-GM have no cap beside 1 point minimum per game)



Where:

adjusted_points = ladder points - spent bonus pool points

B_dmmr = player B's MMR - player A's league and tier offset



If player lost, then subtract 24 from his points change.



F and CAP functions are described in the following table:



Note that CAP is defined in this table as receiving the negative of the adjusted points. F is an ELO function with k = 24, which takes as parameters dmmr and adjusted points. It compares MMR based number with adjusted points. Also note that adjusted points are reset every season, MMR is not.





An example calculation

Player A is in Diamond league in the 2nd highest tier (offset 1733), has 130 adjusted points, and 1800 MMR.

Player B is in Diamond league in the bottom tier (offset 1463), has 200 adjusted points, and 1500 MMR.

Player B wins the match.



A points change = max(CAP(-130), F((1500-1733) - 130))

A points change = max(CAP(-130), F(-363))

A points change = max(11, 3)

A points change = 11



Since A lost, his points change is 11 - 24 = -13 points.

If A was in a league that isn't capped, his points change would've been 3 - 24 = -21.



We can likewise calculate B's points change:

B points change = max(CAP(-200), F((1800-1463) - 200))

B points change = max(CAP(-200), F(137))

B points change = max(8, 17)

B points change = 17



B receives 17 adjusted points.



To perform these calculations I had to know the league and tier offsets. Here are our latest estimates for them:





Additionally I had to know which tiers the players belong to. This can be difficult to know for players below Master league as they each have 2-7 tiers which are hidden.





What is the purpose of the CAP function

The CAP function causes players' adjusted points to artificially stay higher than they otherwise would've been. It was probably implemented at the beginning of season 3 to address a problem where players with low MMRs played opponents with MMRs below their division offset, thus won few points per game and lost many. This resulted in these players having a hard time using up their bonus pool and eventually get discouraged once their bonus pool rose too high. Additionally it was possible in extreme cases to receive 0 points for a win.



Another possible reason for the CAP function is simply to artificially raise players' points above 0 for psychological reasons, as well as encourage playing in the beginning of each new season when players start off with 0 points, and thus would rise in points the more they played.



Unfortunately for us, the existence of a CAP makes it harder for us to perform reverse calculations of players' MMR. Any player who wins equal points to the CAP gives us merely a maximum limit on the opponent's MMR, instead of a narrow range as is otherwise the case.





The uncertainty value

Alongside MMR, the system stores an uncertainty value for each player. We don't have much information about it as of yet, but we have strong evidence to suggest that this value does not play a big role in MMR calculations. We know that for new players the uncertainty value is large, causing their MMR to shift dramatically each game. Evidence:



Compare that to the MMR movement of an old player:



This player is moving from Bronze MMR all the way to Master MMR during league lock. Yet his MMR changes on a game by game basis similarly to how it does for players who are much steadier. On average over large quantities of matches we see +16 MMR per win -16 MMR per loss (compare that to +12/-12 adjusted points change for playing against opponent whose dmmr equals your adjusted points). This leads us to believe that once the uncertainty value shrinks down to a minimum, it never increases back.







Original post:

+ Show Spoiler +

Minimum points won cap explained



**************************************************************************************************************

Edit7:

Full match history from low Bronze to mid Master:



**************************************************************************************************************

Edit6:

F with minor corrections:



**************************************************************************************************************

Edit5:

Third offset estimates released



**************************************************************************************************************

Edit4:

Second offset estimates released



**************************************************************************************************************

Edit3:

First offset estimates



**************************************************************************************************************

Edit2:

New F function found.



**************************************************************************************************************

Edit:

Skeletor and I published a tool that helps you calculate your MMR automatically, as well as have the option to help the community gather data which will hopefully help us figure out the secret division modifiers below Masters, division tier modifiers, how much MMR is needed to cross into different leagues, etc. You can read more about it

**************************************************************************************************************



I will try to keep this brief for clarity, but I also want to describe how I came upon what I present here. If you simply wish to find out how you can calculate your MMR based on the results of a single match, skip to the end.



I assume readers are familiar with the ladder system and it's inner workings, including what are adjusted points, MMR, etc. If you aren't or need a reminder check out Excalibur_Z's sticky thread please take to that sticky thread.



Before I start, let me quickly run through some reasons why should you care about your MMR:



- MMR is the ELO rating which represents your skill. It shifts wildly, that is why Blizzard does not reveal it. However some of us want to know our skill and whether or not we progress.

- It can (eventually) be used to find out league promotion / demotion threadholds, and how close are you to a promotion.

- At the beginning of each new season everyone's adjusted points starts at 0. It can take anywhere up to a 100 matches or even more before your adjusted points have caught on with your MMR. Until then your adjusted points will continue to slowly shift towards your MMR. This is good if you like seeing your points change and get a feeling of 'progression' with each game you play, but if you wish to tell whether or not you improve as a player it is meaningless.

- You could see who the best players on each server truly are.

- It can (with work) be used to help find out the hidden league points modifiers and league tiers modifiers of each league.



Hopefully I have you intrigued by now.



This past month I have been working on a tool that tracks adjusted points over time of multiple players (Which can be found the difference between your opponent's adjusted points, and your MMR. Let's call this formula F.



F(your MMR, your opponent adjusted points) -> [0..24]



When you lose a match you lose 24 minus the amount of points you would've gained had you won it. So if you lose a match, to find out how many points you would've gained, we simply calculate 24 minus the amount of points that you lost.



If we knew F, then calculating your MMR would be a simple matter of looking at your opponent's adjusted points before his match with you, looking at how many points your opponent gained / lost, and finding out your MMR would be trivial. We know your opponent's adjusted points, can we find out function F?



I tried several approaches until I found one I was satisfied with, but now I'm fairly confident I nailed it.



I started out with looking at some matches of 7 different Grandmaster players. To start out with I assumed their MMRs were fixed (naturally this isn't the case) and grabbed some data points. Before I could plot them on a single graph I had to normalize the results of the 7 different players by adding a different value for each (representing their individual MMRs). When I did that I was able to get a graph that was fairly linear.



Click on photo for full screen version.







I started out suspecting that F was a linear function, and this made me more sure of it. If F is a linear function, what we expect to find from plotting it on a graph is 2 parallel lines with a downward slope, that pass point xy (12, 0) from either side, and that cover unique ranges for each number between 0 and 24. In the graph above this isn't the case, but that is due to my assumption that the players MMRs were fixed.



I ran trend lines on the high results and low results from the data, and came up with slopes of 30.5 and 31.5. I came up with a candidate that seemed good to me and use 32 as slope. I picked this number because it was close to the numbers I got, because it seemed like a number some algorithm writer that works for Blizzard may use for the algorithm, and because this mean the range covered is between -400 and +400, nice round numbers. Also I seem to recall the 400 number used as an extreme gap in ELO differences cases. Here is the candidate for F function that I picked (Edit: A better F function has been found, linked at top of the post. Keeping this for record):









To reiterate, F function takes as input the difference between your MMR and your opponent's adjusted points, and outputs a number between 0 and 24 which is the amount of points your opponent will gain in case he wins.



I needed a way to test out my F candidate. The problem is we have 2 unknown variables, F and MMR, and each additional player just brings another unknown variable in his own MMR. I was searching for a way to remove MMR from the equation. I decided to try looking at Grandmaster players who have between 180 and 210 adjusted points, who played at least 80 games this season, and who have less than 70% win/loss ratio. There were 15 such players, and for each one I looked only at the last game he won. The idea was that hopefully their MMRs are fairly close. Nope.









In retrospec it's not surprising it didn't work. Even for fairly closely skilled players, MMRs vary greatly on a game by game basis. Their MMRs are too far apart for this to have worked.



Then I came up with the solution. Instead of looking at multiple players, look at a single player over many matches. This way eventhough the MMR changes from match to match, we still know some things about it at each point. We know that MMR rises after a win and drops after a loss. Should an F candidate tell us that a player lost MMR after winning a game, we'll know it to be wrong.



Allow me to intersect for a moment at this point and describe my data gathering process. This is technical but I feel important to mention for those who are interested. I would pick a player (player A) I wanted to gather data about, and look at his match history in game (the website based one is far too inadequate for this. It doesn't even tell you who his opponent was). For each game I would go to the opponent's (B) profile and see how many points B gained/loss for his match against A. If A won and B lost this was easy. Simply see how many points B lost, add 24 and that was how many points B would've gained. When B won it was much harder, because all we see is the amount of points B gained, but that includes bonus pool points as well. We don't care about bonus pool points, only adjusted points gained. In a lot of cases, it's impossible to tell how many points B won. If B has a large bonus pool it's easy, you know he got 100% bonus pool points. In all other cases, there is some guesswork involved. Even if you know for a fact B didn't have stored unspent bonus pool at the time of playing A, it's possible he got another point during his match with A.



Another note about data gathering: We wish to know the amount of adjusted points B had at the beginning of his match against A. To know this we have to calculate retrospectively from his current points and add/subtract the points he gained/lost since his match with A (a long, tedious process, made more so the more games B played since his match against A). To this number we then add B's current unspent bonus pool. What we end up with isn't the amount of adjusted points B had at the time of his game against A, instead with come up with the adjusted points B had at the time of his game against A PLUS the current server total bonus pool. This is okay because as long as we collect all the data points for all of A's opponents at the same time, this number is shared across all of A's opponents, and does not tilt our calculations for F. It's like all of A's opponents (and consequently A's MMR) get a bonus of the amount of current bonus pool points of the server. This number can simply be subtracted from all the data at the end of the data gathering process.



Due to the reasons stated above and the nature of the work I was looking for a player who plays a lot of games, in Master's league, and preferably that plays no or very few Diamond / GMs (mostly Diamond players that really hurt the data gathering, since Diamond league has 7 division tiers with hidden points modifiers). I used SC2Ranks to sort the list of European Master players by games played, and ended up finding the #7 one in game, a player named FoPǂChimaira who plays 30 games/day average for the entire season, 420 games total. Pretty nice.



I gathered data from his last 107 games that he played in the last 2 days. Unfortunately he played 15 Diamond players among those games, and these are all basically null data points as far as I'm concerned.



Here is the result:







The Y axis is adjusted points in Master league. On the X axis we have 107 games, on the far left is the first match and they progress moving rightwards. The bars are the results of inputting the opponent adjusted points and amount of points gained/lost into my F function candidate.

Blue bars are wins, red bars are losses. The error margins at the top of each bar are 32 points wide and represent all possible MMR values that match the data for opponent adj points and points gained/lost from match. It's important to emphasize that these are not 'error margins' per say, rather the result of F outputting one value for 32 difference inputs. One last thing about the graph: The bar and predicted MMR values are based off the values that exist at the beginning of the match. The opponent adjusted points, and points gained/lost and FoPǂChimaira's MMR. This means for a bar that is red indicating loss, you expect to see the MMR drop in the next game. Similarly for a blue bar you expect to see the MMR rise in the next game.



The way I tested my proposed F function was to look for things that shouldn't happen. If following a loss the MMR range is entirely above than it was for the previous game, then F is wrong. Similarly if following a win the MMR range is entirely below the previous value, then it is also wrong.



If you watch the graph closely you will note there are about 4 cases that similarly do not add up. This can be due to several things:



a) My proposed F function is wrong.

b) Data point is wrong due to mistake inputting the data.

c) A match against a Diamond league opponent / a match where the opponent won and I failed to account for the correct bonus pool part of the points won of the opponent.

edit: d) His opponent got promoted / demoted since they played their game.



Also important to note that matches where the opponent gains 24 or 0 points are also useless data. This is because a result of +24 +0 points only supplies a lower and upper boundaries for MMR.



Despite the few irregularities in the graph, I am fairly confident of the number 32 as the slope value. The only thing I have reservations about is that I noticed a few oddities that tend to happen when the opponent wins 23 points, and I am unsure why this happens. It could be that F is not linear at those ranges. I do not know. Either way if my F is wrong, it is very close, especially at the +2->+22 range, which is the great majority of matches.



I experimented with different slope values and ruled out slope values of 30 or less, and 33 or higher due to inconsistent results that I am sure are accurate.



Let's look at the same graph, with FoPǂChimaira adjusted points thrown on top of it.







As expected, MMR changes more rapidly than adjusted points. Another interesting thing is that the slope of the adjusted points is related with the changes in MMR. A big upwards rise in adjusted points corrolates with beating a stronger opponent, in which case the MMR will rise faster. Similarly a big lowering of the adjusted points line indicates a loss to a weaker opponent, in which case MMR will plummet.



Link to excel sheet







I'll sum up with stating how to easily calculate your MMR based on the results of a single match of yours (alternatively use my script

1. Calculate opponent's adjusted points before your match together by taking his current points, adding his current unspent bonus pool, subtracting current total season bonus pool for your server (can be found by looking at a player with 0 wins, alternatively

2. Take the amount of points that he gained (if he lost, add 24 to the amount of points that he lost). Make sure you're not including bonus points that he gained, only actual points. Either ask him, guess, or wait until you beat an opponent. Find the matching row with the amount of points he gained here(Edit: A better F function has been found, linked at top of the post. Keeping this for record):





Add to your opponent adjusted points before the match the matching values from the right rows, and that's your MMR within 32 points range.



Example:

You played against a Master league opponent who had 150 adjusted points before your game. You won the match and he lost 9 points. -9 + 24 = 15, so look in the row with 15 next to it. It says 80-112, so you know that before your match against him, your MMR was between 230 and 262 points.



A note: you can only find your MMR in relation to the league modifier of your opponent. If you're playing Master opponents you'll get consistent results. If you meet up with Grandmasters you can translate the number into Master points by adding 430 to it. For those of you under Master league, you are going to see results that vary more. Leagues below master have the following separate division tiers with their unique points modifiers:



Grandmaster: One Tier

Master: One Tier

Diamond: 7 Tiers

- Tier 1: +150 from Master

- Tier 2: +213 from Master

- Tier 3: +276 from Master

- Tier 4: +339 from Master

- Tier 5: +402 from Master

- Tier 6: +465 from Master

- Tier 7: +528 from Master

Platinum: 3 Tiers, unknown offset

Gold: 2 Tiers, unknown offset

Silver: 3 Tiers, unknown offset per tier

Bronze: 7 Tiers, unknown point offset per tier



If you calculate your MMR based on a game against, a Platinum opponent, you will know that your MMR was within 32 points before the match against an opponent in some Platinum division tier.





I hope that using what I discuss here, people will be able to find out more about the ladder system so that we may all have better understanding of the environment we operate under. Edit8:**************************************************************************************************************Edit7:**************************************************************************************************************Edit6:F with minor corrections:**************************************************************************************************************Edit5:**************************************************************************************************************Edit4:**************************************************************************************************************Edit3:First offset estimates released for EU and US:**************************************************************************************************************Edit2:New F function found. Post. **************************************************************************************************************Skeletor and I published a tool that helps you calculate your MMR automatically, as well as have the option to help the community gather data which will hopefully help us figure out the secret division modifiers below Masters, division tier modifiers, how much MMR is needed to cross into different leagues, etc. You can read more about it here **************************************************************************************************************I will try to keep this brief for clarity, but I also want to describe how I came upon what I present here. If you simply wish to find out how you can calculate your MMR based on the results of a single match, skip to the end.I assume readers are familiar with the ladder system and it's inner workings, including what are adjusted points, MMR, etc. If you aren't or need a reminder check out Excalibur_Z's sticky thread here . Questions relating to basic, known, elements of the ladder systemtake to that sticky thread.Before I start, let me quickly run through some reasons why should you care about your MMR:- MMR is the ELO rating which represents your skill. It shifts wildly, that is why Blizzard does not reveal it. However some of us want to know our skill and whether or not we progress.- It can (eventually) be used to find out league promotion / demotion threadholds, and how close are you to a promotion.- At the beginning of each new season everyone's adjusted points starts at 0. It can take anywhere up to a 100 matches or even more before your adjusted points have caught on with your MMR. Until then your adjusted points will continue to slowly shift towards your MMR. This is good if you like seeing your points change and get a feeling of 'progression' with each game you play, but if you wish to tell whether or not you improve as a player it is meaningless.- You could see who the best players on each server truly are.- It can (with work) be used to help find out the hidden league points modifiers and league tiers modifiers of each league.Hopefully I have you intrigued by now.This past month I have been working on a tool that tracks adjusted points over time of multiple players (Which can be found here ). It bothered me that it took several dozens games for player's adjusted points to begin catching up with their skill level and I wanted to find a way around it. As you know from Excalibur_Z's thread, the points your opponent gains/loses after the match are dependent on. Let's call this formula F.F(your MMR, your opponent adjusted points) -> [0..24]When you lose a match you lose 24 minus the amount of points you would've gained had you won it. So if you lose a match, to find out how many points you would've gained, we simply calculate 24 minus the amount of points that you lost.If we knew F, then calculating your MMR would be a simple matter of looking at your opponent's adjusted points before his match with you, looking at how many points your opponent gained / lost, and finding out your MMR would be trivial. We know your opponent's adjusted points, can we find out function F?I tried several approaches until I found one I was satisfied with, but now I'm fairly confident I nailed it.I started out with looking at some matches of 7 different Grandmaster players. To start out with I assumed their MMRs were fixed (naturally this isn't the case) and grabbed some data points. Before I could plot them on a single graph I had to normalize the results of the 7 different players by adding a different value for each (representing their individual MMRs). When I did that I was able to get a graph that was fairly linear.Click on photo for full screen version.I started out suspecting that F was a linear function, and this made me more sure of it. If F is a linear function, what we expect to find from plotting it on a graph is 2 parallel lines with a downward slope, that pass point xy (12, 0) from either side, and that cover unique ranges for each number between 0 and 24. In the graph above this isn't the case, but that is due to my assumption that the players MMRs were fixed.I ran trend lines on the high results and low results from the data, and came up with slopes of 30.5 and 31.5. I came up with a candidate that seemed good to me and use 32 as slope. I picked this number because it was close to the numbers I got, because it seemed like a number some algorithm writer that works for Blizzard may use for the algorithm, and because this mean the range covered is between -400 and +400, nice round numbers. Also I seem to recall the 400 number used as an extreme gap in ELO differences cases. Here is the candidate for F function that I picked (Edit: A better F function has been found, linked at top of the post. Keeping this for record):To reiterate, F function takes as input the difference between your MMR and your opponent's adjusted points, and outputs a number between 0 and 24 which is the amount of points your opponent will gain in case he wins.I needed a way to test out my F candidate. The problem is we have 2 unknown variables, F and MMR, and each additional player just brings another unknown variable in his own MMR. I was searching for a way to remove MMR from the equation. I decided to try looking at Grandmaster players who have between 180 and 210 adjusted points, who played at least 80 games this season, and who have less than 70% win/loss ratio. There were 15 such players, and for each one I looked only at the last game he won. The idea was that hopefully their MMRs are fairly close. Nope.In retrospec it's not surprising it didn't work. Even for fairly closely skilled players, MMRs vary greatly on a game by game basis. Their MMRs are too far apart for this to have worked.Then I came up with the solution. Instead of looking at multiple players, look at a single player over many matches. This way eventhough the MMR changes from match to match, we still know some things about it at each point. We know that MMR rises after a win and drops after a loss. Should an F candidate tell us that a player lost MMR after winning a game, we'll know it to be wrong.Allow me to intersect for a moment at this point and describe my data gathering process. This is technical but I feel important to mention for those who are interested. I would pick a player (player A) I wanted to gather data about, and look at his match history in game (the website based one is far too inadequate for this. It doesn't even tell you who his opponent was). For each game I would go to the opponent's (B) profile and see how many points B gained/loss for his match against A. If A won and B lost this was easy. Simply see how many points B lost, add 24 and that was how many points B would've gained. When B won it was much harder, because all we see is the amount of points B gained, but that includes bonus pool points as well. We don't care about bonus pool points, only adjusted points gained. In a lot of cases, it's impossible to tell how many points B won. If B has a large bonus pool it's easy, you know he got 100% bonus pool points. In all other cases, there is some guesswork involved. Even if you know for a fact B didn't have stored unspent bonus pool at the time of playing A, it's possible he got another point during his match with A.Another note about data gathering: We wish to know the amount of adjusted points B had at the beginning of his match against A. To know this we have to calculate retrospectively from his current points and add/subtract the points he gained/lost since his match with A (a long, tedious process, made more so the more games B played since his match against A). To this number we then add B's current unspent bonus pool. What we end up with isn't the amount of adjusted points B had at the time of his game against A, instead with come up with the adjusted points B had at the time of his game against A PLUS the current server total bonus pool. This is okay because as long as we collect all the data points for all of A's opponents at the same time, this number is shared across all of A's opponents, and does not tilt our calculations for F. It's like all of A's opponents (and consequently A's MMR) get a bonus of the amount of current bonus pool points of the server. This number can simply be subtracted from all the data at the end of the data gathering process.Due to the reasons stated above and the nature of the work I was looking for a player who plays a lot of games, in Master's league, and preferably that plays no or very few Diamond / GMs (mostly Diamond players that really hurt the data gathering, since Diamond league has 7 division tiers with hidden points modifiers). I used SC2Ranks to sort the list of European Master players by games played, and ended up finding the #7 one in game, a player named FoPǂChimaira who plays 30 games/day average for the entire season, 420 games total. Pretty nice.I gathered data from his last 107 games that he played in the last 2 days. Unfortunately he played 15 Diamond players among those games, and these are all basically null data points as far as I'm concerned.Here is the result:The Y axis is adjusted points in Master league. On the X axis we have 107 games, on the far left is the first match and they progress moving rightwards. The bars are the results of inputting the opponent adjusted points and amount of points gained/lost into my F function candidate.Blue bars are wins, red bars are losses. The error margins at the top of each bar are 32 points wide and represent all possible MMR values that match the data for opponent adj points and points gained/lost from match. It's important to emphasize that these are not 'error margins' per say, rather the result of F outputting one value for 32 difference inputs. One last thing about the graph: The bar and predicted MMR values are based off the values that exist at the beginning of the match. The opponent adjusted points, and points gained/lost and FoPǂChimaira's MMR. This means for a bar that is red indicating loss, you expect to see the MMR drop in the next game. Similarly for a blue bar you expect to see the MMR rise in the next game.The way I tested my proposed F function was to look for things that shouldn't happen. If following a loss the MMR range is entirely above than it was for the previous game, then F is wrong. Similarly if following a win the MMR range is entirely below the previous value, then it is also wrong.If you watch the graph closely you will note there are about 4 cases that similarly do not add up. This can be due to several things:a) My proposed F function is wrong.b) Data point is wrong due to mistake inputting the data.c) A match against a Diamond league opponent / a match where the opponent won and I failed to account for the correct bonus pool part of the points won of the opponent.edit: d) His opponent got promoted / demoted since they played their game.Also important to note that matches where the opponent gains 24 or 0 points are also useless data. This is because a result of +24 +0 points only supplies a lower and upper boundaries for MMR.Despite the few irregularities in the graph, I am fairly confident of the number 32 as the slope value. The only thing I have reservations about is that I noticed a few oddities that tend to happen when the opponent wins 23 points, and I am unsure why this happens. It could be that F is not linear at those ranges. I do not know. Either way if my F is wrong, it is very close, especially at the +2->+22 range, which is the great majority of matches.I experimented with different slope values and ruled out slope values of 30 or less, and 33 or higher due to inconsistent results that I am sure are accurate.Let's look at the same graph, with FoPǂChimaira adjusted points thrown on top of it.As expected, MMR changes more rapidly than adjusted points. Another interesting thing is that the slope of the adjusted points is related with the changes in MMR. A big upwards rise in adjusted points corrolates with beating a stronger opponent, in which case the MMR will rise faster. Similarly a big lowering of the adjusted points line indicates a loss to a weaker opponent, in which case MMR will plummet.I'll sum up with stating how to easily calculate your MMR based on the results of a single match of yours (alternatively use my script here ):1. Calculate opponent's adjusted points before your match together by taking his current points, adding his current unspent bonus pool, subtracting current total season bonus pool for your server (can be found by looking at a player with 0 wins, alternatively here ), and subtract the amount of points that he gained from your match in case he won, or add the points that he lost from playing you in case of a loss.2. Take the amount of points that he gained (if he lost, add 24 to the amount of points that he lost). Make sure you're not including bonus points that he gained, only actual points. Either ask him, guess, or wait until you beat an opponent. Find the matching row with the amount of points he gained here(Edit: A better F function has been found, linked at top of the post. Keeping this for record):Add to your opponent adjusted points before the match the matching values from the right rows, and that's your MMR within 32 points range.Example:You played against a Master league opponent who had 150 adjusted points before your game. You won the match and he lost 9 points. -9 + 24 = 15, so look in the row with 15 next to it. It says 80-112, so you know that before your match against him, your MMR was between 230 and 262 points.A note: you can only find your MMR in relation to the league modifier of your opponent. If you're playing Master opponents you'll get consistent results. If you meet up with Grandmasters you can translate the number into Master points by adding 430 to it. For those of you under Master league, you are going to see results that vary more. Leagues below master have the following separate division tiers with their unique points modifiers:If you calculate your MMR based on a game against, a Platinum opponent, you will know that your MMR was within 32 points before the match against an opponent in some Platinum division tier.I hope that using what I discuss here, people will be able to find out more about the ladder system so that we may all have better understanding of the environment we operate under. . Simply play games with it installed with SC2Gears open in the background and it will automatically calculate your MMR for you. You can read more about it in the tool's thread.I've decided to rewrite this post to explain what we know thus far as this thread is quite lengthy. The original OP can be found in a spoiler at the end if anyone is curious.MMR is the 'skill' rating in the ladder system. MMR represents a player's strength more accurately than league, ladder points, adjusted points, or division rank.When a ladder match ends, the ladder system performs the following calculation to determine each player's adjusted points change:For players below Master league:Player A points change = max(CAP(- A_adjusted_points), F(B_dmmr - A_adjusted_points))For players in Master-GM leagues:Player A points change = max(1, F(B_dmmr - A_adjusted_points))(players in Master-GM have no cap beside 1 point minimum per game)Where:adjusted_points = ladder points - spent bonus pool pointsB_dmmr = player B's MMR - player A's league and tier offsetIf player lost, then subtract 24 from his points change.F and CAP functions are described in the following table:Note that CAP is defined in this table as receiving the negative of the adjusted points. F is an ELO function with k = 24, which takes as parameters dmmr and adjusted points. It compares MMR based number with adjusted points. Also note that adjusted points are reset every season, MMR is not.Player A is in Diamond league in the 2nd highest tier (offset 1733), has 130 adjusted points, and 1800 MMR.Player B is in Diamond league in the bottom tier (offset 1463), has 200 adjusted points, and 1500 MMR.Player B wins the match.A points change = max(CAP(-130), F((1500-1733) - 130))A points change = max(CAP(-130), F(-363))A points change = max(11, 3)A points change = 11Since A lost, his points change is 11 - 24 = -13 points.If A was in a league that isn't capped, his points change would've been 3 - 24 = -21.We can likewise calculate B's points change:B points change = max(CAP(-200), F((1800-1463) - 200))B points change = max(CAP(-200), F(137))B points change = max(8, 17)B points change = 17B receives 17 adjusted points.To perform these calculations I had to know the league and tier offsets. Here are our latest estimates for them:Additionally I had to know which tiers the players belong to. This can be difficult to know for players below Master league as they each have 2-7 tiers which are hidden. The MMR Calculator can figure out the tiers of the players once a sufficient amount of games has been played. We use the points change amount and reverse it to obtain the MMR values of the players involved.The CAP function causes players' adjusted points to artificially stay higher than they otherwise would've been. It was probably implemented at the beginning of season 3 to address a problem where players with low MMRs played opponents with MMRs below their division offset, thus won few points per game and lost many. This resulted in these players having a hard time using up their bonus pool and eventually get discouraged once their bonus pool rose too high. Additionally it was possible in extreme cases to receive 0 points for a win.Another possible reason for the CAP function is simply to artificially raise players' points above 0 for psychological reasons, as well as encourage playing in the beginning of each new season when players start off with 0 points, and thus would rise in points the more they played.Unfortunately for us, the existence of a CAP makes it harder for us to perform reverse calculations of players' MMR. Any player who wins equal points to the CAP gives us merely a maximum limit on the opponent's MMR, instead of a narrow range as is otherwise the case.Alongside MMR, the system stores an uncertainty value for each player. We don't have much information about it as of yet, but we have strong evidence to suggest that this value does not play a big role in MMR calculations. We know that for new players the uncertainty value is large, causing their MMR to shift dramatically each game. Evidence:Compare that to the MMR movement of an old player:This player is moving from Bronze MMR all the way to Master MMR during league lock. Yet his MMR changes on a game by game basis similarly to how it does for players who are much steadier. On average over large quantities of matches we see +16 MMR per win -16 MMR per loss (compare that to +12/-12 adjusted points change for playing against opponent whose dmmr equals your adjusted points). This leads us to believe that once the uncertainty value shrinks down to a minimum, it never increases back.Original post: