Для начала. Мне не совсем понятно, что же делается с распределением на бэгэ, если изменения есть:
но нытье, нытье и нытье продолжается.
Далее. Мне не совсем понятно, почему на пшоше делается все, кроме баланса по илвлу? То примам палкой бьем по голове, то по хилам. Почему все сводится исключительно к ограничениям?
Я предлагаю 2 варианта решения. Адекватный - удалить бг из игры. Неадекватный будет далее.
Я немного наговнякал по-быстрому, вот что вышло:
Принцип (все отмеченное знаком "!" я не реализовывал и не тестировал, соответственно, только теоретическое представление):
Алгоритм балансировки без учета ролей и групп:
Балансируется MIN_NUM_PLAYER (10) человек 5х5 по командам. В команды по очереди из очереди добавляется самый сильный и самый слабый.
Каждый последующий игрок добавляется в ту комнду, где разница между средним уровнем шмота команды будет минимальной после его добавления.
Если разница одинаковая, то игрок приоритетно добавляется в ту команду, где меньше игроков.
Если игроков одинаковое количество, то игрок добавляется в любую.
Если разница между количеством игроков в команде превышает MAX_DIFFERENCE_VALUE, то независимо от вычисления разницы среднего илвл игрок приоритетно добавляется в команду с наименьшим числом участников.
Дополнение с учетом ролей и групп:
!Если после добавления разница по роли (например лекарь) между командами превышает MAX_DIF_ROLE_VALUE, игрок помещается в буферную очередь, а не команду.
!Если игрок находится в составе группы, то выбор команды для группы осуществляется таким же образом, что и для одиночного игрока. Разница заключается в том, что илвл для такой группы - это средний илвл всех ее членов.
!Если после выбора команды группа не проходит проверку по количеству или проверку по ролям, вся группы помещается в буферную очередь.
!Если илвл игрока понижает средний илвл команды более, чем на MAX_REDUCE_VALUE, такой игрок помещается в буферную очередь. Дабы избежать такого исхода, можно ограничить регистрацию на поля боя для игроков, чей илвл менее MIN_ACCEPT_ILVL.
!Буферная очередь* В нее попадают игроки, которые по каким-либо причинам не могут попасть на заполняемое бг в текущих условиях, но при этом, каждая итерация добавления участника начинается с попытки добавить именно их. Возможные причины: соотношение хилов, большая разница среднего илвла, премейд
Тесты проводились на 1000 бг.
Все тесты имеют вид:
543,516,500,526,523,543,542,543,509,545,538,546,498,503,546,545,525,520,506,545
539,545,524,530,511,528,542,516,541,512,512,507,519,528,501,534,518,534,543,545
525,521,500,502,528,500,534,517,515,535,537,538,532,528,542,506,497,547,503,550
536,500,513,499,510,542,498,543,509,538,496,515,537,512,506,543,505,519,543,520
503,516,549,499,534,523,509,523,515,529,537,544,521,550,539,510,526,543,507,514
545,524,506,542,527,508,527,496,542,550,544,537,500,533,546,522,533,500,517,528
514,505,523,528,541,510,519,517,499,514,544,541,507,504,550,529,543,508,525,519
530,503,514,503,526,505,520,532,513,539,502,521,531,527,515,528,537,542,509,527
Строка - это очередь на одно бг, где каждое число - илвл игрока. Строка может содержать 20, 30 или 80 значений. Сами значения находятся в диапазоне [450, 550]
На самом деле, тестов я провел немного больше. В целом, получалось, что MAX_DIFFERENCE_VALUE=2 оптимальный вариант. На длинной дистанции, конечно, 2 хуже, чем 1, но разница невелика. Можно считать, на уровне погрешности.
Говнокод:
В месте комментария roles check можно добавить проверку по роли, особо не меняя ничего. Повозиться придется только с пати. А поскольку это все сделано за один вечер после работы, мне чет впадлу этим заниматься, все равно всем насрать будет.
@DeadMouse, @Neff, скажите в чем проблема? Какую задачу нужно решить, чтобы что-то подобное появилось? Не ограничения хрен пойми какие, которые ничего, кроме негатива у людей не вызывают, а решения проблемы? Если я правильно понимаю и оцениваю, то по логике, описанной выше, проблем быть не должно. Время ожидания не должно увеличится у большинства игроков вообще. Разве только что у аутист-примов, где 1 воен на 4 хила. При этом люди не будут чувствовать, что их на бг изнасилуют уже со старта.