I have a top 50 bot. When I submit a revision, it can take many hours until the revision gets to play against opponents at its actual skill level. I think there is a simple fix for this.
Currently, matchmaking selects opponents by picking from others bots near your bot's rank. Which sounds great, but is actually wrong.
Matching / Ranking Terms
The Trueskill player scoring works by keeping track of two numbers for each bot:
- Mu - how good Trueskill thinks your bot might be
- Sigma - how sure Trueskill is about that number.
Halite takes these two from Trueskill and then computes two more numbers
- Score - Essentially the worst possible current estimate of your ability. Mu minus 3x Sigma
- Rank - your bot's position when all bots are ordered by Score.
Matchmaking selects opponents by picking from others bots near your bot's rank.
When you submit a new bot - the bot gets a huge starting Sigma, or uncertainty. This makes your score go super low and you play the worst bots in the system. Which is cool for a first game.
However in the games after that, you are having matches created with players of at your rank level, which is below your Trueskill's estimate of your skill level, you spend most your time playing bots who are far worse than you.
When playing people worse than you, Trueskill expects you stomp them easily. When you win, Trueskill hasn't learned very much about you that it didn't know before, and thus Trueskill doesn't change your sigma much after the game.
In effect you have to grind your way through lots of low ranked bots before you start getting to play near your skill level. My bot update this morning played about 40 games before it finished somewhere other than first place.
The fix for this is very simple. Instead of matchmaking by selecting bots of nearby rank, instead choose bots of nearby Mu that have a lowish sigma.
Since Mu is Trueskill's best guess at your current ability, playing bots of similar Mu gives Trueskill the most ranking information possible, and you as a player get to spend most of your time seeing your bot playing with others of similar skill.
By matchmaking against bots of lowish Sigma, Trueskill is able to be much more sure about how your ranking changes as a result of the match. (Also avoiding matching against bots of high sigma means that matchmaking avoids newly submitted bots only playing against each other.)
The one gotcha here is that you need to make sure you have enough bots for the game. There's always guaranteed to be bots += 5 ranks from you, but there is no such guarantee when using Mu. You might just have an internal mu_rank used internally.
Current matchmaking pits bots mostly against bots worse than them. To fix change line 97 of ManagerAPI.php to use mu instead of rank.