Difference between revisions of "Matchmaking rules"

From Gladiabots Wiki
Jump to: navigation, search
m
(from discord)
(48 intermediate revisions by 5 users not shown)
Line 1: Line 1:
Here's how the matchmaking works:
+
== Ghosts ==
  
<ul>
+
Every time you deploy a team, it becomes a "ghost" that will be used by the matchmaking system.
 +
When a match result is known, the league score delta is applied to both the participating ghosts and the player(s) that manually created/joined the match.
 +
This way, ghosts score evolves depending on the opponents they meet.
 +
The more a ghost "plays", the more accurate its score is.
  
<li> Get the 100 "oldest" (creation time) available matches matching these conditions:
+
== Matchmaking ==
<ul>
+
<li> Opponent's league has to be between <your league> -1 and <your league> + 1
+
<li> If opponent's league is different than yours: league score delta has to be lower than 200 points</ul>
+
  
<li> Filter out (remove) matches matching these conditions:
+
Here's what happens when you start a new game:
<ul>
+
<li> Opponents has already been played in the last 5 minutes</ul>
+
  
[*] 2 possible cases:
+
<span style="color: red">Rules in red only apply to ranked matches</span>
[list]
+
[*] If there's no match remaining:
+
[list]
+
[*] Pick a random map
+
[*] Pick a random left/right side
+
[*] Create a new match using these parameters[/list]
+
  
[*] If there's some matches remaining:
+
<span style="color: blue">Rules in blue only apply to unranked matches</span>
[list]
+
 
[*] Sort the remaining matches using these comparison rules:
+
# A new ghost is created with your ghost composition and AIs, your current league score (elo) and your XP level
[list]
+
# The system lists the 200 most recent ghosts (only keeping the most recent ghost for each player) matching those conditions:
[*] Opponent in the closest league first
+
#* <span style="color: red">League score between <your score -100> and <your score +100></span>
[*] In case of equality: opponent using a different IP first
+
#* <span style="color: red">The score of the ghost is not lower than his original score minus 50 points</span>. Say a ghost was deployed at 1800. If the ghost goes down to under 1750 it gets disabled.
[*] In case of equality: opponent never met or met the furthest in the past first
+
# Then it removes from this list the ghosts of players you already met during the last 30 minutes
(considered equal under a 10 minutes delta)
+
# At this point, there are 2 possible cases:
[*] In case of equality: opponent with the lowest league score delta (compared to yours) first
+
#* Case 1 = the ghost list is empty:
(considered equal under a 10 points delta)
+
#*# <span style="color: red">Retry with -200/+200, -300/+300 and -400/+400 score ranges until it finds at least one valid ghost, else match is pending until someone else joins it</span>
[*] In case of equality: oldest match (creation time) first[/list]
+
#*# <span style="color: blue">Your match is pending until someone else joins it</span>
[*] Take the first match of the list and join it[/list][/list][/list]
+
#* Case 2 = there are some ghosts remaining:
 +
#** Sort the list using these rules (ordered by priority):
 +
#**# Ghosts from pending matches first
 +
#**# <span style="color: red">Ghosts from the closest league first</span>
 +
#**# <span style="color: blue">Ghosts with closest score first</span>
 +
#**# Ghosts of players using a different IP first (anti-cheat measure)
 +
#**# Ghosts of players met the furthest in the past first (never met = the furthest possible)
 +
#**# <span style="color: red">Ghosts with the closest league score first</span>. <br />This list has 50% chances to keep "closest scores that are lower than the deploying player first", say the deploying player has a score of 1500, then only ghosts equal or under 1500 are picked, this even if a opponent has better ghosts in range. The remaining 50% chances are used to keep "closest scores that are higher than the deploying player first".
 +
#**# Most recent ghosts first
 +
#** Keep the 10 first of the sorted list (10 "best" ghosts)
 +
#** Then pick one of them randomly and join it
 +
 
 +
== Example ==
 +
 
 +
Here's an example of the ghost system in action:
 +
(asuming the ghost list is initialy empty, all players are in the same league with a similar league score and a different IPs)
 +
 
 +
; T = 0h00mn > P1 deploys G1:
 +
: no ghost available, match is pending
 +
: ghost list: G1
 +
; T = 0h01mn > P2 deploys G2:
 +
: matched against G1 (P1 will see the "new" flag on the match)
 +
: ghost list: G1, G2
 +
; T = 0h02mn > P3 deploys G3:
 +
: matched against G2 (most recent ghost)
 +
