Pull to refresh

Comments 49

Спасибо, добавил ссылку в статью.
У меня маленькое подозрение по просмотренным матчам и коду, что у вас поворот башни и танка не учитывают, что поворот со значения угла (2*pi-epsilon) до значения 0 очень маленкое, и башня как бы крутится только в одну сторону. Успокойте меня, и скажите что все правильно. :)
Просто башня учитывает еще и текущую скорость вращения корпуса. А т. к. скорость вращения корпуса часто больше, чем максимальная скорость вращения башни, то алгоритм выбирает неочевидное направление поворота.
Прочитал на одном дыхании, спасибо за детальный рассказ.
Очень пожалел, что не нашёл времени поучаствовать в конкурсе.
UFO just landed and posted this here
Справа от списка участников боя — четыре колонки с числами и ещё правее должна быть кнопка «Смотреть» (ответ на коммент выше, промазал)
Вы злодей!
В хорошем смысле слова, сам с простенькой стратегией был в топ500 — потом дисквалифицировали и интерес пропал
А за что дисквалифицировали то?
Я сам виноват, мультиакк, но то, каким образом сняли с «российского соревнования по ИИ» — напоминает неуважение администрации во всяких браузерках по отношению к игрокам.
Подробнее — увидел инфу о соревновании, зарегился в первые дни. Потом воткнул стратегию которая на месте крутила пушкой и палила рандомом. И где то на неделю забыл.
Появилось время, начал допиливать во что-то более осмысленное, пока допиливал увидел хрень с движением стратегии в песочнице, скопировал проверить в другой акк — и действительно мест на 300 выше вылез.
Ну а дальше уже 2й акк допиливал по ночам. Где-то дней 8 потратил, и в момент начала первого раунда всех блокнули.
Могли бы и сразу заблочить, а так получилось что впустую по ночам сидел.
Сразу подумалось, что будет выигрыш в производительности по сравнению с участниками, пишущими на языках типа Java/Python


На самом деле нет, ведь тик не заканчивается, пока все игроки не ответили.
по всей видимости, имеется ввиду ограничение процессорного времени, выделяемого стратегии на один тик.
Интересно, было ли оно разным для разных языков.
на питоне довольно быстро упираешься в предел.
у меня размер сетки для поля опасности 16х10 каждый тик я его расчитывать не могу, при этом я считаю только расстояние до танка, направление дула и летящие снаряды.
Отличная статья, спасибо!

Сам тоже участвовал, но мало времени было на разработку алгоритма, в итоге только попадание во второй раунд =(
Больше всего удивился, когда вы объявили на gamedev.ru, что такое поведение танков выработалось генетически :)

Кому интересно, вот мой бот (java, правда, «попахивает» :) ), аккаунт — 19 место в финале.
Очень надеялся, что победитель напишет подобную статью. Искреннее спасибо!
Поздравляю с победой.
Поздравляю!) Вы написали алгоритм управления танком практически бесплатно :)
И еще неизвестно, чей это будет танк:(
Известно чей — тёмной корпорации mail.ru, которая будет управлять биологическими рабами на 1/6 суши.
Надо же так и думал что ктонить распотрошит локалрунер для тестирования разных стратегий.
Мне во втором раунде возможности прокатать стратегию несколько десятков раз и сравнить с другой очень не хватало.
Спасибо за статью и поздравляю с победой.
Поздравляю с победой :)

отчет GreenTea — brunneng.blogspot.ru/2012/12/russian-ai-cup-2012-tanks.html

