Russian Ai Cup 2019. 4 Место, Почти Не Умеет Программировать Или Польза От Мягких Навыков

В этой статье процесс моего участия будет рассмотрен с «темной» стороны — менеджера проекта.

Немного о мотивации, немного о времени и приоритетах.

За «светлой» стороной технических подробностей лучше обратиться к статьям Т1024 , Лама , Тихий Нокс .

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

Кратко для тех, кому лень читать: течь и работать с мотивацией, расстановкой приоритетов и адаптацией, делать лучше, чем было, не идеально.

.



О чемпионате

В 2019 году стояла задача написать бота для 2D шутера.

Вот пример видео от Ламы: Чемпионат проходит в несколько этапов, каждый по неделе:

  1. Бета-тестирование.

  2. Начальная ступень.

    Перезапустите с небольшими изменениями правил на основе результатов тестирования.

    Боты регулярно сражаются друг с другом в песочнице.

    Первый тур в конце недели.

  3. Вторая фаза.

    Правила игры усложняются; каждым ботом управляет не один, а два человека.

    В «песочнице» бои проходят по правилам как первого, так и второго этапа.

    В конце недели второй тур конкурса — участвуют 200 победителей первого тура + около 60 лучших из «песочницы».

  4. Последний раунд. Еще одно изменение правил – карты становятся сложнее.

    На них нечего делать, не найдя пути.

    Бои в песочнице по правилам всех раундов.

    Финал – 50 победителей второго тура + 10 лучших песочниц.

    Призовые за первые 6 мест.



Какие навыки необходимы?

Кажется очевидным, что для победы нужно:
  • Хорошо уметь программировать, что бы это ни значило.

  • Иметь опыт участия в подобных соревнованиях, желательно в РАИК прошлых лет.
  • С момента начала бета-тестирования идет дополнительная неделя.

Заканчивается первый этап (прошло примерно половина времени) — присоединяется человек, который ни дня не работал программистом и лишь изредка писал скрипты для автоматизации работы, а в соревнованиях много лет назад в школе по Паскалю лишь принимал участие.

Ваши ставки на месте? Мои ставки до того, как я понял, в чем дело, были: «ну я поковыряюсь, как это вообще работает, и хватит», а после первого знакомства — «нужно войти в топ-250 — во втором туре и получи футболку, как участник второго тура.

" У меня высокая самооценка :) Давайте еще раз посмотрим на проблему.

Нас просят не писать чистый алгоритм — «Вася готовит n яиц в m кастрюлях».

Это задача более высокого уровня — вот цель, вот правила, вот ограничения.

Вам нужно написать лучшее решение за отведенное время.

Здесь можно выделить многие подзадачи из серии «У вас есть оружие с параметрами р1, у противника — параметры р2 — найдите для вас оптимальную дистанцию стрельбы».

Те.

Помимо решения отдельных небольших подзадач, нам необходимо самим правильно их сформулировать и расставить по приоритетам.

А затем выбрать правильный баланс между качеством и трудозатратами с учетом ограниченности времени.

При этом нам нужно найти не абстрактное лучшее решение, а решение лучше других.

Будем считать остальных участников частью Мир ВУКА , как часть игры, а не как противники.

Очевидно, что задача нашего продукта — быть адекватным реальному миру, а не выдуманному.

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

Всего для этого чемпионата было добавлено два важных навыка:

  • Гибкость, скорость реакции на изменения в мире, готовность менять стратегию.

  • Постановка и выбор наиболее важных задач.

Хм.

этот чемпионат точно не для руководителей команд, аналитиков и менеджеров? Ах, вам придется выполнять задачи самостоятельно, а не отдавать их программистам.

Так что, очевидно, мне не хватает времени на идеальное исполнение.

Судя по сложности задачи, предположу, что большинству участников тоже не хватит, хотя у них есть 4 недели, а не 2. Итак, у нас есть функция времени f(t)-> max. Осталось понять, что мы будем максимизировать.

На первый взгляд итоговое место в рейтинге/крутости бота.

А условия функции будут содержать всевозможные параметры стратегии.

Скажем, уклонение от пуль, стрельба, поиск пути.

Распределяем время разработки по этим параметрам — и мы победили :) Ладно, добавим «фундаментальные исследования» — изучение платформы, улучшение знаний языка, рефакторинг и оптимизация.

Но люди не машины, и на одну и ту же задачу в разных условиях может уйти от 2 до 8 часов.

Поэтому нам также необходимо решить проблему поддержания высокой производительности.

Поэтому первую часть чемпионата я максимизирую.

удовольствие от участия, чтобы повысить мотивацию продолжать.

А место в рейтинге будет просто прекрасным искусственным показателем эффективности; рост рейтинга будет быстрой положительной обратной связью.

Вам показалось, что разницы нет? В том, что для первого случая нам нужно только побеждать в итоге, а для второго нужны постоянные маленькие победы.

Из-за стартового штрафа в 2 недели остаётся только работать в «потоке».

И здесь тонкая грань работы с мотивацией.

Судя по чату, некоторые люди перегорели еще до окончания чемпионата.

Грубо говоря, мы тратим ресурс «мотивация» на решение проблемы, и в случае ее успешного решения — получаем его.

Я начинаю с отсутствия мотивации, поэтому ее недостаточно для решения большой проблемы.



Платформа

Организаторам большой респект. На самом деле платформа очень геймифицирована.

И все 4 типа фаната, и эстетика с отсылкой к старым играм, и всевозможное усиление мотивации (от быстрой обратной связи до последовательного увеличения сложности), внешняя мотивация, которая работает и не перебивает внутреннюю.

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

Например, он бы меня точно отрезал.

Здесь при старте сразу дается:

  • Базовая стратегия, которая работает. «Хватай пистолет, беги к врагу и стреляй».

    На разных языках.

  • Визуализатор (локальный раннер), позволяющий самому играть мышкой и клавиатурой против бота, либо запустить своего бота против стартовой стратегии/другой версии своего бота.

    И это показывает саму битву.

  • Простые правила для первого тура.

    Один юнит и простая карта.

  • Песочница, где залитые стратегии регулярно сражаются друг с другом и результат отражается в виде рейтинга.

Это дает возможность добавить в базовую стратегию, например, сбор аптечек за 10 минут и сразу увидеть результат – мгновенный положительный отзыв.

Причем за счет нескольких каналов восприятия: сам сбор аптечек, звук сбора и повышенный шанс на победу - бот выигрывает чаще.

Что, в свою очередь, дает мозгу информацию: «Это не так уж и сложно.

Если мы уже столького добились за 10 минут, то давайте попробуем вложить больше времени, прикиньте, какой будет эффектЭ» Вместо прямого подхода: «Изучите API, все правила, алгоритмы, связи, а потом вы что-то сделаете и получите результат», у нас «сделайте немного, и вы получите небольшой результат, изучите правила и вы Можно получить больший результат, углубиться в модель и результат там будет еще больше».

Да, сама платформа побуждает нас работать в потоке! Остаётся только помочь ей!

Немного теории о «потоке» и модели Фогга в моем кратком изложении.

Поток М.

Чиксентмихайи.

Есть субъективная сложность задачи и субъективная оценка своих навыков.

В зависимости от соотношения этих параметров задачи вызывают разные эмоции и состояния.



Russian AI Cup 2019. 4 место, почти не умеет программировать или польза от мягких навыков

  • Сложность > > Навык - Тревога
  • Сложность << Skill - boredom.
  • Сложность ~ Навык - состояние потока - максимальная концентрация на задаче, ощущение потери времени, проницательность и т. д. Но это ресурсозатратно для организма.

По умолчанию считается, что человек выбирает сложность чуть меньшую, чем навык.

Комфортная работа, без лишних усилий.

Мозг не дурак и не желает напрягать тело и себя без надобности.

Для стрима, конечно, просто адекватной сложности недостаточно, но чтобы не увеличивать объем статьи, просто скажу, что задание и система чемпионата отлично подходят для состояния стрима и имеют необходимые критерии.

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

В теории Фогг Говорят, что для совершения действия необходимо:

  1. чтобы мотивация была выше, чем усилия, необходимые для выполнения задачи;
  2. нажатие/триггер/напоминание о выполнении действия.



Russian AI Cup 2019. 4 место, почти не умеет программировать или польза от мягких навыков

