Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Скрипты Виртуальный противник (Создание управляющей программы для боевых действий) |
Виртуальный противник |
› Вторник
› 28.02.2017
› 19:03
› Сообщение #
Если подумать, было бы легко накрутить ботам мозг, то БИСы сделали бы это. Видимо, слишком тяжела задача, учитывая тип окружающей местности.
Видел одну любительскую стратегию, на тот момент, мир представлял собой плоскость, на которой расположены кубики разных размеров (3 фиксированных) Боты должны были пересечь карту в направлении выбранной точки. Две команды действовали достаточно слаженно, взаимоуничтожая друг-друга. Использовали укрытия и пытались окружить, использовали огневое прикрытие. Одна проблема - i7-7700T был задействован почти на 40% Графика не броская, формальная. Если в группе 35 ботов, то подвисать начинает. |
› Вторник
› 28.02.2017
› 20:13
› Сообщение #
|
› Вторник
› 28.02.2017
› 22:29
› Сообщение #
|
› Понедельник
› 03.04.2017
› 22:06
› Сообщение #
Наваял скрипты для одного бойца. Посмотрите, если кому интересно. Через радио-Альфа у бойца удаляются все обоймы из снаряжения - это для того, чтобы посмотреть как он будет искать боеприпасы. Кроме того, у бойца нет аптечки, поэтому если его ранить - он должен искать аптечки в радиусе 50 м. В режиме боя боец должен искать укрытия за объектами, если их нет - укрытия на местности. Все это в радиусе 15м. У игрока бессмертие. Жду замечаний.
Ссылка на миссию-пример: https://yadi.sk/d/FAJdaExW3GcZAv |
› Среда
› 02.08.2017
› 18:13
› Сообщение #
Индеец, пытаюсь протестить но не могу найти в стиме аддон RWSM_rhs_sound_patch
который требует игра. Вроде нашёл отдельно на просторах инета, но через подключение аддона в командной строке, всё равно почему то не работает. Добавлено (02.08.2017, 18:06) Добавлено (02.08.2017, 18:13) |
› Пятница
› 23.03.2018
› 17:10
› Сообщение #
Уже долгое время, периодически бросая,тешусь разработкой ИИ для ботов Армы.
Начиная очередной раз, приходится заново вспоминать направление работы и старые наработки. Чтобы не делать этого в 500 раз надумал написать статью о ИИ для себя и для других, которым будет интересна эта тема. Изначально полет моей мысли заключался в следующем: в зависимости от количества и положения известных противников, выбирать один из созданных алгоритмов поведения для одного отделения. Моя фантазия рвалась дальше: Вот находится взвод на базе. И вот от одного из патрулей поступает информация о наличии противника. Запускаются дроны для определения количества и направления передвижения врагов. Исходя из известной скорости передвижения и расчетного времени организации обороны (засады), определяется место перехвата. Взвод делится на отделения и каждому из них определяется маршрут передвижения и конечное место расположения. Боты садятся в транспорт и направляются к месту перехвата.Прибыв на место, исходя из рельефа местности и направления появления противника, разворачиваются позиции обороны (засады). Бой Когда огневой контакт состоялся, стороны уже знают о взаимном примерном количестве бойцов. Задача - поставить противника в такое положение, при котором, даже зная о расположении соперника, противник не сможет организовать оборону (атаку). В случае если противник имеет преимущество в живой силе или огневой мощи, организуется отход (бегство). Мысль была легка и логична, но разбилась о реалии – недостаток информации и кривые руки. Как оказалось, боты в Арме почти не умеют пользоваться укрытиями, а выбирать их не умеют совсем. И тут большая проблема: если для живого человека "добежать до вон того укрытия" и спрятаться за ним будет очевидным действием, то для того чтобы бот сделал то же самое, нужно за него перелопатить кучу информации за 0.5 сек. Более того, не всегда понятно в каком порядке мы выбираем действие, и какова его приоритетность в выборе. Кроме того неизвестна модель поведения бота заданная самими BISами. Я отмел в сторону эти упаднические настроения и поступил следующим образом. Т.к. скрипт управления группами не оправдал себя, я начал лепить скрипт для одного бойца. История моих метаний из стороны в сторону вряд ли кому-то нужна, важное тут другое. Для бойца основная цель – достичь заданной точки перемещения. Уничтожение всех известных врагов – дело вторичное. Причина – если боец перемещается в тыл врагу, то ему не нужно ввязываться в бой не имея желаемого преимущества в положении. Для достижения точки перемещения нужно рассчитать маршрут передвижения. Желательно перемещаться перебежками в направлении точки перемещения (не обязательно по прямой). Для этого нужно определить объекты-укрытия, которые нужно подбирать по высоте. Тут опять таки интересно: двигаться нужно к позиции за укрытием относительно наиболее опасного врага, которого в свою очередь нужно еще определить (по направлению оружия или по заданной ему цели). Кроме того опасный враг может измениться в момент достижения укрытия, т.е. производить выбор позиции за укрытием нужно в цикле. Добравшись до укрытия, нужно выбрать: двигаться дальше или действовать из-за укрытия. Ладно, если двигаться дальше (опять определять следующее укрытие в направлении точки перемещения). А если на бойца направлено оружие или тактическая обстановка изменилась, что тоже нужно держать на контроле (опять цикл!)? Тут необходим алгоритм поведения за укрытием. Для этого нужно знать координаты углов объекта или рассчитывать просматриваемость опасным врагом позиций возле бойца. Я пошел следующим путем: садил бойца на колено и анимацией передвигал его к ближайшему краю объекта, и, если точка рядом с бойцом оказывалась открытой и опасный враг не целился в него, то боец наклонялся и стрелял по цели. Если же опасный враг целился в бойца и боец был открыт но точка рядом с бойцом оказывалась укрытой, то боец отклонялся за укрытие. Все бы хорошо, но определение угла поворота объекта-укрытия относительно опасного врага или цели, определение координат точек за углами укрытия, выбор из них ближайших, выбор способа передвижения нагружает процессор (А если бот не один? А если их 10? А если 100?). Еще теплых слов просит воспроизведение анимации движения в сторону. Иногда бот просто елозит на месте. Зависит ли это от рельефа или от других неизвестных мне параметров? Ну пока как-то так. P.S. А вы говорите «добежать до вон того укрытия»! Добавлено (15.03.2018, 13:30) --------------------------------------------- Хорош в бирюльки играть! Теперь серьезно. Чего мы хотим получить в результате? Любая новая разработка начинается с технического задания, в котором определяются требования или параметры, которых нужно достичь. Опять же сначала определим что мы имеем в активе. А в активе имеем ботов, которые имеют непредсказуемое поведение. Есть ускользающее ощущение того, что иногда боты пытаются обойти с фланга. Иногда они сносно прячутся за препятствиями, иногда - нет. Вся их опасность состоит в меткости. Согласованного перемещения нет даже в группе, не говоря уже о поддержке артиллерии или авиации. Подробного описания работы ИИ ботов нет. С другой стороны имеется широкий спектр команд, позволяющий управлять ботами или узнать их параметры. Если же оценивать игровой процесс, то ArmA предлагает большую свободу действий на большой территории, основанную на более-менее реальной физике. Кроме того ArmA позволяет выполнять войсковые маневры, недоступные в "коридорных" играх. Теперь о производительности. Даже без скриптов с циклами ArmA достаточно требовательна к железу. Игра 100 игроков на сервере Тушино позиционируется как достижение. А что такое 100 бойцов? Грубо говоря: 10-отделение, 3х10=30-взвод, 3х30=90-рота. Т.е. нет смысла описывать скриптами действия батальона ботов. Для одиночной игры за глаза хватит и взвода. Итого: нужно описать действия юнитов/групп в составе взвода, исходя из реально существующих тактик (раз уж ArmA - наиболее реалистичная игра), с поддержкой хотя бы артиллерии. Добавлено (15.03.2018, 14:32) --------------------------------------------- Полистав (насколько это применимо к просмотру Интернета) несколько тактических руководств, вынес одну из основных идей - тактическое маневрирование невозможно без учета рельефа местности, чего боты не учитывают совсем. Кроме этого, для выбора действий для бота нужно определять положение целей и союзников. Сделать это возможно двумя способами: полярным и декартовым. Думаю, полярный способ с его определением углов и расстояний не подойдет - слишком затратно и непривычно, если же выбрать декартовый, то во-первых: так делают в реальности, а во-вторых (а может это причина первого пункта): такое представление тактической ситуации приблизит нас к отработанным в шахматах игровым алгоритмам. Каждая клетка (район карты) имеет свою оценочную стоимость, учитывающую высоту позиции, наличие укрытий и т.д. Кроме этого ценность клетки будет различной для той или иной стороны, т.к. в учет должны браться расстояние для достижения этой позиции тем или иным подразделением, взаимное положение союзных и вражеских подразделений, может еще чего-то... В итоге имеем тактический рисунок ситуации, проанализировав который можно определить наиболее рациональные действия. Добавлено (15.03.2018, 17:13) --------------------------------------------- Получается цепочка: набор информации - оценка информации - выбор действий - выполнение действий. Набор информации Чтобы эффективней руководить войсками нужна наиболее полная картина ситуации. Данные должны передаваться по цепочке рядовой - ком. отделения - ком. взвода. Другими словами при смерти ком. отделения, солдат не имеет информации, которая есть у взводного и поступает так, как считает нужным. Это приводит к тому, что ценность отделения (группы) как тактической единицы резко падает. Почему я предлагаю именно такую модель? Потому, что по моему мнению, солдат - это специалист по использованию оружия, получивший для это необходимое образование и навыки, а ком. отделения - специалист по управлению солдатами. И не может толковый специалист по оружию управлять солдатами так-же эффективно, как получивший для это необходимое образование управленец. Но это - мое личное мнение. Короче, в Armе лидер группы автоматически знает о целях, о которых знают члены группы. Поэтому проще спросить у лидера о известных целях, чем тратить ресурсы на опрос всех членов группы. Информация о целях заносится в буфер данных для обработки. Соответственно обработка данных должна вестись при условии жизни взводного. Иначе скрипт поведения отделения (группы) должен использовать только информацию, известную лидеру. Есть нюанс. Если данные о ближних, но неизвестных (например скрытых рельефом) целях без обработки передать лидеру с помощью команды reveal, то это может привести к неожиданным действиям со стороны лидера (резкая смена маршрута). Добавлено (15.03.2018, 22:28) --------------------------------------------- Оценка информации Баланс сил - главный фактор определения результата боя. А, как было указанно выше, разные области территории обладают разным "потенциалом важности". Другими словами, место, на котором находится подразделение влияет на его боеспособность, а значит и на общий баланс сил. Кроме этого нужно принять расчетный размер области (квадрата карты), которую занимает подразделение в общем расчете баланса сил. Добавлено (18.03.2018, 15:13) --------------------------------------------- Опытным путем установил, что минимальный размер квадрата это - 25х25 м (примерно столько накрывает миномет одним залпом). Теперь об оценочной стоимости силы квадрата. Сила Обычно в шахматах стоимость той или иной фигуры привязывают к пешке, аналогично можно поступить с оценкой силы. Т.е. солдат - 1, бтр - 10, танк - 50. Цифры взяты с потолка. Отдельно нужно поставить артиллерию из-за ее большой важности, пусть будет 100. Добавочные коэффициенты - высота позиции (getTerrainHeightASL); - наличие укрытий (nearestTerrainObjects); Это как бы "статические" коэффициенты, не изменяющие свое значение при изменении ситуации. - просматриваемость (terrainIntersect); Тут нужно проверять пересечение с рельефом, относительно всех областей (квадратов), занятых врагом. - КАКИЕ ЕЩЕ ??? Добавлено (23.03.2018, 00:00) --------------------------------------------- В принципе можно пойти другим путем: изначально задать центр огромной области и циклично уменьшать ее, пока количество врагов в ней будет неизменно. Тут пришла в голову еще одна мысль. А что если у противника рядом будут расположены несколько отделений? На какое из них планировать атаку? Как подбирать необходимое количество сил для победы? Т.е. на нашем геморрое придумываем дополнительный узел и начинаем снова все лечить. Тогда предлагаю ввести такое понятие как группировка противника. Группировка противника - это массив всех юнитов противника, находящихся в квадрате(области) 200х200 м. Координаты квадрата(области) приведем к формату карты, т.е.: private _centersEnemies = []; // массив координат центров областей 200х200 с врагами { private _posE = getPos _x; // координаты врага // приведение координат врага к формату карты 200х200 private _xEnemy = (floor ((_posE select 0)/200))*200 + 100; private _yEnemy = (floor ((_posE select 1)/200))*200 + 100; // занесение координат центра области в массив _centersEnemies pushBackUnique [_xEnemy,_yEnemy,0]; } forEach _enemies; // для всех известных врагов Теперь у нас есть квадрат 200х200, в котором есть известные нам враги. Мы знаем сколько их, какова их сила, мы даже можем вычислить точку скопления силы в данном квадрате: private _sumX = 0; // сумма X координат юнитов врага private _sumY = 0; // сумма Y координат юнитов врага // суммирование координат { private _pos = getPos _x; _sumX = _sumX + (_pos select 0); _sumY = _sumY + (_pos select 1); } forEach _units; // центр скопления врагов private _center = [_sumX , _sumY , 0]; Другими словами теперь карту можно представить как набор квадратов, каждый из которых имеет свои характеристики силы. Для каждого из них можно подбирать соответствующие противоборствующие войска. Хочу заметить: формат 200х200 характеризует только СИЛУ группировки, но не отражает влияние рельефа. Для определения ключевых точек на местности возьмем квадрат 1000х1000 с центром в месте скопления врагов и разобьем его на ячейки 25х25. Это 40х40=1600 точек. Достаточно много для расчетов. Достаточно много для того, чтобы средненький процессор подуссался. Это будет наш холст, на котором мы будем рисовать наши тактические узоры. На нем можно отметить участки, скрытые рельефом от каждого из врагов, участки с высотами большими чем высота центра скопления врагов, участки с укрытиями и т.д. Добавлено (23.03.2018, 17:10) Добавлено (24.03.2019, 22:33) Сообщение отредактировал Индеец - Пятница, 23.03.2018, 15:53
|
› Понедельник
› 25.03.2019
› 14:12
› Сообщение #
Это нам дает возможность рассчитать предполагаемую позицию центра группы (кластера), а значит: нанести артудар, устроить засаду, занять более выгодную позицию наперед, Не менее интересный вопрос: нам - это кому? Игроку? Но ИИ движется по скриптам, ему прописанным (некий рандом, как в скрипте патруля, можно в расчет не принимать - в этом случае вряд ли получится рассчитать следующую точку). Либо и того проще - по вейпам, сообразуясь в те же заложенные ему (уже на уровне разрабов) скрипты. Плюс нужно будет въезжать в систему "предсказания" и ее анализировать. Время. Наверное, пользительно будет расхерачить невидимый отряд противника, движущийся на стрелку с того конца острова, но применительно к А3 не так очевидно. Бои скоротечны и не настолько масштабны, это же не стратегия. Компьютеру? Но ему и так известно о местонахождении игрока (как это и было отмечено). Хотя некий интерес в этом будет в МП, но опять же - на уровне отрядов, а не одиночек. И при.. ну, не знаю.. определенной одинаковости уровней тактической подготовки сторон. То есть полагать, что противник, положим, знает о складках местности и умеет ими пользоваться. Конечно, можно заставить компьютер воевать с самим собой, а самому пока пойти налить кофе. Но "это же не наш метод" |
› Пятница
› 05.04.2019
› 17:08
› Сообщение #
Это еще кто-то читает?! Пытается осмыслить?! Реально, andrucio, спасибо тебе.
Теперь по сути. Нам - это компьютеру, который выполняет прописанные мною задачи с помощью заложенных (на уровне разрабов) инструментов (команд, скриптов и т.д.). Первоначально идея была в том, чтобы боты (компьютер) оценивали ситуацию не на уровне "увидел врага - бежать к нему, стрелять", а по факторам местности, перевеса сил, наиболее выгодных позиций и выбирали из шаблонов действий наиболее подходящее. С взаимодействием с союзниками и т.д. Если для этого нужно предугадать положение врагов, то не вижу в этом невозможное. Скорее всего это будет сложно - это да, но невозможно - думаю нет. Теперь о том, для чего это все. Хотелось бы создать такой вариант игры, где противоборство с компьютером заключалось бы не только в умении быстро и метко стрелять, но и в разгадках тактических приемов противника (компьютера) и выработке своих решений. Ясен пень не без "умения быстро и метко стрелять". Да, нужно научить ботов пользоваться рельефом. Но и в этом не вижу ничего невозможного. Что касается времени на выработку решений, то пока нужно состряпать более-менее работающую модель, пускай даже медленную, а там - посмотрим. P.S. "Приливы и отливы, положение солнца над горизонтом, дрейф континентов - это малая часть того, что я контролирую." фильм "Солдат Джейн" (по памяти) Ну, серьезно, у нас (у людей) есть игра с приблизительно реальной физикой, есть команды для вмешивания в любой процесс игры, есть опыт сообщества. Не может быть, чтобы существенно изменить ИИ ботов было невозможно. |
› Пятница
› 05.04.2019
› 20:21
› Сообщение #
С интересом читаю. В любом случае, нужно два ИИ. Один тактический, второй стратегический. Проблема в том, что основная печаль - ресурс вычисления. И стратегический ИИ на самом деле тут будет забирать минимум ресурса. Основная нагрузка - тактика каждого бойца или хотя бы тройки. |
› Суббота
› 06.04.2019
› 13:29
› Сообщение #
Индеец, ну собсно, идея-то понятна. Вместо читерного moveTo (getpos player) ты пытаешься придать чурбану железному© элемент человеческого просчитывания. Не знаю, что из этого выйдет - либо суперИИ, либо тупое стадо, раздираемое противоречиями буриданова осла.
ЗЫ придется еще методичку по Сообщение отредактировал andrucio - Суббота, 06.04.2019, 13:31
|
› Суббота
› 06.04.2019
› 19:19
› Сообщение #
andrucio, да знаю я это все... Замучаюсь - брошу, затем опять начинаю. Вот тему на сайте завел, чтобы идеи не терялись. Думал для себя одного. Кстати, почему moveTo - читерное?
|
› Вторник
› 09.04.2019
› 00:34
› Сообщение #
Ну, скажем, в постоянном цикле с getpos - читерное, ибо заставляет комп бежать на позицию игрока, которая ему завсегда известна
Ну а если getpos применяется один раз, а дальше идут какие-то расчеты - то уже не читерное:) Как-то рисовал скрипт погони\поиска.. группа выдвигалась на позицию игрока, и если в той точке никто из группы игрока не видел (через eyedirection + lineintersects и тп), то включался режим патруля по бисовой фукции taskPatrol.. если здесь кто увидит - бегут к нему и всё по новой. Если учесть, что групп было несколько с разных сторон и дело в лесу происходило, то было очень весело.. особенно, когда кто-то из них орал дурным голосом "вот он!", "держи его!" и тп. |
› Среда
› 29.05.2019
› 01:38
› Сообщение #
Лирическое отступление.
В самом начале разработки идеи об улучшении ИИ я, конечно, погуглил этот вопрос. И, конечно, нашел, что автоматическая система управления войсками (АСУВ) - идея, мягко говоря, далеко не новая. Далее будет анализ информации как я ее воспринял. Возможно я ошибаюсь, но задача не в том, чтобы спорить о нюансах построения АСУВ, а в том, чтобы понять что "ничто не ново под луной". В начале 60-х годов в СССР началась разработка АСУВ "Маневр" (подробно - http://otvaga2004.ru/kaleydoskop/kaleydoskop-c4/manevr-asuv-polya-boya/). В начале 80-х данная система была принята на вооружение. Анализ, который произвели военные НАТО, показал, что даже при неприменении ядерного оружия и количественном паритете сил Советский союз выиграет возможную войну благодаря более эффективной системе командования. Страны НАТО такой всеобъемлющей системой, на тот момент, не обладали. Это был шок. Представляю, как рьяно ВПК США принялось выбивать деньги из бюджета на создание своей АСУВ. Конечно деньги нашли, и, понятно, взялись за дело. Нужно отметить, что взялись за дело очень профессионально. Профессионально настолько, что на сегодняшний день их система "впереди планеты всей". А у нас началась Перестройка... Об эффективности их АСУ FBCB2, говорит то, что после обкатки в Ираке ее не отменили, а продолжили использовать. Хочу напомнить, что количественный перевес наземных сил в войне с Ираком был на стороне Хусейна. Сейчас система продолжает улучшаться. Более подробно https://cont.ws/@vladb/417553. Занимаясь темой ИИ, я обратил внимание на передачу информации от бота к боту. Если бот группы обнаруживает противника, то лидер группы автоматически получает данные о типе и координатах противника, конечно, исходя из степени осведомленности бота-передатчика. Что и можно увидеть на карте, если игрок находится в группе. Объяснять пользу от графической передачи информации я думаю не нужно (как и ее эффективность). Но то - игра. А теперь представим реальный бой. Группа ведет перестрелку с противником. Непрерывно происходят взаимные перемещения бойцов. Занимаются новые позиции. Ситуация постоянно меняется. И вот, к примеру, боец под огнем бежит к укрытию и видит ранее неизвестную огневую точку. Нужно сообщить о ней командиру как можно быстрее. Ввод данных в носимый планшет займет время. Это невозможно - боец под огнем. Но и своевременная передача данных может изменить ход боя. Поэтому в идеале ввод и передача данных должны осуществляться автоматически. Т.е. нужно создать носимое оборудование, которое бы автоматически распознавало объекты, производило их анализ и передавало данные в принятой форме командиру. Насколько я знаю (а знаю я мало) такого оборудования у военных нет. Ни у них, ни у нас. Но! Совсем недавно встретил в интернете сообщение о новых боевых очках для армии США. Очки позволяют видеть в обычном, ИК и тепловом режимах и, что особенно интересно, позволяют распознать объект в режиме свой-чужой. Пока прототип, но тенденция интересная. Не забываем об управляемом снаряде M982 Excalibur Blok III и его способность "обнаруживать, распознавать и сопровождать цель". Те. работа идет, внедряются изменения, испытываются варианты, анализируются и устраняются ошибки. Все это под государственным финансированием. А что у нас? В России заявлено о создании и принятии на вооружение ЕСУ ТЗ концерна "Созвездие". Все очень красиво - симметричный ответ и все такое... Но встретил и заметку о том что система - сырая, помпа и радостные вопли - преждевременные. Зная (а я знаю) о разнице м-ду лозунгами и реальностью становится неприятно. На Украине существует АСУВ "Славутич". Но это, по моему мнению, где-то на уроне реферата на тему "Как может быть...". О внедрении собственных кардинальных изменений в управление ВСУ - не здесь. |
| |||
Чат сайта |