Как сделать свою сборку в Dota 2, свой билд в доте 2
Всем привет, дорогие читатели. Сегодня мы поговорим о том, как создать свою сборку предметов в Dota 2. И, как обычно, мы сделаем это на максимально высоком уровне, подробно, четко и полностью раскрыв всю необходимую информацию.
Кстати, все гайды на эту тему – будут отправлять вас делать сборку на сторонний сайт по Доте. Это очень неудобно, к тому же – все сборки там – старые, и относятся к предыдущим патчам. Мы же – научим вас делать собственную сборку прямо в игре, причем – в любом патче, в любой мете.
Для чего нужно создавать свою сборку в Доте
Собственная сборка нужна для того, чтобы во время матча – вы не искали предмет, какой хотите купить. Вообще, Dota 2 – игра довольно-таки ситуативная, и предметы в ней нужно покупать, в зависимости от той или иной ситуации. Но, сыграв какую-то 1000 игр на одном герое – вы и сами сможете учить игру, что надо делать. Естественно, за такое количество игр – вы выучите героя вдоль и поперек, а вместе с этим и предметы, которые ему заходят лучше всего. А раз так – просто создайте свою сборку, и вы сэкономите несколько минут, на протяжении всей игры, на поиск нужных предметов.
Как создать свою сборку в Dota 2
Первое, что вам нужно будет сделать – это зайти в главное меню Доты и выбрать пункт «герои».
Выбираете героя, на котором собираетесь создавать собственную сборку. Например – Визажа.
Кликнув на Визаже, вы перейдете в меню, показанное выше. Обратите внимание на руководства. Прямоугольник на черном фоне – это все доступные собственные сборки игроков. Кстати, тут же вы сможете посмотреть и винрейт этих сборок, а значит и определить их полезность.
Чтобы создать собственную сборку – нажмите, тут же, опробовать.
Вас перекинет на тренировочную карту игры.
Теперь – заходите в лавку и находите там значок карандаша.
Кликаете на него, подписываете вашу сборку (можно ввести что-нибудь рандомное).
А дальше – вы можете убирать предметы из доступного инвентаря. Можете изменять стандартные пункты. Можете добавлять свои пункты и вносить туда свои предметы. Убирать и добавлять предметы, можно, перетаскивая их с места на место.
Для примера – мы создали закуп на 4 ветки и кларетку в начале игры и 3 Сакреда в лейте.
Выходим в меню героя, нажимаем руководства и видим, что теперь для этого героя у вас есть своя собственная сборка.
Вот и все, дорогие читатели, теперь вы умеете создавать собственные сборки в Доте, что позволит вам сэкономить кучу времени в игре, на поиске подходящего артефакта.
Как я могу создать собственную игру Dota 2?
Пошаговое руководство по созданию пользовательского игрового лобби и присоединению к нему в Dota 2:
Как создать пользовательскую игру Dota 2?
- Откройте Dota 2 и нажмите кнопку «Играть в Dota».
- Теперь выберите вкладку Custom Lobbies и нажмите «Create».
- Ваше Dota 2 игровое лобби будет автоматически создано. Вы можете нажать кнопку колеса редактирования внизу, чтобы изменить название лобби.
- Пригласите своих друзей и назовите всем название игры.
- Как только слоты заполнятся, можно начинать игру!
- Чтобы узнать обо всех вариантах лобби, просмотрите наши инструкции ниже в этой статье!
Как присоединиться к пользовательской игре Dota 2?
- Нажмите кнопку «Играть в доту» и выберите «Пользовательские игры».
- Теперь лобби Dota 2 вашего списка друзей будут отображаться как , если нет, проверьте, установлен ли для параметра «Искать по» значение Лобби друзей.
- Войдите в вестибюль.
- Выберите свою команду, нажав на слот.
Ниже вы можете найти подробное описание всех настраиваемых параметров и функций игрового лобби. 😉
Что такое пользовательские игры Dota 2?
Помимо подбора игроков или обычного матча, Dota 2 также позволяет создавать собственные игровые лобби, в которых вы можете играть с ботами и друзьями. В основном это частные матчи, а не публичные, как фанкапы Dota 2.
Эти персонализированные матчи в лобби не могут быть ранжированными матчами и не так сбалансированы, как официальные матчи. Организатор должен создать отличный баланс, это может помочь с помощью кнопки баланса.Пользовательские игры Dota 2 часто используются для клан-войн и лиг , таких как Join-Dota-League, но, конечно, вы также можете проводить матчи , чтобы играть против ботов и, прежде всего, по причине играть в Dota 2 в автономном режиме, если у вас есть нет подключения к интернету !
Объяснение всех настроек пользовательского игрового лобби Dota 2:
Если вы являетесь хозяином лобби Dota 2, у вас есть следующие варианты:
- Прежде всего, в верхней части боковой панели, две дивизии появятся сияющими и мрачными.Выбери сторону!
- Под разделением команд появится тренерская колонка Dota . Если в команде более 5 игроков, они могут выступать в качестве тренера и направлять команду.
- Под столбцом «Коучинг» появятся две опции: «Сбалансированное перемешивание» и «Смена команды». Сбалансированное перемешивание создаст команду равного уровня.
- Чтобы открыть настройки для лобби Dota 2, просто нажмите на колесо внизу! Появится это окно настроек:
- Появятся шесть вариантов: название игры (название лобби), игровой режим (только средняя, три полосы и т. Д.)), Пароль лобби (чтобы избежать попадания случайных игроков в команду, расположение сервера (локальный хост), видимость лобби (видимая для всех или нет) и включить читы.
- Ниже этих шести опций есть опция предварительной настройки лобби. нет необходимости вносить изменения в эту опцию.
- Некоторым игрокам Dota 2 нравится транслировать свой матч. Если вы хотите сделать то же самое в разделе «Сбалансированное перемешивание и смена команды». Есть возможность переключить канал трансляции. Нажмите на нее и выберите желаемый канал.
Какие пользовательские режимы игры доступны для лобби Dota 2?
Если вы нажмете кнопку «Играть в Dota», появится множество различных пользовательских игровых опций , давайте посмотрим, в какой пользовательский игровой режим вы можете играть и для чего он нужен!
Выбирая такой режим, как , тренируясь с ботами , у вас даже есть возможность играть в нем в одиночку или в кооперативе! Оба являются подкатегорией Практики с ботами, но они полностью отличаются друг от друга. Оба метода играют решающую роль, потому что в одном режиме игрок в Dota 2 может потерять пять раз.Давайте кратко обсудим обе категории! 😉
- Лобби для друзей и клановых войн
- Практика с ботами (одиночный режим)
- Практика с ботами (кооперативный режим)
1. Как играть в кланварную войну Dota 2 с настраиваемым игровым лобби:
Помимо игры с друзьями настраиваемое игровое лобби также идеально подходит для лиг, профессиональных матчей Dota 2 и настраиваемых турниров со сторонних веб-сайтов:
Команда из пяти человек может зарегистрироваться на турнир или лигу, и когда событие начнется, вы получите пароль.Теперь просто нажмите кнопку просмотра пользовательских игр и найдите лобби, его можно защитить паролем, чтобы никто не присоединился к нежелательным! 😉 Если вы являетесь ведущим, всегда помните о пинге, чтобы обеспечить отличную игру.
2. Как я могу играть в Dota 2 в автономном режиме с ботами?
«Соло-режим» на вкладке «Практика с ботами» обычно используется теми игроками, которые хотят улучшить свои игровые навыки. Большинство профессиональных игроков используют его, чтобы улучшить свои стратегии, чтобы победить вражескую команду.
Начинающие игроки в основном используют одиночный режим, чтобы улучшить свои способности или проверить всех героев и их характеристики. Соло-режим также является спасительным вариантом для преданных поклонников Dota 2, которые хотят играть в Dota все время, но не могут играть из-за деревянного ПК или плохого подключения к Интернету. 😉 В сольный режим можно играть в автономном режиме, и его можно оставить в любом месте в любое время. Имейте в виду, что вам необходимо входить в Steam с активным подключением к Интернету каждые две недели, иначе ваша учетная запись будет временно заблокирована.
В одиночном режиме есть несколько опций. Прежде всего, выберите сценарий бота: бот по умолчанию, ИИ для подбора игроков по рейтингу и проверьте мастерскую.
Затем выберите уровень сложности ботов в соответствии с вашими игровыми навыками . Если вы новичок, выбирайте пассивных или простых ботов, иначе недобросовестные боты надавят вам задницу. Затем выберите желаемую команду: Radiant, Dire или random.
3. Для чего нужен режим «CO-OP» для ботов Dota 2?
Режим CO-OP — идеальная тренировочная площадка для друзей и товарищей по команде, здесь вы можете тренировать определенные тактики, комбинации героев, линии и синергию предметов , которые слишком рискованны, чтобы играть непосредственно в играх с подбором игроков.В Dota 2 так много героев, попробуйте тех, кто вам нравится. В посте о глобальных способностях и способностях Aoe вы можете найти отличные синергии и советы. Супер крутой способ сделать это — найти новых тактик Dota 2 и стилей лейнинга и протестировать их в режиме CO-OP. Делайте это снова и снова, пока он не станет идеальным, а затем присоединяйтесь к матчмейкинговым играм, чтобы топтать врагов с помощью новой безумной тактики.
В качестве примера вы можете поискать тактику , как сделать Рошана через несколько минут с двумя или тремя людьми! 😉
Кооперативный режим на практике с ботами также предназначен для тех игроков, у которых есть штрафные игры.Отказ от игры — это, пожалуй, самая раздражающая особенность Dota 2: однако, также необходимо уменьшить количество троллинга игроков с серверов. Кооперативный режим похож на сватовство, но немного отличается. В кооперативном режиме ваши союзники — настоящие игроки, а враги — боты.
Остальные функции аналогичны одиночному режиму, появятся те же параметры: выберите сценарий, выберите уровень сложности и выберите команду!
Но имейте в виду, что не выходите из игры, пока она не закончится! В противном случае вы снова получите подарок от Габена! 😀 Выберите уровень сложности: легкий или пассивный, потому что это увеличит шансы на победу.Если у вас хороший ранг, и вам все еще сложно победить пассивных ботов, тогда вам лучше оставаться с низкой полярностью! 😉
Иногда возникает необходимость увеличить процент побед: для этого также может быть эффективным использование кооперативного режима! В кооперативном режиме ваша победа в ваших руках. Чем больше бумажных ботов выберет игрок, тем выше его шансы на победу.
Есть вопросы? Комментарий ниже! 🙂
Для получения дополнительных руководств и новостей посетите нашу панель управления Dota 2.
.
Как сделать баннер своей команды в DotA 2
Что вам понадобится
Прежде чем мы начнем, вам понадобится следующее:
- Adobe Photoshop или любая бесплатная альтернатива
- Шаблон баннера Valve
Если у вас нет Photoshop, вот несколько бесплатных альтернатив:
Создание команды
Если вы еще этого не сделали, вам следует создать команду. Это можно сделать полностью в игре, и ваша команда должна быть сделана за пару кликов:
- Запустить DotA 2.
- Щелкните вкладку Сообщество.
- Щелкните «Создать новую команду» в подразделе «Команды».
- Заполните информацию о команде и нажмите Create Team.
После того, как ваша группа будет создана, вы можете получить доступ к своей команде в списке «Мои команды». Вы также можете создать несколько команд.
Когда вы закончите, вы можете закрыть DotA 2.
Создание логотипа базы
Логотип базы — это тот, который находится на полу вашего фонтана и вокруг вашей базы. Базовый логотип должен быть достаточно простым.Вы можете использовать совершенно другую фотографию без использования фона, предоставленного Valve, просто убедитесь, что фотография размером 256×256 и сохранена как .png.
Откройте папку шаблонов логотипа в Valve и выберите базовый фон логотипа. Обычно выбираются файлы, начинающиеся с team_logo. Попробуйте выбрать фон, который хорошо сочетается с вашим логотипом.
После того, как вы выбрали фон, создайте новый слой, нажав кнопку, на которую указывает красная стрелка.
Откройте свой логотип, скопируйте и вставьте его на новый слой базового фона логотипа, который вы открыли.Нажмите Ctrl + T, если вам нужно изменить размер вашего логотипа.
Когда вы будете удовлетворены, нажмите «Файл», «Сохранить как», затем сохраните фотографию как .png.
Создание баннера команды
Создание баннера команды немного отличается от основного логотипа. Если вы заметили из файлов фона баннера, изображение разделено на две части. Левая сторона используется как передняя часть баннера, а правая — как задняя. Обычно мы просто размещаем логотип на левой стороне, так как обратная сторона видна редко.
В папке шаблонов логотипа выберите фон баннера и границу. Фон баннера — это файлы, которые начинаются с team_banner_, а граница начинается с border_arrow или border_inverted arrow. Обратите внимание на границу и на то, перевернута она или нет.
В зависимости от типа границы, которую вы выбрали, откройте альфа-файл, показанный здесь. Я использовал границу с перевернутой стрелкой и поэтому открываю альфа-файл с перевернутой стрелкой.
Скопируйте файлы рамки и альфа на фон баннера.Стандартный вариант «Выделить все» (Ctrl + A), скопировать (Ctrl + C) и вставить (Ctrl + V) работает в Photoshop, поэтому вы можете использовать его, чтобы упростить задачу. Убедитесь, что порядок слоев такой, как показано. Если это не так, перетащите слои в меню слоев, чтобы оно выглядело так.
Выберите инструмент Magic Wand из списка инструментов.
Теперь перейдите в меню слоев и щелкните альфа-слой (тот, который отмечен черными треугольниками). С помощью инструмента «Волшебная палочка» нажмите Ctrl + щелчок по всем черным треугольникам. Вокруг треугольников должны быть марширующие прерывистые линии, как показано.Если вы ошиблись, снимите выделение, нажав Ctrl + D.
Выделив все треугольники, не снимая выделения и не щелкая что-либо еще на изображении, щелкните кнопку глаза на альфа-слое, чтобы скрыть его. Кнопка глаза находится рядом с предварительным просмотром изображения в меню слоев.
Опять же, не снимая выделения с треугольников, щелкните слой фона границы в меню слоев.
Выделив фоновый слой границы и по-прежнему не снимая выделения с треугольников, нажмите «Удалить».Должно получиться вот так. После удаления лишнего фона снимите выделение, нажав Ctrl + D.
Откройте, скопируйте и вставьте свой логотип в файл фона баннера. Этот логотип принадлежит клану нашей группы друзей под названием Cupcake Conspiracy.
Нажмите Ctrl + T и измените размер логотипа по размеру баннера. Мы будем использовать только левую часть,
С этого момента все готово. Если хотите, можете поэкспериментировать с параметрами наложения в меню слоев. Здесь я использовал смесь мягкого света, чтобы логотип выглядел как часть ткани.Когда вы будете удовлетворены тем, как будет выглядеть баннер, также сохраните его как .png.
Пришло время загрузить логотипы на страницу вашей команды! Запустите DotA 2 и перейдите во вкладку Сообщество. Нажмите кнопку «Мои команды», а затем нажмите кнопку «Изменить информацию о группе».
Вы должны увидеть такой экран. Загрузите файлы в соответствующие места. Я оставил логотип спонсоров в покое, но если у вас есть спонсоры, не стесняйтесь загружать их логотип здесь. Логотип интерфейса — это тот, который отображается в вашем профиле DotA2.Просто загрузите туда и свой логотип.
Чтобы проверить это, создайте собственное лобби и присоединитесь к стороне Dire или Radiant. Должна появиться стрелка, как показано ниже. Выберите свою команду из раскрывающегося списка. Логотип и название Radiant следует заменить названием и логотипом вашей команды. После этого просто запускайте игру!
Теперь, когда вы изучили основы, не стесняйтесь экспериментировать со своим логотипом и баннерами. Вы также можете полностью отказаться от фона и использовать свои собственные фотографии. Просто помните:
- Размеры базового логотипа и фотографии баннера должны быть 256×256 пикселей.
- Сохраните картинку как png.
- Фотография баннера разделена на две части, и левая сторона является лицевой стороной баннера.
Удачи! Если у вас есть какие-либо вопросы, не стесняйтесь оставлять комментарии ниже.
,
Создание бота DotA2 с использованием машинного обучения. Проблема | Мусаши Шредер
Разработка ресурсоэффективного алгоритма машинного обучения
Состав ботов
В декабре 2018 года создатели AI Sports провели презентацию и представили школе соревнование по искусственному интеллекту DotA2. DotA (Defense of the Ancients) — это игра, в которую играют две команды, каждая из которых состоит из пяти игроков, которые могут выбирать из более чем сотни разных героев. Цель игры — уничтожить базу противников, защищая при этом свою.Каждый герой имеет доступ как минимум к четырем уникальным способностям и может покупать предметы, которые также имеют разные способности. Предметы покупаются за золото, полученное за разрушение построек противника или за победу над игроками или крипами, юнитами NPC (неигровыми персонажами), которые появляются, чтобы помочь защищать и атаковать базы.
Сложность игры определяется не только составом персонажей, но и постоянно меняющимся состоянием карты. В играх с полной информацией, таких как шахматы или го, от игроков не утаивают никакой информации, что позволяет им видеть все возможные действия на доске в любой момент времени.Карта DotA включает в себя «туман войны», который скрывает любую часть карты, которую не видит игрок или его товарищи по команде. Способности каждого героя также имеют «кулдауны» — после того, как игрок использует способность, он не может использовать ее снова в течение определенного времени — и используют ману в качестве ресурса. Хотя игрок имеет доступ к этой информации о своих союзниках, он не имеет этой информации о противнике и должен принимать ее во внимание при участии в боях.
Правила соревнований заключались в том, чтобы запрограммировать полную команду из пяти ботов для игры в Captain’s Mode.Captain’s Mode устанавливает одного члена каждой команды в качестве капитана, давая им возможность выбирать героев для остальной команды, а также «запрещать» или выбирать героев, которых команда противника не может использовать. Чтобы избежать бана всех наших персонажей, нам нужно было запрограммировать как минимум шестнадцать из них. Наше ограничение, установленное Морисом, сотрудником 42 из Кремниевой долины, заключалось в том, что мы не могли использовать встроенные «желания», систему, обеспечивающую поведение по умолчанию для выполнения бота, предоставленную Valve. Вместо использования поведения ботов по умолчанию нам было поручено написать код снизу вверх.API для DotA2 написан на Lua и позволяет игрокам создавать собственных ботов. Первоначально соревнование было разработано для использования C ++ API, написанного
. Обзор поля битвы DotA с метками, изображение из https://dota2.gamepedia.com/Map
создателей AI Sports, но из-за «сложностей» наша команда вместо этого использовала Lua.
Изучение Lua и API
Чтобы создать бота, мы сначала прочитали API и искали другие примеры, созданные пользователями.API DotA был доступен в начале 2016 года, хотя не получал каких-либо значимых обновлений примерно с октября 2017 года. Первым ресурсом, который мы использовали, было руководство по началу работы, написанное RuoyuSon. RuoyuSon объяснил, где найти другие ресурсы и как запускать игры, а также рассказал о полезных консольных командах для процесса тестирования. Valve также предоставляет небольшие примеры сценариев ботов в каталоге игр, которые можно использовать для начала работы. С помощью API и других примеров мы наивно полагали, что сможем создать бота и получить грубую рабочую версию кода в течение недели.
Первым испытанием было выбрать героев, которых мы хотели использовать, и начать игру. В то время мы не знали, что если код для выбора героя содержит ошибку, вся игра вылетит, ничего не отображая. Пример, предоставленный Valve, можно использовать для быстрого создания кода выбора героя для режима All Pick, но его нельзя использовать для режима Captain’s Mode. Чтобы выбрать героев, мы читаем другие примеры кода. Хотя наша текущая версия бота позволяет игрокам-людям играть против него и вместе с ним, первоначальная версия предназначалась только для игры против другого бота в Captain’s Mode.Наконец, получение простой версии выбора героя заняло чуть больше недели, но с тех пор была изменена для поддержки режима All Pick и игроков-людей.
После запуска игры мы начали экспериментировать, заставляя героев ходить к локациям на карте. Мы быстро узнали, что незнание языка Lua затрудняло написание и понимание других примеров кода. Хотя мы могли заставить ботов ходить в определенные места или покупать предметы, мы часто допускали синтаксические ошибки, и поиск ошибок в коде занимал значительное время.После разочаровывающих двух недель нам потребовалось время, чтобы выучить язык, прежде чем снова приступить к работе с API.
Пока приближался турнир, мы все еще разбирались в Lua и боролись за понимание API. Наши герои переместились в правильные места, и они могли сражаться с вражескими миньонами и противниками, хотя и плохо, но они никогда не отступали, что приводило к смерти за смертью. Даже против самого простого бота по умолчанию, пассивного, мы не смогли победить. Мы реализовали грубую функцию отступления — просто приказывали ботам бежать на свою базу, если они получили слишком большой урон — это помогло, но оставляло желать лучшего.Нам удавалось постоянно побеждать пассивного бота, но обычно заканчивали игру с почти 100 смертельными случаями на нашей стороне, и нам посчастливилось увидеть две смерти на противниках.
Следующим шагом, теперь, когда была заложена основа для поведения ботов, было начать индивидуализировать каждого бота, чтобы они могли использовать свои способности. Каждый бот использует свои навыки в зависимости от условий, что позволяет им сражаться с противником. В этот момент стало проявляться отсутствие у нас опыта в DotA — хотя боты и могли использовать навыки, они не использовали их оптимально просто потому, что мы не знали, что является оптимальным.Мы часто спрашивали совета у более опытных людей и постепенно делали бота сильнее. Наконец, мы смогли победить пассивного бота с положительным счетом. Мы пытались преодолеть легкий уровень сложности, но безуспешно. Разница между ними была значительной, и нам нужно было реализовать больше моделей поведения, чтобы победить.
Конечный автомат
До этого момента весь код был написан как предопределенные действия для выполнения каждым ботом. Сложность DotA постепенно делала все труднее и труднее различать, какие действия предпринимать и когда.Сражаться в этом случае или убегать? Когда нам следует сосредоточиться на борьбе с крипами? Хотя нам удавалось последовательно преодолевать пассивный уровень сложности, мы понимали, что легкий будет серьезным препятствием. Мы начали обсуждать возможные варианты и остановились на Государственном автомате.
Пример конечного автомата
При изменении поведения бота стало невозможно четко разделить, когда он будет выполнять действия. Они были настолько тесно переплетены, что корректировка одного повлияла бы на производительность другого, и ни один из вариантов поведения не работал особенно хорошо.Мы также не смогли аккуратно включить больше вариантов поведения, не нарушая другие части кода. Создав конечный автомат, мы смогли разделить каждое поведение, используя средневзвешенные значения, чтобы решить, какое из них будет наиболее оптимальным в любом случае игры. Код каждого бота запускается каждый кадр, что позволяет проводить постоянные вычисления и присваивать каждому поведению значение в качестве веса. Предполагая, что мы хорошо запрограммировали бота, теперь он может сам решать, что ему делать, в зависимости от состояния игры.
На этом этапе мы смогли выделить каждое поведение в отдельный код, разбитый на компоненты и условия.Компоненты — это фрагменты информации, которые всегда необходимы для расчета поведения, тогда как условия могут добавлять или вычитать вес только при определенных обстоятельствах. Разделение кода позволило нам улучшить работу каждого поведения — раньше каждое поведение зависело от другого, но, используя конечный автомат, мы выполняли только те части кода, которые нам были нужны, и только тогда, когда это было необходимо.
В то время как некоторые из нас настраивали конечный автомат, мы также продолжали улучшать версию без конечного автомата до такой степени, что мы смогли преодолеть сложность Easy.Мы снова увидели 100 смертей на табло, но на нашей стороне будет больше убийств и мы будем выигрывать. Код из версии, не относящейся к конечному автомату, легко вставляется в нашего нового бота, что позволяет нам продолжать работу без каких-либо значительных задержек.
Одним из преимуществ конечного автомата была модульность системы. До этого общее поведение бота состояло из двух файлов, в которых были написаны необходимые комментарии, чтобы понять, какая часть кода просматривается — в новой версии были отдельные файлы для каждого веса, и поведения были разделены, чтобы они не взаимодействовали друг с другом.Модульность позволяла нескольким людям работать над разными частями проекта, не влияя на то, над чем может работать кто-то другой, улучшая ясность, простоту и рабочий процесс команды.
Мы также готовились к нашему первому матчу между ботами и ботами против другой команды, участвовавшей в соревновании, но Конечный автомат не был протестирован и не был готов к внедрению. Это дало нам последний шанс увидеть, насколько хороша предыдущая версия. Прежде чем мы начали нашу схватку, мы решили протестировать и убедиться, что код обеих команд работает правильно.Когда у обоих ботов была случайная смесь героев противника и их собственных, команды поняли, что мы допустили ошибку на этапе выбора. Обе команды смогли решить эту проблему, но это был еще один пример борьбы с API, которая будет сохраняться на протяжении всего процесса. В это время Морис также уведомил нас, что турнир будет отложен на месяц, что даст нам возможность продолжать улучшать наших ботов.
Во время тестирования патентованных ботов Valve нам часто приходилось перезапускать игры из-за проблем совместимости с их ботом и Captain’s Mode.Мы решили сделать собственный режим подбора для двух команд, чтобы ускорить процесс и сократить количество ненужных перезапусков. Мы выделили ботов соперника случайную команду из пяти человек и использовали эту команду на протяжении большей части нашего тестирования. В то время мы не знали, что это вернется, чтобы укусить нас позже.
Наша команда продолжила работу с State Machine, добавляя новые варианты поведения, которые мы не могли реализовать раньше. По мере того, как поведение увеличивалось, мы также стали замечать улучшения в наших матчах с ботом Valve.После победы над Easy, в течение 24 часов мы смогли обыграть Medium, а на следующий день победили Hard и Unfair подряд. Мы были в восторге, не ожидая победить Unfair намного позже, но когда мы решили присмотреться к ботам противника поближе, у нас отвисла челюсть. Два бота нашего оппонента не покупали предметы, а один не использовал никаких способностей. Хотя мы смогли победить, что само по себе было подвигом, это не была настоящая победа над ботом Unfair.
Мы не знали, что Valve реализовала использование определенных навыков и покупку предметов только для 46 ботов.Мы изменили состав соперника на пять таких ботов, и хотя мы могли хорошо бороться с Hard и выигрывать примерно в сорока процентах случаев, мы редко выигрывали у Unfair. Мы начали больше обсуждать, что мы можем сделать, чтобы увеличить наш винрейт, что привело к первому изменению нашего состава. Посмотрев на героев, которых мы реализовали, а на тот момент их было всего пять, мы решили заменить героев, которые, будем надеяться, лучше впишутся в наш общий план игры. Сразу же мы увидели рост, и, хотя мы и привязались к героям, которых выбрали использовать, мы начали рассматривать замену героев как вариант, продолжая программировать.
Сбор данных
Мы продолжали внедрять больше вариантов поведения в конечный автомат, добавляли больше функций и, как и мы, наблюдали медленное, но неуклонное повышение производительности в наших матчах. Чтобы увидеть, насколько хорошо мы справились с добавлением чего-то нового, нам нужно было посмотреть полную игру, чтобы увидеть конкретное поведение и узнать, выиграли ли мы матч. Все веса бота были настроены вручную, и любые изменения, которые мы внесли, могли быть невидимы в рамках одной игры. Даже в ускоренном режиме игра длилась от десяти до пятнадцати минут.Чтобы собрать какие-либо значимые данные, мы могли бы часами просто наблюдать. Чтобы ускорить этот процесс и убедиться, что любое добавленное нами изменение было значимым, с помощью Python, языка программирования Go и Docker мы начали создавать способ сбора данных по сотням игр.
Морис дал нам доступ к пятнадцати компьютерам, на которых мы могли запускать игры и собирать данные. На этом этапе мы исследовали «безголовый» режим для DotA; мы могли запускать игры без графики, что ускоряло сами игры и позволяло запускать несколько экземпляров игры без использования графического процессора.Используя Docker, мы настроили соединение клиента с сервером, что позволило нам использовать виртуальные машины на четырнадцати из этих компьютеров. Мы подсчитали, что можем оптимально запустить до четырех игр на одном компьютере, поэтому четыре виртуальные машины запускались с шестикратной скоростью. В целом мы смогли запустить игры примерно в 300 раз быстрее, чем изначально.
Каждая игра может длиться от пятнадцати до восьмидесяти минут. Docker Swarm равномерно распространил общее количество запрошенных игр на все наши рабочие компьютеры.Если бы мы запускали менее 56 игр, это решение было бы хорошо, но что-то большее было бы неоптимальным. Первоначально мы пытались выполнить развертывание с помощью Docker Swarm, но для нас было разумнее создать собственное решение. Он должен быть настраиваемым, хорошо работать в распределенной сети и иметь поддержку простого параллелизма. Мы решили использовать Go, потому что он соответствовал нашим критериям и был прост в сборке и развертывании. Наконец, Python был использован для построения графиков и иллюстрации наших результатов данных в виде гистограмм и линейных графиков.
Данные, показывающие выигрыши и проигрыши во времени
Используя эту настройку, мы смогли запустить 500 игр за час, что дало нам значимые данные. Хотя нам по-прежнему необходимо было наблюдать за играми, чтобы наблюдать и подтверждать, что поведение работает должным образом, теперь мы могли тестировать их и собирать данные, чтобы подтвердить, было ли изменение полезным или вредным для бота.
В последние недели мы поиграли с идеей включения генетического алгоритма. Все веса конечного автомата были настроены вручную и основаны на наших наблюдениях.В частности, наши веса «Ферма», «Охота» и «Отступление» были настолько тесно связаны друг с другом, что, изменив значение одного, мы увидели бы резкие различия в их способах игры, и их процент побед в целом уменьшился бы. Мы знали, что они в хорошем состоянии, но были уверены, что они не оптимальны, особенно учитывая, что разные персонажи играли по-разному, и использование одинаковых весов заставляло их всех играть более или менее одинаково. Использование генетического алгоритма будет использовать машинное обучение для настройки каждого веса, давая нам самые идеальные числа, чтобы победить ботов по умолчанию и, надеюсь, наших оппонентов в турнире.Амбициозной целью было создать разные гены для каждого персонажа, тем самым дать каждому из них свой уникальный стиль игры, но мы знали, что без дополнительного времени и вычислительных мощностей нам придется обходиться вручную настроенными весами.
За неделю до соревнований мы отошли от добавления основных функций, включив лишь небольшие изменения, которые, как убедительно доказали наши данные, увеличивают процент побед. В конце концов, с помощью State Machine мы смогли добиться стабильного выигрыша выше 98% против ботов Valve.Готовый к участию в конкурсе, Морис написал нам, что в очередной раз конкурс был продлен еще на месяц.
Генетический алгоритм
С продлением турнира на месяц, мы начали обсуждать, как мы можем создать генетический алгоритм. В конце концов, мы решили снова использовать Go, потому что наши программы для сбора данных уже были написаны на нем, что упростило объединение программ.
Блок-схема генетического алгоритма, от arwn
Чтобы заставить генетический алгоритм работать, нам нужно было запустить несколько итераций нашего бота.На основе этих итераций мы брали гены пяти лучших героев и «скрещивали» их, перемешивая, усредняя и соединяя вместе. Следующее поколение будет состоять из слегка модифицированных версий (с использованием 10% вероятности мутации, чтобы выбрать, какие гены изменить, и 10% вероятности мутации, чтобы изменить каждый ген на соответствующую величину), по которым мы затем будем собирать данные, повторяя процесс. до начала конкурса. Наш план состоял в том, чтобы заменить текущие гены, настроенные вручную, на наши новые гены с машинным обучением.
Нашим первым шагом было убедиться, что мы можем запустить генетический алгоритм с помощью Go и Docker и одновременно изменить сценарий Lua. Ген каждого бота представлял собой Lua-файл, содержащий значения, которые мы хотели изменить с помощью генетического алгоритма. Мы использовали Go для чтения файла гена, мутации значений и вывода нового гена с использованием шаблона гена. Затем новые гены использовались для последующих итераций.
Успешно создав способ чтения и записи в наши новые генные файлы, вместо того, чтобы создавать один общий генетический алгоритм, как мы изначально планировали, мы создали гены для каждого героя, которого использовали.Чтобы это работало, каждый файл должен был включать имя героя, которому мы писали. К сожалению, мы могли тренировать только пять героев за раз, поэтому мы решили тренировать наш стартовый состав и использовать наши настроенные вручную гены для остальных героев, которые мы реализовали.
Завершение генетического алгоритма заняло больше времени, чем планировалось. Мы надеялись запустить и потренироваться в течение недели, но нам понадобилось еще несколько дней, чтобы исправить ошибки. Каждый из нас создал отдельные части генетического алгоритма, и на сборку каждой из них ушло некоторое время.
Наконец, генетический алгоритм заработал, но когда мы начали запускать первые поколения, мы столкнулись с множеством проблем. На этом этапе у нас продолжались некоторые проблемы с нашими контейнерами Docker, которые не запускали игры, но мы решили пока игнорировать их, потому что, хотя он и медленнее собирал данные, это не было значительной разницей во времени. Если один компьютер выйдет из строя и отключится от сети, сервер зависнет, ожидая поступления данных от сбитой машины. Когда мы решили использовать генетический алгоритм, нам нужно было, чтобы он работал без остановки и продолжал работать с каждым поколением.Если работник не отвечает, сервер никогда не сможет перейти к следующему поколению, потому что он ждал, пока появятся оставшиеся игры. Для нас не имело смысла следить за компьютерами по очереди весь день, поэтому мы добавили способ тайм-аут, если мы не получили ответ от контейнера по прошествии определенного периода времени.
В конце концов, примерно через четыре дня после запуска и остановки генетического алгоритма, он наконец заработал. Запустив генетический алгоритм и убедившись, что он работает, мы решили изменить состав нашей команды в пользу того, который, по нашему мнению, может повысить наш процент побед.Когда мы начали запускать генетический алгоритм и настроили гены, которыми мы хотели манипулировать, как команда, мы просмотрели их и скорректировали их до чисел, которые, по нашему мнению, имели смысл для запуска генетического алгоритма. В то время мы решили манипулировать примерно 25 компонентами и условиями, «генами» из наших весов Farm, Hunt и Retreat. Это изменение в сочетании с новым выбором героев, который мы использовали для команды противника, снизило наш процент побед с 98% до 80%. В то время как генетический алгоритм медленно повышал процент побед, мы поговорили как команда и решили, что, если мы сможем повысить его, переключая или добавляя героев на ранней стадии, его стоит протестировать.После переключения начальные 80% приблизились к 90%.
Пока мы наблюдали за ботом, мы знали, что время истекает и он недостаточно быстро растет. Хотя это было рискованное решение, которое могло привести к потенциально резкому снижению процента побед, мы решили скорректировать скорость изменения с 10% вероятности мутации и 10% частоты мутации до 15% и 25% соответственно. Мы подсчитали, что в самой идеальной ситуации для того, чтобы избавиться от бесполезного гена, потребуется не менее тридцати поколений или не менее одной недели.Мы хотели уменьшить это число и полагали, что если мы увеличим его вдвое, то увидим более высокие темпы изменений, к лучшему или к худшему. После нескольких дней наблюдения за результатами наш риск окупился, и бот увидел более быстрое и последовательное увеличение числа побед.
Рост приспособленности с течением времени
Когда мы были уверены в результате, мы начали добавлять больше генов, которыми можно было бы управлять из других весов конечного автомата. Еще одна проблема, с которой мы столкнулись на протяжении всего проекта, которую не смогли решить, заключалась в том, как играть на ранних этапах игры и как играть ближе к концу.В DotA стили игры между ними кардинально отличаются. Поведение, которое важно на раннем этапе, менее важно, поскольку игра длится дольше, и наоборот. До этого момента наша стратегия заключалась в том, чтобы обменять немного более слабое начало игры на более сильное завершение. Мы несколько раз пытались настроить веса, но даже если бы они играли лучше в начале, измененные веса не смогли бы в конце концов снизить общий выигрыш. Теперь, когда у нас есть рабочий генетический алгоритм, мы добавили различные множители к здоровью, чтобы он мог его регулировать, но также решили добавить множители в зависимости от того, насколько силен герой.Герои переходят с 1 по 25 уровень и становятся сильнее по мере повышения уровня. Вручную нам никогда не удавалось эффективно манипулировать весами, чтобы можно было вносить корректировки в начале и в конце игры. С генетическим алгоритмом мы теперь могли предоставить компьютеру решать, когда играть по-другому.
После очередной смены героя мы остановились на нашем окончательном составе и продолжили работу генетического алгоритма. За несколько дней до начала турнира мы увидели, что бот наконец достиг 99% винрейта для одного поколения, но это снизило следующее поколение до 96%.В то время как наши быстрые манипуляции с генами создали мощного бота, как только он станет все ближе и ближе к теоретическому пику, частота мутаций в 25% сразу изменится на очень большую и снизится процент выигрыша. Мы решили, что для сохранения нашего винрейта нам необходимо замедлить мутацию. Вероятность мутации снизилась до 7%, а частота мутации — до 15%.
Когда мы еще раз изменили наш генетический алгоритм, мы решили пойти на еще один риск. До этого момента мы брали пять лучших генов от каждого героя в качестве родителей, разводили их и использовали потомство для следующего поколения.Хотя это сработало для нас, классически мы не должны были использовать генетический алгоритм. В генетическом алгоритме все гены должны иметь шанс быть выбранными, но мы активно выбирали, какие из них использовать. Важность использования ботов с более низким показателем выигрыша — разнообразие. Хотя в поколении он, возможно, не работал так же хорошо, в будущем поколении его гены могут сыграть важную роль в увеличении процента выигрышей. Чтобы убедиться, что у этих генов с более низким процентом выигрышей есть шанс быть выбранными, мы сопоставили все гены, что позволило повысить вероятность быть выбранным с более высоким процентом выигрыша, при этом давая шанс более низким показателям выигрыша, хотя и меньший.
Мы также обсуждали изменение стратегии. Было необходимо взять гены от каждого отдельного бота, но мы считали важным взять все гены от одной «команды» ботов. На первый взгляд, бот может показаться, что у него меньший потенциал, но как часть команды его гены могли быть важным ключом к победе. Мы думали о преимуществах перехода от отдельных ботов к только племенным командам, но не могли оправдать потерю более мощных генов героев. Когда мы пришли к выводу, что должны продолжать использовать ту же стратегию выбора отдельных ботов, нам в голову пришла мысль.Что, если мы сделаем и то, и другое? Взятие отдельных генов было, несомненно, важно, но, скрещивая ботов из одной команды с более сильными отдельными ботами, мы полагали, что сможем раскрыть потенциал обоих миров.
Генетический алгоритм, кажется, улучшил бота, хотя его стиль игры значительно отличается от исходной негенетической версии. В то время как раньше мы были намного агрессивнее, теперь мы играем более консервативно и стремимся к победе в основном за счет разрушения построек и победы в отдельных командных боях.Старший бот будет чаще объединяться в команду, заставляя ботов противника реагировать и приводя к большему количеству драк. Если мы продолжим работу над проектом, я считаю, что следующим шагом будет борьба бота с самим собой и с более старой негенетической версией бота.
Благодаря этому проекту я смог выучить несколько языков программирования, а также познакомиться с Docker и узнать о важности документации при работе в команде. Причина, по которой я решил работать над этим проектом, заключалась не столько в интересе к DotA2, сколько в попытке понять машинное обучение.Я слышал этот термин несколько раз, читал о нем, но не имел реального понимания того, что он влечет за собой и как его на самом деле программировать. Участие в этом проекте дало мне уникальную возможность поработать с машинным обучением и улучшило мое понимание программирования в целом.
.
Смотрите также
-
Как скрафтить селитру в майнкрафт
-
Как в доте 2 писать всем
-
Что такое ммр в доте 2 и как его узнать
-
Как скрафтить варку для зелья
-
Как скрафтить в майнкрафте карьер
-
Как забирать крипов своих в доте
-
Как скрафтить энерго рельсы
-
Как призвать магнуса в лобби дота 2
-
Как в доте 2 денаить героев
-
Как привязать телефон к доте 2
-
Как поставить зиму в доте 2