«Причем сначала урон идет в броню и только после пробития брони в здоровье экипажа.»
Вот эта фраза коряво написана — читается как «сначала пробивается вся броня и только потом»
Да, мне тоже не нравится, но с детальной механикой начисления урона я не разбирался, поэтому не знаю, как лучше написать.
Как в правилах — снаряд может пробить броню, а может не пробить. Если пробивает — то урон наносится и здоровью экипажа.
Жаль, что все сорцы так мало прокомментированы и содержат столь много магии.
А есть какая-нибудь визуализация поля опасности?
Да, если раскомментировать print() в строке 880, то оно заспамит терминал картинками. Но работает только в терминале с поддержкой xterm-256color, у меня работало в стандартном терминале Убунты.
Ох уж эти бессонные 2 недели )
Я хоть не победил и потратил уйму времени — всё равно получил удовольствие, респект организаторам.
Очень понравилась статья, автору спасибо и поздравления!
> Мое физическое образование подсказывало заменить скалярное поле опасности на квадрупольное

И тут я понял, что надеяться мне там было не на что. :-) Скажите каким опытом разработки физических движков и ИИ вы обладали до этого конкурса?

Сам первый раз участвовал в подобном соревновании, тоже пришел к разбиению поля на квадраты и начислению баллов каждому квадрату в зависимости от бонусов, близости противников, приближении снарядов и прочих параметров, но выше 120 места так и не взобрался, к концу стратегия скатилась в 400-500 места. Сделать поворот корпуса на нужный угол, тоже была попытка, но нехватило знаний, для адекватной реализации — просто не успевал поворачиваться под снаряды, на дальней дистанции просто уходил из под огня. Да и стрелял танк с простым упреждением на угловую скорость и направление движения. У вас конечно все куда круче! Поздравляю!
Ну, «опыт разработки» это очень сильно сказано. Скорее я просто интересуюсь вопросом. В свое время выводил формулы для переданных импульсов, пытался писать что-то вроде Box2D. Делал разные физические симуляции. По поводу ИИ: писал когда-то перебор вариантов для крестиков-ноликов и морского боя, игрался с нейронными сетями. Так что подготовка у меня больше теоретическая и сыграла свою роль скорее широта кругозора, чем практические навыки.
Браво!
Отсылку к этой статье можно использовать как аргумент в холиварах «нужно ли программисту высшее образование».
Зачем физика/математика саперу? Или 1Снику? Или клепателю сайтов на джумле?

геймдев — да. Но это очень ограниченная область.
А разве в определении «клепатель сайтов на джумле» где-то подразумевается программист?

Математика в той или иной степени нужна любому программисту. Программист без математики — это кодописатель.
ну вот где тебе в джумле нужна математика?
palkan тонко намекает что клепатель сайтов != программист, соответственно и математика/физика им не нужна.
Программы пишет — значит программист.

А все эти деления на кодер/программист/разработчик/архитектор — это всё от лукавого. Только если для пофлеймить.
Вы говорите так, что можно подумать будто люди рождаются САПерами, 1Сниками и прочими поварами с юристами, а не становятся ими в процессе взросления/обучения.
Жизнь — довольно непредсказуемая штука и предвидеть, что пригодится в жизни, а что нет — невозможно.

P.S. САПом, 1С, допиливанием джумлы и геймдевом список областей не заканчивается, есть и сотни других.
Статья прекрасная! Подход тоже.
Но все же есть не раскрытые вопросы. Например, меня заинтересовала следующая фраза:

Используя выбранную модель движения, я проводил интегрирование поля опасности с весом, линейно спадающим со временем:
image


Как до этого Вы дошли, и почему решили использовать интегрирование? Мне не понятно…
Если можно прокомментируйте пожалуйста.
Ну, у меня была цель заставить танк перебираться в более безопасные места, при этом стараясь не пересекать слишком опасных и как можно более быстро. Следовательно я должен учесть опасности всех точек на пути и, с большим весом, опасность конечной точки. Причем, чем позже точка достигается, тем ее вес должен быть меньше, ибо точность предсказания падает со временем, ну и надо мотивировать танк ездить быстрее. Вот я и суммирую (численно интегрирую) опасности по пути движения.

Кстати, изначально предполагалось (и потом было реализовано): .
Понял. Просто интеграл сбивает с толку :)
Sign up to leave a comment.

Articles

Change theme settings