Моя новая программа для контрпиков, принцип ее работы, результаты 6.88

Привет, друзья. В не столь далеком декабре прошлого года я опубликовал одну статейку, вот она: https://dota2.ru/blogs/post/3054-kontrpiki-v-dote-interesnye-nabljudeniya/ Статья оказалась интересной читателям портала и было несколько просьб выложить мою программу, которую я там описал. На текущий момент, немного мотивировавшись конкурсом (хотя, конечно, особо ни на что не надеюсь), я таки "созрел". Во-первых я попытаюсь дать тут ссылку на эту самую программу (всё бесплатно!), во-вторых немного опишу ее новую версию и попробую, как и в прошлый раз, немного проанализировать текущую мету с помощью этой самой программы. Кроме того, хотел бы немного порассказывать всякие не имеющие высокой важности вещи, спрятав их в спойлеры (соответственно, если кому-то интересно дополнительное чтиво - добро пожаловать), которые тоже относятся к доте и моей программе.
"Не очень важная вещь 1. Немного обо мне."
В доту я играю 2 года и максимально достигнутый на текущий момент рейтинг - 4300 с копейками. Этот рейтинг, возможно, не является моим пределом, но выше поднимать я не пытался, т.к. просто не было желания и мотивации. Не знаю насколько это может показаться необычным или наоборот, но мне нравится играть на более низких рейтах больше, чем на более высоких. Например, я часто играю на интервале 3000-4000, т.к. мои новые аккаунты "забрасывает" чаще всего именно туда. Играть на рейтинг ниже "своего" мне нравится тем, что я получаю приятный результат (игра на равных или в нашу пользу), не слишком сильно напрягаясь и более смело пикая героев, которыми плохо владею. Играю я чуть ли не с самого начала моего прихода в доту в основном на позиции лейн-саппорта. Вот это явно является нетипичной особенностью игрока в доту, но мне нравится играть на этой позиции. Поначалу я, возможно, тоже выбрал ее во многом потому, что она показалась мне наименее напряжной. Но сейчас я дошел до той стадии, где для меня все позиции одинаково напряжны, т.к. я и на саппорте стараюсь делать максимум, что можно на нем делать (в первых своих играх, понятно, я мог просто купить куру-варды и большую часть времени стоять афк или фидить как и все новички). Дальше я особенно хотел бы остановиться на пиках героев. Для меня это чрезвычайно важная тема и всё свое время, что я играл в доту, я уделял этому аспекту наибольшее внимание. Это проявилось в том, что я играл довольно много именно на тех героях, которые казались мне наиболее выгодными в плане пика. Конечно же для позиции саппорта это . Выбран он был именно потому, что имеет самый высокий винрейт. Именно на этом герое я апнул 4200. Затем я пробовал и других и смог повторить этот же результат на и . Последнее время меня увлек , далеко не такой винрейтный как , но как выглядящий выгодно, так и оказывающийся на поверку выгодным в этой 6.88-мете (64% винрейта за 64 игры на интервале 3000-3700 я на нем имею). Наконец, плавно переходя к тому, ради чего я всё это затеял, чуть расскажу про контрпики. Этот аспект доты для меня всегда был чрезвычайно важным. Думаю, что во многом из-за того, что я играю именно на позиции саппорта, а саппорту более важно законтрить врага именно пиком, т.к. он не может как кор сделать это слотами, руками и прочими способами (точнее может, но это не всегда срабатывает так же хорошо). Более того, я всячески стремился и стремлюсь "абузить" этот аспект. Как я это делаю? Ну, во-первых я постоянно сижу на сайте dotabuff и изучаю там раздел matchups наиболее актуальных героев. Во-вторых я написал программку, которую я и сам юзаю, правда редко (типа опыт дает о себе знать, уже и без программки могу принять решение чем кого контрить, хоть и не всегда). В-третьих я стараюсь иногда (раньше - чаще) давать тиммейтам в Ranked All Pick советы по пикам. Должен заметить, это довольно часто срабатывает (т.е. мы побеждаем). Что еще сильнее утверждает меня во мнении, что контрпик крайне важен в доте.
"Не очень важная вещь 2. Matchups."
В своей прошлой статье (см. ссылку в начале этой) я уже попытался расписать этот раздел сайта dotabuff. Именно этот раздел dotabuff взят за основу для написания моей программы. На нем она, можно сказать, построена. Попробую сейчас свежим взглядом посмотреть на него опять и описать всё новыми словами, особенно акцентируясь на винрейте, который там отражен. Давайте рассмотрим актуального сейчас, в 6.88, : http://www.dotabuff.com/heroes/slark/matchups Мы видим 3 столбика: advantage, slark winrate, matches played. advantage - это преимущество перед указанными героем. Это самое важное. Этот столбик показывает, кого контрит и кто его контрит. Чем больше значение преимущества, тем лучше контрит этого героя, т.е. тем меньше сомнений должно быть у вас, когда вы думаете, брать или не брать. Отрицательное значение, особенно большое, показывает, что указанный герой контрит и против него лучше не пикать. slark winrate - столбец, который вызывает споры и сомнения в том, контрит ли этого героя на самом деле. Многие игроки вообще считают, что столбик advantage не важен, надо смотреть именно на винрейт, типа он показывает контрит один герой другого или нет. Нет, этот столбик просто вводит вас в заблуждение. Формула, по которой вычислен advantage, должна работать так, что если у одного героя винрейт 60%, а у другого 40%, между ними необязательно должен быть самый большой advantage, ведь это никак не отражает сильные и слабые их качества именно в противостоянии друг другу. Давайте разберемся на примере. Мы видим, что неплохо контрит , но его винрейт против оставляет желать лучшего, ~46%. Как же так выходит? Дело в том, что винрейты и зависят далеко не только от того, попались они друг против друга в матче или нет. Есть очень много факторов, и все они влияют на те цифры, которые мы видим в matchups. Вот, например, те, которые знакомы мне: 1) сложность героя для освоения - чем сложнее герой, тем меньше шанс, что среднестатистический игрок сможет на нем выиграть, не наиграв довольно большое количество игр. , я предполагаю, более простой для освоения чем . На нем труднее фидить (ульт включается сам), на нем не нужно стараться уходить от агрессии, на нем игра более прямолинейна и проста, часто на нем надо нажимать меньше кнопок, чем на . 2) актуальность героя в текущей игровой среде - на винрейт героя влияет текущая мета, герои, которые наиболее популярны в пиках, особенности паблик-соло-ранкеда, стиль игры, продиктованный последними патчами, перспективы ранних файтов, раннего пуша, вероятность камбека и т.п. 3) количество игр на герое и его популярность - если игрока чаще пикают игроки без опыта игры на нем просто потому что он популярен, статистика героя будет образована больше из таких "слабых" игр, из-за чего винрейт может "просесть". Если героя больше берут именно опытные игроки (что видно в разделе meta 5к+), то это может положительно сказаться на его винрейте. Тем не менее, не смотря на все вышесказанное, advantage влияет на винрейт, но не так сильно, как описанные мной и другие факторы. Но в вопросах контрпика, я считаю, надо абстрагироваться от всех этих факторов. В вопросе выбора контрпика надо понимать, что ты - особенный игрок, ты готов стараться, задрачивать и сводить на нет все эти факторы. Ты готов освоить сложного героя и сделать его для себя простым, ты готов выбирать именно актуальных героев, а не всякую дрянь (особенно учитывая и другие пики врага, не только один), ты - игрок с опытом и благодаря этому опыту твой винрейт будет заметно выше, чем написанный в разделе matchups. И для тебя принципиально важен будет именно контрпик а не винрейт героя. matchеs played - в столбце показано, сколько матчей было сыграно с этими героями в противоположных командах. Т.к. этот столбец не кореллирует с advantage и winrate, можно сделать вывод, что в большинстве случаев игрокам наплевать как на винрейт, так и на контрпики, они просто пикают то, на чем им хочется играть или то, что наиболее популярно.
"Не очень важная вещь 3. О том, как именно была написана программа и небольшая предыстория."
Уже несколько лет назад я познакомился с языком tcl и он мне понравился своей простотой и тем, что позволяет делать довольно сложные вещи при помощи всего нескольких коротких строк кода. Когда я поиграл в доту примерно год, я уже тогда захотел применить свои навыки программирования к этой игре. Тогда я попытался написать программку, которая тоже анализирует контрпики, подобно нынешней, но там учитывались только самые основные несколько контрпиков и еще учитывался винрейт. Не знаю как уж так вышло, но программка тогда показала мне, что самый топовый контрпик против всех героев доты - это (хотя казалось бы, в чем тут сюрприз? у него и так всегда был топовый винрейт). Я обрадовался, сел играть только на омнике и иногда использовал свою программу чтобы она показывала мне контрпики против некоторых вражеских пиков, но сам брал только (в итоге наиграв на нем ~400 игр). Новую версию я решил написать, когда образовалось свободное время и когда я признал довольно полезными matchups. Процесс написания программы сопровождался определенными трудностями, т.к. надо было сохранить все 111 html-страниц для всех 111 героев к себе на диск, чтобы затем можно было обработать их скриптом. Заняло это, правда, немного времени, где-то полчаса. Первая версия этой программы была консольная, надо было вызывать программу из командной строки, а данные по героям она брала только из файлов. Тем не менее это было удобно всё равно и я нередко ей пользовался и написал статью именно об этой версии (см. ссылку в начале). Для новой версии я не стал опять лезть на сайт и скачивать 111 html-страниц. Возможно, ситуация за полгода изменилась, но не думаю что сильно. Так что замечу, что в новой программе используется статистика, актуальная на конец 2015 года. Судя по текущим пробам программы на некоторых пиках, выдаваемые ей данные выглядят вполне правильными. Кто знает, может новая статистика менее хороша чем та?
Что собой представляет программа Она представляет собой главный исполняемый файл и несколько дополнительных файлов, без которых программа не может работать (даже не пытайтесь!). Это во-первых картинки, во-вторых "база данных", по которой программа вычисляет контрпики (по сути это всего лишь 1 текстовый файл matchups.txt) и в третьих - файлы для настройки ролей (о них чуть позже). Что позволяет программа Интерфейс и функции программы вы можете видеть на скриншоте: Программа позволяет определить самые лучшие пики против выбранного пула из любого количества героев и выводит их по порядку, начиная с самого лучшего контрпика. Программа позволяет вводить пул, который надо законтрить, 3-мя способами: вручную (крайне важно соблюдать правильность написания имен героев!), взять из файла (имя файла analyzed.txt, список героев берется из 1-й строки файла) или выбрать при помощи 5 комбобоксов (в этом случае вы не ошибетесь с написанием имен героев, но боксов всего 5). Программа позволяет выбрать вашу роль или несколько ролей и будет выводить контрящих героев только для ваших ролей. При этом, если вам не нравится как я распределил героев по ролям (а это вполне вероятно, взгляд на эти распределения у многих разный, дота - игра гибкая), вы можете сами изменить эти распределения, отредактировав соответствующие файлы в папке roles. Как пользоваться программой Конечно вы можете пользоваться ей как вам угодно, можете даже взять исходник (я его тоже выложил) и менять ее как вам заблагорассудится (если владеете tcl/tk). Но я предлагаю следующий вариант использования программы (как делаю я сам). Для использования распакуйте все файлы программы в удобную вам папку. Запускаете доту и программу. Выбираете роль, на которой будете играть. Начинаете игру. Смотрите на первые пики оппонентов и тут же вводите их в программу (наверное, удобнее всего с помощью комбобоксов). Программа при каждом нажатии на кнопку будет предлагать вам наилучшие пики (чем выше стоит герой, тем он лучше). Возможно, есть смысл вводить только кор-героев в программу, чтобы контрить только их. Не следует бесприкословно "подчиняться" программе, старайтесь сами оценить, "зайдет" герой или нет, постарайтесь учитывать разные факторы: его актуальность и вероятность что он сам будет законтрен, его синергию с союзными пиком и т.д. Принцип работы программы Принцип я уже описал в своей прошлой статье, но постараюсь кратко сделать это еще раз. Есть файл matchups.txt - "база данных контрпиков". В каждой строке 1-й герой - это "главный" герой, а остальные 110 - второстепенные. Второстепенные расположены в таком порядке, что против первого главного брать лучше всего, а против последнего вообще не стоит брать. Этот же порядок мы видим в разделе matchups на dotabuff. Программа берет пул героев, который вводит пользователь. Она прогоняет этот пул по файлу. При этом все герои начинают "зарабатывать очки". Если герой контрит кого-то из пула лучше всего, он зарабатывает 111 очков, если хуже всего - 2 очка. В итоге эти очки выводятся в программе, в третьем столбике. Чем больше герой заработал очков против выбранного пула, тем полезнее он должен быть в игре против этого пула. Если бы был какой-то идеальный герой, который является самым лучшим пиком против всего пула из 5 героев, он набрал бы 555 очков. Как можно настроить программу под себя Во-первый есть исходники, которые я выложил, но не думаю, что кто-то захочет туда лезть. Есть другие способы настроить программу: 1) Можно настроить галочки, которе ставятся рядом с ролями ("чекмарки"), редактируя файл roles/checkmarks.txt (0 - нет галочки, 1 - есть галочка). Тогда в программе при запуске уже будет выбрана нужная вам роль (роли). 2) Можно настроить списки героев для ролей, редактиря файлы в папке roles. Чтобы составить свой список героев для роли, советую сделать так. Допустим, вы хотите составить свой список керри. Перенесите содержимоей файла all.txt в файл carry.txt. Удалите тех героев, которые по вашему мнению не являются керри. Сохраните файл. Я советую сделать именно так, потому что есть большая вероятность, что сами вы введете имя героя неправильно. Для программы обязательно единственно правильное написание имени каждого героя. Давайте поэкспериментируем с программой на текущей мете Для простоты буду представлять текущую мету 5 героями для каждой роли (для фарма - 7). Вот так: Саппорт: Хард: Роум: Фарм: Мид: Эти данные я взял с http://www.dotabuff.com/heroes/meta, рейтинг 5к+, смотрел на количество матчей. Лучшие герои всех позиций против кор-героев текущей меты (6.88) по версии программы: Мид: Фарм: Хард: Роум: Лес: Саппорт: Приведем картинку ближе к текущей мете, выбрав из предлагаемых программой вариантов только метовые: Мид: Фарм: Хард: Роум: Лес: Саппорт: Если говорить о кор-позициях, то предполагаю, что так хорош, т.к. он неплох против эскейперов за счет башей и также неплох тем, что метовые коры имеют "перекос" в сторону урона в ущерб их "жирности". Против такого рода героев троль по идее должен иметь неплохое преимущество. То же можно сказать и о . Это всё, конечно, моя 4к-аналитика, не берите в голову. В общем, наблюдается забавная ситуация. Многие пики, которые предлагает программа как самые лучшие, не являются метовыми. Пожалуй, следует списать это на несовершенство системы matchup'ов, но кто знает, может быть просто игроки недооценивают силу некоторых героев в текущей игровой среде? Может быть игроки ориентируются в первую очередь на то, что происходит на про-сцене, не пытаясь абстрагироваться от этого и постараться выбрать что-то действительно максимально эффективное против меты? Я, со своей 4к-колокольни вряд ли могу судить о таких вещах, но всё же заметьте, многие из топовых предлагаемых программой пиков есть в мете, почему же стоит так сильно сомневаться в остальных? В общем, это следует оставить на ваш суд, особенно суд скилловых, опытных игроков. Лучшие герои всех позиций против всех героев текущей меты (6.88) по версии программы: Мид: Фарм: Хард: Роум: Лес: Саппорт: Лучшие метовые герои всех позиций против всех героев текущей меты (6.88) по версии программы: Мид: Фарм: Хард: Роум: Лес: Саппорт: Предполагаю, что это как раз те герои, которых можно брать на ФП. Заключение Ссылка на программу будет чуть ниже. Жду отзывов, замечаний, пожеланий, идей. Возможно будут идеи о том, как можно доработать программу или идеи для новых программ. Надеюсь, для вас получилась интересной моя работа. https://yadi.sk/d/ZPYzhX6Atiwac (64-битная версия) https://yadi.sk/d/DPsfUu_XtmTDL (32-битная версия)
avatar Eugenius4

