Помогать команде я уже не буду — только помешаю, если попытаюсь, поэтому расскажу тут немного инсайтов про наше решение.
За час до конца это всё равно никому не поможет.
У нас примерно 14 работоспособных стратегий поведения. Типичный бот состоит из комбинации двух-трех стратегий. Комбинируются они в итоге так: если первая стратегия знает что делать — пусть делает, если не знает — спросим следующую.
У некоторых стратегий есть параметры настройки с несколькими разумными значаниями. Итого, у нас порядка 500 вариантов ботов, из которых должен остаться только один.
Последние пару часов ребята выбирают самого классного бота из этого многообразия. Учитывая, что выбирать правильную комбинацию стратегий можно ещё и ориентируясь на размер карты, количество игроков и другие характеристики, задача ой какая небанальная. Можно хоть неделю ей заниматься. Но у нас остался только час. Та-да-да-дааам!
За час до конца это всё равно никому не поможет.
У нас примерно 14 работоспособных стратегий поведения. Типичный бот состоит из комбинации двух-трех стратегий. Комбинируются они в итоге так: если первая стратегия знает что делать — пусть делает, если не знает — спросим следующую.
У некоторых стратегий есть параметры настройки с несколькими разумными значаниями. Итого, у нас порядка 500 вариантов ботов, из которых должен остаться только один.
Последние пару часов ребята выбирают самого классного бота из этого многообразия. Учитывая, что выбирать правильную комбинацию стратегий можно ещё и ориентируясь на размер карты, количество игроков и другие характеристики, задача ой какая небанальная. Можно хоть неделю ей заниматься. Но у нас остался только час. Та-да-да-дааам!
UberfullessnessAi.All — список всех разумных комбинаций стратегий после грубого отсева, размером 280 ботов :)
А ConnectClosestMinesAi — это алгоритм с именем, написанный ещё в начале контеста, дотачиваемый на протяжении оставшегося времени. Где-то внутри UberfullessnessAi.All есть и комбинация соответствующая ему, но так нагляднее.
А ConnectClosestMinesAi — это алгоритм с именем, написанный ещё в начале контеста, дотачиваемый на протяжении оставшегося времени. Где-то внутри UberfullessnessAi.All есть и комбинация соответствующая ему, но так нагляднее.
Мы тут немного отсыпались после окончания контеста. Результатов пока нет — организаторы обещают играть турниры между всеми полученными ботами и постепенно выкладывать результаты. Финальные — будут только в сентябре, на конференции ICFP.
Мы же готовим наш репозиторий к публикации. Пишем ридми, меняем все захардкоженные в коде пароли :) Скоро будет!
Мы же готовим наш репозиторий к публикации. Пишем ридми, меняем все захардкоженные в коде пароли :) Скоро будет!
Мы выложили на Гитхаб весь код, который написали на контесте: https://github.com/skbkontur/icfpc2017-kontur-ru
GitHub
GitHub - kontur-contests/icfpc2017-kontur-ru: kontur.ru team @ ICFPC 2017
kontur.ru team @ ICFPC 2017. Contribute to kontur-contests/icfpc2017-kontur-ru development by creating an account on GitHub.
Запушили на Гитхаб код из нашего внутреннего Гитлаба за минуту, а потом два дня писали README.md :)
Рассказали в нём, из каких логических частей состоит код в репозитории и какой был вклад каждого члена команды. Отдельно описали эволюцию нашего подхода к решению задачи и объяснили, как играет финальная стратегия.
Рассказали в нём, из каких логических частей состоит код в репозитории и какой был вклад каждого члена команды. Отдельно описали эволюцию нашего подхода к решению задачи и объяснили, как играет финальная стратегия.
Забавно распределились места по объёму кода в репозитории: лидируют 3 файла Jupiter Notebooks от наших датасаентистов, разбухшие от закодированных в Base64 красивых картинок. Но на самом деле большая часть кода написана на C#. Всего получилось 235 файлов, 13 тыс. строк и 450 КБ кода.
Другие команды тоже выложили свои репозитории с решениями ICFPC 2017 на Гитхаб: https://github.com/search?utf8=%E2%9C%93&q=icfpc+2017
GitHub
GitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.
Любопытный репозиторий у японской команды Unagi — победителя ICFPC 2016: https://github.com/imos/icfpc2017. Похоже, участники снова работали независимо, и каждый написал своё решение задачи от начала и до конца (на C++, Python, Rust, C#). А «капитан команды» написал обвязку для тестирования, сравнения и композиции отдельных решений (на Shell и PHP).
Радует, что в этом году идентификаторы в коде Unagi в основном написаны по-английски. В прошлые годы легко можно было встретить функцию с названием calculateYakubun :)
Радует, что в этом году идентификаторы в коде Unagi в основном написаны по-английски. В прошлые годы легко можно было встретить функцию с названием calculateYakubun :)
GitHub
GitHub - icfpc-unagi/icfpc2017: Team Unagi's repository for ICFPC 2017
Team Unagi's repository for ICFPC 2017. Contribute to icfpc-unagi/icfpc2017 development by creating an account on GitHub.
Ура, организаторы ICFPC начали делиться результатами. В этом году будет два зачёта: для решений, сданных в течение 24 часов после начала, и для решений, сданных в течение 72 часов. Появились результаты первого раунда в 24-часовом зачёте: https://icfpcontest2017.github.io/post/lightning-one/
80 команд сдали свои решения для участия в 24-часовом зачёте, из них 52 оказались способны играть и зарабатывать очки. Эти команды играли первый раунд на пяти «маленьких» картах — от 60 до 187 рёбер в графе. Каждая команда играла на каждой карте несколько игр со случайными противниками и могла набрать от 10 до 40 очков.
Наша команда набрала 36 очков из 40 и заняла 4 место в первом раунде. Выше оказались три команды, которые набрали по 37 очков. Во второй раунд вышли 26 команд — все, кто смог набрать больше 25,5 очков. Это медиана набранных очков у 52 игравших команд.
Организаторы открыли страницу с записями игр первого раунда: https://icfpcontest2017.github.io/punttv/
Пока карты маленькие и на них мало противников, легко следить за действиями каждого бота, угадывать стратегию и объяснять результат игры. Понаблюдайте, как играет наш ConnectClosestMinesAi:
Пока карты маленькие и на них мало противников, легко следить за действиями каждого бота, угадывать стратегию и объяснять результат игры. Понаблюдайте, как играет наш ConnectClosestMinesAi:
После ICFPC прошло две недели, но в эти выходные мы снова пишем код и соревнуемся. В субботу и воскресенье в офисе разработки в Екатеринбурге будет хакатон. Участвует 62 человека в 11 командах.
Почти никто не помнит, какие приложения были сделаны на прошлом хакатоне :) Поэтому в этот раз мы делаем полезные штуки, которыми будем пользоваться каждый день. Например, одна из команд делает приложение для геокодирования адресов и кластеризации маршрутов — оно поможет коллегам из техподдержки, которые заканчивают работать ночью и едут домой на корпоративном такси. А другая команда делает сокращалку ссылок, интегрированную с внутренней соцсетью — она не только посчитает клики, но и расскажет всё, что известно о кликавших коллегах.
Вот как выглядит конференц-зал, где соберутся команды, за сутки до начала хакатона. Завтра всё будет по-другому: