Pull to refresh

Comments 16

Я сам потратил пару вечеров, пытаясь обучить бойцов хотя бы простейшим командам. Но потом работа накрыла и свою стратегию не стал даже в песочницу выкидывать.
Спасибо за статью — было очень интересно узнать, как был устроена победившая стратегия :)
Поздравляю с победой!
У меня есть одни вопрос. Как я понял, солдат просчитывает только один свой ход.
Сможет ли он просчитать ситуацию, когда нужно подойти, стрельнуть и отойти?
Да, на один ход каждому солдату дается 10 очков действия, если рядом командир, то это число увеличивается до 12. На передвижение тратится по 2 очка, на выстрелы у обычных солдатов тратится от 2 до 4, то есть вполне можно успеть сделать несколько шагов, потом выстрелить, потом опять куда-то перейти. Просчитать это все заранее — тоже не проблема, все эти числа изначально известны.
Снайперу все это сделать сложнее — ему необходимо 9 очков для выстрела.
Помочь может еще сухой паек, использовав который солдат может увеличить количество своих очков действия на 3.
Вот хотел же писать алгоритм исходя из оценки… Но нет, подумал построить все исходя из ситуации и оценка действий сводилась к количеству убитых, максимальный нанесенный урон… В итоге максимум был на 120, затем когда потихоньку начал выбиваться из числа попадающих во 2-й раунд из песочницы, сбросил рейтинг и завис на 350м…

Ну а так у меня тоже были разные фазы, просчет клеток, где и как лучше стоять, запоминал от кого прячусь за укрытием и тд… Сил было потрачено много. Но большая ошибка была в том что я так увлекся погоней за рейтингом что довольно сильно запутался как в реализации так и в своих же идеях :)
Теперь каждый вражеский боец становится размазанным по всему игровому полю в соответствии с некоторым распределением вероятностей.
Ожидал далее прочитать про волновую функцию солдата :)
Среди хабровчан когда-нибудь проводился турнир по ботописанию в чем-нибудь? В шахматах например?
Отличная статья, и поздравляю с победой!
Участвовал в прошлом турнире, в финале занял место где-то в районе первой двадцатки. Тогда было интересно. Хотел поучаствовать и в этом турнире, но почитал усливия игры… и передумал.
Проблема в том, что в этом турнире я так и не понял за счет чего вообще можно победить. В танчиках поворот корпуса и башни занимал приличное время, и там можно было подъехать сзади или сбоку и иметь профит. Это было основой всех стратегий. Здесь же если солдаты находятся в видимости друг друга то оба могут убить друг друга. Поэтому подкрадываться сзади — смысла нет. Выглядывать из-за угла — тоже проблематично из-за особенностей движка.
Поэтому стратегия сводится к кропотливому подсчету очков действия и т.п. странным вещам. Получается какая-то бухгалтерия сплошная. А экшена нет.
А у меня упорно не хотел бот стратегию принимать — не было времени разбираться что к чему и забил.
Самое смешное, что в первый раунд прошла моя тестовая стратегия, написанная на коленке за полчаса :)
Спасибо! Я сам выше 250 места в песочнице не подымался :(. У вас гораздо более продуманная стратегия (на два порядка выше).
Мои бойцы скорее всего действовали по 30-40 эвристикам с приоритетами. Это больше было рефлексами, почти без оценок и просчётов будущих действий. Я бросил эту затею когда бойцы стали действовать так как я хочу но при этом проигрывать.
На самом деле я много потерял пока пытался делать алгоритм без поиска пути, а когда внедрил отладил волновой алгоритм всё стало лучше, но остальные так же подросли.
Для меня это был первый подобный опыт (почти) и мой код быстро превратился в клоаку. Но теперь я точно знаю с чего начинать и что делать. :)

Меня только пугают брутфорсеры на чемпионате.
Спасибо, очень интересно было почитать.
Я к сожалению начал не с того конца: а именно с перебора минимаксом ходов в бою. А именно, перебирались не шаги в рамках отдельного хода, а полные ходы. Т.е. например для соладата генерируем 10 возможных продолжений в бою. Грубо говоря:
1) атака одного
2) атака другого
3) атаки с низкой стойки,
4) атаковать и убежать,
5) атаковать присесть за укрытие
и тд.
Потом для следующего бойца. и тд. расширяя дерево поиска.
В итоге бот отлично воевал если все враги видимы — т.к. можно достаточно точно просчитать. но если враг предпочитал прятаться в тени, и атаковать изподтижка — то тут проблемы. Бойцы слишком опрометчиво бросались в атаку видя только одного врага. Приходилось вставлять всякие костыли.

В небоевом режиме перебор появился слишком поздно. Не успел его развить как следует :)
Можно в качестве эксперементов попробовать написать свой фреймворк, на котором пишут AI, например, на основе Behavior Trees.
Sign up to leave a comment.

Articles