Комментарии 34
— харрас рабочих (экономики) противника;
— заманивание сил противника;
— определенная экономика для определенной местности и определенного удара по времени игры (для многих карт билды (стратегии) рассчитаны вплоть до 25-30 минут игры, т.е. зерграш или late game)
— победы достигаются через наглые тактики или фейлы противника и реже через давление лоб в лоб;
— использование ландшафта;
— абьюз механик игры (в supcome это строительство зданий на пути противника, требует сильного микроконтроля или взрыв ядерной ракеты об летающие самолеты)
Прочитал на одном дыхание! Спасибо за столь подробный рассказ.
Узнал об этом соревновании только из вашей статьи. Возник ворпос, инересно, а имеет ли место быть стратегия, когда лучники выстаиваются свиньей.
Как бы лучникам нужно сделать лишний шаг, но зато увеличавается их плотность. Или такая тактика не получилась бы из за слишком быстрого умирания лучников от выстелов?
А лечить лучников не кто не пробывал? И сколько за такт лечит один строить?
Насчет медиков, ну вот как у меня было с Recar-ом. Допустим 2 в 2, но рядом с одним из его лучников стоит медик. Мои вообще это никак не учитывают и стреляют в того, кто рядом с медиком. В итоге его лучник выживает с 1 хп, а мой один погибает. Т.е. если бот недостаточно умный, чтобы учитывать такие вещи, то может быть очень больно.
В целом согласен насчет того, чтобы иметь не более 1 — 2 в гуще боевых действий.
Но бывают разные ситуации, например, когда бот защищается, и рабочие уже рядом, то они могут естественным образом выступать в роли медиков, тогда не сильно накладно.
В этом случае на следующем ходе недополучим 1 единицу ресурса из-за движения рабочего сверху, но уже на второй ход будем добывать 2, таким образом в перспективе выигрывается 1 единица ресурса.
Может я не так считаю, но почему выигрывается 1 единица ресурса? Если не отходить, то добыча по ходам будет [1, 1, 2, 2, ...]. А если подвинуться, то [0, 2, 2, 2, ...]. Вроде бы сумма одинаковая.
Это, конечно, не отменяет того, что подвинуться может быть выгодно по другим причинам (например, чтобы меньше стоять на проходе).
Тоже проверил вашу теорию, и действительно, если обходить условного говоря нужно только самих рабочих, то выгода никакой соверненно нет. Что они все подвинуться, и пропустят тик работы, что они будут и дальше работать, а их будут обходить. Но выгода получается если при обходе нужно обойти например строение, и тут как раз вариант с "подвинуться" получается выигрышный.
Более того, если НЕ отходить, первую единицу еды получаешь на один ход быстрее, что хоть и небольшая, но выгода.
Статья неплохая, читается хорошо. Но мне кажется надо было найти пару геймеров-помошников, которые бы недельку поиграли в эту игрушку друг с другом. Думаю нашлось бы много интересных трюков :), а также минусов конкретных тактик/стратегий. Плюс их помощь в тестировании самого бота. Вспоминая варкрафт были приколные тактики — построить базу около чужой добычи золота и потихоньку тырить ресурсы, или башни у противника на базе, или камикадзе (уводит противника в тупики, засады или на чужую базу, но умирает), поставить пару рабочих на ремонт вышки на чужой базе и тп :)
Приходилось все тактики либо кодить чтобы отработать, либо искать стратегию, которая так делает и смотреть свои игры против неё.
Решение состояло в том, чтобы при помощи Graal VM скомпилировать jar-ник бота в exe, со всеми выполненными оптимизациями во время статической компиляции.
Kotlin Native не пробовали? Получается экзешник без танцев в GraalVM.
Я был уверен, что в финале победят рашеры, 50% лучников и 20% мечников просто раздавят противника, пока он набирает строителей.
У меня лучники при больших потерях переходили в оборону, и выстраивались стенами вокруг базы. В обычном режиме делились на команды застрельщиков, рашеров и диверсантов. Работало все криво, со стандартным поиском пути, выдохся и не сделал нормального микроконтроля.
Самые большие минусы соревнования:
- никакой баланс
- победа всяких рандомов на первых этапах (иногда совсем тупые болванчики неделю стояли вровень с умным микроконтролем)
- запрет работать с диском (У нас вроде соревнование ИИ? Больше похоже на соревнование любителей бахнуть побольше IF-ELSE и велосипедных эвристик)
Пробовали ли, стратегию с «мешающей жопой»? При некоторых условиях можно было добежать строителем до базы противники и заблокировать возможность строительства крупных зданий. Правда условия на пределе возможного.
Тратил ооочень много времени, думаю часов по 5 в день это минимум. Ну там много времени еще уходит на прогон тестов. Бывает, хочешь попробовать несколько фич, но пока одну не протестируешь, к другой не хочется приступать.
Классная статья, спасибо. Интересно, что в этом году получается, что практически все из условного топ20, кто отписывался о своей стратегии, делали примерно одно и то же. Просто у кого-то это получилось лучше, а у кого-то хуже. Но каких-то киллер-фич ни у кого не было. Ну либо были у тех, кто не отписывался.
Вот несколько доработок, которые у меня возникли по ходу чтения статьи:
1. Усовершенствования алгоритма поиска пути с помощью JPS (Jump Point Searche), для «перегонов» юнитов, то есть когда наверняка известно, что противника на территории нет. По идее это сильно ускорит вычисления, ибо нет нужды просчитывать каждую отдельную клетку (Но опять же, работает на расстояниях 10 клеток и более, иначе можно столкнуться с собственными юнитами)
2. Можно добавить каждой клетке массив, где будет прописываться через сколько клетка будет заниматься каким-либо юнитом и пользоваться этим при поиске пути. Понятно, что в основном это происходит у ресурсов рабочими, либо в толпе боевых юнитов и групповое взаимодействие вполне себе решает эту проблему, но вот просто в узких местах (Между бараками или лесом) тратятся лишние ходы + теоретически это можно применить и для групп, разменяв кол-во проверок на память просто (Хотя не уверен, если честно, нужно проверять на практике:) ).
3. В стратегиях типо FAF выгодной тактикой на картах с ограниченными доп ресурсами (Так называемым «реклеймом») добывать рабочими в обратную сторону (От противника к базе), и она очень хорошо сочетается с аналогом «прокси барак». Понятно, что тут это будет работать немного по другому и применять её нужно лишь там, где точно известно, что до конца партии все ресурсы будут выработаны. С одной стороны из-за этого можно просесть по ресурсам вначале партии, но с другой стороны — в конечном счёте получается большая выработка, ибо вам достаётся большая часть карты, и к моменту, когда вражеские рабочие дойдут до центра, там уже ничего не будет, а около Вашей базы ресурсы ещё будут.
4. Как по мне, если делать резервацию ресурсов на постройки юнитов или бараков, то без предсказания экономики обойтись нельзя. То есть считаем сколько в текущий момент добывается за ход и резервируем с этим учётом. То есть нужно оставлять на счету не 500+, к примеру, а 460, если у вас доход 50 в тик, к примеру. Можно дальше расширять это не на один ход, а на несколько.
5. Продолжая тематику предсказания по доходу, нужно смотреть на окупаемость рабочих в реальном времени, а не «примерно нужно держать 60 и не больше», а так же на время, которое осталось до конца раунда. То есть в конце партии нет никакого смысла их достраивать, а построить побольше боевых юнитов и пойти в размен с целью убить рабочих или их ресурсы.
6. Размер рабочими, сочетается с п.3. В определённых ситуациях выгоднее убить рабочего об противника или устроить «заманиловку», где нужно бежать просто как можно дальше от базы и оттаскивать боевые юниты, а после построить нового, чтобы потом не тащить его через всю карту.
Пока что большего с ходу не пришло.
2. Commandos вроде делал нечто подобное…
3. Это будет автолуз, т.к. слишком большое проседание по ресусрам вначале.
4. У меня было предсказание только для текущего хода. Типа если есть N рабов восле ресурсов, то скорее всего за этот тик насобираем N единиц ресурсов, следовательно для строительства можно использовать эту информацию, как будто сейчас не X а X + N, ресурсов. На более дальние дистанции уже не прогнозировал, но вообще да, есть смысл.
5. Тоже думал как-то считать окупаемость, но это очень сложно и много нюансов, а факторов может быть очень много. Так что остановился на описанной схеме. Но вообще интересно, как другие игроки это делали.
6. Мои диверсанты всегда бежали не просто к ближайшему рабочему, а к ближайшему скоплению, поэтому против моего бота это бы не сработало. А вообще, при отступлении у меня в приоритете были те клетки, которые ближе к моим войскам и турелям.
3. До меня просто не сразу дошло, что барак с рабочими нельзя построить, поэтому да, получается, что смысл примерно нулевой
5. Да нет, можно ограничится при желании вообще коэффициентом «стабильности». У Вас же под конец рабы умели определять расстояние до противника и насколько они вообще в опасности (То есть смогут ли их защитить свои юниты). Тогда просто смотрим сколько рабочих в безопасности и прочность леса(от этого зависит через сколько ходов они будут ехать к следующему и тратить время), который они добывают. И получается некий аналог дисперсии, по которому смотрим наихудшее значение(Ну или какое захочется:) ).
6. То есть отбившегося рабочего он просто проигнорирует что ли?
Классно написано
Кстати, непонятно всё же, почему мечники совсем бесполезны. Вот например в SCBW чисто гидралиски довольно слабы против зилотов, и зерглинги тоже быстро кончаются, но их сочетание оказывается весьма эффективно, потому что пока зерглинги дохнут, гидралиски наносят серьёзный урон.
Здесь тоже можно было бы добавить мечников, чтобы они собирали вражеский огонь на себя, а лучники бы нанесли основной урон. Так не получится?
Если бы сделали мечникам персональную механику, что в один ход можно и идти и атаковать, то получилось бы сбалансировано, но организаторы не подумали в баланс…
Кстати ни у кого из топов не видел варианта подождать, пока рабы наберут побольше ресов, если у соперников безнадежная ситуация. Все почему-то нападали всеми своими силами на один бедный оставшийся домик, хотя времени зачастую оставалось тиков 200, а ресов было чуть ли не четверть карты. Хотя может такие ситуации очень редки в финале )
История 4го места на Russian AI Cup 2020