1. 程式人生 > >The Questions of MatchMaking: Wait Time VS Match Quality

The Questions of MatchMaking: Wait Time VS Match Quality

About the author:

Bruce Brown currently leads the team responsible for building Amazon GameLift‘s FlexMatch matchmaking service.  He has been in the software industry for 12 years including time spent at Microsoft on the Xbox Live Cloud Compute and Xbox Multiplayer teams, as well as at Riot Games where he worked on the League of Legends Live Gameplay and Personalization teams. Currently, he is playing Zelda: Breath of the Wild with his 6 year old son.

The Questions of Matchmaking

As a modern game developer, you are likely aware of the core dichotomy that besets matchmaking in multiplayer games: player wait time versus match quality. You likely have had to make this tradeoff at some point in the past, and you probably agree that it’s one of the toughest, and potentially least rewarding, tradeoffs you have to make. No matter how painstakingly you strike the balance between these two opposing requirements, it can be almost impossible to satisfy 100% of your global player base.

Now, this blog isn’t going to be about me telling you “the right choice” to make a horde of happy players via matchmaking. Nobody knows your game better than you, and no one is more equipped to make this decision for your players. During my time at Xbox Live, I worked with developers to improve their matchmaking, and in every single case the outcome was different. Every game is unique, with different goals, different challenges, and different players. You are the expert in this equation. So although I can’t provide you with an answer that is one size fits all, what I can attempt to provide you with is my framework of questions you can ask when calculating the choice that is right for your game, and ultimately your players.

The Waiting Game

Until someone figures out how to defy the laws of physics, perfect matches made instantly aren’t going to happen. So, what can we do in the meantime? Well, here is what we know:

  1. Players are going to have to wait for a match
  2. Players aren’t going to wait forever.

So, the question I like to ask is, “Just how long are my players willing to wait for a match?”

This question forces you to view things from the perspective of your player. It also pushes you to think methodically, using one half of the problem (wait time) as the subject, and using the other half (match quality) as a dial to tune into your player’s resonant matchmaking frequency, zeroing in on the timeframe they’re willing to wait. So how do we measure a player’s tolerance to wait?

Questions of Time

There are a number of avenues of exploration, but the metrics required to answer this question ultimately boil down to two categories:

  1. Player data – things you can measure about your matches
  2. Player feedback – what your players tell you about their matches

If your game is live, you probably have this data in spades. You also know what your game’s goals for success are, and how these translate to delivered player experience. If your game is pre-release, these goals can act as a proxy for the data and feedback.

With data, feedback, and goals in hand, you now have a wealth of insight into player behavior at your disposal. This can be used to calculate the wait time sweet spot by asking some of the following questions:

  • How long is a match in your game?

If your matches are short (single digit minutes), your players are likely to want to get back into a match as quickly as possible. Longer matches (tens of minutes) might mean your players might be willing to wait for the most competitive match possible.

  • On average, how many matches do your players play in a single gaming session?

If your players only sticks around for one or two matches per session, then they might be willing to wait longer for the best possible match. If they play many matches in one session, they may prefer quantity over quality.

  • Are your players casual/ranked/somewhere in between?  Do they fall into multiple segments?  Do they sometimes cross segments (casual/ranked)? (Okay, that was three variables in one.)

Being able to segment players can be critical for issuing timely matches. Segmenting allows you to pre-group players into selection pools for more patient as against less patient players, and preventing you from searching across your entire player base for every match request. Your players will also want a competitive match, so it’s important to be able to pre-group players into pools so you can make smarter matches. But, on the other hand, you have to balance out the fact that players generally will only wait so long (at which point you had better relax your criteria and get them playing).

Collecting answers to these questions will enable you to define the answer to the wait time half of the equation. Now let’s look at what we can ask about match quality.

Looking for a Fair Fight

When you attempt to group players into matches, you likely start with a set of criteria that you measure players against, such as latency or skill.  You then compare those criteria across players through some set of heuristics via some algorithm. I’m going to call the set of criteria “attributes”, the comparison mechanism “rules”, and the algorithm the “rules engine”. So you pass player attributes into your rules engine which uses your rules to compare those attributes to find a match.  Okay, great – so what?

Well, the number of attributes, the complexity of the rules, and the efficiency of your rules engine are limiting factors to how fast you can match your players (given a constant population of players). These factors also define match quality in your game. If you have lots of rules and attributes, you likely are trying to hone in on a very specific quality of experience that you want for your players. On the other hand, if you only care about latency when considering match quality, you only have one rule, and competition quality isn’t your highest priority.

No matter what your rules of match quality are, you want to give these constraints every advantage you can to make a match as fast as possible. You also probably want to be able to relax your rules over time so that you can be sure that your players eventually find a match, even if it isn’t the best quality.  To achieve this, here are some questions to ask about match quality:

  • Which rules are rejecting players most often?
  • How long does it take to match players within a segment, on average?
  • Which players are taking the longest to match?  Why?
  • How long do you want to wait before expanding your search and relaxing your rules?  Which rule(s) do you want to relax?  What metrics are informing these choices?

Answering these match quality questions requires a system that can make these measurements and present that data to you in a logical, clear way. And this is what I meant earlier in proposing my approach to the eternal waiting time/match quality dichotomy – you can use your deliberated answers to fine tune our assessment of just how long your players are willing to wait before being placed in a match.

Trial and a Lot Less Error

