Gamedev Артемий Леонов
5 529

Какой должна быть система матчмейкинга: советы создателя Awesomenauts

Как распределить игроков по командам так, чтобы все остались довольны.

В закладки

Разработчик Йост ван Донген, недавно завершивший работу над обновлённой системой матчмейкинга для MOBA Awesomenauts, поделился опытом в своём личном блоге. Мы выбрали из его текста главное.

Итак, разработчикам MOBA необходимо распределить по подходящим матчам более ста человек — примерно с этого числа игроков, по мнению ван Донгена, можно говорить об эффективных системах матчмейкинга. Встаёт, например, такой вопрос: какой из двух вариантов распределения должна выбрать система — тот, в котором соперники будут лучше подходить друг другу по уровню, или тот, в котором у них будет наилучший пинг? По мнению разработчика, для разрешения таких дилемм необходимо использовать специальный рейтинг для оценки предполагаемых матчей.

Рейтинг матчей, который используется в Awesomenauts, рассчитывается исходя из нескольких факторов.

Одинаковый уровень команд. Это самый очевидный алгоритм матчмейкинга: обе команды должны играть одинаково хорошо. Соответствующая цифра рассчитывается просто: сравнением средних показателей каждой команды. Чем больше между ними разница, тем меньше очков получает конкретный матч. Однако, ван Донген обращает внимание, что для того, чтобы эта система работала, в игре должна существовать некая система оценки навыков игрока.

Одинаковый уровень игроков. Даже если средние показатели обеих команд идеально совпадают, матч всё равно может быть несбалансированным. Например, в обеих командах может оказаться по два про-игрока и по одному новичку. Чтобы таких ситуаций не возникало, разработчики ввели дополнительную систему, которая оценивает уровень каждого из шести игроков в отдельности.

Команды из друзей. В идеале, каждая команда из трёх друзей должна играть против такой же команды, а не против трёх не знакомых друг с другом людей. Расчёты здесь будут простыми: если обе команды полностью состоят из друзей, значение принимается за 100. Если, например, три друга играют против двух друзей и одного соло-игрока, — это 60 баллов. Если три соло-игрока играют против команды — это ноль.

Разработчики Awsomenauts используют алгоритм, который проверяет пинг между игроком и всеми тремя игроками из команды противника. Чем выше пинг, тем ниже получившееся значение — среднее арифметическое между девятью получившимися числами принимается за «средний пинг» матча.

Разнообразие противников. Матчмейкинговая система слишком часто пытается сталкивать на поле боя одних и тех же игроков — тех, которые наиболее друг другу подходят. Чтобы избежать этого, разработчики стали отнимать очки у матчей с участием «старых знакомых». Другие факторы продолжали влиять на матчмейкинг в гораздо большей степени, но при прочих равных игра всегда подбирает вам незнакомых противников.

Фактор пинга между членами одной команды разработчики не учитывают — ведь игрокам не нужно уворачиваться от пуль друзей, рассчитывая всё до долей секунды. С каждым новым фактором, который добавляется в систему, остальные становятся всё менее значимыми: из-за того, что игра не учитывает пинг между членами одной команды, значение пинга между врагами усиливается.

Каждый из факторов оценивается в процентах — от нуля (очень плохое сочетание) до 100 (идеальное сочетание). Но для создания матча нужно одно значение, а не несколько — поэтому из шести чисел высчитывается одно, причём вес каждого из факторов может различаться в зависимости от особенностей игры. Например, в быстрой игре вроде Awesomenauts главное — хороший пинг, поэтому именно этому значению придаётся наибольший вес.

Учитывается не только важность того или иного фактора, но и другие особенности. Например, ноль процентов совместимости для фактора «одинаковый уровень команд» встречается очень редко — для этого нужно, чтобы друг с другом сражались три профи и три новичка. А вот ноль процентов для фактора «команды из друзей» встречается часто — для этого просто нужно, чтобы три друга играли против трёх соло-игроков. Следовательно, вес этого фактора нужно немного снизить — иначе он станет чересчур влиятельным.

Таким образом, узнав значение для каждого возможного матча, можно рассчитать среднее значение. Уже исходя из него алгоритм начинает распределять игроков по матчам.

Например, двух игроков можно поменять местами: это увеличит показатель одного матча на 5%, но снизит показатель другого на 10%. Алгоритм не будет этого делать, поскольку, в целом, это приведёт к ухудшению ситуации, а не к улучшению. По словам разработчика, это кажется очевидным, но иногда это правило можно и нарушить: например, кому-то может показаться правильным увеличить привлекательность матча с 50 до 55 ценой уменьшения привлекательности другого матча с 90 до 80.

Алгоритм ван Донгена начинается с очень простого шага: составлялся список из всех доступных игроков, в котором они были расположены в зависимости от своих навыков. Затем шесть самых опытных игроков определялись в одну группу, следующие шесть — во вторую, и так далее.

Таким образом, все игроки распределялись по матчам — но было всё ещё не понятно, как эти шестёрки будут делиться на команды. Здесь в дело вступают остальные пять факторов: система рассчитывает все возможные комбинации и выбирает из них лучшую. В дальнейшем разработчики вносили в эту систему разнообразные улучшения, но от некоторых из них пришлось отказаться по причине того, что матчмейкинг стал занимать слишком много времени.

