I Came Up with a Better TFT Matchmaking System

LoLeander·9/7/2019, 3:20:48 PM·4 votes·3,996 views

A week ago, I matched the strongest guy in the lobby 3 times in arrow and ended up 4th despite having the 2nd strongest team. This inspired me to sit down and come up with a solution that I think is best for the game. In this post I go over the problem of TFT matchmaking and the suggested solution.

=PROBLEM= The only rank in a current TFT game that usually deserves that spot is number one. He/she had mix of good luck and skill, played well in the final 1v1 and totally deserves to win. Now the rest of the lobby is a just a giant dice roll that is mostly determined on how lucky you get with matchmaking. If you have assembled the 4th strongest comp in that game you can easily end up 8th even though you beat half of the players because you can get unlucky with matchmaking. This shouldn't be the case most the time and yet it consistently is. I have a good understanding on how hard it is to make matchmaking random and still be fair, but I have come up with a solution that should make sure people get the rank they deserve more consistently.

_Note: While writing this solution down I understood that it's way easier for me to explain in a video format, so feel free to contact me if you find this hard to understand. _

=SOLUTION= In order to make matchmaking fair we need to come up with a system that increases the diversity of the respective opponent for each player in a global scale. The solution that I will describe makes sure that everybody matches everybody consistently (including the ghost).

First we need to understand that the problem needs to be solved for the following numbers: 8, 6 and 4 players. In an even-numbered lobby, if a player dies he/she is substituted by a ghost. So the number of players doesn't really change since there is a ghost in play. There is no matchmaking problem to be solved for 2 players so that leaves us with 8, 6 and 4.

8 PLAYERS

