У нас в компании прошел турнир по вот такой пошаговой игре, где программисты должны написать алгоритм для захвата галлактики дронами. Таких игр довольно много, ага. Однако, прямо во время анонса турнира, в Лас-Вегасе проходил DEFCON 22, где я засек очень интересный доклад I am a legend: Hacking Hearthstone with machine learning В голове зародилась идея. А вдруг можно написать бота для этой игры с использованием machine learning и без опыта его использования.
Прототип
Прототип собрали за 4 дня. Писали на Kotlin с использованием библиотеки Mahout. Жаль что библиотека скудна на примеры и приходилось очень много вычитывать в мейл-переписках коммьюнити. После того, как собрали базу в 20 мб игр, оказалось что бот чему-то научился. Он захватывал соседнюю планету (выход в галлактику). Загружал ее дронами “выше крыши” и отсижывался. Такая тактика позволяла ему занимать не ниже второго места в тренировках. Но, времени уже не было и с этим крысоботом мы пошли на полуфинальные игры
Полуфинал
И прошли. Очень глупо, но прошли. Во время трансляции нашей игры коментаторы постоянно думали, что наш бот отвалился и не играет. А это была его тактика ;). Бота решили подтюнить.
Финал
На финал мы решили схитрить. Первые ходы в каждой игре делал алгоритм коллеги, который не прошел в финал. После этого машин лернинг брал управление на себя. Посмотрев, как дело обстоит на тренировке, мы увидели, что машина начинает нападать при такой завязке. И выигрывает. Все тренировочные бои такая машина выиграла. Но, проиграла турнир. Играла не очень. И тут не понятно почему. Толи ошибка у нас в программе, толи базу собрали маленькую, толи алгоритмы соседских врагов были направлены на ближайшего соседа - нашего бота. Но, это не важно. У нас получился очень интересный бот. Бот, следующий ход которого не могут предсказать даже разработчики. И это здорово!
Код нашего бота лежит на гитхабе - вот тут