Мы неплохие, но ошибок много.
Разработка искусственного интеллекта для игры «Хоккей» за ~7 часов.
Изначально в статье планировалось рассказать о стратегиях участников, о том, что им удалось сделать за время соревнований и довольны ли они проделанной работой, но после опроса восьми финалистов стало ясно, что ничего не выйдет. это и нужно было срочно менять направление.
Дело в том, что на интересующие нас вопросы мы получали максимум 6 слов, а затем сразу же слышали жалобы на ошибки с чем столкнулись участники.
Только один человек написал:
Ничего негативного писать не хочу, считаю это некорректным, да и самим организаторам должно быть грустно.Из названия статьи понятно, что мы ничего не выиграли.Поэтому скажу, что идея задания довольно интересная, хотя лично мне такой формат конкурса (Анна Прозорова) не очень нравится.
И да, это «мы».
За время соревнований у меня появилось много хороших друзей, в том числе и Анна ( одрус ), который является соавтором данной статьи.
Также в последний момент разговорились с Львом( задамантий ) и с его разрешения описал участие в финале.
Лично я являюсь членом движения «Мир без жалоб», но переложу браслет на другую руку и буду жаловаться, пусть и в шутливой форме, потому что, с другой стороны, это условия конкурса и нужно быть хорошим специалистом, чтобы побеждать в нем и справляться с недостатками! У нас нет претензий, наоборот - большое Вам спасибо! Под катом, помимо описания правил игры, правил конкурса и найденных ошибок, мы поделимся с вами нашими ошибками, с чем лично столкнулись и как решали ту или иную проблему, как готовились к соревнование.
Возможно, где-то вы узнаете себя, если примете участие в подобных соревнованиях.
Цель статьи — собрать неудачи конкурса как от участников, так и от организаторов, зарубить их и никогда больше не наступать на те же грабли.
Надеемся, что статья поднимет уровень следующего конкурса.
Введение
Несколько слов о нас
Илья
Ежегодный участник Russian AI Cup и Mini AI Cup с 2017 года.Также слежу за Codingame и Halite. Особых достижений у меня пока нет, но я многому научился у других.
Для меня главное не участие, не победа, а выложиться на 100% и в конце сказать: «Я сделал все, что мог, реализовал все, что хотел, применил все, что знал».
Я не знаю языка программирования Java. Для меня это уже обычная практика от соревнования к соревнованию полностью изучить новый стек технологий.
Анна
Простой ученик с небольшим опытом решения алгоритмических задач, но без большого опыта участия в олимпиадах и подобных конкурсах.Конкретно я решил принять участие в IT Planet, чтобы проверить свои знания и способности, набраться опыта и пообщаться с интересными людьми.
Я изучал язык программирования Java в университете, но практического опыта работы с ним долгое время не имел.
Лев
Принимал участие в различных отборах ICPC, хакатонах «Собери университет 20.35» и «Цифровой прорыв».Ну и мелочи на некоторых университетских олимпиадах.
Соответственно, наш университет обычно отправлял на соревнования по SQL много участников, но в этом году их не было.
Мне предложили поучаствовать в Java, и в довольно короткое время, параллельно с сессией, мне пришлось заняться новым для себя языком.
Я раньше не участвовал в It-planet.
Описание конкурса
Общее положение
IT-Планета — конкурс для студентов и молодых специалистов IT-сферы, цель которого — выявление и поддержка талантливых ребят. Проводится ежегодно с 2007 года.Участие в нем – шанс проявить себя.
Номинация «Программирование на Java» помогает найти практическое применение знаниям, полученным в процессе обучения.
Первый отборочный этап был заочным и представлял собой онлайн-тестирование для студентов зарегистрированных учебных заведений.
Вопросы были достаточно сложные и интересные, но, будем честны, большинство содержало код, который можно было перечитать и запустить.
Второй отборочный этап, как и первый, проходил заочно.
Направлен на решение задач спортивного программирования.
На решение 10 задач было отведено два дня, что позволило нам тщательно подготовиться к решению конкретной задачи и изучить алгоритм/подход. Однако со всеми задачами никто не справился.
В ходе конкурса менялись условия некоторых заданий.
Были ошибки в тестах.
Международный финал очный.
Необходимо было написать ИИ для игры «Хоккей».
Это заняло ~7 часов.
Приблизительно из-за отсутствия «отмашки» на старт и путаницы с обедом.
Время было гибким и аудитории не были закрытыми, но об этом ниже.
Упражнение
Задачу разработали специалисты ООО «СимбирСофт».Ниже приведено содержимое PDF-файла (с минимальными изменениями статьи), который получил каждый участник.
Упражнение Описание задачи Где-то в загадочной стране, все жители которой — маленькие роботы, встретились 2 команды, чтобы сыграть в хоккей.
У обеих команд есть личный тренер-робот, который постоянно следит за игрой и подсказывает всем игрокам, куда им нужно идти.
Все бы ничего, но игроки-роботы понимают только такие простые действия, как ходьба, удар по шайбе, переход в указанную тренером точку.
Вам предстоит стать тренером красной команды игроков.
Против вас будет играть синяя команда, которой управляет алгоритм, уже успешно побеждавший другие команды.
На поле одновременно играют 2 команды.
Команда состоит из 4 игроков: нападающего, 2 защитников и вратаря.
Ваша задача — написать алгоритм управления красными ботами.
Для управления вашими персонажами у вас будет 3 метода, которые описаны ниже.
Также есть метод, который получает информацию обо всех игроках на поле и координатах шайбы.
Ограничения игры Вратарь может дотянуться только до середины поля от ворот. Защитники и нападающие могут кататься по всему полю, кроме вратарской зоны (красный полукруг возле ворот).
Описание структуры приложения Приложение представлено в виде клиента и сервера.
Сервер будет упакован в jar-файл и запущен в фоновом режиме.
Сервер содержит всю основную логику движения персонажей и шайбы, храня информацию обо всех персонажах, шайбе, времени и счете.
При запуске приложения клиент устанавливает соединение с сервером и с заданной частотой получает данные от сервера.
Он же отвечает за прорисовку всех персонажей, ворот и шайб на хоккейном поле.
Весь программный код должен быть написан в классе Algoritm в папке algoritm клиентского приложения (любые изменения в других файлах учитываться не будут).
Этот класс содержит следующие методы:
- move(playerType, x, y) — Метод перемещения игрока в указанную точку на карте.
- Kick(playerType) — Метод удара по шайбе конкретным игроком.
- Turn(playerType, Angle) — Метод поворота конкретного игрока.
- getInfo() — Получение информации обо всех игроках и шайбах на карте.
Участникам Олимпиады будут доступны следующие уровни:
- синяя команда стоит;
- синяя команда хаотично ходит по полю;
- синяя команда играет по «слабому алгоритму»;
- Синяя команда играет по усовершенствованному алгоритму (для внутреннего тестирования).
Переменная playerType является экземпляром класса PlayerType и содержит такие значения, как вратарь, защитник1, защитник2, нападающий.
Класс Playground содержит постоянные игровые значения (например, середина поля, вратарская зона и т. д.).
Метод getInfo() возвращает объект класса GameInfo. Разъяснения
- Если вы отправите метод move несколько раз, конечная точка, куда персонаж должен идти, изменится (поэтому, если вам нужно добраться до конечной точки, вам нужно дождаться, пока персонаж достигнет ее, прежде чем отправлять его в другую точку) .
- Метод удара можно использовать только в отношении игрока, владеющего шайбой.
- Метод поворота принимает угол, причем для нижней стороны поля угол принимает значения от 0 (смотрит в сторону цели противника) до 180 (смотрит в сторону своей цели), а для верхнего полукруга угол принимает значения от 0 до -180.
Критерии оценки
Также взято из файла .pdf. Будет использоваться только программный код из класса Algoritm. Алгоритм каждого участника будет поочередно работать на всех уровнях сложности.
По итогам забега будут начисляться баллы за результаты матча, а также баллы будут начисляться за реализованные возможности в алгоритме.
Список критериев
- Атаки по воротам необходимо выполнять с разных углов.
Например: прямо перед игроком находится вратарь противника – атаку по воротам необходимо проводить под углом.
- Игрок передает пас свободному хоккеисту для атаки ворот.
- Пас следует отдавать только в тех случаях, когда игрок не может сам провести атаку (все углы атаки ворот заблокированы).
- Пас должен быть отдан только тому игроку, который имеет право пасовать.
Приоритет отдается хоккеистам с открытыми для атаки воротами.
- Если атака невозможна, команда должна отступить и перегруппироваться.
- Добавлять.
Очки, если потеряны с помощью передач.
- Добавлять.
Очки, если используют вратаря для перегруппировки.
- Защита должна блокировать возможность передачи паса другому игроку противника.
- Команда игрока следует стратегии.
Например: 1 защитник всегда остается чуть дальше, в случае контратаки противника.
- Алгоритм учитывает показатели табло.
Например: играет более агрессивно в случае проигрыша и, наоборот, более осторожно в выигрышной ситуации; в случае ничьей усиливает агрессию ближе к концу матча.
- Игрок забивает гол в свои ворота.
- Участвующие хоккеисты блокируют друг друга.
(не пропускают друг друга).
- Намеренная блокировка игры.
Например: упираться шайбой в борт до конца игры.
Главная часть
Подготовка к соревнованию
Илья
Изначально писали, что финалом будет «Промышленное развитие».Я ожидал нормальной работы с базой данных, разработки GUI. Приложение для отслеживания чего-либо, например.
Я с горем согласился на финал, потому что был не очень рад тому, что мне придется делать.
Однако 17 сентября приходит письмо с регламентом финала, в котором говорится следующее: «Есть 2D компьютерная игра «Хоккей», в которой компьютерные боты играют по определенному алгоритму.
Необходимо реализовать на языке программирования Java алгоритм, согласно которому будут действовать персонажи участников» (на сайте было написано, что задание можно изменить).
Мне на ум сразу вспомнился Кубок России по AI 2014. Я обрадовался и понял, что не зря согласился принять участие.
Первое, что я сделал, это перечитал еще раз статья победителя .
В общем, я запомнил, что там было, но не все моменты были понятны.
Далее я пошел в сайт конкурса и прочтите правила.
На этом я остановился, потому что любое изменение правил могло полностью изменить всю игру.
Я не знал, насколько в их игре будет физика, не знал, как подбираются бросок и шайба и т. д. Игру можно было упростить настолько, что даже углы были бы не нужны.
Поэтому я начал ждать.
Я ждал и ждал! Днём 27 сентября вы получите письмо о вебинаре! 28 сентября в 19:00. Для меня это был идеальный день и время.
Однако.
Однако за 4 часа до запланированного начала пришло еще одно письмо с переносом на 17:00! Письмо о переносе пришло за час до начала.
Я летел как мог и опоздал примерно на 15 минут (не ожидал, что мне все равно придется устанавливать Flash Player).
На вебинаре я задал вопросы и получил общее представление об игре.
Данных хватило даже на то, чтобы написать свою и основательно подготовиться.
Однако до недавнего времени было неясно, как происходит это воздействие; Некоторые моменты разработчики не раскрыли, а кое-где сами еще не до конца определились.
Записав все самое ценное, я пошел общаться со знакомыми мне активными участниками RAIC. Привет и спасибо м0ртидо , ДрагунЗен , орешн1к .
Обрисовав ситуацию, стало понятно, что необходимо жестко закодировать ИФА и ни о каких симуляциях мира в такой период времени не может быть и речи.
орешн1к поделился бомбической книгой «Программирование игрового ИИ на примере», в четвертой главе которой говорилось о дизайне ИИ для футбола.
Мне настолько понравилось то, что написано в книге, что я решил расписать для себя всю стратегию, которую собирался написать для соревнований, и совершенно забыл о сроках.
То, что я собирался написать, не подходило для этого конкурса.
Моя бесполезная подготовка доступна по адресу требовать (осторожно, задач уже 168. Местами с описаниями).
Бесполезно для этого конкурса, но в целом это отличная систематизация знаний, полученных из книги.
Там же я думал о симуляции шайбы, чтобы через некоторое время узнать ее местоположение, о поиске подходящего угла для удара по воротам, логике передачи шайбы между игроками и куче других интересных вещей.
Выше я уже писал, что понятия не имею, как писать на Java, поэтому помимо стратегии я начал изучать синтаксис языка.
В этом мне помог отличный сайт, которым я пользовался не раз - Изучите X за Y минут .
Войдя в IntelliJ IDEA, я понял, что писать в нем — это ровно то же самое, что писать на C#.
Именно с такой подготовкой я поехал в Москву.
Анна
Когда я узнал о теме финала, первым делом решил повторить геому.И чтобы все это было весело, я сделал все это с помощью Обработка : Я смотрел примеры от разработчиков, связанные с движением, расчетом углов, скорости и ускорения, а затем тренировался на собственных небольших скетчах.
Я решил не тратить время на освежение некоторых тонкостей Java, поскольку задача, как мне казалось, требовала навыков написания стратегий и некоторых знаний математики.
Поэтому я решил прочитать Статья победителя RAIC 2014 .
Статья была интересной, но не особо полезной конкретно для этого конкурса, потому что физика могла кардинально отличаться, а времени уделялось бы гораздо меньше.
Вебинар от разработчиков был интересным и полезным и дал общее представление об игре.
Но, к сожалению, мне не удалось посмотреть его полностью, поскольку трансляция велась с использованием Flash и именно в этот момент мой ноутбук решил поиграться с синим экраном смерти.
В результате непосредственно перед финалом у меня не было никакой заранее разработанной стратегии: сложно было что-то планировать, когда не раскрывались детали игровой физики.
Были мысли о том, на что следует обратить внимание в первую очередь, какие вспомогательные методы сразу написать, но не более того.
Я решил, что перед финалом главное расслабиться, выспаться и прийти туда в хорошем настроении.
Лев
[Готовимся] Около 16-20 часов.Соответственно я рассматривал геометрию, с которой, к сожалению, не очень хорошо разбираюсь.
Я заранее подготовил формулы и расчеты и все протестировал.
Я оценил зону, из которой можно забить в ворота, по условиям, заданным организаторами на вебинаре, затем написал эмулятор некоторых действий и получил, как будет выглядеть зона с прямой симуляцией ударов с разных точек и Оптимальная стратегия вратаря.
В итоге практически ничего не пригодилось и пришлось писать костыли на костылях.
Распределение времени
Илья
У меня всегда были проблемы с тайм-менеджментом на соревнованиях и олимпиадах.Я наступил на грабли в третий раз.
Даже после первого я сказал, что никогда этого не допущу.
Я в очередной раз сел за одну задачу и долго не переключался на другую.
Я потратил очень много времени, всю первую часть соревнований до обеда, на реализацию всяких оберток для командных игроков, состояний классов, сообщений между ними, внутренних ролей.
В общем, я следовал задачам, которые сформировал перед конкурсом, напрочь забыв советы опытных участников по поводу хардкода Ifami и вспомогательных методов.
Я просто написал, вообще не задумываясь о времени.
Я пришел в себя за обедом.
Я понял, что половина конкурса пройдена, и мне предстоит еще 10 часов работы, прежде чем хоть что-то сдвинется с места.
Было решено оставить все, что было, и начать с самого начала.
Это были захватывающие последние часы соревнований, когда я перестал грустить и захихикал над поведением своих ботов.
Очень быстро он начал переключаться с задачи на задачу.
Там не работает - перешел на другой, потом вернулся.
Желание было только одно – забить хоть как-нибудь, хоть что-нибудь.
Поэтому о чистоте кода и ООП были напрочь забыты, а в некоторых местах оставлены интересные комментарии.
Анна
Для начала я решил разобраться, как вообще работают основные приемы в игре: движение хоккеистов, захват шайбы, повороты и передачи.Я потратил на это около часа.
Также я изучил предоставленные данные и методы, которыми пользовались хоккеисты и шайба.
Тогда я решил, что было бы неплохо научиться находить угол между двумя объектами (конкретно между хоккеистом и шайбой).
У меня с этим были большие трудности: сначала я долго разбирался в методе Math.atan2, а потом пытался преобразовать полученные данные в систему углов разработчиков.
Я боролся со всем этим до обеда и очень расстраивался, что потратил много времени на одну небольшую задачу, хотя за это же время я мог бы написать стратегию хотя бы для первого уровня.
После обеда я решил более эффективно распоряжаться своим временем.
Я быстро добавил метод определения угла, затем написал стратегию для первого уровня.
Затем она плавно перешла к стратегии второго уровня, которую в итоге применила и к третьему.
Собственно, я так и сделал и заразился тем, как странно вели себя мои хоккеисты до конца финала.
Код получился ужасным, нечитабельным, с кучей «если» и копипастом, но со своей задачей он более-менее справился: мои хоккеисты забили голы.
Лев
За отведенное время (7 часов, что безумно мало для такого соревнования) я создал простой алгоритм, который смог стабильно выигрывать 1-2 уровни с разгромным счетом.И далее, в зависимости от случайных событий с 3-м уровнем, алгоритм выдавал оценку от 0-2 до 6-0. К сожалению, нам так и не удалось увидеть четвертый уровень.
При этом я уверен, что за это время можно написать гораздо лучшую версию, но для этого нужно понимать, как работает любой твист, а тут организаторы разводят руками, говоря, что мы сами не понимаем почему это так.
Больше всего времени мне потребовалось, чтобы разобраться, как и что работает в проекте; особенно раздражало то, что .
equals() не работал и два поля .
TypeOfPlayer и .
PlayerType, которые возвращали совершенно разные вещи.
Ну и какое-то странное поведение игроков, которое организаторы толком объяснить не смогли (и мы не знаем, почему ваш персонаж едет задом наперед при единственной заданной команде, и уже упомянутых поворотах :)).
Потом в какой-то момент оказывается, что в проекте есть константы для размеров различных игровых объектов и их положений, которые, казалось бы, должны были быть в справочном материале изначально, но нет, в итоге я потерял счет времени их вручную.
Наши косяки
Илья
- Моя главная проблема — ужасный тайм-менеджмент и неудачное написание ненужных абстракций.
Если у вас есть 7 часов, напишите плохой, неподдерживаемый код, если хотите победить.
- Рофл с геомой.
Я пока не знаю какой угол надо добавить и как сервер его обрабатывает, поэтому на всякий случай % 360. Может 90+, может 180, а может и все 270. Я вообще об этом не думал и просто поставил это наугад.
double res = 180 / Math.PI * Math.acos((pp.x - tp.x) / pp.dist(tp)); return (90 + (int) res) % 360;
- Минут за 40 до окончания соревнований я решил разобраться в происходящей игре в поисках ближайшего к шайбе игрока.
Дело оказалось в том, что у моего метода SquareDist класса Paint вместо + между квадратами разности координат стоял знак - (кстати, в задаче quire тоже есть -).
И с таким багом я за несколько часов посчитал абсолютно все расстояния.
- В самом начале соревнований у меня в голове была реализация получения позиции шайбы в будущем.
Для этого нужна скорость.
Как оказалось, из состояния мира вообще нельзя извлечь ничего полезного (считаю ошибкой организаторов, исходя из того, что дают другие соревнования таких же форматов).
Поэтому необходимо было получить одинаковую скорость шайбы исходя из ее положения в разные моменты игры.
Я потратил много времени на отладку и не понял, почему данные приходят так редко (обещали каждые 5мс).
В общем, мне тогда не удалось завершить расчет, но где-то за час до окончания соревнований я заметил в своей стратегии интересный кусок кода, оставленный организаторами:
try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
Установив значение 10, я получил очень частое обновление данных, раскомментировал участок кода, отвечающий за получение скорости, и все заработало! Минут через 20 я услышал вопрос участника к организаторам по поводу этого куска кода, и он ему объяснил, что это сделано специально для нас, чтобы было легче разрабатывать.В этот момент я улыбнулся, поняв, что я не единственный, кто понял это так поздно.
Анна
- Как и Илья, мне в самом начале не удалось правильно распределить свое время: я тратил много времени на одно маленькое, хотя и полезное задание, а надо было научить хоккеистов забивать шайбы.
- Я потерял много времени, потому что забыл сигнатуру метода Math.atan2: сначала идет y, а потом x. Я сделал наоборот.
- При написании метода определения наличия на определенном участке пути хоккеистов противника я допустил пару ошибок, из-за которых хоккеисты иногда отказывались куда-либо двигаться.
- В общем, я не отнесся к соревнованиям достаточно серьезно.
Можно было подготовиться тщательнее и быть более старательным и внимательным в самом конце.
Лев
- Первые два часа в логах случайно повторял оба раза по команде союзников, вместо второго раза по команде ботов.
Школы организаторов
- Данных для удобного написания сильных стратегий мало.
Все, что нам дали, — это четыре метода управления и позиционирования игроков на поле.
Да, у шайбы остался хозяин.
Доступными константами были центр поля, голкипер и зоны ворот. Хотя и на том спасибо, нам кажется, что следующий список значений был просто необходим.
Мы были всего лишь костылем в их получении!
- Скорость игроков (у каждой роли была своя скорость), шайб;
- Информация о замедлении шайбы;
- Стартовые позиции игроков;
- Размеры игроков, шайб;
- На вебинаре разработчики прямо сказали, что возможности получить исходный код сервера не будет. Был разговор про какие-то упаковщики, что они подсунут .
exe. Слово «обфускация» не упоминалось, но на него намекали.
А по факту мы получили .
jar, который за пару секунд декомпилируется и становятся доступны не только константы и логика с физикой игры, которых не хватало участникам, но и их исходный код для играющего бота 3 уровня.
против нас.
К сожалению, я сам это заметил, когда приехал домой, а о декомпиляции услышал после соревнований от участников.
Рассказали, как кто-то этим воспользовался во время финала.
Если это правда, то это очень неприятно.
В такие моменты начинаешь жалеть, что у правильного все так.
Но в данном случае это не очень честно (Александр Полищук Боба-Алекс ).
Ну и молодцы что использовали, раз в правилах запрета не было, но обфускатор решили не использовать, значит это было частью Олимпиады (Максим Пьянков maxzxwd ).
- Хоккеисты могли исчезнуть с поля в случайный момент и не появиться до конца игры.
Вы можете затолкнуть игрока в зону вратаря.
- При вызове метода move() хоккеист мог повернуть не в ту сторону.
Это может привести к чему-то вроде «лунной походки».
видео
- Метод Turn() поворачивает игроков гораздо медленнее, чем метод move() до определенной точки (происходит автоматический поворот в нужном направлении).
Обычно такое случается при столкновении с другим хоккеистом.
Сравнение двух методов:
- Угол отражения оставляет желать лучшего.
Огромная скорость после отскока от боков (видео замедлено в 4 раза).
Шайба не засчитывалась, хотя и находилась в воротах.
Для сравнения вот пример паса под прямым углом, у которого все в порядке со скоростью и есть замедление.
видео
- Нападающий вражеской команды стоял ближе к центру поля и сразу же перехватил шайбу в начале раунда (шайба не в центре поля тоже текстура нормальная).
- Ограничение «вратарь может доходить от ворот только до середины поля» касается только нашей команды; для врагов такого правила нет.
- Чтобы хоккеисты могли выполнять какие-либо действия, необходимо сначала применить к любому из них метод move();
- Организаторы оставили в коде стратегии таймаут, влияющий на частоту получения новых данных.
Если вы просто удалили этот код, все зависло.
Многие не поняли ее цели, и никаких объяснений от организаторов не последовало.
Эта часть кода также не фигурировала в правилах.
Многие люди столкнулись с этим.
- У большого количества участников были проблемы со сборкой и изменением уровня стратегии (как оказалось, работать с maven’ом умели не многие).
- На вебинаре организаторы заявили, что будет использоваться Java версии 8, но в итоге проекту потребовалась минимум Java 11.
- Анна: после того, как я села за рабочий компьютер, у меня возникли проблемы со сборкой из-за лишних пробелов в коде, разбивающих имя переменной.
Не критично, но и не очень приятно.
- На некоторых компьютерах изначально не было ни файлов задач, ни Интернета, а зависимости загружались долго.
- Участников оказалось больше, чем ожидалось.
Это произошло из-за некоторых дополнительных сборов.
Таким образом, ~13 человек столкнулись с проблемой поиска компьютеров (некоторые достали ноутбуки) и начали проект с нуля.
- Обед не был строго регламентирован.
Конкретного времени для приема пищи не указали, классы не закрыли.
Голодным давали дополнительный час, чтобы поесть.
- Вверху в описании конкурса есть подзаголовок с критериями оценки.
Их проблема в том, что там написано про баллы, но не описано сколько и за что.
В результате мы получили непрозрачность и общее непонимание, что делать, чтобы победить.
Сравнивать участников схожих уровней, наверное, было бы сложно, так как не было четкого распределения баллов за особенности, был просто список.
Участники могли реализовать разные фичи, но их всё равно нужно было как-то сравнивать (Роман).
Заключение
Заключение
В целом, если не относиться к финалу слишком серьёзно, было весело, интересно и очень затягивающе.Да, мне пришлось тратить время не на написание стратегии, а на борьбу с ошибками разработчиков.
Но когда ты адаптируешься и начинаешь играть по их правилам, ты даже начинаешь получать от процесса некоторое удовольствие.
Конечно, хотелось бы, чтобы в дальнейшем разработчики подошли к этой задаче более ответственно и довели дело до конца, не предоставляя участникам финала сырой и незавершенный материал.
Также стоит отметить, что победители этого финала – большие молодцы: в таких сложных и неожиданных условиях они смогли взять себя в руки, во всем разобраться и найти качественное решение.
Респект таким ребятам.
Благодарности
Прежде всего, хотелось бы поблагодарить участников, которые помогли в написании статьи и любезно согласились ответить на наши вопросы.К сожалению, из-за смены направления большая часть материала оказалась недоступна.
Спасибо, Анна ( одрус ), Лео ( задамантий ), Александру ( Боба-Алекс ), Максим ( maxzxwd ), Иван, Роман, Анна, Донат, Александр.
Также хотелось бы поблагодарить организаторов самого конкурса IT-Планета, организаторов финала конкурса «Программирование: Java» SimbirSoft и особенно разработчика Duard, который присутствовал на финале и помогал участникам с проблемами сборки и мог прояснить неочевидные моменты в логике игры.
Спасибо, что вообще не выгнали конкуренцию, как это сделали с Сишарпом (Александром).
Идея финала была хорошей, отборочных туров тоже (Иван).
P.S.
Пока мы писали статью, пришли фотографии с соревнований и протоколы, а это значит, что теперь мы можем объявить свои места! Илья кукарекал больше всех - 28-32 из 33 Анна - 16 Лев - 14 Спасибо, что дочитали до сюда! Теги: #Разработка игр #баги #Алгоритмы #программирование #искусственный интеллект #спортивное программирование #itplanet #финал соревнований #игровой AI-
Цвета #Bada55 Для Веб-Дизайна
19 Oct, 24 -
Нейронный Машинный Перевод Google
19 Oct, 24