Аналитика лучшего дпс шмота от программиста

ВМЕСТО ВСТУПЛЕНИЯ





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

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

(БИЛД - набор шмота, именно в таком понятии я его использую в тексте)

(ВНИМАНИЕ: в посте ОЧЕНЬ много текста по описанию построения и расчета дпса, куча информации по сравнению результатов с существующими сервисами. Я специально все подробно это описывал, чтоб мой пост был наиболее полон, а тем кто хочет во всем разобраться было наиболее легко это сделать. К тому же, понимаю, что лучший спор с дивана-аналитиками это не полемика, а тыканье его лица в расчеты и сравнения. Тем же кто просто хочет увидеть результаты расчета: скрольте до главы "РЕЗУЛЬТАТЫ НАХОЖДЕНИЯ ЛУЧШИХ БИЛДОВ")

По ходу решения этой задачи я решил сделать более универсальные результаты, подходящие для всех аги-героев. Все герои обладают скиллами, что естественно вносит свою долю в дпс. В скиллах и заключаются отличия героев. Для того чтобы наиболее точно определить лучшую ДПС сборку предметов необходимо по минимумму свести эту зависимость от скиллов героя. А это можно сделать лишь не качая их. Таким образом в качестве модели исследования я брал снайпера без раскаченных скиллов - те просто стреляющий юнит. Результаты, полученные на данной модели, наиболее лучше подходят ко всем героям, а не только к снайпу. К тому же такая модель оценивает именно предметы а не скиллы героев.

Задача оказалась не такой уж простой как мне казалось вначале. Как считать дпс от трех Дайдалусов? А от двух Мьелниров? Башер имеет "мертвое время": сработав, он не может забашить снова какое-то время. На все эти вопросы мне и приходилось отвечать. Прогу я писал где-то месяц, мне было просто интересно самому. Все это происходило прошлым летом, написав ее, я подастыл к ней. Но вот сейчас решил все-таки выложить свои результаты.

Итак, что вы здесь найдете:

    1) Подробный алгоритм работы
    2) Подробный разбор расчета дпса
    3) Проверка и сравнения результатов с результатами, полученными на сайте:
    http://devilesk.com/dota2/apps/hero-calculator/
    4) Ну и собственно результаты.


Билд с рапирами мало актуален, поэтому я ее не добавлял в предметы, хотя в последнем слайде добавил - можете посмотреть. Билд с рапирой вначале игры не актуален, да может и даст топ дпс - но кто такое будет собирать. Нам же нужны актуальные билды, а значит мы будем искать билды, со следующими условиями:
    1) Расчет билдов при различной кол-ве золото
    2) Наличие сапога обязательно
    3) Запрет рапиры


Вот кстати как выглядит структура кода.






Герой и Враг




Сперва программа загружает начальные настройки, представленные в файлe init.txt:
Как видно, это герой снайпер, следовательно будет загружен файл sniper.txt для героя. Изначально я делал расширяемую программу, где можно было бы указывать нужного героя. Те в перспективе я хотел сделать описания для многих героев, но потом забил. Хотя если добавить mortra.txt и описать ей крит, то будет расчитываться и для фантомки.



Далее в init.txt:
    lvl - лвл героя
    max_cost - закуп предметов не должен превышать указанную сумму
    max_size - выводить только лучшие 100 билдов
    victim_armor, victim_armor - броня и магический резист врага
    need - тут через запятую указаны необходимые предметы, которые должны быть в билде ОБЯЗАТЕЛЬНО. К примеру,
    d48n - это id (в моей системе) Power Thread. По предметам будет подробное описание далее.

Таким образом данные настойки будут рассчитывать наилучшие билды закуп которых не превышает 10000 среди предметов которых Power Thread будет обязательно. Меняя init.txt можно сделать качественный анализ для всех случаев.


Собираем билды



Ниже представлена схема сбора билдов. Я по пунктам распишу что здесь представлено:
1) В отдельном файле "items.txt" прописываем все предметы. Скажу скажу, что предметы тут не все.
В доте порядка 100 предметов, а значит вариаций билдов порядка 100^6, что ОЧЕНЬ МНОГО. Я выкинул все предметы на магов, все расходуемые предметы, тем самым сократил время обсчета, не потеряв суть. Рапиры тут тоже кстати нету, так как билд с рапирой мало кому интересен. indef - идентификатор предмета в моей системе.



2) Парсим файл items.txt и собираем из них экземпляры классов. Сами эти классы ничего больше не делают.
3) На этом шаге мы собираем всевозможные сочетание предметов на 1,2,3,4,5,6 слотов. Функция ixArrayAction прогоняется 6 раз и в массив indefs собираем строки вида "b210n_b211n_c21n", "e210n_b21n_c21n_e22n". Как несложно заметить, в таких строках зашифрованы наборы предметов.(Через знак "_" перечислены идентификаторы предметов для будущих сборок)
4) Сборок слишком много, актуализируем их и фильтруем. К примеру, если в билде лежит 2 предмета Mask of Madndess или 4 сапога - выкидываем из массива. Такие сборки не актуальны.
5) Наконец собираем билды: Из полученных строк вида: "b210n_b211n_c21n", "e210n_b21n_c21n_e22n" получаем входящее в них предметы и создаем объект build.class - являющийся по сути набором предметов. Далее каждый билд считает свой дпс, но об этом будет далее...