Each of the following lines represents a possible matchmaking for a round. (I'll call them buckets from now on. Guess how many times I say the word “bucket” in the following paragraph.) Arrow implies that the two players are matched up together.

1->2; 3->4; 5->6; 7->8; 1->3; 2->4; 5->7; 6->8; 1->4; 2->3; 5->8; 6->7; 1->5; 2->6; 3->7; 4->8; 1->6; 2->5; 3->8; 4->7; 1->7; 2->8; 3->5; 4->6; 1->8; 2->7; 3->6; 4->5;

What makes these 7 matchmaking rounds special is that they include all the match-ups between the players without repetition. If we had these rounds in order one after the other we would have 7 rounds of 7 different opponents for all the players.

_Now how do we introduce a level of randomness with these seemingly cookie-cut rounds and how do progress past the 7th round? _

We start by picking a random bucket. We play out the matches and after the round is over we "block" that bucket. Blocked buckets cannot be picked unless we unblock them. Next we randomly pick one of the other buckets. When the round is over we block that bucket as well. Repeat this until all the buckets are blocked. On the 8th round we unblock all the buckets, except the last 2 that were executed. This ensures that none of the players will be matching an opponent they faced on the last two turns. On the 9th and 10th we put back on the pickable pool, one for each round, the 2 buckets that we kept blocked on turn 8. Keep randomly picking until the buckets are all blocked and repeat as long as the number of players is 8 and 7. When a player dies his number is replaced with a ghost that is a random team each turn. The ghost also continuously matches different opponents so that everyone gets an easier round.

Now before I get to explain what happens when a player dies in a 7-player lobby there is discussion we need to have: Is it problematic that if a player keeps track of his previous opponents, he will be able to predict his opponent with absolute certainty every 7th round? If you think that this is not good for the game we have a way to avoid that (and I’ll explain in a bit how we can do that), but I would suggest we keep the predictable 7th round in.

For one, a predictable opponent is already a thing in Teamfight Tactics when there are two players in a lobby. If somebody actually took the time to track his previous opponents he deserves to know who’s going to be his next opponent every 7th round. This is fair because 1. They haven’t played this person yet and it’s fair for them to be matched up. 2. The fact that the player knows his opponent does not mean he is going to win. 3. Both players know their opponent if they are tracking. 4. The 8th place guy is guaranteed to match everyone in the lobby before taking the big L.

However I predict that this would encourage 3rd party apps like Overwolf to make layers that do the tracking for you. This would give some advantage to the players who use the overlay, so if we want to avoid that, we can either:

  1. Do the bucket unblock a turn earlier and remove the predictable-opponent feature. We can also do this 2 turns earlier if we want to avoid a player having 50% chance to predict his opponent on turn 6. What we give up here is that some players may never match each other, but nonetheless makes for a better system than the current one. Or

  2. We embrace this feature by including little circular markers around the player icons on the right that will indicate who your potential opponents for the next round can be. This doesn’t change anything for the casual player and introduces a new level of skill for the competitive player. Overlay users don’t get to have an advantage either.

6 PLAYERS

1->2; 3->4; 5->6; 1->3; 2->5; 4->6; 1->4; 2->6; 3->5; 1->5; 2->4; 3->6; 1->6; 2->3; 4->5;

These 5 matchmaking rounds have the same attributes as the 7 rounds for 8 players. They include every possible matchup without repetition and each round makes sure all the players are matched. Before we start dice-rolling for a bucket we need to make sure that once a player dies, the players don’t match an opponent they faced for the last 2 turns. Assume that player 5 dies in the following round and number 8 is a ghost:

1->7; 2->8; 3->5; 4->6;

First, we renumber the players so that we only have the numbers 1-6. The previous round would look something like this:

1->6; 2->8(Ghost); 3 (Died)->4; 3->5;

This means that moving on to the next round, player 2 and player 4 can be matched against anybody since one of them just killed a player and the other just faced a ghost. We only need to make sure that player 1 doesn’t match 6 and player 3 doesn’t match 5. So once we start rolling on the next round, bucket 3 and 5 are immediately blocked since they include these matchups we are trying to avoid. We roll from the remaining 3 buckets and unlock them one by one on the 2 consecutive turns. Here we also have the option whether to keep the every 5th predictable round and it’s up to you to decide.

4 PLAYERS

1->2; 3->4; 1->3; 2->4; 1->4; 2->3;

Not much to say here if you understood the logic from the previous rounds. The only difference here is that when we unblock the buckets we only keep the last one blocked and roll between the other 2. Here we have the choice to have continuous 50/50 rounds when it comes to predicting the opponent or and alternation of 50% and 100%. The transition from 5 players is done in a similar fashion as described above. Again I would suggest to keep every other round predictable for the sake of matching everybody against everybody, but it’s up to you to decide. This also ensures that in a 3 player lobby, everybody will face the ghost instead of just a lucky guy.

Thank you so much for reading. I hope I was able to explain this clearly and I’d be happy to help you further in optimizing or programming this system. If you have any questions or you would like to point out something I missed please feel free to reach out at [email protected] or comment down below.

I absolutely love TFT so keep up the good work!

Cheers, LoLeander from EUNE

11 Comments

Porglit9/7/2019, 6:35:35 PM2 votes

A way to make the matches less predictable would be to unblock each bucket after a couple rounds. So after the 3rd round, you would unblock the 1st bucket. After the 4th, unblock the 2nd. It would be possible to hit the same bucket every 3 rounds, but that's not too repetitious. This would allow you to never be able to predict who you would fight next with anything more than a 1/4 certainty, but still not be forced to fight the same person until at least 3 round later.

When it drops down to 6 players, you reopen the buckets a turn sooner, able to play someone only every other turn. When there's only 4, it's potluck. Something like that.

TwitchInMyPants9/7/2019, 8:55:32 PM2 votes

I mean even with predictability you clearly thought this out and its a simple and elegant solution. No idea what Riot came up with but it either bugs and rematches you with someone constantly or you can often rotate through the same two people even when its working.

Given I often look at the people stronger than me anyway its usually not an issue, if I can prepare and plan my powerspikes against the people who are dangerous to me then I'm in good shape. However the matchmaker obviously has problems that need addressed for longterm game health for both casuals who want to have fun and competitive players who want a good chance of winning.

Saezio9/7/2019, 5:33:11 PM1 votes

You say that the 1st person deserves the spot.

I can refute that.

I was in top 4 in a game with like 70 hp and there were 3 more people each with about 20 hp, I was only losing to the comp of 1 person, while that person was losing to the other 2 comps which I was beating heavily. I lost that game because I killed those 2 people before they could get rid of the player that eventually ended up 1st because his comp was a straight up counter to mine.

So, you can't say who deserves what spot.

I am not denying hitting the same player multiple times in a row sucks, just wanted to throw my 2 cents here.

ZenithZephyr9/8/2019, 5:51:05 AM1 votes

Why is there matchmaking at all? Why isn't it just a random opponent? It needs to either have no randomness, or just be random. You either need to be able to plan to fight certain people, or be prepared to fight anyone.

PORKOMALEDETTO9/8/2019, 10:19:44 AM1 votes

I think this topic is missing a fundamental point:

Players' ranks are dynamic

This means you can be 3rd, then 5th, then 4th, then 5th and be paired:

  • with the same rank number twice, for example you can face the 1st player in the 1->3 bucket and next in the 1->5 bucket if you lost and got 5th
  • with the same player twice, of course if one of you changes rank between buckets

I appreciate the try, but the majority of complaints is about THESE EXACT TWO POINTS you're missing.

Look around and read "I'm complaining because I was paired with the first 3 times in a row and lost" or "I'm complaining because I was paired with the same player 3 times in a row and he was my worst MU / was in a winstreak"

I think you should work on these problems specifically