Hopefully this framework of questions will not only help you to find the right balance between player wait time and match quality for your game, but will also convince you that you are the smartest matchmaking system around. Your expertise with your player knowledge and data ultimately means you determine how successful your matchmaking is for your players.

As such, the Matchmaking tools you surround yourself with should work with you to answer these questions. At Amazon GameLift, we built FlexMatch with these questions in mind to support your expertise, emitting the data you need to answer these questions, and providing the flexibility to make the process of matching players suit your needs for your game and your players.

Thanks, and happy matching!

相關推薦

The Questions of MatchMaking: Wait Time VS Match Quality

About the author: Bruce Brown currently leads the team responsible for building Amazon GameLift‘s FlexMatch matchmaking service. 

The future of digital marketing: AI vs. human copywriters Articles Chief Technology Officer

Some companies have already witnessed the advantages of such collaboration. IBM, for instance, is scaling up its experience in AI-powered advertising and c

vmserver安裝出錯What is the location of the directory of C header files that match your running kernel?

Fedora13安裝vmware出現 : What is the location of the directory of C header files that match your running kernel? The path "" is not valid. Would you like to c

RuntimeError: The size of tensor a (96) must match the size of tensor b (95) at non-singleton dimens

復現PSMNet時候出現的bug。 出錯在output = model(imgL,imgR) 一開始以為左右兩圖維度不一致。換成output = model(imgR,imgR)之後依舊報錯 翻牆查閱pytorch資料 If two tensors x, y are

解決:The content of element type "web-app" must match "(icon?display

內容 param match filter res ros welcome local page http://www.educity.cn/wenda/126463.html 解決:The content of element type "web-app" must ma

Java compiler level does not match the version of the installed Java project facet

led epo sin eclips path tar repo alt rip 更換jdk版本時報以下問題:Description Resource Path Location TypeJava compiler level does not match the vers

新導入項目出現Java compiler level does not match the version of the installed java project facet問題處理

ima project 編譯 分享 face bsp 導入 ets 操作   在使用eclipse開發java類項目的時候,免不了會在不同的設備上開發編譯同一個項目,那麽就會出現Java compiler level does not match the version o

About the diffrence of wait timed_wait and block in java

@override stack util except str void rgs dex interrupt import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentra

Type Java compiler level does not match the version of the installed Java project facet.項目內容沒錯但是項目上報錯,不影響運行

images ems rop http ges 內容 工程 版本 ren 1、Window->Show View->Problems 2、在項目上右鍵properties->project Facets->修改右側的version 保持一致 3

web.xml中<web-app>提示The content of element type "web-app" must match "(icon?,display- name?,description?,distributable?,

session span text .com ble splay 錯誤 esc gin 錯誤:配置web.xml時,出現紅色叉叉,提示 The content of element type "web-app" must match "(icon?,display-

Java問題解決:Java compiler level does not match the version of the installed Java project facet.

問題 compiler .cn 技術分享 cnblogs java編譯 mpi 選中 per 問題原因:Java編譯器級別與Facted Project 中的Java 版本設定不匹配。 解決辦法:將兩者設置一致 1.查看Java compiler level :   選中項

strus2配置strus.xml問題-The content of element type "package" must match "(result-types?,interceptors?

ngs ppi 需要 ML 問題 所有 -i app exc 搭建strus2項目,在配置strus.xml時候碰到了這個問題: The content of element type "package" must match "(result-types?,interce

解決java compiler level does not match the version of the installed java project facet

ref 目錄 ngs eclipse 項目 cor 點擊 遇到 log 因為遇到這個問題,所以記錄一下。 轉載自:https://blog.csdn.net/chszs/article/details/8125828 java compiler level does

pod react 之 [!] The name of the given podspec `yoga` doesn't match the expected one `Yoga

[!] The name of the given podspec `yoga` doesn't match the expected one `Yoga 解決辦法: 1、我的Yoga的路徑不對,看截圖 我的node_modules資料夾是在我的專案的根目錄下,所以我修改路徑

寫hibernate.cfg.xml時報錯The content of element type "property" must match "(meta*,(column|formula)*,type?)".

原配置檔案是這樣的 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "htt

Maven專案,報錯Java compiler level does not match the version of the installed Java project facet

使用eclipse新建maven專案。專案建立後手動修改org.eclipse.wst.common.project.facet.core.xml檔案, 修改專案 Project Facets  修改後發現專案名稱處報錯,有紅色叉號。 查詢eclipse中Problems

eclipse重新整理maven專案後出現Java compiler level does not match the version of the installed Java project face

如果出現標題所示的問題這裡提供一個根除的方法: 需要找到maven安裝路徑conf子路徑下的setting.xml檔案,開啟<profile>標籤指定你的jdk編譯版本即可,如下所示: <profile>       

Java compiler level does not match the version of the installed Java project facet.]問題

Java compiler level does not match the version of the installed Java project facet.] 問題原因: Facted Project 中的Java 版本設定與專案的Java編譯器的compliance le

web.xml中 web-app 報錯了--The content of element type "web-app" must match

web.xml中<web-app>報錯了--The content of element type "web-app" must match。真是活見鬼! 查完資料後發現,原來web-app_2_3.dtd規範有規定,裡面配置的內容要按照規定的順序來,如下:

pod react 之 [!] The name of the given podspec `yoga` doesn't match the expected one `Yoga

[!] The name of the given podspec `yoga` doesn't match the expected one `Yoga 解決辦法: 將pod ‘Yoga’ 改為pod ’yoga‘(首字母是小寫)