Pull to refresh

Comments 50

Спасибо за интересный рассказ и деятельное участие!
Эта статья может быть интересна… интересующимся тематикой AI

А где тут AI? Кучка if'ов?

AI — внутри классов стратегии, а что там — из статьи не видно. Вообще, разве не «кучка if'ов» стоит за любыми действиями нормального интеллекта, по крайней мере, в рациональной его части?
Конечно нет. Все же в 2017 знают, что AI == TensorFlow.
Термин искусственный интеллект — довольно многогранен. Написание игровых ботов, это одна из граней. Вы наверно путаете с машинным обучением, которого тут действительно нет.

Цитаты из вашей же ссылки:


Бот использует нечёткую логику, нейронные сети и машины конечных состояний для того чтобы «думать».

достаточно сложный бот будет неотличим от игрока, если он способен достигать целей, для которых не был запрограммирован.

Для менее сложных ботов, таким является любое событие, на которое они не запрограммированы реагировать.

Описанный вами бот способен делать только то, на что он запрограммирован, реагирует только на события, на которые он запрограммирован, причем только так, как он запрограммирован.

Описанный вами бот способен делать только то, на что он запрограммирован

Именно так — грубо говоря «использует машины конечных состояний». Боты для компьютерных игр в основном так и пишутся.
И всё же никогда не видел, чтобы под соревнование с достаточно ограниченным количеством времени и более-менее ясными правилами (которые, правда, меняются, но не сильно) писали бота, где основное в принятии решений ложилось на ML. Если речь идёт про топовые места, конечно.

Буду даже рад (и не только я), если поделитесь ссылкой на такое событие.
А откуда ему тут взяться, если даже нельзя подключать сборки? Львиная доля времени тратится на то, чтобы, грубо говоря, запрограммировать умножение вектора на число.
Использовать наработки с прошлых чемпионатов: это всякие утилитные классы вроде точки, вектора, отрезка, всякие самописные математические функции.

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

Ну почему не посмотреть? Нпр., Quake и др. классические игры Дж. Кармака лежат в открытом доступе.
Поздравляю с победой.
Мда уж, такое количество идей, стратегий, кода и времени — титанический труд.
Я то думал мои 20 классов: самописные корутины, драйвера, динамический ПП(от 16х16 до 512х512) + А* для поиска путей воизбежании коллизий + часов 30 времени — это слишком много. В очередной раз убеждаюсь, что нужно брать отпуск с 7 ноября и плотно подсаживать себя на РАИК
Причем если допустим имеется 2 танка с процентом прочности 0.5 оба, то симулятор боя просто суммирует все HP и считает что это 1 целый танк.

А почему так? Ведь это же 1 единица прочности, но 2 единицы урона!
Причем если в группе соперника имеется несколько типов юнитов, то стреляет по каждому типу по очереди.

Интересно, а как выбирается очередность?
Например, в реальном боевом налете, реальной авиацией, я имею ввиду — приоритетной задачей всегда является уничтожение ПВО противника, а уже потом — собственно нанесение ущерба противника. Т.е. ПВО давят не считаясь с потерями, и только когда оно подавлено — приступают к штурмовке. А здесь как?
А почему так? Ведь это же 1 единица прочности, но 2 единицы урона!

Совершенно верно! Когда пытался учесть не только суммарное hp, но и колличество юнитов — внезапно начал выходить за лимит времени. Поэтому бросил эту затею. Похоже текущая боевая система оказалась хорошим компромиссом между быстродействием и точностью, и позволила выделить больше времени на другие вещи.

Интересно, а как выбирается очередность?

В финальной версии есть стратегия управление истребителями c высоким приоритетом, и одно из её заданий — это погоня за вражескими вертолетами, которые в данном конкурсе пресдтавляли наибольшую опасность.
Отличный подход к делу, молодец что не растерялся на старте!
Бот на с++?
Привет. Помню тебя еще по PlanetWars. Поздравляю с победой! было интересно изучить описание твоей стратегии.
Не проморгать начало, лучше начать сразу с беты.


Что верно то верно. Получил письмо за 5 дней до первого раунда, посмотрел условия, пару игр соревнующихся в песочнице, да закрыл.
А есть возможность локально у себя погонять против вашего бота? В Local runner возможно противником поставить вашего бота?
Эх, вот на этой строчке:
Помню как ходил около часа по квартире кругами, и перебирал в голове разные способы организации кода.
прямо за душу взяло. Я хоть и не тратил на соревнования отпуск, но тоже помучился с организацией кода. Еще в магах придумал использовать понятие «миссии» — сходить за руной, похилиться, дефать базу, атаковать. Правда топ был далек, но все равно интересно время провел :)
Весьма интересный рассказ, тоже думал поучаствовать, но времени так и не получилось найти.
Откуда столько интересных решений по ИИ?) Читаешь книги какие?) Можешь посоветовать, как к теме игрового ИИ подбираться на примере текущего AI Cup?)