29 Июл 2016 в 07:23

15

15245

Нашли ошибку в материале? Выделите ее и нажмите Ctrl+Enter

В комментариях под материалами на сайте действуют все правила портала, с которыми можно ознакомиться на специальной странице — https://dota2.ru/forum/rules/. Помимо этого, в комментариях к новостям существуют дополнительные ограничения:

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

можно было в экселе все запилить через функцию рандом, вышло бы так же круто

Аватар пользователя
Аватар пользователя
Аватар пользователя

В доту не играю, но у самого было желание сделать прогу для адекватных контрпиков, но как-то забил на это дело из-за вышеуказанной причины.
Если хочешь идею для TODO, есть вот такие:
1. Анализатор твоих игровых аккаунтов. Чтобы прога реже советовала тебе взять инвокера, если у тебя винрейт на нем за последний месяц >40%, или если ты на нем вообще не играешь.
2. Простая статистика с Dotabuff*/.../meta/ конечно идея неплохая, но будет гораздо эффективней, если прога будет точно знать, на каком MMR ты играешь, и брать статистику с учетом твоего рейтинга.
3. Ну и как бонус, прога может показывать твой винрейт. Не весь, только тех игр, где ты пикнул героя, которого тебе посоветовала прога. Это будет показателем эффективности твоей программы.
4. Реализовать все это в виде оверлея. Вроде как оверлей легко делается путем внедрения dll в dota2.exe, но антивирусы и VAC могут сильно наорать.
Вообще, если взяться за это с умом, можно сделать очень мощную и популярную штуку, и заработать на ней. Все-таки, пики-контрпики в дотке на сегодняшний день - нерешённая проблема.

Аватар пользователя
Аватар пользователя
Аватар пользователя

Да, согласен, интерфейс немного кривоват. Как раз именно потому, что написано на тикле. Там все объекты размещаются как элементы таблицы. Там нету координат, там есть столбцы и строки. Но юзабилити из-за интерфейса вроде не страдает. Умею на C писать, но на tcl для меня намного проще это делать.

Аватар пользователя
Форум