An ANTI-DC Algorithm

A tribute to @harry14141414

This discussion is about formulating a mechanic that will match up frequent DC'er with similarly frequent DC'ers, for both killers and survivors alike.
The following algorithm will produce a number (index) at which you can be categorised as a never DC'er or a heavy DC'er, which will then be used as a condition for matchmaking.

THE ALGORITHM:

HOW IT WORKS:
The game keeps a Boolean Array that represents your last 100 games. Every new game you play is placed at index 99 and for every new game you play, all other Booleans in the Boolean Array are moved 1 place down in the array. The Boolean at index 0 is discarded.
The boolean returns True when a player DC'ed and will return False when the player finished the game, or if the player has never played as many games as this Index in the array suggests.

The game will then use the formula y = -0.01(x-100)^2+100 to determine how much every returned True value in the Boolean Array should amount to the total DC points based on how recent every DC of the player was.
(x in this formula is the Boolean Array's index value + 1)

The sum of this outcome is what we call Total DC Points (TDCP for short reference).

Now we have a number that represents how frequently someone has disconnected and gives weight to the degree in which these DC's were recent.

Ofcourse it would be near impossible to match players with an identical TDCP in every game, without creating the most horrendous queue times, thus we need a time-based/connect-attempt-based deviation system to deal with this.

The lowest possible TDCP would be 0, while the highest TDCP possible would be the total sum of every outcome of -0.01(x-100)^2+100 with x being all positive whole numbers ranging from 0 to a 100.

In order to make matchmaking possible, we need to at first restrict players from joining players who deviate more than x% and increase this percentage slowly based on queuetime/attempted, rejected searches for matches. Meaning it would be possible to join someone who always DC's as someone who never DC's, but it would mean that you only join them if there are no other people available.

FINAL NOTE:

I also know that there are some simpler, but less accurate methods, like only looking at an average of DC's over the past x amount of games, but this would only be a less accurate version of weighting recency, by being basically the Bool Array with only 1 index.

The outcome of the formula mentioned above for every legal x value could also be kept in a separate Floating Point Array, which would reduce calculation time.
For example:

if(BooleanArray[10] = true){
TDCP += FloatingPointArray[10];}

I hope that explains all of it (:

Comments