ЭКВИВАЛЕНТИРОВАНИЕ ПРЕДМЕТОВ



Как я писал выше задача орб-сочетания предметов передо мной не стоит, так как я в процессе построения билдов уже отфильтровывал их на это. Нет смысла рассчитывать дпс для билда в которых присутствуют два МОМа, такой билд просто никто не собирает. Но есть ряд предметов, механика которых сложна для расчета (3 мьелнира в билде или 5 дайдалусов). Для расчета их я применяю их эквиваленты. К примеру эквивалентом кристаллиса является такой же меч с теми же статами, без крита, но со свойством "увеличение физ урона на 15%". Критический урон кристаллиса эквивалентен свойству "увеличение физ урона на 15%". Кристический урон от двух кристаллисов эквивалентен "увеличению физ урона на 27%". Таким образом я строил таблицу эквивалентирования по которой и определял эквивалентные свойства билда. Сперва я, конечно, пытался рассчитать такие билды с помощью теории вероятности. Но уже при 3ех предметов это сложно. К тому же, для критов это одно, для баша - другое, для мьелниров - третье. Нужен был общий принцип для них - и я придумал ставить натурные эксперименты.

Возьмем билд из одного кристаллиса и 2 дайдалусов:
Пусть белый урон у нас с учетом этих предметов 300. Проделаем эксперимент - ударим 1000 000 раз по цели и посчитаем суммарный урон. Поделим суммарный урон на 1 000 000 - получим некое число (скажем 510), это есть средний урон с учетом критов. А усиливающий эффект (кристаллис + 2 дайдалуса) равен 510/300 = 1.7 - это и есть ЭКВИВАЛЕНТНОЕ УСИЛЕНИЕ ФИЗ УРОНА от кристаллиса и 2ух дейдалусов..

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

Таким образом для всевозможных сочетаний кристаллисов с дейдалусов я проводил натурные эксперименты на компе ЕСТЕСТВЕННО (а вы думали я в ручную чтоли бил = ))) ) и записывал полученные усиливающие коэффициенты.



Полученные результаты эквивалентирование проводились отдельно в программе один раз. Один раз обсчитав усиливающие эффекты я записывал их в файлы crit.txt, light.txt, bash.txt и в дальнейшем использовал для расчетов.

Возьмем билд из шести предметов <PT, кристаллис, MOM , кристаллис, Дайдалус, Дайдалус>. Критический урон в этом билде дают следующие предметы: 2 кристаллиса и 2 дейдалуса. В файле ctit.txt они попадает под маску ccdd - усиливающий эффект которого 1.76. Умножая физический урон на это число мы получим дпс с учетом критов.

