This is a toy reproduction of the paper (WWW'17) EOMM: An Engagement Optimized Matchmaking.
This is a toy reproduction of the paper (WWW’17) EOMM: An Engagement Optimized Matchmaking.
We are research engineers working on game matchmaking optimization domain. The idea of EOMM paper is interesting, so we reproduced the framework and the matchmaking procedure, according to the description in the paper.
$ cd EOMM
$ pip install -r requirements.txt # use pip3 if you have both python2 and python3 in your environment
$ python main.py # log file will be generated into ./log folder
You can see the simulation result both from your console and log file in ./log
folder.
EOMM
├── EOMM.py # the matchmakers, including WorstMM, SkillMM, RandomMM, EOMM
├── Matchmaking_simulator.py # the matchmaking simulator
├── main.py # the main process to run a simulation
├── log # folder to keep log files
In the file main.py
, you can edit the variables
An example:
round_num=10000, player_num=100
matchmakers = [RandomMM(), SkillMM(), WorstMM(), EOMM()]
At each round, we create a pool of 100 players;
Now you can play around with the codes.
Argument: the intuitive assumption that a fair game is best player experience sometimes fails, and matchmaking based on fairness is not optimal for engagement.
Goal: maximize overall player engagement
EOMM:
first measures players disengagement by their churn risk after each matchmaking decision;
secondly models all players who wait in the matchmaking pool as a complete graph, where each player is a node and the edge between two players is their sum churn risks if paired;
achieven matchmaking desicion by solving a minimum weight perfect matching problem that finds non-overlapping pairs with the minimal sum of edge weights on a complete graph.
Limits: it applies to 1-vs-1 matches only.
The graph matching problem is sovled by networkx (see max_weight_matching for more details).
For the ease of graph matching, churn/retain rate values are in percentage (*100%)