Вы можете создавать события, которые повышают мотивацию, уменьшают (субъективную) сложность и просто напоминают вам.

Для полноты теоретической основы хотелось бы добавить еще одну вещь:

  • Не связывайте качества своей личности с результатом.

    Те.

    если ты не занял первое место, это не значит, что ты глупый :) Именно этот момент часто останавливает людей серьезно отнестись к этому.

    При такой настройке имеет смысл не прилагать максимальных усилий.

    Оставить себе иллюзию, что если я действительно постараюсь, то выиграю.

    Я сошлюсь здесь на свой статья (список более серьезной литературы в конце прикрепленной статьи).

  • Основная ошибка атрибуции.

    Здраво оценивать свои достижения и достижения других и своевременно реагировать.

  • Путешествие героя Кэмпбелла .

    Словом, оно прекрасно отражает мотивацию, настрой, серьезность участника, а также предупреждает об основных моментах исключения.

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



Программист VS Менеджер

Так получилось, что в качестве аватара я использовал логотип своего проекта по развитию софт скиллов, так что лично для меня этот чемпионат превратился еще и в проверку гипотезы, смогу ли я компенсировать недостаток хард скиллов софт скиллами.

Для решения этой проблемы я назначу внутреннего программиста и внутреннего менеджера.

На мой взгляд, многие места ниже моего обусловлены, в том числе, победой программиста над менеджером.

Для простоты представьте себе, что программист такой юниор: глаза горят, идей много, готов сидеть ночами и все осваивать, практический опыт… странно.

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

О! Еще я слышал о разработке через тестирование, давайте попробуем покрыть тестами весь код! При произнесении этих слов в голове менеджера крутится абстрактный счетчик сложности задачи, что резко отодвигает хоть какой-то результат. Напомним, наш программист июнь и пока ничего не умеет, но верит, что быстро разберется.

Если бы я начал так, я бы, скорее всего, умер, похороненный сложностью моей модели и количеством неизвестных.

Результатов мало, сложность постоянно растёт, время уходит. Задача менеджера: выделять задачи, ведущие к победе, помогая при этом поддерживать мотивацию программиста.

На первом этапе низкого погружения, низкой мотивации необходимы быстрые и значимые результаты.

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



История участия

Начинать .

Есть ли здесь какая-то конкуренция? Выглядит красиво, давайте посмотрим.

Погружение низкое.

Навыки и мотивация тоже.

Задача: решить, участвовать или нет. Забавный факт - глядя на призы, я сказал, что ну, пожалуй, займу четвертое место.

Первые два наверное без шансов, за третьего дают айпад, но я наигрался в них на работе, а за четвёртый дарят умные часы.

Они тоже не нужны, но играть с ними будет весело.

Конечно, это была скорее шутка, потому что.

я сомневался, что попаду вообще в топ-50. Открываю пример кода стартовой стратегии на Python. И половину не понимаю.

Программист: «Это действительно сложно, это не мой уровень, но нам понадобится неделя, чтобы разобраться».

И вот прошло уже 2 недели соревнований.

Идите сюда».

Менеджер: «Давайте посмотрим на другие примеры, общая логика понятна».

К счастью, пример на C# оказался написан проще, и тогда стало понятно на Python. Но что делать? Поигравшись со стартовой стратегией, кажется, что она уже играет идеально.

Беглый анализ показал – «подбирать аптечки» и «уворачиваться от пуль».

Программист, конечно, хотел все это реализовать, и в идеале связать в единую логику, но непонятно как.

Менеджер: давайте сначала сделаем аптечки.

Аптечки были изготовлены путем копирования кода выбора оружия и замены пары значений.

10 минут, запускаю - работает! Моего уровня достаточно, чтобы написать RAIC! //простая задача, мгновенная обратная связь, в том числе в виде красивой визуализации.

Время уклоняться от пуль.



Russian AI Cup 2019. 4 место, почти не умеет программировать или польза от мягких навыков

Метод назывался try_to_be_neo. п : хочет написать идеальный код, чтобы увернуться от всех пуль.

М : Хм.

давайте разберемся, на каком расстоянии нам следует держаться от противника, чтобы успеть увернуться, и постараемся его соблюдать, а потом придумаем, что будет, если во время подхода пули мы могли бы перейти в любое из 6 направлений.

