xupypr [dot] com My Garden is well, how is yours?

13Май/130

КРФМЛИ AI Contest 2013

Вернувшись после армии я на некоторое время перестал сотрудничать с физико-математическим лицеем интернатом. Раньше я вёл там факультатив по программированию. Почему? Наверно я немного утратил интерес к преподаванию. Соревнования я тоже не рвался проводить (соревнования я помогал готовить ещё учась в аспирантуре) т. к. был крайне афиллированным лицом (брат заканчивает 11-й класс). Меня пригласили провести закрытие сезона - я с удовольствием согласился. Хотите узнать что из этого вышло?

IMG_3140

Проводить соревнование в обычной схеме (5-7 задач на 3 часа по правилам ACM) было бы достаточно банально. Нужно было придумать что-то поинтереснее. Идея пришла достаточно быстро (впрочем, она возникла у меня достаточно давно, но до реализации руки не доходили). Почему бы не устроить соревнования искусственных интеллектов?

Итак решено - пусть ребята пишут ботов, а те, в свою очередь, сражаются друг с другом. Осталось решить две проблемы. Во-первых, определить в какую игру будут играть боты. Во-вторых, создать арену, куда каждый участник мог бы отправить код своего бота, а арена сама бы произвела компиляцию (в случае компилируемых языков) и запустила бы ботов сражаться друг с другом, выстраивая рейтинг и статистику. Как ни странно, решать проблемы я начал в обратном порядке. Каркас арены был создан за 3 вечера. Я создал Java web-приложение, используя Spring Framework (от неё я взял конструктор объектов и MVC каркас), MongoDB как средство хранения, Bootstrap для стилевого оформления.  Была добавлена регистрация участников и их аутентификация.

Далее предо мной встал тяжёлый вопрос. Во что же будут играть боты? Нужна игра с несложными правилами (чтобы не тратить много времени на их понимание), но со сложной стратегией (для крестиков ноликов можно написать идеального бота за полчаса). При этом готового бота нельзя было скачать из интернета (тот же шашечный алгоритмом легко найти в интернете). Я выбрал  DVONN. Мне показалось что он удовлетворяет всем 3-м условиям.

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

30 апреля, 16:30. Система развёрнута и готова принимать ботов. В FAQ выложены описания различных вопросов и 4 варианта ботов (Java и Pascal боты, делающие рандомные допустимые ходы, C++ и Python боты, делающие ход всегда на одну и ту же ячейку, и, соответственно всегда проигрывающие по техническим причинам).

Я был разочарован. Возможно это было связано с тем, что я не успел дописать контроллер потока арены (и боты, алгоритм которых бесконечно искал ответ просто вешали арену - приходилось дисквалифицировать их вручную). Возможно с тем, что я переоценил силы ребят (мне казалось, что они смогут в течении получаса понять правила, ещё получас нужен для того чтобы минимальными изменениями модифицировать рандомного бота, чтобы он статистически побеждал рандомного бота из FAQ, оставшееся время на модификацию алгоритма). Возможно, ребята были просто не готовы к такому формату соревнований.

IMG_3138

В итоге, большинство просто отправили на арену рандомных ботов из FAQ и наблюдали из их прогрессом на арене (тоскапечаль). Некоторые пытались написать своих ботов, но те либо проигрывали рандомным, либо получали техническое поражение/дисквалификацию. К концу соревнования (контест длился 3 часа) никто так и не сдал успешного бота не из FAQ. До кучи,  я, по неосторожности, сбросил текущее состояние арены.

IMG_3141

Я и другие участники жюри, посовещавшись, решили продлить соревнования на неделю. За это время участники, которые действительно хотели что-то написать - могли бы написать качественного бота.

П. С. Через неделю я был на работе и не смог участвовать в составе жюри. Но ребята не подкачали: было представлено 3 решения, которые и разделили призовой фонд соревнований.

# Имя Победа Ничья Поражение Игры Очки
1  (AvadaKedavra, 10 класс) 10 0 2 12 30 
2  (Zugzug, 11 класс) 6 1 5 12 19 
3  (kennyolo, 11 класс) 1 1 10 12

П. П. С. Исходные коды арены я разместил на Gihub: https://github.com/xupyprmv/aicontest . Возможно, кого-то заинтересует система, для проведения своих соревнований.

Для себя (а может и для других), оставлю перечень задач, которые в ней ещё не решены:

  • Правильная аутентификация (сейчас в сессии хранится идентификатор пользователя, а не идентификатор сессионного билета, что неправильно).
  • Нужен "надсмотрщик" для арены. Который бы вводил ограничение на время выполнение программы и на потребление ей ресурсов (памяти).
  • Более красивый и информативный просмотрщик конкретного сражения.

 

Комментарии (0) Пинги (0)

Пока нет комментариев.


Leave a comment

Нет обратных ссылок на эту запись.