I have not written anything for almost a season. However there has been a lot of questions about how the matchmaking for OI works so I have a good excuse to expose you to my word vomit. So here we go.
If you remember the matchmaking process in OI until season 9, you should know the first round had been setup based on your TV and last season results, while the remaining rounds were pure swiss based matchmaking. So round 2 could have seen you easily being matched against 2000 TV killer team with your 1400TV that beat another 1400TV team in first match. This made OI less popular. Strange, right? However we wanted to keep people interested and around REBBL in the offseason too. So when our bot/science guru Schlice took over the OI he decided to create something more fair but at the same time still managable for the 150+ coaches that joined the OI last season. The swiss part of the tournament has been dropped in the favour of having fair matches across all 4 rounds instead of just the first.
At the heart of the matchmaking script the stable roomates algorithm is used, in our case its R implementation using cardinal utilities or payoff. In our case the payoff describes your matchup preference against your possible opponent, and no, we do not set it to 0 for orabbi just because you do not prefer to play him. We calculate it based on the appropriateness of the matchup.
For us to use the payoff matrix, the script calculates your payoff for every possible opponent from your pool of opponents. This means that in season 10 with ~ 130 coaches in old team pool this results in payoff matrix of 130x130 that is calculated and fed to the roommate algorithm.
Now we are getting probably to the most interesting part. How is your payoff calculated between you and your possible opponent? It includes several factors:
- TV of both teams
- race of both teams
- last season performance of both teams
- division of both teams
- OI/PO performance (for rounds 2,3 and 4)
- Race of teams you played in OI,PO
- Teams you played in previous OI
Neither of the factors overrules the other. They are not sorted, they are weighed and together calculate the final payoff. This is important. It means that you can get a matchup where some of the factors are not really close. Especially since there are other 130 coaches with different preferences that we need to account for.
Lets take a look at them bit deeper.
The value is between 0 and 1. If you and your opponent are at the same TV value, the TV payoff is 1, if you are at 500TV+ difference your TV payoff is 0. Exception are Goblins where the limit is 650TV and Halflings where the limit is 800TV. This does not mean that you cannot get a matchup with 500TV plus as result of the algoritm as TV is not the ONLY factor. However I tend to rerun the matchmaking feeding is small random updates to the final payoffs until the highest TV diff is around 400TV and less.
Warning: The cash above 150k counts towards your TV so if you are saving cash for market you are more likely to face up TV opponents.
Win rates: Ranges from 0-1 and CCL race winrates are used. You will get a value of 1 if your team wins the same % of games against your opponent's race as your opponent race against your team race. You would get value of 0 in a theoretical situation when your opponents race had a win rate of 100% against your race. If you and your opponent are the same race, the race payoff is set to 0.8 instead of the calculated 1 to not boost same race matchups preference.
There are other race factors that affect the final payoff. They are described in the final payoff section.
Ranges from 0-1. The points per game from your previous season are counted and used here. The value is 1 if you had the same points per game as your opponent in last season. The value would be 0 if you lost all your games and your opponent won all their games last season.
Again it ranges from 0-1. Coaches coming from minors are given division 7, RAMPUP coaches are given division 10. Big O divisions are scalled to 10 divisions. So BigO div1 ~ GMAN/REL div2 and BigO div5 ~ GMAN/REL div 10. The division payoff is 1 if you are both from the same division number. It would be 0 if you are from division 10 and your oponent from division 1. (note this is impossible since lettered divisions are in their own pool now).
Teams from exactly the same division will yeild division payoff of 1. However in this case the final payoff is rewritten. See the final payoff section.
OI and PO performance
Same as last season performane the OI and PO performance is counted separately and has value of 0-1.
All the above parameters are weighed and summed together so the resulting payoff is in range of 0-1.
- TV difference has ~ 30~40% weight
- Division has ~ 30~40% weight
- Performance has ~ 15-20% weight
- Race has ~ 10% weight
- OI performance has 5% weight in round 2, 10% in round 3 and 20% in round 4
- for race mirrors the final payoff is scalled down by 20%. So it can be 0.8 at most.
- If you and your opponent already played in this or last season OI, or the previous regular season, the payoff is scalled down by 70%. So it can be 0.3 at most.
- If your opponents race is the same as race of the team you already played in this season OI the payoff is scalled down by 20%. So it will be 0.8 at most.
This all results in n x n payoff matrix of values ranging 0-1. Where 1 means that the opponent is the best match for you while 0 means it is very bad matchup for you. Your opponent has a payoff value for your matchups as well and IT IS NOT THE SAME as yours. The roommate algorithm is fed this matrix and provides the matchups.
We then review the highest TV difference match and make a quick sweep of the matchups to catch any irregularities (sneaky playoff coaches for example, bad bad McMacky and Hairy Coo). If the algorithm decides to feed 1200TV team to 2000TV killer team we add random value between (-0.01-0.01) to all the payoffs and rerun it. If that is still producing huge TV diff results we tweak the TV weight up a bit and rerun the stuff. The result is what you are given.
I have a several repeating questions queueing up in discord so I would like to address some of them.
A: If I won my first OI game will I be matched only against other teams that won?
Q: No, the competition swiss factor is very low and while OI results are considered they do not overrule other factors. OI is not pure swiss/wissen.
A: Why am I matched with this team? This team has significantly bigger TV, is from higher division, had a better performance, etc. (but most importantly it has a claw and I do not like that)
Q: Neither of the factor vetos the matchup. If the given partial factor is 0 it just makes the matchup less suitable but not impossible. While TV and division placement have the main weight on them, they are not the sole factor.
A: Team B is clearly more suitable for me based on these factors, why did I get to play team A?
B: Because there is another N number of teams that have their own preferences and because you may not be as prefered to team B as the team B is prefered to you. That is the way the algorithm works. It looks at the whole pool. Not just your team.
A: I played Lizards in first OI game and now I got Lizards again. What gives?
Q: To reiterate, the races you played in previous games are not the sole factor and they do not veto the matchup. The matchups will be less preferable but in the resulting matchups for whole pool still possible.
If you have any other question feel free to shoot me a question on discord or reddit.
Have fun in OI and do not forget to not confirm your game when requesting EAPO.