Если что-то позволит вам избежать встречи с пулей, то двигайтесь туда.

п : но.

там может быть стена, или я не могу сейчас прыгнуть, или что-то в этом роде.

М : Просто игнорируй это.

п : часто это не работает! М : Пусть это сработает в 50% случаев.

Для простоты будем считать, что в среднем нужно поразить врага 4 раза, вероятность попадания 20%, скорострельность такая же.

Тогда у противника будет 10% шанс поразить нас, а у нас — 20% шанс поразить его.

Это даст нам около 84% побед при гораздо меньших затратах времени.

Наша задача – побеждать не всегда, а чаще, чем соперник.

А оставшиеся 16% потребуют для реализации гораздо больше времени, чем этот алгоритм, но принесут на этом этапе гораздо меньшую пользу.

Сегодня суббота, в первом туре 24-часовой перерыв.

Давайте представим, что мы могли бы участвовать и нам нужно составить стратегию, которая бы работала более-менее прилично, если бы нас провели во вторую часть первого раунда.

//использование дедлайна для стимуляции — прием, известный всем ученикам.

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

В тестовом сравнении с другими (не топовыми) стратегиями она чаще всего побеждала.

Но есть проблема — стартовая стратегия всегда стреляет в сторону врага.

Не беспокоясь о том, что на пути может оказаться стена.

А базука в руках подразделения часто доводит его до самоубийства.

п : Ну обидно, такое выкатить нельзя, сейчас напишем подробный расчет куда полетит снаряд, хоть он и вылетает за пределы дальности в случайном направлении, но это тоже можно посчитать .

М :пф, давайте запретим подразделению брать базуку, пусть заберет все остальное.

//5 минут, +1 дополнительное условие и резкий прирост к победам.

Это дало: резкое повышение мотивации.

Оно показало, что не все так сложно и мы легко можем попасть хотя бы в первую половину участников.

Вам необходимо принять участие! Стратегия действительно прошла легко после того, как в понедельник открылась песочница с 1000+ мест в топ-300. Чем-то напоминает MVP. Дорога испытаний.

Началась песочница второго тура.

Боты сражаются друг с другом в течение 5 дней, а затем во втором раунде примут участие победители первого раунда и еще 60 лучших игроков в песочнице.

Задача ясна – попасть во второй тур.

Те.

введите эти 60 за 5 дней.

К сожалению для меня, задача усложнилась; теперь в бою часто участвуют 2 отряда с одной стороны.

За первую неделю все научились управлять им, а теперь пришло время командной работы.

И я до сих пор не понял одного.

Посмотрев игры, я выделил следующие направления развития: Стрельба, уклонение, контроль поля, командная работа, дополнительные возможности.

Внедрение 0% в любой зоне, кроме дополнительных функций, дает резкое падение эффективности, тогда как довольно быстро доводится до 20-30% и дает сильный подъем.

Те.

20% стрельбы и 20% уклонений выгоднее, чем 90% уклонений и 0% стрельбы (без стрельбы победить практически невозможно).

Текущая задача гласит, что основные конкуренты теперь не топовые, а «соседи» по рейтингу.

Чтобы гарантированно уложиться в срок, вам нужно сосредоточиться на максимальном использовании своих сил против них, желательно как можно быстрее.

Нормальной командной работы здесь нет, и, по оценкам, выигрыш пока невелик.

Быстро расходоваю свои 10% (не стреляйте себе в спину) и возвращаюсь к другим улучшениям.

Время смотреть игры и анализировать причины побед и поражений.

Желающие покрасоваться могут воспользоваться SWOT-матрицей, но я буду упрощать: это для меня хорошо, это не очень, да ладно, у многих врагов есть такая слабость - мы ее используем, и это часто приносит потеря – срочно исправьте ее.

В общем, то же самое, но без модного слова.

Во вторник я занимаю двухсотое место в рейтинге.

В среду вхожу в сотню лучших — шанс не попасть во второй тур крошечный.

Миссия выполнена.

Что мы имели на этом этапе? Есть множество мелких и относительно быстрых исправлений, которые обеспечивают очень быструю обратную связь — действия ботов визуально видны и рейтинг быстро предоставляет информацию.