Аналогичным образом строились эквиваленты для мьелнира и маелшторма:
(mmM:76.859865 - билд с 2 маелштормами и 1 мьелнир - За 1 удар в среднем передается 76,8 магического урона.

РАСЧЕТ ДПС



















ПРОВЕРКА РАСЧЕТА ДПСА



Сравнение и проверку результатов, как я писал ранее, я проводил на сервисе http://devilesk.com/dota2/apps/hero-calculator/
Проставляем снайперу 25 лвл и добавляем предметы на этом сайте. Умения и желтый плюсик не прокачиваем: Зачем я их не качал (Я это уже писал, но еще раз повторю):
Ну, во-первых, стоит сказать, что на выборку лучших билдов это никак не отразится. Умение хедшот увеличит средний маг урон за удар, что даст одинаковый прирост дпса для всех билдов. Я же хотел рассчитать более универсальные билды, те такие билды, которые по минимуму зависили бы от умений героя. Такое возможно лишь при расчете героя без умений. Хотя, конечно, в логику моей программы легко добавить и уникальные возможности, такие как мега криты у морты к примеру. Но тогда расчеты будут более пригодны под конкретного героя, а не под всех агильщиков.

Итак, первое сравнение: PT, Дезоль, 2 кристаллиса





Второе сравнение: RING OF AGUILA, 2 MJOLNIR, 2 кристаллиса, PT




РЕЗУЛЬТАТЫ НАХОЖДЕНИЯ ЛУЧШИХ БИЛДОВ



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

1. Макс закуп на 1000, 25 лвл героя, герой без раскаченных умений:
(как видно, зарешал просто закуп мелких аги предметов)



2. Макс закуп на 2000, 25 лвл героя, герой без раскаченных умений:
(MOM зарешал, напомню что MOM тут учитывается в активном состоянии, 100 атак спид)



3. Макс закуп на 4000, 25 лвл героя, герой без раскаченных умений:
(МОМ решает на всех билдах, также интересен билд MOM+кристаллис на 3-ем месте, появляется RING OF AQUILA)



Билд без сапога не живуч. Но сапог дает мало ДПС, поэтому он и не попадает в лучшие билды. Исправим эту ситуацию и поставим уcловие необходимости присутствия PT в билде (те в дальнейшем ищем все билды с PT):

4. Макс закуп на 4000, 25 лвл героя, герой без раскаченных умений, PT обязателен:



Ожидаемо и дальше билды с MOM будут выигрывать. На ранней стадии игры бурст 100 атак спида за 2к бабло очень жирен. Лично я не люблю его. Думаю и многие тут тоже. К тому же, MOM - ситуативный предмет, поэтому в дальнейших расчетах я запихну MOM в список запрещенных предметов и буду рассчитывать без него. Кстати рано или поздно он сам по себе вылетел бы из сборки лучших билдов. Мьелнир, к примеру, дает больше дпса чем МОМ, просто на раней стадии игры денег на него не хватает.

5. Макс закуп на 4000, 25 лвл героя, герой без раскаченных умений,PT обязателен, МОМ запрещен:
(аги шмот рулит, опять RING OF AQUILA в трех из 3-ех билдов)



6. Макс закуп на 10000, 25 лвл героя, герой без раскаченных умений,PT обязателен, МОМ запрещен:
(крист, дезоль и маелшторм зарулили. Хороший плюс этого билда - наличие маелшторма - а значит норм фарма. Абсолютно лучший билд по сравнению с другими на 10к)




7. Макс закуп на 15000, 25 лвл героя, герой без раскаченных умений,PT обязателен, МОМ запрещен:
(Атак спид и криты начинают зарешивать. Во всех билдах есть дезоль. Не зря походу люди собирают moon shurp)



8. Макс закуп на 20000, 25 лвл героя, герой без раскаченных умений,PT обязателен, МОМ запрещен:
(Опять же решают криты, атакспид и дезоль. Довольно интересен билд с МКБ. Не сильно отстает от лидеров но наличие МКБ может сильно пригодиться)



9. Макс закуп на 40000, 25 лвл героя, герой без раскаченных умений,PT обязателен:
(В данной вариации МОМ я снова разрешил пикать, но его уже нету в лучших билдах ибо денег хватает на более дорогие предметы. Огромное количество атакспида дают мьелнира, так что старый принцип: атакспид, криты, дезоль сохранился. Фактический закуп предметов не превышает 28к. Как я уже писал рапиру собирать не будем ибо бред)




ВЫВОДЫ




    1) Из результатов тестирования видна выигрышная стратегия: макс дпс дает СБАЛАНСИРОВАННОЕ сочетания урона + атак спида. Перегиб билда только на урон или только на скорость атаки оказался малоэффективен. Это видно с самого начала (первая картинка: закуп на 1000 голды) все топ-дпс закупы состоят из аги шмота. А как известно аги и дает и урон и скорость атаки. Не прокнули чисто атакспид билды (к примеру закуп из двух перчаток) и не прокнули чисто урон билды (к примеру закуп: 2ух когтей).
    Это тенденция сохранялась и до самого конца. Да, некоторое время был МОМ. Но МОМ у меня считался в прожатом состоянии, что ес-но очень мощно, да и МОМ к концу игры сдулся и уступил место более дорогим предметам.
    2) RING OF AQUILA - лучшее дополнение к шмоту. Кроме этих картинок, я провел еще очень много тестов и регулярно видел ее в билдах. Есть лишний 1000 - лучше докупите агилу.
    3) Без Дезоля норм дпс не будет. Это видно из всех картинок
    4) Закуп вначале 2x маелштормов или 2х мьелниров не дает существенного роста дпса. Кристаллис + гиперстоун >> мьелнир. Конечно в последнем закупе на 40 000 прокнули 2мьелнира, но это фактически была ДОРОГАЯ замена 2х мун шарпов, которые прокали в лучших билдах регулярно при меньшем количестве бабла на закуп. Вот когда стало денег так много, что некуда девать, то и мун шарпы уступили место мьелнирам.


Вообщем, как-то так. Надеюсь в споре дпса для снайпа я поставил точку.

PS: сорри за русский у меня с ним реальны проблемы если что )
PPS: фух, сижу сейчас и смотрю на кнопку "отправить" - Сколько же все-таки работы я проделал, я доволен что я ее завершил.

pss: кстати посчитал лучший ДПС билд на 100к без ограничений (Рапира разрешена). Требование сапога убрал:
spyrkin
27 Апр 2016 в 22:48
22557
210
1 5 5 232 221 11

Комментарии

Правила
На данный момент в комментариях у нас действуют следующие правила: https://dota2.ru/forum/threads/pravila-portala.1694/ (срок бана выдаётся на усмотрение модератора).
29 Ноя 2016 в 11:53
0
Почему ещё никто не написал, что ТСу в Наса пора?) Круто, что тут скажешь.
29 Ноя 2016 в 12:00
0
никто не дочитал и все умерли
29 Ноя 2016 в 14:29
0
все,теперь буду мжолниры тарить,раньше его не очень любил
Для того, чтобы оставить комментарий, Вам необходимо зарегистрироваться или войти под своим аккаунтом.

Академия

Новости

Железо

Форум

Мемы

Crab danil
-9

Матчи

Стримы

Видео

Есть предложение по улучшению сайта?