По словам ван Донгена, хорошая система матчмейкинга может получиться только в том случае, если разработчик понимает, чего он от неё хочет. Разработчик советует помнить о том, что чем больше правил задействует ваша система, тем менее значимым становится каждое из них, и о том, что любая подобная система работает лучше при большем количестве игроков.

{ "author_name": "Артемий Леонов", "author_type": "editor", "tags": [], "comments": 22, "likes": 43, "favorites": 36, "is_advertisement": false, "subsite_label": "gamedev", "id": 27824, "is_wide": false, "is_ugc": false, "date": "Mon, 24 Sep 2018 20:42:18 +0300" }
{ "id": 27824, "author_id": 3792, "diff_limit": 1000, "urls": {"diff":"\/comments\/27824\/get","add":"\/comments\/27824\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/27824"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "possessions": [] }

22 комментария 22 комм.

Популярные

По порядку

Написать комментарий...
2

Она еще жива? Последний раз запускала ее 16.03.2017 оО

Ответить
3

Да, с марта 2018-го её перевели на F2P, добавили квестов типа "сыграйте 3 раза за такой-то класс персонажей" и разной кастомизации типа капсул и скинов. И с 2017-го ещё персонажа 3 или 4.

Хорошая моба для тех, кто не любит привычные мобы.

Ответить
0

Плюс не плохо отлично играется с дивана на джойстике...

Ответить
0

Мне показалось с геймпада очень тяжко, но я не привык.

Ответить
1

На клаве в это точно не удобно играть...

Ответить
2

Например, двух игроков можно поменять местами: это увеличит показатель одного матча на 5%, но снизит показатель другого на 10%. Алгоритм не будет этого делать, поскольку, в целом, это приведёт к ухудшению ситуации, а не к улучшению. По словам разработчика, это кажется очевидным, но иногда это правило можно и нарушить: например, кому-то может показаться правильным увеличить привлекательность матча с 50 до 55 ценой уменьшения привлекательности другого матча с 90 до 80.

Таким образом, все игроки распределялись по матчам — но было всё ещё не понятно, как эти шестёрки будут делиться на команды. Здесь в дело вступают остальные пять факторов: система рассчитывает все возможные комбинации и выбирает из них лучшую.

По словам ван Донгена, хорошая система матчмейкинга может получиться только в том случае, если разработчик понимает, чего он от неё хочет. Разработчик советует помнить о том, что чем больше правил задействует ваша система, тем менее значимым становится каждое из них, и о том, что любая подобная система работает лучше при большем количестве игроков.

Эти куски встречаются дважды за текст, совершенно не меняясь.
Это какой-то хитрый способ увеличить объем?

Ответить
0

Нет, это очень странная ошибка. Спасибо, что заметили!

Ответить
0

А теперь они ещё и в комментариях. Это сговор какой-то?

Ответить
1

Классная игра была, темы для каждого из героев - топ
https://youtu.be/9eYAyYo5638

Ответить
0

И какие результаты внедрения этой системы? Токсичность уменьшилась? Или ретеншен вырос?

Ответить
2

Результат такой что я о ней не слышал за все время ни разу, стало быть не очень результат.

Ответить
0

Как будто про матч-мейкинг Доты прочитал.

Ответить
0

Тоесть в этой игре тоже стараются держать всех в 50% винрейта, чтобы никто не обиделся и не бросил играть?

Ответить
0

хороший локальный кооп, незатянутые игровые сессии, интересные персонажи.
наиграл в нее часов 20, но очень редко побеждал.
вывод: это я настолько криворукий что тима проигрывала или мачмейкинг все же никакущий? отношу себя к олдскул игрокам и склоняюсь к второму. а формулы и прочее это уже детали как говорится.

Ответить
1

я думаю плохой мачмейкинг это следствие не столько плохих формул, сколько следствие низкого онлайна. тупо не из кого выбрать противника чтобы достичь баланса и система пихает кого-попало лишь бы ты не выключил игру. поскольку и так в среднем ждешь матча несколько минут.

Ответить
0

думаю система матчмейкинга должна быть несколько хитрее и должна учитывать еще винстрики и лузстрики. и подсовывать лузерам иногда команду заведомо слабее, чтобы повысить шанс на победу и уменьшить отток игроков.

Ответить
1

Наверняка так и делают, так все почти делают, но никто не любит об этом говорить по понятным причинам. Это даже проще делают, винрейт игрока стараются держать в 50%, если вы посмотрите свой винрейт в любой онлайн игре с мачмейкингом, то там будет примерно 50%, конечно при условии что игр достаточно наиграно.

Ответить

0

Всегда найдутся умственно отсталые людишки, которые боятся признаться себе что они плохие игроки. Они будут обвинять кого или что угодно, только не свои клешни.

Ответить
0

Ещё бы поиск матчей с людьми с 7+ минут уменьшили хотя бы до полутора. Да что там с людьми, с ботами не фулл-командой матчи "ищутся/создаются" по 90+ секунд бывает.

Ответить
0

Ни слова про скрытый пул, НЕ ВЕРЮ

Ответить
–1

Куча воды и всё сводится к фразе "Нужно головой думать". Потрясающе оскопированный редакцией материал, так держать, молодцы.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
В лутбоксы начали включать багфиксы
Подписаться на push-уведомления