Все это позволяет оставаться в потоке и обеспечивает постоянное положительное подкрепление.

Нынешнее место ясно показывало, что мои нынешние способности совершенно ничтожны и здесь замешаны не боги.

Это повысило субъективные навыки и снизило относительную сложность задач, что позволило мне легче выполнять более сложные задачи.

Теперь задача – войти в топ-50 во втором туре, чтобы попасть в финал.

Все реализовано в базовом виде, общая логика работы понятна.

Мотивация высокая и постоянного подкрепления не требуется.

Теперь вы можете тратить время на «фундаментальные исследования» и инвестировать в будущее — более четко переписывать код, производить сложные расчеты.

Где-то здесь были переходы к более универсальным моделям и понятной структуре.

Здесь я допустил ошибку и начал перебором писать симуляцию на 60 тиков (ходов) вперед. Каждый ход есть 9 вариантов действий отряда.

Вариантов первого хода 9, второго 81 и т. д. Вы можете себе представить порядок 9^60 (и это только для одного отряда, а в идеале посчитать все ходы всех четырех)? Это очень много – оно не рассчитано в адекватные сроки.

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

Было потеряно всего несколько часов, но общая доработанная модель мира очень пригодилась позже.

Утро пятницы: код стал более организованным, некоторые функции больше не выглядят как мешок «если» и магических чисел.

//«Мне не нравится, что бот цепляется за край карты — там уклонение работает хуже и его там подстреливают — заставьте его попытаться захватить хотя бы четверть поля.

Как? Увеличьте агрессивность, если «За вами Москва».

Надо продолжать писать - раунд начинается ночью! Но 6 дней стока дают заметный эффект. Есть риск, что если сегодня будет тот же день, я перегорю.

Поэтому я беру выходной от ботинок.

Это было очень мудрое решение.

Конец первой части второго тура.

Мое место около 14. На правки 24 часа.

День отдыха дал о себе знать.

Это были почти 24 часа запойного программирования.

Пригодились мои «фундаментальные исследования» по геометрии пули, деталям прицеливания, разбросу и т.д. Моделирование многих аспектов было значительно улучшено за счет перехода к новой, более тщательной и быстрой модели мира.

До запуска осталось 4 часа.

Мозг уже на исходе.

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

О! Есть мины.

Я ими пока не пользуюсь, т. они продаются под 0%.

Это означает, что, возможно, вы сможете немного вложиться в них и получить заметный рост. Но есть проблема.

Мой процент побед составляет около 90%.

Стартовая стратегия работает по принципу: бежать и «держаться» рядом с противником.

Из-за особенностей карт долго держать дистанцию не получается, а когда вы приближаетесь, то уже не важно, насколько точно вы целитесь и как уворачиваетесь.

И мой условный шанс на победу по стратегии, сокращающей дистанцию, составляет около 80%.

Выглядит хорошо, но это меньше, чем мой текущий процент побед. Существует довольно много простых стратегий.

По правилам игры трюк с подкладкой мины под ноги и взрывом вместе с противником выгоден с точки зрения очков.

Кажется, это самый простой и надежный способ защиты от любителей сблизиться.

Пару строчек, пару если, мол, если случайно все совпало и есть мины, и противник уже рядом, а союзника рядом нет, то нахрена ты взрываешься, не искушай судьбу .

Программисту, конечно, это было немного скучнее и ему не терпелось реализовать хитрое чередование союзников для перезарядки оружия.

Общие улучшения пошли на пользу.

Примерно 12-е место во втором туре.

Мины.

пару раз помогли, пару раз из-за неточности условий было наоборот, но в целом скорее положительный баланс.

Встреча с богиней.

Конец второго раунда.

Правила меняются — карты теперь сложные и нужно писать путеводитель, но я понятия не имею, как решаются такие проблемы.

Кроме того, я писал на Python и последние несколько дней буквально загонял решение в рамки времени.

Найти путь — сильная сложность, но пределы те же.

Толстовку уже достану, а как дальше вставать непонятно.

Уже можно забивать и отдыхать.

