Your SlideShare is downloading. ×
Solit 2014, Опыт участия в конкурсе по спортивному программированию Russian Al Cup 2013, Поляков Иван
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Solit 2014, Опыт участия в конкурсе по спортивному программированию Russian Al Cup 2013, Поляков Иван

94
views

Published on

Иван Поляков, Минск. Программист, занимается разработкой компьютерных игр (Shareware / Indy) с 99 года. Закончил ФПМИ БГУ, где участвовал в чемпионатах ACM по программированию. …

Иван Поляков, Минск. Программист, занимается разработкой компьютерных игр (Shareware / Indy) с 99 года. Закончил ФПМИ БГУ, где участвовал в чемпионатах ACM по программированию.

«Опыт участия в недавно прошедшем конкурсе по спортивному программированию Russian AI Cup 2013″. Development секция. Не упустите возможности узнать, как думают алгоритмически участники олимпиад.
(http://russianaicup.ru/profile/Cooler – 15-е место в финале, 11-е место в песочнице – это лучший результат среди участников из Беларуси). Об особенностях задачи, о принципах работы моего решения и особенностях решений некоторых других участников из топа, о вероятных ошибках и способах их избежать.
P.S. Рассказ победителя конкурса имеется тут – http://habrahabr.ru/post/206680/

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
94
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Спортивное программирование - это не страшно! Опыт участия в конкурсе Russian AI Cup 2013 CodeTroopers
  • 2. Russian AI Cup - соревнование по программированию искусственного интеллекта (AI). Задача: написать AI, управляющий отрядом солдат в пошаговой стратегии. Стратегии соревнуются между собой в боях: О конкурсе: постановка задачи СЕРВЕР СТРАТЕГИЯ СТРАТЕГИЯ СТРАТЕГИЯ Состояние игрового мира Действие
  • 3. О конкурсе: принцип боя
  • 4. 5 видов юнитов, 3 типа бонусов: О конкурсе: правила игры Юниты ходят по очереди, на ход дается 10-12 очков действия. За нанесение урона / уничтожение юнитов противника начисляются очки. Побеждает команда, набравшая больше очков (даже если все её бойцы были уничтожены). Лимит времени: 0.2 секунды на ход (в среднем).
  • 5. Видимость несимметрична: A не видит B, но B видит A “Физический смысл” видимости: О конкурсе: видимость вид сбоку
  • 6. О конкурсе: формат соревнования
  • 7. • языковой пакет - скелет стратегии • Local Runner • Repeater Набор участника
  • 8. CodeTroopers (2013) • игра пошаговая • четкие, однозначные правила позволяют точно предсказать состояние игрового мира • игра с неполной информацией Отличия от CodeTanks CodeTanks (2012) ● игра реального времени ● симуляция физики с неизвестными параметрами
  • 9. Отличия от “обычного” соревнования: • продолжительность: не 4-5 часов, а 4-5 недель • сравнительно большой обьем кода, итерационная разработка • упор не на эффективность алгоритмов, а на способность к развитию • поэтому архитектура, расширяемость и удобство отладки имеют большое значение Отличия от разработки AI для реальных игр: • В реале обычно иная цель - чтобы AI играл интересно, развлекал игрока. А не тупо выигрывал. Отличительные особенности
  • 10. • Нет смысла делать версию, которую потом придется полностью переделывать. Эвристики - путь тупиковый, поэтому нужно сразу писать перебор. • Ключевые факторы - скорость развития и отсутствие багов. Поэтому нужны хорошие средства отладки. • Нюансы решают! Не усложнять! • План развития: добавлять фичи, углублять перебор, оптимизировать параметры (возможно генетическим алгоритмом?) Строим начальный план
  • 11. Глобальный AI Анализирует состояние игрового мира, ставит глобальные цели, меняет параметры локального AI для достижения глобальных целей. Архитектура базовой версии Локальный AI принимает решение по текущему ходу Перебор всех возможных действий (с отсечением) Оценочная функция
  • 12. Базовая версия учитывает такие факторы: • общее здоровье команды • продвижение к глобальной цели • “выгодность” занимаемых клеток (4x-3y) • расстояние до остальных членов команды (особенно для командира и медика • стойку и возможность нанесения урона видимым противникам • невидимость для известных противников • наличие бонусов Оценочная функция
  • 13. Отладчик-визуализатор
  • 14. Логи перебора При тестировании боя создается 200-400 Mb логов с описанием всех перебираемых вариантов действий:
  • 15. 1. Протестировать очередной бой. 2. Что-то не так? 3. Выяснить причину неразумного поведения по логам 4. Проблема может быть решена оптимизацией параметров? 5. Если нет - подумать над добавлением новой фичи. Принцип доработки
  • 16. Фичи, добавленные до 1-го раунда • использование всех типов бонусов • pathfinding для определения расстояния между юнитами / целями • сохранение позиций врагов в течение хода • определение известных карт • обнаружение скрытого урона • стратегия “доения медика” • стратегия избегания “доения” • авиаразведка и стратегия добивания Добавление фич
  • 17. Оптимизация параметров редко позволяет добиться принципиально иного поведения в бою. Уровень игры стратегии упирается в потолок. А добавление новых фич способно сломать слаженную работу имеющихся параметров оценочной функции. Фичи vs оптимизация
  • 18. Чтение форумов позволяет узнать, над чем работают другие. Учиться лучше на чужих ошибках. Наблюдение за соперниками
  • 19. Общий рейтинг песочницы не дает хорошего представления об уровне игры новых версий. Можно создавать бои вручную на сервере: Где мы находимся?
  • 20. Ограничения Local Runner: • доступна лишь одна карта • ограниченность в выборе соперников Что делать? а) взломать и модифицировать Local Runner б) написать свой аналог Локальное тестирование
  • 21. Проверка боем даёт самые достоверные сведения о реальном положении дел! 1. Это уникальная возможность для сравнения версий. 2. Возможность проверки корреляции результатов раунда с результатами локального тестирования. 1-й раунд!
  • 22. Опираемся на результаты локального тестирования: • масштабный тюнинг параметров Новые фичи: • Оценка вероятности гранатных атак • Сохранение информации о врагах между ходами • Базовое определение порядка ходов • Определение возможных позиций невидимых врагов при получении урона • Возможность бросать гранаты в невидимые клетки • Учёт уничтоженных врагов • Waypoints Дальнейшее развитие
  • 23. Сумма линейных функций - линейна. Максимум такой функции - всегда на краях диапазона. Иногда это хорошо, но бывает так, что нужен компромисс. Проблема крайностей Убегать Нападать
  • 24. Риска практически нет, поэтому те же принципы, что и в первом раунде: • ручной сбор статистики • сравнение версий между собой и с результатами локального тестирования 2-й раунд!
  • 25. Почему эволюционный алгоритм не годится: • еще много нереализованных фич! • слишком долго: выгоднее потратить время на фичи • есть опасность, что “не сработает” в реальном бою из- за нерепрезентативной / ограниченной популяции • люди говорят, что именно так оно и выходит :( Что делать? Оптимизировать параметры путём “ручной эволюции” (похоже на линейное программирование). Эволюция
  • 26. Углубление перебора - FAILED! (а ведь предупреждали!) Почему так? • Игра с неполной информацией - неопределённость слишком велика. • Большое количество нюансов делает задачу крайне сложной как в реализации, так и в дебаге. Итог: 3 дня (из 5) потрачено впустую :( Дальнейшее развитие
  • 27. Новые фичи: • Поле вероятности врагов • Динамическая карта выгодности/опасности • Более точное определение порядка ходов • Режимы: разведка, бой, отступление, суицид. • Вейпоинты и параметры, зависящие от карты и типа юнита. • Учет промежуточных положений (разведка) Дальнейшее развитие - 2
  • 28. Причины (на мой взгляд) неудачи в финале: • потеря времени на углубленный поиск • отсюда: недоработанность фич, баги, недостаточная оптимизация параметров • локальное сравнение версий уже не дает хорошего результата А как надо было делать? • Формат финала сильно отличается - начинать работу над ним следовало еще задолго до 2-го раунда (а ведь так и планировал!) • Необходимо было оставить хотя бы 2 дня на подгонку параметров и проверку работы стратегии на реальных противниках. ФИНАЛ
  • 29. После завершения конкурса все любят рассказывать: “Как я это сделал!” Оказалось что: • Большинство стратегий устроены и работают примерно одинаково. • Многие топы (но не slash!) делали визуализаторы. • Реализация перебора у slash’а весьма оригинальна. • Никто из участников финала, рассказавших о своих стратегиях, не использовал перебор глубже чем на 1 ход (зато со свистелками!) • Большинство финалистов не реализовали всё, что хотели. А что же другие?
  • 30. Очень хороший уровень организации. Никаких накладок и сбоев. Интересная задача: достаточно глубокая, с разнообразными подходами к решению. Впечатления от конкурса
  • 31. Вопросы? Кстати, их можно задать и по почте: cooler@tut.by ;) А рассказ победителя можно почитать тут: http://habrahabr.ru/post/206680/ Спасибо за внимание!

×