Ещё конечно было-бы интересно узнать, использовал ли кто-то подходы вроде Reinforcement Learning (машинное обучение в целом) в этом чемпионате)
Могу посоветовать «Искусственный интеллект, Современный подход» Стюарт Рассел и Питер Норвиг. Книга фундаментальная — большая и сложная. Сам читал выборочно.
Поздравляю с победой.
И позвольте вопрос: если я правильно понял, Альфа-бета не использовался. Почему? Это классический подход ИИ для антагонистических игр.
Спасибо. Альфа-бета отсечения, это оптимизация для алгоритма Минимакс, который используется в пошаговых играх, где соперники делают ход поочередно. Данная задача не относится к такому типу игр.
Минимакс, который используется в пошаговых играх, где соперники делают ход поочередно. Данная задача не относится к такому типу игр.
См. Википедию:

Критерий минимакса первоначально был сформулирован в теории игр для игры двух лиц с нулевой суммой в случаях последовательных и одновременных ходов, впоследствии получил развитие в более сложных играх и при принятии решений в условиях неопределённости.

Минимакс в данном случае достаточно сложно применить в виду большой ветвистости. Другими словами слишком много вариантов действий (атаковать, отступать, куда атаковать, куда отступать, кидать ли бомбу, объединять ли в отряд). Т.е. как минимум нужны эвристики или другие способы уменьшить ветвистость. Но глубина просчета всеравно наврятли будет достаточно большой. Возможно в данном раскладе тут мог подойти MCTS лучше.
Тем не менее, в игровом ИИ достачно большое разнообразие подходов, которые имеют свои плюсы и минусы в разных задачах (в т.ч. не стоит забывать про сложность имплементации, т.к. время ограниченно и участие идивидуальное). Данный конкурс показал, что в текущих условиях разработки и игрового мира подход автора статьи оказался наиболее оптимальным из всех, которые опробовали другие участники.

Минимакс в данном случае достаточно сложно применить в виду большой ветвистости.
А в шахматах не сложно? Понятно, что нужно отсекать ветви.
Тем не менее, в игровом ИИ достачно большое разнообразие подходов, которые имеют свои плюсы и минусы в разных задачах (в т.ч. не стоит забывать про сложность имплементации, т.к. время ограниченно и участие идивидуальное). Данный конкурс показал, что в текущих условиях разработки и игрового мира подход автора статьи оказался наиболее оптимальным из всех, которые опробовали другие участники.
Какое отношение ИИ к сложности имплементации? Никто не спорит, что автор статьи отлично справился с заданием. А вот что касается организаторов, то ИМХО можно было сделать функции более высокого уровня, чтобы участники занимались ИИ, а не организацией элементарных действий юнитов.
В шахматах не сложно — как раз-таки потому, что сравнительно мало ветвей, соответственно несложно просчитать достаточно глубоко. Именно поэтому в го минимакс применить сложнее — ветвей слишком много, глубина выходит недостаточной.
несложно просчитать достаточно глубоко
В шахматах «достаточно» зависит от силы противника (человека или программы). Гарантированно достаточно удается посчитать в крестиках и ноликах 3х3 — там у программы невозможно выиграть. А в Го, нпр., я играю настолько плохо, что простые программы из «интернетов» меня легко обыгрывают.
Поздравляю с победой! Титанический труд проделан.
В этом году был такой необычный способ управления (нет возможности микроконтроля) что я надеялся кто-нибудь попробует бота на нейронке сделать.
Было бы очень любопытно посмотреть на что он способен был бы и смог ли бы тягаться с такой серьезной ручной реализацией.
Спасибо! Жаль ты в этом году не поучавствовал. Мне вот тоже интересно, можно ли было бы сделать что-то похожее на бота TouchAI с применением машинного обучения. Чтобы без групп, без ПП, а чисто управляемый хаос юнитов :)
можно ли было бы сделать что-то похожее на бота TouchAI с применением машинного обучения
И обучения нет… Где же ИИ? Отсутсвие ИИ заслуг победителя не умаляет, а вот устроители ИМХО быстрого и удобного выхода на AI не обеспечили. Жаль :(
А можно еще минус? А то у минусатора слов нет — одни негативные эмоции, опасные появлением комплекса неполноценности. (Хочу просто спасти такого бесценного участника!)
Спасибо за минус. Вам полегчало? Аргументы не появились? — Если нет, то не огорчайтесь, аргументировать не каждому дано — минусовать проще :)))
(Надеюсь, что над этими минусами не только я посмеюсь — такой забавный минусатор попался!)
Уважаемый, здесь так не принято.
Как не принято?
И как принято? — Говорить «уважаемый», как в кабаке 100 лет назад. И разбрасывать минусы не в силах объяснить причину. М.б. Вы серьезный форум с какой-то соц.сетью перепутали?

