Comments 63
То есть запускать на сервере только серверную часть и рейтинговую таблицу, а клиенты чтобы коннектились через интернет к серверу и участвовали в поединках.
Это привело бы к тому, что победитель определялся бы не лучшим алгоритмом, а деньгами, вбуханными в железо и пингом до сервера. Кроме того, участие в соревновании было бы попросту дорогим.
А что делать если две стратегии, между которыми назначен матч, не пересекутся во времени? Или вы предлагаете доверять случаю, не планируя матчи вовсе? В таком случае что делать с накрутками?
Вот только в Старкрафте не разрешены боты, а тут только они и есть. И онлайн тоже разный.
Алгоритм накруток довольно прост. Делаем кучу ботов, которые сливаются в каждом матче — и запускаем у них поиск игры одновременно с основной стратегией. С большой вероятностью поиск игры сопоставит их друг другу — вот и накрутка.
Можно даже заранее выбрать время когда онлайн небольшой. А еще можно найти внеигровые способы проверить что два бота играют друг с другом (одинаковый порт / одинаковый ID игры / пр.)
пару суток на GeForce GTX 1080 на эксперимент
Насколько получается её загрузить? На днях поставил себе GTX 1080, пробовал позапускать примеры с gym/universe. Упирается в процессор, видеокарта не особо загружена. Или я что-то делаю не так, или процессор тоже пора менять (сейчас i5 2500), или для симуляций это типично и нет смысла менять еще половину системника.
Загрузка GPU сильно зависела от размера состояния, на 394 параметрах была около 20%, на 3144 опускалась ниже 10% вроде бы. И как я понял дело даже не в проце, просто надо реорганизовать обучение. У меня весь опыт по мере поступления складывается в replay buffer и оттуда же я выбираю минибатчи для обучения, затем отправляю их в TensorFlow. На supervised learning задачах, где изначально есть датасет и ты по нему бегаешь загрузка 99% на GPU. Я думаю, надо попробовать сделать как в supervised, то есть иметь отдельно буфер для складывания опыта и второй для обучения и периодически их синхронизировать. И еще лучше попытаться организовать этот буфер прямо в GPU.
Как мне кажется, исходя из турнира, нейросети — это стрельба из пушки по воробьям. Намного важнее было:
1. Алгоритм движения (как пройти из точки а в точку б и обойти препятствие)
2. Алгоритм уклонения
3. Алгоритм движения в глобальном смысле (куда идти)
4. Древо развития талантов.
5. Взаимодействие с командой.
Я имел полный и бесповоротный фейл с 1 пунктом ( как раз перед вторым этапом. Захотелось написать нормальный поиск пути, вместо дуболомного, а получился фейл), 2ой отсутствовал, но кое-что сделал из 3 и 4. Как итог — когда 1 пункт ещё как-то работал ( тупой обход препятствий. Между первым туром и серединой междутурья) удавалось быть где-то в районе 400го места.
Развивал только его не вдаваясь в боевку и микру.
Получилось реализовать А* для дальних маршрутов и 10 симуляций мира на 200 тиков вперед (9 направлений + отступление). Итог раунд 1 = 180 место раунд 2 = 335.
4 — отдельный модуль нейросети для развития талантов, но можно обойтись и решающим деревом
5 — модуль нейросети, определяющий общую стратегию поведения, хотя в принципе, это может и модуль, отвечающий за движение
итого 2-3 нейросети + 1 для применения способностей, прицеливания и атаки
А так в тот же футбол может играть достаточно простенькая нейросетка, всего где-то на 22 нейрона
А писать известные алгоритмы для конкурса — ну как-то нудно и не интересно, а тот же А* так вообще читерство истой воды (навигация IRL у живых человеков чисто локальная)
А так я вообще только сегодня узнал, что в РФ такие конкурсы оказывается проводятся
Бонусом можно взять какой-нибудь новый для себя ЯП.
Но все это того стоило, градус азарта перекрывал всю недополученную прибыль и недосып.
И да я впервые использовал А* в этом году… до этого вообще был ЛИ. так что в следующем году у вас есть все шансы обыграть таких как я )
Не знаком с машинным обучением, поэтому такой вопрос: А можно ли по аналогии с нейронными сетями использовать генетические алгоритмы в данной задаче? Если да, то это будет функция с 3000+ параметров или как вообще это делается?
Я пушу нижний лайн. Снёс вышку.Начинаю бить в одиночестве вторую и вижу: мне на верхнем лайне вдвоём начинают сносить вторую вышку. Мои союзники пушат мид. Вчетвером троих. Диллема- что мне делать? Бежать на базу отбиваться? Присоединиться к пушу мида и сыграть наперегонки?
Побегу на базу — если отобьюсь, а наш пуш мида захлебнётся, то вероятно будет ничья( в турнире было ограничение по времени). А при ничьей я по очкам в конце буду тогда. А если наши выиграют, то я всё равно мало получу.
Плюнуть и пойти пушить мид? Если проиграем, то потери по очкам.
Вот в такой ситуации генетический алгоритм мог бы помочь принять решение.
Была бы оценочная функция. На вход ей подавалась бы инфа о моих союзниках — таланты, опыт, местоположение, о врагах, которых вижу, инфа о базах под прессингом, расстояние до базы. Задача генетического алгоритма- максимизировать мою прибыль по очкам. Ну, что-нибудь в таком духе
В контексте ИНС — это целое направление нейроэволюционных алгоритмов (Neuroevolution). Но это все можно считать разновидностью обучения с подкреплением, собственно Q-learning из той же области.
Только вот не стоит забывать, что алгоритмы глобальной оптимизации хоть и находят глобальный оптимум, но обычно крутятся в его горловине, поэтому желательно уточнять решение каким-нибудь классическим алгоритмом локальной оптимизации (для ИНС это будет back propagation, например) в таком случае будет получено наилучшее решение. Правда есть там все равно опредмеченные трудности, для такой избыточной сети (она реально избыточная для такой задачи) как у автора, наверное замучаешься обучать её.
Смотрим определение MOBA и видим: "жанр компьютерных игр, сочетающий в себе элементы стратегий в реальном времени и компьютерных ролевых игр и выделяющийся схожестью с DotA".
Дота — это родоначальник, жанр MOBA был выделен только после появления кучи клонов.
Разница тут такая же, как между ксероксом и копиром. Почему все говорят "ксерокс"? Привыкли потому что.
Во-первых, сеть вида 394 x 192 x 128 x 128 x 128 x 128 x 6 мягко говоря избыточная, очень избыточная.
Во-вторых, лучше использовать несколько маленьких ИНС, каждая для своей задачи: движение, стрельба, глобальная стратегия и т.п.(тут на самом деле большой простор для творчества, много чего можно наэксперемнтировать).
Нервные системы всяких человеков и прочьих животных и дажек букашек, на самом деле разбиты на отдельные подсистемы и отделы, каждые из которых занимаются конкретно своими делами (разделяй и властвуй, ёпс) и специализируются на определенном наборе функций. И это все не с проста, а результат эволюции — так то можно этот путь повторить используя ИНС и эволюционные алгоритмы (которые не просто подбирают веса, а подбирают структуру ИНС), там даже будут видны какие-то зачатки специализации, вот только сколько потребовалось челокам миллионов лет, шоб играть в дотку IRL? И сколько в итоге нейронов у человеков просто так бездельничают — более 90% (на самом деле они нужны на всякий случай, дабы после того как тюкнешься головой случайно не разучиться ходить и говорить, но то что мозг полностью функционален даже после 80% потери мозгового вещества — известный медицинский факт, хоть и не рядовой).
Поэтому лучше эту задачу решить самому, а не надеяться на обучение (оно то рано или поздно достигнет просветления, только эт вообще-то NP-полная задача) и сразу делать специализированные модули ИИ (собственно к чему автор и начал сам потихоньку приходить): быстрее обучишь, меньше нейронов потребуется (я имею ввиду суммарное число всех нейронов всех ИНС), а результат окажется куда более эффективным — на эту тему в принципе уже не одна научная статья писана.
Ну вот на tproger есть краткая шпаралка по нейросетям, прям так и называется: Шпаргалка по разновидностям нейронных сетей. Часть первая. Элементарные конфигурации
Правда второй части я не увидел, но это перевод, т.е. на буржуинском можно найти искомую статью полностью. Впрочем на хабре вроде тоже это было: Зоопарк архитектур нейронных сетей. Уже в 2-х частях.
Есть хороший обзор по нейросетям в играх с большим количеством ссылок. Презенташка разработчиков Supreme Command (да они там используют ИНС). Статья по модульным ИНС на примере классической космической пострелушке. Встречал очень много статей по Старкрафту, вот например одна из одна. И даже по шутерам, там как раз тоже модульная нейросетка.
Но вообще последнее время популярно использовать использовать именно генетику, например особенно популярен алгоритм NEAT там действительно хорошие результаты получались или вот
Но вообще, проще всего ИНС присобачить для гонок — для задач навигации их наверное проще всего обучить и там можно обойтись без генетики. Для стрельбы и прицеливания — тоже наверное лучше одну отдельную нейросетку использовать. И отдельную сеть для выборов шаблонов поведения как в одной книжке
Вот кстати шпоры 1 и 2 на хабре, и на tproger. Вдруг пригодятся.
А вот пример эволюционирующей нейросети, обучаются достаточно резво.
http://blog.otoro.net/2015/03/28/neural-slime-volleyball/
http://blog.otoro.net/2015/05/07/creatures-avoiding-planks/
http://blog.otoro.net/2015/03/10/esp-algorithm-for-double-pendulum/
Приятно видеть, что были и академические решения, а не только банальные 'if' на все случаи жизни!
P.S. Победители — без обид. Там тоже, уверен, непростая работа проделана.
Мне кажется, правильнее было бы обучать две сети:
* первая отвечает за макро-стратегию — куда идти волшебнику;
* вторая отвечает за микро — боевой режим, который включается при приближении противника на некоторое расстояние.
Я не шарю в нейронных сетях, но мне кажется вы ошиблись с целью. основная цель — набрать как можно большее количество очков за игру. А для этого может потребоваться не собирать крохи за действие. Сеть должна стремиться завершить партию с наибольшим количеством очков. Что толку рубить ладью, если в результате этого через х ходов неизбежно потеряешь ферзя?
Я еще не знаю что у вас представляет из себя «мозг»? Все хранится в оперативе до конца партии? Или сразу все изменения весов падают в файл? Тогда файл этот можно залить в облако и запускать обучение одновременно дома, на работе, на aws amazon, у друзей под пиво… :)
Я бы тоже хотел задействовать нейросеть для этого, но времени на освоение совсем нет. Не знаю как ее готовить от слова «совсем». :)
В общем, если будете участвовать в следующем турнире и так же используете нейронную сеть, напишите в личку ваш ник, буду наблюдать за вами в рейтинге и болеть за вас! :)
Скорее даже тут дело не в недостатке мощности, а в принципиальной разнице в количестве обучающих примеров. Сколько бы не было мощности — за то время пока набирается 1 итог партии можно собрать кучу промежуточных итогов.
Нейросетка играет в Доту