Skip to content

split_noobs balance algorithm

Joshua Augustinus edited this page Aug 14, 2024 · 29 revisions

Context

Balance algorithm split_noobs does the following:

  • Spreads noobs across teams and deprioritises them
  • Supports parties
  • Long term it can replace split_one_chevs algo as that algo is similar but doesn't support parties

How to use

In a lobby use this command

!balancealgorithm split_noobs

Now the algorithm will be used whenever you press the balance button. Visually you cannot tell what algorithm is being used so to look at logs use:

$explain

You can also check the current balance algorithm in a lobby by:

$status

split_noobs algo

This algo only supports two teams. It will call Teifion's algo for FFA.

First, separate the players into two types

Noobs: Anyone not in party AND either

  • High uncertainty. (High uncertainty means at least 6.65. The lowest uncertainty one chev has roughly that uncertainty.)
  • 0 match rating

Experienced: Everyone else

Then behaviour will depend on the following uses cases:

If there are parties

The top 14 experienced players are fed into the brute force algorithm to find the best two team combination. To determine the top 14, we prefer players in parties, then prefer higher rating. The brute force algo will try and keep parties together and keep both team ratings close.

Next the teams will draft the remaining experienced players preferring higher rating. Then the teams will draft the noobs preferring higher rank and then lower uncertainty if tied for rank.

If there are no parties

There's no need to use brute force. Just do a normal draft. Teams will prefer experienced players with higher rating. If there are no more experienced players, pick noobs based on higher rank and then lower uncertainty if tied for rank.

brute_force algo

This algorithm only supports two teams. It will go through each and every combination of possible teams and give each combination a score.

  • Score = team rating diff penalty + broken party penalty
  • Team rating diff penalty = ABS(sum of rating of players in Team 1 - sum of rating of players in Team 2)
  • Broken party penalty = num broken parties * party importance
  • party importance = 7

It will then pick the combination with the lowest score.

It takes 5ms to run 7v7 but 20-40ms to run 8v8. Because of that, it is advised to only feed into it no more than 14 players.

Comparisons to Teifion's algorithm (loser_picks)

Parties are less likely to broken with my algorithm. However, if your goal is fairness, you should use the default algorithm created by Teifion instead. Teifion's algorithm tries to create counter parties whereas mine doesn't. So if you have an OP party and Teifion's algorithm cannot create a similar OP party, it splits the OP party up. My algorithm will not split them.

Example: Party = [50,50] Team 1: 50, 50, 1, 1 Team 2: 26, 26, 25, 25

My algorithm will allow this as parties are kept and team rating diff = 0. Teifion's algo will try and create a two-player counter party with mean of 50; it cannot find it, and therefore splits the 50,50 party up. The best counter party it can create will have a mean of 26 which is too far.