Let’s talk about PSR first. Elo system had it’s own issues, and PSR was in my opinion a step in right direction, but was missing a few key components that would make it viable in the long run. When PSR was first introduced, many players noted that there was a definitive upwards trend in the PSR system, and any average player would eventually end in Tier 1, if they just played enough games. So in the end, Pilot Skill Rating is not doing a very good job at estimating player skill. What it is doing a good job at is estimating player experience however, and it could be assumed that the more experienced gamers tend also to be more skillful. But what happens if a reasonably skilled player takes a half-year, or even longer break? Surely they would be able to quickly return to their previous level, but in the meanwhile the game might have changed, they probably have forgotten a thing or two, and it just takes time to readjust. And while they’re at it, they are not performing at a level that is reflected by their PSR rank.
To make the PSR more meaningful, and better tool for the matchmaker I have a few suggestions.
- First of all, PSR shift should be much quicker than it is now. Maybe it shouldn’t take more than 100-200 “steps” (where small increase is 1 step, medium increase is 2 steps, large increase is 3 steps and vice versa) to move through an entire tier.
- Instead of using some arbitrary number to decide tier limits, PSR should split playerbase to 5 equally sized tiers, based on the number of active players. The tier limits should be recalculated once a month.
- Player activity could be determined by number of matches. For example, 15 matches a month, under that and PSR bar will degrade by 5% for each game under 15. So for example, a player who played 10 matches a month will lose 15-10*5%=25% of their PSR tier. One month break would take a 50% tier 1 to 75% tier 2.
- Players under the activity limit will not count in the tier size calculation, because their overall impact to the matchmaker is low
- PSR will determine the pool of players which matchmaker uses to create matches. Only adjacent tiers should be allowed, but NOT in both directions. IE a tier 2 can have only players from tier 2 and 3, not from 2, 3 and 1.
- A matchmaker is running for each tier. On set time periods (different timer for each tier) they will scoop all available players (up to 24) from the selected tier. If the match is not full, it check if either adjacent tier has enough players in queue to fill the match. If yes, it will fill the match with players from adjacent tier, if not, it will release the players and wait for a set amount of time before checking again.
After the matchmaker has found 24 players for the match, we come to the second part of the matchmaker: balancing the match and determining which player goes to which side.
So using my stats with heavy mechs from season 6: 325 *(1+1.63/10)*(1+3.0/20)=435 and let’s say I’m dropping with a Night Gyr, heavy mechs perform at 1.05 and night gyr at 30% over the average heavy, so 435*(1.05*1.3)=593.
Proton’s PER would be 1461.
The example modifiers are probably a lot larger than real world numbers would be, but to make a point, this enables even a high skill players to occasionally have fun and bring that vindicator or commando without totally shafting their team, because PER will take the mech into account and adjust the teams accordingly. On the other hand it emphasizes that a highly skilled player in a high tier mech is going to be even more dangerous.
Now we have a match with 24 players, each with their own PER. Now to determine who goes to which team, we have to first sort the players by their PER. Then add players to the teams one by one, in a way that the next player will always go to the team with less total PER.
So using random.org I generated a list of 24 random numbers in the range of 300 and 1000, where I’d imagine most tier 1 players would land. Sorted from highest to lowest the numbers look like this:
Player 1:970
Player 2:956
Player 3:924
Player 4:868
Player 5:844
Player 6:828
Player 7:802
Player 8:744
Player 9:700
Player 10:658
Player 11:635
Player 12:631
Player 13:624
Player 14:609
Player 15:595
Player 16:516
Player 17:473
Player 18:473
Player 19:409
Player 20:384
Player 21:373
Player 22:355
Player 23:341
Player 24:318
Now we start placing players to the teams:
Team 1:7513 Team 2:7517
Player 1:970 Player 2:956
Player 4:868 Player 3:924
Player 5:844 Player 6:828
Player 7:802 Player 8:744
Player 10:658 Player 9:700
Player 11:635 Player 12:631
Player 13:624 Player 14:609
Player 16:516 Player 15:595
Player 17:473 Player 18:473
Player 19:409 Player 20:384
Player 21:373 Player 22:355
Player 23:341 Player 24:318
And as you can see, even if the difference between individual players is huge, the difference between the teams is miniscule, because the system automatically balances itself. By the way, formatting this forum post was a PITA, maybe consider enabling some safe HTML markup, like tables.
So, what do you think? I'm probably going to do a simulator soon to test average search times and team PER balance with this system.