googleforgames / open-match

Flexible, extensible, and scalable video game matchmaking.
http://open-match.dev
Apache License 2.0
3.18k stars 335 forks source link

Sample/Docs on Skill/Range Based Matchfunctions #1200

Closed syntxerror closed 3 years ago

syntxerror commented 4 years ago

The goal of this sample is to provide the steps and considerations when using Open Match with matchmaking rating(mmr) to construct a matchmaker. Most games rely on mmr to pair players together for a fair and enjoyable match so the sample will generate a random skill level that best fits a typical normalized distribution, allow overlapping Tickets to meet requirements for multiple profiles, and handle collisions by rating match quality.

Background

Although not all matchmakers use mmr based logic for grouping players together (e.g. Custom Games) most do. One standard for many matchmakers is Glicko-2, which takes a player rating range with calculated deviation bounds and matches players together for a more enjoyable game.

In-Scope/Out-of-Scope

In-Scope

  1. Rank/Range Based rating
  2. Overlapping Tickets
    1. Deviations in player tickets that allows them to meet requirements in multiple profiles
  3. Custom Evaluator
  4. Updated Docs

Out-of-Scope

  1. Not plug and play
  2. Glicko-2 is not a requirement
  3. External player profile connections (player profiles in databases)
  4. No distributed matchmaking

Design Ideas

The design of the sample should hit three main points:

  1. Adding a "skill rating" or mmr field to Tickets
  2. Generating Profiles that will allow skill overlap
  3. Writing a basic match function to select tickets that are within skill range and handle collisions

Adding Skill Ratings to Tickets

To simulate a Glicko-2-like “New Ratings Deviation” in a truly traditional matchmaking system for the sample it will require a skill level with some deviation added. Also taking into account the normal skill distribution seen in the bell curve below, we should ensure that the skill levels we give our tickets follow normalized distribution.

image

Creating Profiles

Within our Director, we should create profiles that allow overlap and not negate our deviation. Deviation should allow Tickets to fit a minimum of one profile and a maximum of three. This will prevent the player from crossing a skill bound that is too large for them. For the sample, the skill overlap will be ±.75.

Handling Collisions/Ensuring Match Quality

To ensure good match quality, a function to determine the quality of the match is necessary. This will also result in handling collisions when a Ticket has generated several match proposals.

syntxerror commented 3 years ago

This issue wasn't closed when the PR mentioning this issue wasn't closed