# Rankings

Rankings at NHRL are calculated by a custom formula. Your ranking is based on your stats from the current season and the previous season.

## Formula

The basic idea is simple: looking at fights from this season and last season, each bot gets 1 point for a win, and loses 1 point for a loss. So if you take the number of wins a bot has, and subtract the number of losses it has, you get the base point value for rankings.

*Example:* A bot is 10-5 at NHRL. It has 5 points.

We then apply 3 modifiers: a **rookie penalty**, an **upset penalty/bonus**, and a **finals bonus**.

### Rookie penalty

Each bot has a penalty assigned to it, equal to **(number of fights) - (minimum fights)**, with a minimum value of 0. The rookie penalty ensures that new bots begin near the bottom of the rankings table, instead of the middle.

The **minimum fights** value is different depending on which rankings we are looking at. For 3lb all-time rankings, it is 10; for 3lb single-year rankings, it is 8; for all other rankings, it is 5. This number may get tweaked in the future, if the 12lb and 30lb weight classes fight more often.

This means that a 12lb bot that has never fought at NHRL will have a total point value of -5, and 12lb bots with 5 or more NHRL fights have a rookie penalty of 0.

*Example:* A 12lb bot is 2-1 at NHRL. The minimum fights value for 12lb bots is -5. So the bot has -1 points; 1 point for its record, minus 2 rookie points (3 total fights - minimum fights of 5).

### Upset penalty/bonus

For each fight, we compare the bots' winning percentages. If the bot with a lower winning percentage defeats a bot with a higher winning percentage, then the winning bot gets a bonus and the losing bot gets a penalty. The value of this bonus/penalty is the same for both bots: the difference between the two winning percentages, multiplied by 2.5.

For this calculation only, we add 5 virtual wins and 5 virtual losses to a bot's winning percentage. This means that if a bot with an 0-1 record defeats a bot with a 3-0 record, we don't apply as large a modifier as if a bot with an 0-10 record beat a bot with a 30-0 record.

*Example:* A bot with a 5-15 record beats a bot with a 15-5 record. For this calculation, we add 5 virtual wins and losses to each bot's record, which makes their records 10-20 (.333 win percentage) and 20-10 (.667 win percentage). The upset penalty/bonus is 0.667 - 0.333 = 0.334 * 2.5 = 0.84 points. This means the winner of the fight gets 1.84 points, and the loser of the fight loses 1.84 points.

*Example:* A bot with an 0-1 record defeats a bot with a 3-0 record. With virtual wins and losses, their records become 5-6 and 8-5, for win percentages of .455 and .615, respectively. The upset penalty is 0.615 - 0.455 = 0.16 * 2.5 = 0.4 points. So the winning bot gets 1.4 points, and the losing bot loses 1.4 points.

### Finals bonus

If a bot reaches the Semifinals of its bracket, it receives 0.5 bonus points, regardless of whether it wins or loses the match.

If a bot reaches the Final, it receives another 0.5 bonus points, in a similar fashion as above.

This bonus was 0.25 points before the 2023 season.

*Example:* A bot reaches the Semifinals, and beats a bot with a lower win percentage. The fight is worth 1.5 points for the winner, and -0.5 points to the loser.