ИИ перед вами (имхо). Довольно часто в этом соревновании возникают дискуссии по поводу того, что если в решениях нет машинного обучения или нейронок "хотя бы", то это не ИИ. "Что считать ИИ?" — тема достаточно философская. Мое личное мнение, что, в контексте данных соревнований, искуственным интелектом можно назвать программу, которая выполняет задачи, которые традиционно считаются прерогативой человека (играет в игру), не привязываясь к внутреннему устройству.
А уж победит тот бот, который лучше подстроился под условия игрового мира и критерии оценки.

Здесь пример игры, где без ИИ оказалось проще. И предложено определение ИИ без философии.
А уж победит тот бот, который лучше подстроился под условия игрового мира и критерии оценки.
А м.б. в первую очередь под условия недостатка времени? М.б. было бы больше времени при иной задаче — не возникало бы вопроса «где ИИ»?
ИИ — понятие широкое. Шахматный ИИ, например, делали без всякого машинного обучения (классически, может сейчас и обучают..) — там эвристики и перебор. Но по большому счету любое обучение — это оптимизация а значит тоже перебор, только «на уровень выше».
Представленный ИИ тоже делает различные переборы и моделирование. Разница только в количестве того что автоматически подбирается а что было подобрано вручную программистом.
В основе классических шахматных программ альфа-бета (АБ). Недаром я про АБ спосил выше. АБ хорошо изучен и обоснован, в его случае вопросов про ИИ не возникает. А тут чистая эвристика, которую по понятным причинам ни изучить толком, ни обосновать было невозможно. В этом принципиальная разница. Крайний пример: генератор случайных чисел. Его часто используют в играх, но никто не называет такой подход ИИ.
Не вижу «принципиальной» разницы. Альфа-бета — не особо сложный алгоритм, шахматный алгоритм на одном АБ с тривиальными эвристиками будет очень слабый. Основные достижения в силе шахматного ИИ были достигнуты именно эвристиками, базами эндшпилей и т.п. И все это точно так же невозможно обосновать (попробуйте, например, обосновать эвристику в шахматах: на конце ветви АБ просчитывать 2 хода противника подряд..), но это не мешало использовать термин ИИ.
Конечно это очень специализированное решение и из него турдно что-то взять для написания ИИ для другой игры. Но это не повод принижать ценность или интересность данного решения. Для такой игры вообще очень трудно придумать что-то универсальное, перебор и моделирование не работают при таких масштабах и количестве рандома.
Но это не повод принижать ценность или интересность данного решения
Никто не принижает. Никто не говорит, что ИИ лучше. Важно решить задачу, а будет это ИИ-решение или нет не столь важно. Поэтому вопрос в классификации. Нет смысла валить все в одну кучу и все сложные задачи называть ИИ.
PS
Для такой игры вообще очень трудно придумать что-то универсальное, перебор и моделирование не работают при таких масштабах и количестве рандома.
Так м.б. организаторам нужно было выбрать другую игру?
Ааа подскажите, пожалуйста, по потенциальным полям — вот стоит в дальнем углу противник.
Он должен генерировать притягивающее потенциальное поле. Волнующие вопросы:

1) Как подбирать значения эмиттера? Ставить какие-нибудь 10000, чтоб затухая на 1 по клетке волна гарантировано дошла до края карты? Возможно, просто что-то не так понимаю.

2) Надо держать сразу несколько потенциальных полей и обновлять их все параллельно? Для одних юнитов может строиться по одному закону, для других (дальнобойных, союзных, лечащих, ...) по-другому.

Заранее огромное спасибо, тема очень интересная.
1) Можно ставить значение намного меньше, но затухать обратно пропорционально расстоянию, типа value / dist, или, если нужно более медленное затухание — value / log(dist), если более резкое, то value / dist^2, тут можно играться с различными формулами и смотреть что получается.
2) Да, под каждый тип юнитов может быть свое множество потенциальных полей которые суммируются.
Sign up to leave a comment.

Articles