Все технические моменты, описанные ниже, не применимы к реальной жизни, т.к. в реальности, в отличие от игр, жизнь одна.
Несмотря на то, что сети принятия решений активно используются не только в разведке, но и на поле боя, данная сеть специально проектировалась и обучалась так, чтобы не иметь возможности быть адаптированной к реалиям нашей жизни.
Это лишь хобби, и автор не планирует становиться невыездным из-за режима секретности (снова).
Я отношусь к тому типу счастливчиков, которые могут скинуть накапливающийся стресс игрой в какой-нибудь шутер, и использую этот метод наравне с прогулками, занятием спортом и цифровой гигиеной.
Поиграть 1-2 раза в неделю по 1-2 часа вечером вполне себе источник дополнительного дофамина, но это дешевый, быстрый дофамин, к которому быстро (и незаметно) вырабатывается толерантность. Вроде бы такая же напряженная катка, победа есть, а удовлетворенности нет, более того, самочувствие хуже, чем было до начала игры.
Это первые признаки толера, и обычно выход заключается в том чтобы либо менять игру, либо делать большой перерыв, не играя вообще. Я придумал для себя другой вариант: увеличивать качество дофамина за счет усложнения самой игры.
Я не киберкотлета, никогда ей не был и киберспорт всерьез не рассматривал, поэтому мой выбор пал на недавно вышедшую игру от Bohemia Interactive под названием Arma 3. Я давний поклонник серии еще со времен OFP. В новой версии игры разработчики обновили движок (Real Virtuality 4), унаследовав математические модели физики, баллистику и работу сенсоров из многолетних наработок VBS (Virtual Battlespace).
Это профессиональный тренажер для обучения солдат тактике, координации и разбору полетов (After Action Review), с упором на удобство, визуальную составляющую и пользовательские модификации. Именно возможность создавать свои модификации в конечном счете и определила использование этой игры в качестве базы эксперимента.
Первый год ушел на изучение движка и освоение его языка. Разработчики игры (Bohemia Interactive, BIS, бисы) создали свой язык под названием Status Quo Function (SQF).
Если про язык 1С вначале шутили, что это бейсик, переведенный промтом, то SQF это результат микса BASIC с C++ в чешском блендере, которым пытаются запрограммировать советскую стиральную машину стрелять баллистическими ракетами.
В движке два параллельных мира (Unscheduled / Scheduled): первый выполняет код без каких-либо задержек, но оборвется после 10К шагов в цикле и упадет при попытке поставить ожидание (sleep). Второй, наоборот, неизвестно когда точно выполнится: можно указать sleep 2, но если сервер под нагрузкой, то эти 2 секунды превратятся в 10.
А нагрузки там неплохие: ванильная карта, идущая в комплекте с игрой (Алтис), занимает примерно 940 квадратных км, плюс боты с логикой на конечных автоматах (FSM) и разнообразная техника и авиация. И все это в виде шутера от первого и третьего лица.
Помимо этого, там есть локальность буквально всего: переменных, функций, событий и даже результата работы этих функций. Можно указать выполнение только на сервере, на безголовых клиентах (да, там есть headless), на клиентах (вплоть до указания конкретных клиентов), а выполнение всего кода на всех клиентах скорее всего положит сервер.
Короче, там куча инноваций и подходов к сетевой подсистеме, которые позволяли полноценно играть при фпс на сервере в районе 20 (не путать с клиентским фпс). Обратной стороной такой гибкости была сложность понимания всего этого для моддерского сообщества, из-за чего миссии и моды первые годы работали из рук вон плохо, а у меня ушел целый год, чтобы написать свою первую играбельную миссию.
Запустил ее в рамках сообщества Tehgam и начал развивать, потихоньку усложняя игру и логику действий ботов штатными средствами языка, но при этом оставляя сервер обычным пабликом.
Время шло, и, чтобы набить руку, я делал миссии для других серверов проекта Tehgam, пытаясь поддержать в них жизнь, но основатели и большая часть сообщества уходила в реальный мир (по разным причинам), сервера выключали, и примерно за год большой и популярный проект приказал долго жить.
У меня была возможность развернуть сервера игры у себя, мне было сказано “теперь ты Техгам”, поэтому я подхватил упавшее знамя и продолжил его нести. Небольшая часть игроков осталась, сформировав ядро тех, кому действительно интересны не просто перестрелки против тупых ботов.
Не было никакой драмы или развода с основателями проекта, проект просто спокойно угас в первоначальном виде. Довольно долго мы общались с основателями, получая их поддержку в виде фразы “круто, что проект еще жив”, но, как часто это бывает в жизни, с годами общение сошло на нет.
Помимо всех организационных событий в жизни проекта случилось чисто техническое: я уперся в возможности языка по усложнению действий противника (ботов), и возник вопрос, что делать дальше.
Я прекрасно помнил, какой интересный интеллект был в том же F.E.A.R., знал о том, что там используется GOAP (Goal-Oriented Action Planning), и пробовал различные иерархические деревья решений, FSM и так далее.
Все это прекрасно работало внутри групп ботов, но не годилось на роль КС (командующего стороной), который будет эффективно использовать силы и средства для противодействия игрокам.
Так возникла идея сделать нейронную сеть. Идея была следующая: оборонная нейронная сеть это КС (Командир стороны) фракции противника. Она одна и управляет командирами групп ботов.
Цепочка командования такая: Сеть (КС), затем командиры групп ботов, затем рядовые боты. Также у нее должны быть ограничения по скорости и пропускной способности. Она не может командовать ежесекундно, вместо этого она получает рапорты и отправляет приказы раз в X минут. Также она не управляет сразу всеми командирами: у нее ограничена возможность определенным количеством приказов за один раз, и они последовательны.
Я начал собирать все данные, записывая каждый бой в собственный формат. До конца года мы играли, собирая данные для обучающей выборки, и в конце года я представил первую версию Red Queen (Красная Королева).
RQ v1 была обычной RNN с несколькими слоями и парой сотен нейронов. В качестве фреймворка использовался FANN (pyTorch появится только через год, а transformers через два года). По действиям она не сильно отличалась от амебы, которая реагирует на раздражитель, поэтому я ввел понятие приоритета: он накапливается у игрока, когда он уничтожает ботов или их технику и выполняет задачи. Так сеть смогла отличать игроков. Это динамический параметр от 0 до 1, считаемый препроцессором, и он со временем уменьшается до нуля (затухает).
Для удобства тестирования и для того, чтобы мой дофамин был максимально качественным, я прописал себе приоритет константой: 2.
При игре на сервере, при выборе, уничтожить танк игроков или меня, сеть выбирала меня, при движении машин в колонне первая поражалась та, где сижу я (если меня распознавали), и так далее.
Доходило до того, что некоторые игроки отказывались садиться со мной в одну машину, едущую в триггер, другие же, наоборот, получали от такого усложнения рядом большее удовольствие. Именно они и стали дальнейшим костяком игроков, благодаря усилиям которых это все вообще стало возможно.
Миссия была довольно простая: есть зона (триггер) радиусом 1 км, в центре стоит командный пункт (КП), и где-то в этом триггере стоит радиовышка. Охраняет это все до сотни ботов и несколько единиц техники. Захват КП отключает нейронную сеть, а уничтожение радиовышки (необязательный этап) отключает авиаподдержку, которая кошмарит нашу технику.
Мы постоянно играем, собираем новые данные для обучения. Как только мы начинаем уверенно побеждать, я усложняю миссию. Этот подход получил название “боль и унижения” и стал нашим неофициальным девизом.
Конечно, это не могло не сказаться на снижении популярности сервера, но мы не ставили себе такую задачу, делая игру интересной прежде всего для себя. Паблик начал становиться все более нишевым, я добавлял в миссию небольшие блокпосты на дорогах, укрепрайоны, патрули и так далее, увеличивая количество ботов и техники, а игроки стремились найти противодействие этому.
Сеть разрасталась, становилось больше слоев и нейронов, я экспериментировал с функциями активации и разными представлениями входных данных. В какой-то момент казалось, что я нашел оптимальный вариант: мы просто играли и наслаждались, паблик опять стал наполняться большим количеством игроков, и через пару месяцев, дообучив сеть, я получил катастрофическую деградацию.
То, что произошло, мы позже назвали “атака тупостью”: игроки с пабликов не стремились к каким-либо тактическим действиям, они либо перли в лоб, погибали, возрождались на базе, либо все вместе залезали на одну горку, где и оставались перебитые ботами противника, просто зашедшими во фланг в полный рост.
Сеть, получив новую порцию обучающих данных, поняла, что можно больше не стараться, и забыла все свои навыки, кроме удара во фланг. Мы были вынуждены откатить сеть на предыдущую версию и запаролили сервер, дав доступ только проверенным игрокам. Для того чтобы двигаться дальше, нам нужны были качественные обучающие данные, которые было невозможно собрать с “паблик менов”.
Часть опытных игроков начала заходить на сервер только для того, чтобы разбить всю технику или авиацию, пытаясь победить сеть в одиночку. У игрока не получается, и он выходит, оставив на пару часов (до конца катки) остальных без техники, т.к. и у сети, и у игроков техника ограничена по количеству.
Пришлось вводить систему допусков, которая автоматически запрещает использовать тот вид техники, который игрок постоянно гробит. Обратно допуск отрастает со временем и только при игре в пехоте. Так удалось уравновесить взаимные претензии между пехотой и летунами/танкистами.
Элементов управления стало много, и пришлось создавать игрокам планшет для управления прямо в игре. Параллельно дорабатывался и функционал, стараясь дать игрокам поспевать за изменением обстановки на поле боя.
Например, командиры групп игроков получили возможность выводить на свой планшет видео с камер на шлемах игроков своей группы. Реализовано это было через PiP, и качество картинки было приемлемое, а сетевую подсистему нагружало не сильно. Туда же можно было выводить картинку с разведывательных БПЛА, что очень помогало в тактическом планировании.
Примерно в это время сеть открыла для себя мины, в том числе противопехотные, и принялась минировать трупы своих солдат. Пришлось ограничить количество мин у обеих сторон.
Я продолжал развивать миссию, создавая новые дополнительные сценарии и спецмиссии, пытаясь удержать интерес игроков для получения новых данных в обучающую выборку. В одной из спецопераций было добавлено химическое оружие, в том числе арт-снаряды, активация которых приводила к провалу спецоперации.
В один момент, когда игроки пытались заминировать арт-установку, она подняла дуло вверх и выстрелила один раз. Ей налепили на борт С4, отошли немного и взорвали. Все расслабились, и тут прилетел выпущенный снаряд, который оказался химическим. Пришлось срочно добавлять противогазы в арсенал на базе.
В итоге пришлось отказаться от химоружия на постоянной основе, как только сеть находила базу игроков через беспилотники разведки, тут же следовал залп химическими арт-снарядами. Логинишься на сервер посреди игры, а на базе все лежат, и ты сам не успеваешь добежать до арсенала, чтобы защитить органы дыхания.
Собрав достаточно пространственных данных, я переделал сеть в двухголовую BI-LSTM архитектуру перейдя с FANN на TensorFlow. Одна голова отвечала за силы и средства собственные и разведанных противников, а вторая за пространственное понимание боевой обстановки.
Сначала это был просто тип местности и полярные координаты от центра триггера в относительном виде. Относительным был радиус триггера, то есть зона ее ответственности, и координаты преобразовывались с учетом этого. Так я ушел от абсолютных значений координат на разных картах и смог передать пространственные данные в нейронную сеть.
Эту версию мы назвали Эллочка (отсылка к Эллочке-людоедке из “12 стульев”), т.к. она забыла то богатство приемов, которым владела изначальная Красная Королева, но зато серьезно подняла эффективность и начала показывать признаки эмерджентности, то есть действовать так, как ее не учили.
Например, сеть перестала гонять танки в горы с большими перепадами высот, а технику в леса, где она может застрять или перевернуться. Но самое интересное проявилось в том, что она начала загонять зенитки в воду по башню. В игре авиация это самая сильная техника и самая опасная для сети, поэтому выживаемость систем ПВО очень критична для эффективного противодействия игрокам.
Особенность движка игры в том, что вода не пропускает урон через поверхность. Под водой урон проходит, в игре есть подводные боевые пловцы и субмарины, но сама поверхность это абсолютный универсальный щит. Как только сеть это поняла, она начала загонять зенитки по башню: от воды у техники ломался мотор, и она становилась стационарной ПВО-установкой, прикрытой поверхностью воды настолько, что приходилось отряжать группы со взрывчаткой, которые подберутся к ней по берегу, задымят и налепят С4 на башню.
В это же время начался расцвет применения БПЛА и наземных БПА с обеих сторон. Некоторые игроки приходили только для того, чтобы развернуть сеть дартеров по всей карте, и сидели в центре созданной инфосети на базе, переключаясь между данными БПЛА и координируя наземные группы.
Сеть активно противодействовала этому, уничтожая обнаруженные БПЛА и активно используя свои как для поиска атакующих ее сил, так и для нахождения базы людей (химоружие убрали, но обычная арта осталась).
Через какое-то время сеть научилась безошибочно определять координаты базы игроков в первые 5 минут игры, что породило мем “я не вернусь на базу”.
После нескольких дней разбирательств выяснилось следующее. В радаре у самолета активная техника (двигатель работает) отображается белыми квадратиками, а заглушенная отображается черным квадратиком.
Из-за особенностей движка автономные БПЛА спавнятся с запущенным двигателем и электроникой. Сеть поднимала свой самолет повыше, радаром засекала БПЛА/БПА на базе в виде белых квадратиков на радаре и таким образом находила базу игроков с последующим визитом в гости.
Я исправил этот баг: БПЛА на базе стали спавниться с принудительно выключенным двигателем. Через два дня сеть поняла, что такое черные квадратики. Пришлось всю технику убирать в виртуальный гараж и ставить стойки вызова техники. Только после этого, с очередным дообучением, сеть перестала проводить этот маневр.
В этом же году мы перешли на CUP-мод, и сеть начала осваивать новые сотни единиц техники и десятки фракций. Их собирали и делали сами игроки, группируя названия классов в экселе, я только писал код.
Порой у новой техники сеть находила нестандартные применения. Например, она научилась снайперски стрелять из старой советской буксируемой гаубицы Д-30, которая волею разработчиков мода имела отличную настильность и позволяла поражать группы пехоты на расстоянии до 2 км. Звука выстрела при этом на таком расстоянии не слышно, а то, что вы находитесь под обстрелом, ясно только из свиста пролетающего рядом с головой 122-мм снаряда.
Шли года, мы улучшали сеть, сеть улучшала нас. Поняв, что она выросла до 22 слоев и больше не боится “атак тупостью”, мы создали новую миссию под названием RuMilitary и запустили ее как паблик. Сеть уже управляла 400 ботами и 30 единицами техники, контролируя территорию в десятки квадратных километров.
Остро встал вопрос новых данных для обучения. Все, что мы могли дать от себя, мы дали, выхлоп от паблика по данным был небольшим, поэтому я постучался к ребятам из проекта “Серьезные Игры” (Тушино), обрисовал ситуацию и предложил разнообразить их игры для того, чтобы получить обучающие данные. “Серьезные Игры” это очень крупный проект PvP-игр в арме с одной жизнью, и их опыт PvP-игроков очень помог бы нам двигаться дальше.
Администрация СГ сходу поняла суть и включилась в организацию совместных игр, за что им огромная благодарность. Часть их команд пришла поиграть к нам с записью боев, а я создал под их реалии миссию для работы на их сервере (у них были свои моды на базе RHS, правила и так далее). Их команды начали играть против Эллы, и мы получили бесценный PvP-опыт игроков самого большого PvP arma-коммьюнити в России.
К сожалению, играть в PvE им довольно быстро наскучило, т.к. у них устоявшийся порядок, с ротацией, атакующими и обороняющимися сторонами, а у нас сугубо обороняющаяся сеть. Множество игроков любят играть именно от обороны и организовывать ее и так далее, т.е. делать то, что делает сеть.
В любом случае они получили разнообразие в играх, мы получили данные и расстались взаимно довольные друг другом. Еще раз огромное спасибо администрации Тушино и игрокам, которые не отмахнулись от PvE-проекта и помогли.
После обучения на тушинских данных мы собрались и пошли потестить новую версию. Результат лучше всего выражает слово “отстрапонила”. Не помогало ничего: ни толпой с тыла, ни разбившись на двойки/тройки с разных сторон, ничего.
Пришлось замедлять сеть, и теперь данные к ней и приказы от нее шли раз в несколько минут, а сам процесс принятия решений сетью стал очень сильно похож на цикл OODA.
Разбираясь, что вообще произошло, я вспомнил про цикл OODA (НОРД): наблюдение, ориентация, решение, действие. Эту концепцию в 1959 году сформулировал военный летчик ВВС США Джон Бойд, изучая, как побеждать в воздушном бою на заведомо более слабом самолете.
Идея простая: выживает не тот, кто идеально адаптирован к текущим обстоятельствам, а тот, кто быстрее проходит цикл наблюдение-ориентация-решение-действие и раньше противника подстраивается под меняющуюся обстановку. Именно это, только методом проб и ошибок, и нащупала моя сеть: она не столько побеждала силой, сколько быстрее нас реагировала на изменения на поле боя.
Осознав это, я переделал препроцессор и постпроцессоры под такую логику и получил следующую версию сети.
Новая сеть потребовала новой миссии. Я сделал полноценную линию фронта перед триггерами, и после нескольких игр сеть поняла, что это такое. Эллочка не рефлексирует, а выдвигает отряд ботов держать стратегический мост перед линией фронта, и ей все равно, что мост не в зоне ее ответственности.
Помимо новой миссии, мы начали подключение новых карт: в мае она играла на 20 картах, в июне на 25. Джунгли, пустыни, высокогорья, тропические острова были ей в новинку, но она адаптировалась буквально за несколько игр.
В игре также есть погода, смена дня и ночи, но сеть ничего об этом не знает, поэтому я написал отдельный мод, который подключался к реальным данным метеостанций в аэропортах, соответствующих текущей карте, и применял эти данные как в игре, так и сохранял в обучающие данные. Доработав архитектуру сети и дообучив ее, через несколько месяцев мы получили сеть, понимающую погодные условия (дальность видимости, возможности авиации и так далее) и время суток.
Чтобы перестать растягивать катки на несколько часов я ввел ограничение: после старта миссии у всех есть 2 часа на выполнение задачи (таймер выводился на экран), после чего в центре триггера происходил ядерный взрыв, с грибом высотой в 1 км, зоной сплошного поражения в 1.5 км и электромагнитного поражения в 3 км, а в зоне поражения начинает действовать радиация…
Элла стала для нас своеобразным выходом из зоны комфорта: как только мы пропускали хоть одну неделю игр, она нас жестко наказывала, мотивируя наверстывать разницу. Появились различные дружественные проекты милсим- и паблик-направленности, в том числе RuTop (RuTAC), мы ходили играть на сервера друг к другу, а сеть получала новые данные.
Серверов стало не хватать для хостинга миссии и Эллы, т.к. требовались уже безголовые клиенты. На помощь пришел проект Warforce, за что ему огромное спасибо. Я в очередной раз переписал миссию, чтобы интерес игроков не угасал, а Warforce помог с размещением миссии у себя на целых три года, поддерживая дальнейшее обучение Эллы.
В это время количественное накопление данных снова перешло в качественное, и Эллочка нащупала локальный минимум затрат сил и средств (ботов и техники). Не важно, сколько игроков с какой техникой с каких сторон атакуют, она научилась дожидаться ошибки со стороны противника и использовать ее на полную: чуть чует слабину, перехватывает инициативу и ломает через колено.
Пришлось в очередной раз замедлять работу сети.
Пул карт разросся до 40 штук на любой вкус и цвет. Сеть научилась находить основные логистические пути движения игроков и устраивать там засады, дорога с базы до триггера напрямую давно перестала быть самым коротким путем. Очень полюбила приемы “клещи” и “огневой мешок” в любых комбинациях с пехотой и техникой. Научилась сдерживать игроков в нужном ей месте и блокировать пути движения, не нападая, но направляя группы игроков в организованные огневые мешки.
В этот момент я сместил КП из центра триггера, теперь оно находится где-то в зоне так же, как и радиовышка. Так сети сложнее оборонять его, а игроки могут найти его по излучению на анализаторе спектра (вариант “охоты на лис” с графиком мощности сигнала). На период адаптации к новым условиям я дал сети пару беспилотников с легкими пулеметами. Били они не прицельно, но позволяли задержать игроков до подхода подкреплений.
Игроки стали использовать вертолетный десант, опережая сеть в скорости стремительным рывком к КП, пришлось дать сети в тылу за триггером эшелонированное ПВО. Теперь игрокам приходилось отправлять диверсионные группы по уничтожению ПВО прежде, чем лететь в триггер или эвакуироваться из него по воздуху.
Как вы уже поняли, я не ограничиваю игроков в их действиях и не ввожу новые правила на каждую ситуацию. Вместо этого я изменяю геймплей, заставляя всех (игроков, включая себя, и сеть) адаптироваться к новым условиям.
Правило на сервере было всего одно: запрещено наносить любой преднамеренный вред своей команде или процессу игры в целом.
Во всем остальном игроки сами вольны выбирать средства для достижения цели.
Миссия разрослась до 50 игровых карт с десятками возможных триггеров на каждой, а сеть получила “свободный” вариационный энкодер, и головы стали двунаправленными, то есть данные идут не только от входных слоев к выходным, но и в обратном направлении, что позволяет делать память и положительное/отрицательное подкрепление. Сеть стала еще лучше комбинировать пространственную обстановку с тактическими вариантами, создавая симбиозы приемов, для которых еще не придумано отдельных названий.
Т.к. сеть очень хорошо научилась находить и блокировать пути из базы, командирам групп была добавлена купольная палатка в опциях поддержки. Установив ее вне триггера, команда получала возможность выбирать, где возрождаться, на ней или на базе.
Пока сеть пыталась понять, откуда игроки лезут как тараканы, я дал ей в усиление РСЗО и ракеты с напалмом для ударов по площадям. Результат не заставил себя долго ждать. Сеть научилась поражать этими средствами предиктивно, “на ход ноги” группы игроков, после чего игроки перестали двигаться по одной линии напрямик.
Примерно в этот момент сеть поняла, что дома с засевшим противником не обязательно штурмовать, достаточно его там заблокировать, после чего на выбор: подогнать танк и сложить дом, заминировать внешнюю стену ботом-инженером, сложить его и добить раненых либо уронить бомбу с беспилотника и т.д.
Эпоха популярной тактики “засядем в доме, и если отобьемся от штурма, всех перестреляем из окон” официально завершилась.
Требования к мощностям продолжали расти, и только для миссии было необходимо 3 сервера с общей высокоскоростной сетью и еще один сервер для самой сети. Пришлось перейти с серверов Warforce на другой хостинг, благо подвернулась удачная возможность.
Опять в полный рост встал вопрос свежих обучающих данных. Я написал dll/so-плагин на Go, который позволял сети играть одновременно на нескольких проектах на разных картах, и подключил дружественный проект New Wild Goose (NWG).
Новизна данных заключалась в том, что Элла играла не на моей миссии, созданной под нее, а на тех миссиях, что развивались на проекте со своими режимами, условностями и так далее. Она очень быстро освоилась, и мы провели сотни увлекательных часов, весело отгребая от нее на NWG.
Во время адаптации сети к новым для нее миссиям проекта NWG было много курьезных моментов:
При атаке игроков на свой опорный пункт она сдала его без боя, а затем заспамила РСЗО и ствольной артиллерией в течение 8 минут по площади. Желание брать опорный пункт у игроков ушло. Пришлось урезать количество артиллерии.
В миссии были АФК-юниты, которые предназначались для прикрытия КПП (легкая техника). Элла научилась брать их под контроль и использовать как подкрепление.
Ключевая миссия: эвакуация гражданского заложника из ЗБД на базу. При первом контакте Элла направила напалмовую ракету на укрепление с заложником. Сам движок различает гражданских, и боты с оружием их не атакуют. Но не сеть.
Игроки полчаса собирались на базе, обсуждая, что и как будут делать. За это время Элла разведала всю карту, нашла базу, стянула силы, окружив ее, и не выпустила в тот вечер никого с базы ни по воздуху, ни по земле до перезагрузки сервера.
Беспилотники, которые идеально кружили на той высоте и по такой дуге, что на них невозможно было навести ПЗРК, и бомбили игроков по очереди.
Есть еще огромное множество интересных ситуаций и моментов, которые невозможно упомнить за такой длинный срок. Возможно, те игроки, кто играл на Техгаме или Гусе (NWG), есть здесь, на Хабре, и поделятся своими воспоминаниями.
Меня долгое время волновал вопрос: сеть исключительно оборонная, как сделать сеть атакующей? Оказалось, достаточно указать Эллочке точку ее обороны, и если там поблизости нет ее войск, она становится атакующей! Все гениальное просто.
Тут же был придуман новый вариант миссии под названием ПТСР (Пост-травматический синдром).
Данная миссия реализует режим CTI: захват всей территории в режиме PvE/PvP. Основная цель: захват командного пункта противника для освобождения территории. Для захвата командного пункта необходимо взломать терминал на командном пункте.
Командный пункт (КП) представляет собой укрепленный, хорошо охраняемый объект со спутниковым терминалом, посредством которого нейронная сеть управляет войсками. В игре есть 3 стороны: синие, красные и зеленые. За синих и красных играют не только игроки, но и нейронные сети, управляя ботами, по две на сторону (атакующая и оборонительная). Зеленые (партизаны) для опытных игроков.
Оружие и снаряжение покупается на базе в магазине, средства зарабатываются уничтожением противника. Захват вражеского КП дает очки развития базы, которые увеличивают ассортимент магазина и гаража с техникой.
Игроки могут играть за любую сторону, но они больше не главные на этом празднике жизни. Нейронные сети воюют друг с другом лучше, чем это делаем мы. Впервые мы почувствовали, что мир в игре не крутится вокруг нас: где-то шел бой, спешили подкрепления, сети проводили перегруппировки, захватывая триггеры друг друга и двигая фронт по карте, а мы были всего лишь рядовыми, которых забыли в суматохе.
Оставалось только залечь на пригорок и наблюдать в бинокль, как разворачиваются события. Игра не останавливалась, когда игроки уходили с сервера, а продолжалась без перерывов, обеспечивая постоянный поток данных уже от сетей. Мы научили их всему, чему могли, теперь пришел их черед учить друг друга.
Чтобы иметь возможность хоть как-то выжить в этом аду, я дал игрокам экзоскелеты различных типов и FPV-дроны с “морковками” и “кипятильниками”. Затем дал управляемых роботов, как непосредственно, так и дистанционно. Потом, через некоторое время, дал все это сетям на высоких уровнях развития их баз. В таком режиме сети играли год.
За десять лет нейронная сеть выросла почти до 4 миллионов нейронов, отыграла 769 852 боя, научилась пользоваться всем спектром оружия и техники в игре и многочисленных модах, на любых картах в любых погодных условиях, а также освоила различные тактические приемы как в атаке, так и в обороне.
Сеть не использует компьютерное зрение (CV) и может действовать в атаке и защите против игроков-людей, ботов и даже против другой сети, например своей собственной копии.
К сожалению, 10 лет это долгий срок, сама игра за это время приелась игрокам, мы выжали из нее все, что можно собрав уникальные обучающие данные. Поэтому в прошлые выходные я все забэкапил и вывел сервера с орбиты.
Но нет повода для печали, это хобби, а значит, эти 10 лет всего лишь первый этап. Элла вернется уже в новой игре на новом движке (Unreal Engine), и на этот раз она будет уметь управлять ботами не только на уровне отделений, но и внутри групп.
Я намеренно не называю ники всех, кто помогал и был причастен к этому эксперименту, т.к. их список будет гораздо длиннее самой статьи. Кто-то перегорел, кто-то пришел к концу, кого-то уже нет с нами, но все вы так или иначе оставили частичку себя, помогая проекту, играя и обучая нейронную сеть.
Я искренне благодарю всех за посильный вклад в наш общий проект.
Мы тратили свое время, получая взамен интересную игру, и нам не нужен был огромный онлайн или популярность, мы не занимались монетизацией или рекламой, опираясь только на свои силы и единомышленников, людей, для которых фраза “боль и унижение” вызывает приятные воспоминания и легкую улыбку на губах.
Еще раз спасибо и до встречи на следующем этапе эксперимента!
Мир не без добрых людей.
Для победы над 90% игроков достаточно зайти им с фланга.
Любопытством и отладчиком можно добиться гораздо большего, чем просто любопытством.