: ghost list: G1, G2, G3
 +
; T = 0h03mn > P3 deploys G3b:
 +
: matched against G1 (most recent ghost not already met in the last 30mn)
 +
: ghost list: G1, G2, G3, G3b
 +
; T = 0h04mn > P3 deploys G3c:
 +
: no ghost available (fought all the available ghosts in the last 30mn), match pending
 +
: ghost list: G1, G2, G3, G3b, G3c
 +
; T = 0h05mn > P1 deploys G1b:
 +
: matched against G3c (most recent ghost)
 +
: ghost list: G1, G2, G3, G3b, G3c, G1b
 +
; T = 0h06mn > P1 deploys G1c:
 +
: matched against G2 (most recent ghost not already met in the last 30mn)
 +
: ghost list: G1, G2, G3, G3b, G3c, G1b, G1c
 +
...
 +
; T = 0h40mn > P1 deploys G1d:
 +
: matched against G3c (most recent ghost, met more than 30mn ago)
 +
: ghost list: G1, G2, G3, G3b, G3c, G1b, G1c, G1d

Revision as of 12:03, 31 January 2019

Ghosts

Every time you deploy a team, it becomes a "ghost" that will be used by the matchmaking system. When a match result is known, the league score delta is applied to both the participating ghosts and the player(s) that manually created/joined the match. This way, ghosts score evolves depending on the opponents they meet. The more a ghost "plays", the more accurate its score is.

Matchmaking

Here's what happens when you start a new game:

Rules in red only apply to ranked matches

Rules in blue only apply to unranked matches

  1. A new ghost is created with your ghost composition and AIs, your current league score (elo) and your XP level
  2. The system lists the 200 most recent ghosts (only keeping the most recent ghost for each player) matching those conditions:
    • League score between <your score -100> and <your score +100>
    • The score of the ghost is not lower than his original score minus 50 points. Say a ghost was deployed at 1800. If the ghost goes down to under 1750 it gets disabled.
  3. Then it removes from this list the ghosts of players you already met during the last 30 minutes
  4. At this point, there are 2 possible cases:
    • Case 1 = the ghost list is empty:
      1. Retry with -200/+200, -300/+300 and -400/+400 score ranges until it finds at least one valid ghost, else match is pending until someone else joins it
      2. Your match is pending until someone else joins it
    • Case 2 = there are some ghosts remaining:
      • Sort the list using these rules (ordered by priority):
        1. Ghosts from pending matches first
        2. Ghosts from the closest league first
        3. Ghosts with closest score first
        4. Ghosts of players using a different IP first (anti-cheat measure)
        5. Ghosts of players met the furthest in the past first (never met = the furthest possible)
        6. Ghosts with the closest league score first.
          This list has 50% chances to keep "closest scores that are lower than the deploying player first", say the deploying player has a score of 1500, then only ghosts equal or under 1500 are picked, this even if a opponent has better ghosts in range. The remaining 50% chances are used to keep "closest scores that are higher than the deploying player first".
        7. Most recent ghosts first
      • Keep the 10 first of the sorted list (10 "best" ghosts)
      • Then pick one of them randomly and join it

Example

Here's an example of the ghost system in action: (asuming the ghost list is initialy empty, all players are in the same league with a similar league score and a different IPs)

T = 0h00mn > P1 deploys G1
no ghost available, match is pending
ghost list: G1
T = 0h01mn > P2 deploys G2
matched against G1 (P1 will see the "new" flag on the match)
ghost list: G1, G2
T = 0h02mn > P3 deploys G3
matched against G2 (most recent ghost)
ghost list: G1, G2, G3
T = 0h03mn > P3 deploys G3b
matched against G1 (most recent ghost not already met in the last 30mn)
ghost list: G1, G2, G3, G3b
T = 0h04mn > P3 deploys G3c
no ghost available (fought all the available ghosts in the last 30mn), match pending
ghost list: G1, G2, G3, G3b, G3c
T = 0h05mn > P1 deploys G1b
matched against G3c (most recent ghost)
ghost list: G1, G2, G3, G3b, G3c, G1b
T = 0h06mn > P1 deploys G1c
matched against G2 (most recent ghost not already met in the last 30mn)
ghost list: G1, G2, G3, G3b, G3c, G1b, G1c

...

T = 0h40mn > P1 deploys G1d
matched against G3c (most recent ghost, met more than 30mn ago)
ghost list: G1, G2, G3, G3b, G3c, G1b, G1c, G1d