Что мне помогает в мотивации, так это уже достигнутое высокое место в туре, обсуждения в соревновательном чате о CProfile и Cython (снижение сложности), а также несколько друзей, которые свято верят, что я просто очень умный и могу взять приз (немного повышение мотивации, немного повышение субъективного мастерства).

Подготовка к финалу и финалу.

Я уже дошел до финала, поэтому мне нужно его выиграть.

Первые задачи также ясны.

Находим путь и оптимизируем код, иначе в итоге делать нечего - юниты не найдут оружие или стратегия не уложится в лимит времени.

Несколько слов о поиске пути.

С самого первого дня в чате было много обсуждений по поводу поиска пути, ругались страшными (для меня на тот момент) словами «дейкстра» и «астар».

У меня сложилось впечатление, что это что-то очень сложное и нужно сделать заранее, до последней недели.

Еще мой программист пару раз кричал, что раз это сложная задача, для которой вообще непонятно, что делать, то надо браться за нее пораньше.

Менеджер неизменно отвечал: «Мы пока отложим это в сторону.

Забудь о ней пока.

Я контролирую процесс».

Потому что субъективно это была задача сложнее навыка и вызывала беспокойство.

Кроме того, было бы сложно получить явный результат, т.к.

игр на сложных картах не было.

Итак, я 12-й в турнирной таблице.

Большинство игроков топового диапазона без проблем справляются с этой задачей.

Вряд ли она радикально сложнее всего, что я уже решил, и сравнение с другими сильно повысило субъективную оценку моих навыков и снизило сложность.

задачи.

Она как раз оказалась в секторе потока.

И тогда я начал искать способ.

Оказалось, что задача на самом деле гораздо проще, чем я думал.

2 часа — погуглите и разберитесь в основных алгоритмах.

А остальная часть дня посвящена разработке и реализации поиска пути для вашей стратегии.

И еще 1,5 дня - написать навигатор, который сможет без ошибок вести лодку по этому маршруту.

Забавно, что мне помогло знакомство с навигаторами на смартфонах — часто бывает, что точка полученных GPS-координат находится в одном месте, а стрелка «вашего положения» в другом.

Вот и мой навигатор при сходе с маршрута вел себя так же.

Если отклонение небольшое и незапланированное, то на пару мгновений будем считать, что это «ошибка позиционирования» и на самом деле подразделение следует по маршруту.

В конце концов, мой довольно простой поиск пути сработал отлично.

А профилирование заставило меня долго ругаться.

Просто в процессе рефакторинга я почти всё переписал под предложенные организаторами типы данных, взятые из базовой модели.

ООП, единообразие, наше всё.

Я получил огромный прирост производительности, переписав все координаты заново в примитивный кортеж.

По крайней мере, готов к финалу.

Что дальше? Теперь в песочнице бои проходят по правилам как раундов, так и финала.

Т.

к.

нас интересует только финал, то остальные игры мы сознательно игнорируем как не показательные.

Также мы больше не смотрим на рейтинг в песочнице, чтобы не делать универсального бота.

Проще написать решение только для финала, чем универсальное.

На финальных картах стало больше аптечек и мин, и это играет роль: во-первых, мои бракованные мины стали приносить немного больше пользы, а во-вторых, в районе моего рейтинга появилось много людей, которые выиграли за счет стратегии «бежать к сопернику и взрываться вместе с ним».

В целом эта грамотно реализованная стратегия вылилась примерно в 15-20 в общем зачете.

Я нашел только один хороший вариант борьбы с ними: если они придут беги, взорвись первым.

А если не прибежали, то стреляй, потому что.

У меня лучше реализована стрельба и уклонение.

Потратив пару часов на анализ, пришлось повысить приоритет действий, чтобы собрать минимум.

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

Если вы не можете взорвать мины сейчас, то вы беззащитны перед близким противником.

Это обеспечивало достаточную защиту и я с радостью почти забыл о минах, оставив сам детонацию кривой проверкой после всех тщательно просчитанных действий: «а не было бы нам выгодно сейчас взорватьсяЭ» Почему я не реализовал стратегию «подбежать к противнику и взорвать его»? Я ошибся в прогнозировании действий других топов.

Из-за простоты моего теста я думал, что вся она или лучшая застрянет как маст-хэв и мины станут практически непригодным для использования оружием.

