Hey guys, I am new to programming and gamedev forums. I am not sure if this is the right forum to post this but here it goes: I am trying to design a ranking system that's based on the trueskill system; Where you gain/lose points based on the difficulty of the level played and your current rank. This is how the system is designed:
- Predictable outcomes (e.g. win against a lower ranked opponent) are treated as statistically less significant. Upsets are given more weight. So, winning against lower ranked opponents doesn't do much for your rating. Neither does losing against higher ranked ones. But beat a team that's 6 or more ranks above you and at least someone on your team will rank up.
- In standard 4v4 format, the system approximates the skill of the team by using the average skill of the team. When calculating the skill of an opponent in a team game, the system uses the overall team skill values. For example: If a team has 4 players with skill levels of 15, 18, 17, and 16, then the average skill of the team would be an average of these numbers; 16.5.
The problem with this system is that people can artificially manipulate their skill by purposely losing games or de-ranking. So lets say someone who's a level 40 de-reranks their account all the way down to like a level 7. The system now sees this player as a bad player and expects him to lose. He then goes on to play with his friend who is also a level 40. A match may look something like this: Team 1: 40,39,38,7 vs Team 2: 37,36,36,35. There are two problems in this scenario:
- The level 7 skews system by bringing down the average skill of Team 1 to 31, while the average skill of Team 2 is 36. The system expects this player and his team to lose seeing any victory by this player as an upset. This results in his teammates receiving large amounts of extra elo boosting their ranks faster. This process is known as boosting. The problem here is that the level 7 actually has the skill level of a level 40 so his team shouldn't receive any extra elo for winning.
- Problem number 2 is a result of the matchmaking system being designed to make the average skill level of both teams as close as possible while still being within the matchmaking parameters. The system fills Team 2 with lesser level players in order to compensate for the level 7 on Team 1
In theory, I would like to design the system to account for these two problems. The key is to tell the system to not give out extra elo points in this situation, but I have no idea how to do this in programming language. In programming languages such as C++, is there any type of way I can combat these issues with some kind of exception or if/then statement. Any help on this issue would be much appreciated.