Все юниты просто будут держаться подальше друг от друга и вне досягаемости мин, потому что.

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

Как оказалось, я ошибся и мины показали себя очень хорошо.

Но не стоит приближаться к моим подразделениям – их это нервирует. За 10 минут до начала финала всё уже отправлено.

Формально саморедактирование запрещено, чтобы не усугублять ситуацию.

И тут я вижу, что в одном месте какой-то момент как будто не учтен.

Сейчас улучшу! - Но.

у нас не будет времени проверить! - Да, это просто! Я меняюсь.

Я отправляю это.

Код принят. И тут я снова смотрю на код. Я допустил ошибку, и эти правки сломали проверку мин и иногда боты просто так взрывались :) Гонг - старт финала, новые стратегии не принимаются 12 часов.

Я, конечно, сразу поправил и отправил обратно, но всю первую часть финала меня трясло от периодического самоубийства моих ботов.

Ну, по крайней мере, не часто.

В итоге мои боты заняли четвертое место не потому, что у них что-то очень хорошо реализовано, а из-за хорошего баланса навыков.

У них была средняя стрельба, хорошее уклонение, средние мины, хороший поиск пути и средняя командная работа.

Среди участников ниже в рейтинге кто-то лучше стрелял, кто-то уворачивался.

У чистых минеров были потрясающие мины, но плохая стрельба и уклонение.

Забавная вещь о работе с мотивацией.

Перед вторым раундом я значительно улучшил алгоритм стрельбы.

С учетом вероятности попадания, изменения разброса, лучшей точки противника усложнить уклонение.

И так далее.

Все это звучит очень хорошо.

Тесты показали не прирост, а скорее небольшое снижение процента попаданий.

Программист отказался принять эти результаты тестов — проверил еще пару раз — должно быть гораздо лучше.

Менеджер, оценив запас прочности стратегии и время на поиск проблемы, записывает в блокнот: ок, ок, оставим.

Тесты из 5-10 прогонов при текущем рандоме действительно не показательны.

Финал приближается.

М : Слушай, я помню были спорные испытания новой системы прицеливания.

Попробуем проверить на более простом.

п : Давайте.

Тестирую - лучше с простым.

Оба : Ну и черт его, выключи.

Потому что время прошло и оно уже не так ценно.

Теперь его гордость находит выход.

Общий:

  • Для реализации сложных и длительных дел нужно иметь запас времени и мотивацию, чтобы не сдаваться.

    Если его нет, то лучше сначала сделать простые, чтобы накопить резервы.

    Даже если вам придется что-то переписать позже.

  • Очевидно, что работать в потоке эффективнее, но надо не забывать отдыхать.

  • Отбирая те задания, где можно получить максимальную выгоду за затраченное время.

  • Стремится решить данную проблему достаточно, а не абстрактно-идеально.

    Проблема та же - время.

  • Гибкость.

    Готовность измениться и принять мир таким, какой он есть, а не таким, каким вы хотите его видеть.

    Мое приоритетное оружие менялось 6 раз, в зависимости от текущего уровня стратегии противника и силы моей стратегии.

    Если вы долго отрицаете реальность и воете от ее несправедливости, то у вас может не быть времени адаптироваться, как это случилось со многими с фугасами.

  • Человек думает, компьютер работает. В любом случае, я пока не могу заставить компьютер думать лучше меня, но работает он гораздо лучше.

    Часто час анализа заменяет 12 часов программирования — можно упростить задачу или не решать ее вообще.

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

    Несмотря на то, что ссылки на алгоритмы и т.п.

    особо не помогли.



Благодарности

  • Mail.ru Group за интересный чемпионат в этом формате.

  • Александр Н за волшебную фразу «стандартный для Python cProfile, кстати, не самый удобный», упоминание Cython и моральную поддержку способности Python достичь вершины вопреки убеждению основной части сообщества, что у Python нет шансов .

  • Сообществу за теплую атмосферу дружеского соревнования в чате.

  • Всем участникам за интересные задания.

  • Друзья, которые поверили в меня и поддержали.

  • Лама, за видео.

Это началось сейчас Теги: #искусственный интеллект #спортивное программирование #russian ai cup #raic
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.