Русский
Русский
English
Статистика
Реклама

Вшэ

Навыки персонажа VS Навыки игрока

17.08.2020 18:04:48 | Автор: admin

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


Так что нет ничего удивительного, что такую популярность получил жанр РПГ там человек может отыграть почти любые социальные роли, которые во многом недоступны ему в обычной жизни. Игровые механики сейчас применяются во многих сферах жизни от обучения и тренингов до психотерапии, от социальных сетей до маркетинговых активностей торговых сетей. Даже у нас в учебном центре Слёрм в некоторых интенсивах применяются там, где это полезно для обучения и закрепления материала игровые и соревновательные инструменты. Например, как мы это сделали на Слёрм SRE в феврале этого года.


Да и поиграть в свободное от работы время мы тоже иногда любим.


В данной статье наши друзья из Высшей школы бизнес-информатики НИУ ВШЭ, а именно выпускница образовательной программы Менеджмент игровых проектов Юлия Черненко, рассмотрела подходы к системе навыков в играх. Юлия сейчас работает над перспективной отечественной РПГ игрой Pathfinder: Wrath of the Righteous в компании Owlcat Games.



Разнообразие игровых жанров, различия в игровых подходах


Перед тем как мы окунемся с головой в РПГ игры, предлагаю рассмотреть иные жанры.


Шахматы, Mortal Kombat, Civilization, Alias во всех этих играх исход битвы, сражения или поединка определяют навыки игрока. Насколько хорошо игрок может оценить поведение противника и просчитать его ходы в шахматах. Скорость реакции, мышечная память и знакомство с мув-сетом персонажей в Mortal Kombat. Знание особенностей юнитов и строений, возможностей противника, стратегическое мышление в Civilization. Умение нестандартно и доходчиво объяснять, общая эрудированность в Alias.


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


Однако данный подход характерен не для всех игр.


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



На свет появляется игра Boot Hill, одна из первых РПГ игр. В ней игроки отыгрывают ковбоев с потасовками, дуэлями и, конечно же, карточными играми, в которые игроки играют по-настоящему обычными картами. В Boot Hill есть список NPC, которые позволяют разнообразить геймплей и оживить игру. Этих NPC отыгрывает чаще всего кто-то из игроков, кто не заинтересован в том или ином исходе ситуации. Среди этих NPC есть персонаж Gambler (Картёжник), у него есть особенность возможность мухлевать.


Но как реализовать механику мухлежа? Дать Gambler этот навык, а игроку возможность заметить обман. Данная механика позволяет игрокам отыграть ситуацию, которую, возможно, они не смогли бы отыграть, используя собственные навыки игры в карты. Gambler меняет правила.


While most characters need no special rules, the gambler needs some special attention. They have a special ability that other characters don't have, the ability to manipulate cards (cheat). To determine this ability, roll percentile dice until a score of 50 or less is rolled. This is his ability to avoid being caught cheating. When normally playing cards, a real deck may be used, but if a gambler is involved, use percentile dice. High roll wins, with a gambler gaining a +15 on his die rolls. If a gambler wins three times in a row, his opponents check to see if they can catch him cheating by rolling percentile dice. Any score equal to or less than the gambler's cheat ability score indicates that the gambler has been caught. What the opponents do then is up to them!


Взглянем кратко на всем известную систему, которая пережила достаточно много изменений D&D. В первых редакция D&D не было единых правил для разрешения ситуаций/сценариев, для которых правила не прописаны, чаще всего решение отдавалось на суд гейм-мастера. Хотя часть игроков такой подход устраивал, другая часть терялась и хотела получить правила, по которым можно решить любую ситуацию. В 1976 году в журнале, посвященном настольным играм, вышла статья How to Use Non-Prime-Requisite Character Attributes за авторством Wesley D. Ives. В ней он предлагал решение, которое можно увидеть ниже. Решение, хоть и не самое элегантное, если не дало старт, то точно ускорило поиск решения данной задачи.


  • Roll d100, add the ability score, and then use this result to determine which die to roll in step 2. On a result of 1-20 roll a d4; on 21-40 roll d6; on 41-60 roll d8; 61-80: d10; 81-100: d12. To cope with results higher than 100, create a house rule for this house rule.
  • Roll the die determined in step 1 and multiply the number by the attribute. This result becomes the chance of success.
  • Roll a d100. If the result is less than or equal to the probability from step 2, you succeed!

В 1978 году в книге Advanced Dungeons & Dragons Players Handbook Гэри Гайгэкс придумал чек навыка для спела Dig (Копать). Знакомые с системой D&D заметят, что в данном решении проверка успешна, если значение ниже, чем dexterity (ловкость), в то время как в других проверках необходимо, чтобы итоговое значение было выше, чем некое число, обозначающее сложность.


Any creature at the edge (1) of such a pit uses its dexterity score as a saving throw to avoid falling into the hole, with a score equal to or less than the dexterity meaning that a fall was avoided.

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


Если подытожить этот небольшой экскурс в историю навыков персонажа, их функция и эффект:


  • Создают правила для решения нестандартных ситуаций;
  • Упрощают игру;
  • Снижают свободу и креативность.

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


Скиллы персонажа играют большую роль


В качестве примера можно привести Neverwinter Nights, SW:KOTOR, Pathfinder: Kingmaker и многие другие игры в этом жанре.


Диалоги в таких играх могут иметь достаточно большое значение, чтобы дать возможность игрокам отыграть персонажа с большой харизмой. Есть навык Убеждения, который может принимать разные формы в зависимости от системы. Это не единственная причина. Необходимо не только дать игроку возможность отыграть харизматичного и убедительного персонажа, но и дифференцировать его от нехаризматичного и неубедительного персонажа. В таком ключе не подходит простое добавление строк диалога про убеждение, необходимо внутри игры проверить, какой персонаж их произносит, чтобы определить их эффективность.


Плюсы такой системы:


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

Минусы системы:


  • Упускаем группу механик (например, загадки, тесты, проверки на внимательность или память) по вовлечению игрока в игру. Это не обязательно плохо, но это необходимо учитывать;
  • Потенциальная непоследовательность. В случае, если нарративно или геймплейно необходимо добавить задачу, которую может решить только игрок, но не персонаж, можно натолкнуться на непонимание со стороны игрока. Особенно, если это единоразовый опыт в контексте всей игры;
  • В моменты раздражения игроки будут сетовать, почему этого не может сделать персонаж. Игрок, отыгрывающий следопыта с прокаченным навыком внимательности, не может найти рычаг.

Скиллы персонажа играют маленькую роль


Не во всех играх имеет смысл добавлять навыки персонажа или назначать им большой функционал. Так в серии игр Mass Effect (1,2,3) мини-игры, связанные с Bypassing и Hacking, претерпели несколько изменений.


Так, в первой игре для того, чтобы воспользоваться возможностью Bypassing, необходимо иметь в команде персонажа с прокаченным до достаточного уровня навыками Decryption и/или Electronics. Во второй игре серии создатели отказались от такой привязки к навыкам, теперь Шепард может взломать любой замок, если это может сделать сам игрок. В третьей части игры создатели совсем отказались от данной мини-игры.


Плюсы:


  • Можно добавлять механики, которые тестируют навыки игрока. Это позволяет разнообразить геймплей, сделать акцент на прокачке и улучшении навыков игроков;
  • Мини-игры. Часть вещей можно превратить в мини-игры;
  • Ответственность за решения на игроке, а не на кубике. Уменьшается часть, отведенная рандому.

Минусы:


  • Потенциальная усталость игрока. Игрока может утомить постоянная проверка навыков, особенно, если это не является основным геймплеем;
  • Мини-игры. Не все игроки любят мини-игры.

Скиллы персонажа упрощают игру Игроку


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


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


Плюсы:


  • Возможность разнообразить прокачку навыки в данной системе;
  • Интеграция двух систем;
  • Можно сделать мини-игры.

Минусы:


  • От обеих систем.

Общие рекомендации и выводы


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


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


  • Какую роль навыки играют в вашей игре?
  • Сколько других механик есть в игре? Чем больше механик, тем больше требуется от игрока и от вас. Каждая механика требует большого количества человеко-часов от всех отделов разработки;
  • Как много информации необходимо знать игроку?
  • Будут ли у вас проверки/ситуации, которые игрок не сможет решить без дополнительных механик? Может дешевле добавить скиллы?
  • Если добавлять проверки навыка персонажа как часто и в каких случаях вы сможете их использовать?
  • Можно ли использовать значения навыков персонажа для облегчения проверок навыков игрока?

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


P.S. А у нас в Слёрм 19 августа начнётся трёхдневный интенсив DevOps Tools&Cheats мы изучим и разберём инструменты DevOps, при помощи которых простой администратор или разработчик может изменить к лучшему свою работу и процессы в компании. А затем по философии DevOps мы проведем круглый стол, где каждый сможет высказаться и послушать про боли и успехи опытных коллег.

Подробнее..

MLHCI что исследуют на стыке машинного обучения и человеко-компьютерного взаимодействия

03.07.2020 16:05:03 | Автор: admin
Многие убеждены, что область Human Computer Interaction (HCI или человеко-компьютерное взаимодействие) сводится только к проектированию сайтов или приложений, а основная задача специалиста удовлетворить пользователей, увеличивая на несколько пикселей кнопку лайка. В посте мы хотим показать, что это совсем не так, и рассказать, что происходит в HCI на стыке с исследованиями машинного обучения и искусственного интеллекта. Возможно, это позволит читателям посмотреть на эту область с новой для себя стороны.

Для обзора мы взяли труды конференции CHI: Conference on Human Factors in Computing Systems за 10 лет, и с помощью NLP и анализа сетей социтирования посмотрели на темы и области на пересечении дисциплин.




В России особенно силен фокус на прикладных задачах проектирования UX. Многие события, которые помогали росту HCI за рубежом, у нас не произошли: не появилось iSchools, ушли из науки многие специалисты, занимавшиеся близкими аспектами инженерной психологии, и т. д. В результате профессия возникала заново, отталкиваясь от прикладных задач и исследований. Один из результатов этого виден даже сейчас это крайне низкая представленность российских работ по HCI на ключевых конференциях.

Но и за пределами России HCI развивался очень по-разному, фокусируясь на множестве тем и направлений. На магистерской программе Информационные системы и взаимодействие человек-компьютер в Питерской Вышке мы, в том числе, обсуждаем со студентами, коллегами, выпускниками схожих специальностей европейских университетов, партнерами, которые помогают развивать программу, что же относится к области человеко-компьютерного взаимодействия. И эти обсуждения показывают разнородность направления, в котором у каждого специалиста своя, неполная, картина области.

Время от времени мы слышим вопросы, как это направление связано (и связано ли вообще) с машинным обучением и анализом данных. Чтобы ответить на них, мы обратились к исследованиям последних лет, представленным на конференции CHI.

В первую очередь мы расскажем, что происходит в таких областях, как xAI и iML (eXplainable Artificial Intelligence и Interpretable Machine Learning) со стороны интерфейсов и пользователей, а также как в HCI изучают когнитивные аспекты работы специалистов data science, и приведем примеры интересных работ последних лет в каждой области.

xAI и iML


Методы машинного обучения интенсивно развиваются и что важнее с точки зрения обсуждаемой области активно внедряются в автоматизированное принятие решений. Поэтому исследователи все чаще обсуждают вопросы: как пользователи, не являющиеся специалистами в машинном обучении, взаимодействуют с системами, где подобные алгоритмы применяются? Один из важных вопросов такого взаимодействия: как сделать, чтобы пользователи доверяли решениям, принятым на основе моделей? Поэтому с каждым годом все более горячей становится тематика интерпретируемого машинного обучения (Interpretable Machine Learning iML) и объяснимого искусственного интеллекта (eXplainable Artificial Intelligence XAI).

При этом, если на таких конференциях, как NeurIPS, ICML, IJCAI, KDD, обсуждают сами алгоритмы и средства iML и XAI, на CHI в фокусе оказываются несколько тем, связанных с особенностями дизайна и опытом использования этих систем. Например, на CHI-2020 этой тематике были посвящены сразу несколько секций, включая AI/ML & seeing through the black box и Coping with AI: not agAIn!. Но и до появления отдельных секций таких работ было достаточно много. Мы выделили в них четыре направления.

Дизайн интерпретирующих систем для решения прикладных задач


Первое направление это дизайн систем на основе алгоритмов интерпретируемости в различных прикладных задачах: медицинских, социальных и т. д. Такие работы возникают в очень разных сферах. Например, работа на CHI-2020 CheXplain: Enabling Physicians to Explore and Understand Data-Driven, AI-Enabled Medical Imaging Analysis описывает систему, которая помогает врачам исследовать и объяснять результаты рентгенографии органов грудной клетки. Она предлагает дополнительные текстовые и визуальные пояснения, а также снимки с таким же и противоположным результатом (поддерживающие и противоречащие примеры). Если система предсказывает, что на рентгенографии видно заболевание, то покажет два примера. Первый, поддерживающий, пример это снимок легких другого пациента, у которого подтверждено это же заболевание. Второй, противоречащий, пример это снимок, на котором заболевания нет, то есть снимок легких здорового человека. Основная идея сократить очевидные ошибки и уменьшить число обращений к сторонним специалистам в простых случаях, чтобы ставить диагноз быстрее.


CheXpert: автоматизированное выделение областей + примеры (unlikely vs definitely)



Разработка систем для исследования моделей машинного обучения


Второе направление разработка систем, которые помогают интерактивно сравнивать или объединять несколько методов и алгоритмов. Например, в работе Silva: Interactively Assessing Machine Learning Fairness Using Causality на CHI-2020 была представлена система, которая строит на данных пользователя несколько моделей машинного обучения и предоставляет возможность их последующего анализа. Анализ включает построение причинно-следственного графа между переменными и вычисление ряда метрик, оценивающих не только точность, но и честность (fairness) модели (Statistical Parity Difference, Equal Opportunity Difference, Average Odds Difference, Disparate Impact, Theil Index), что помогает находить перекосы в предсказаниях.


Silva: граф связей между переменными + графики для сравнения метрик честности + цветовое выделение влиятельных переменных в каждой группе

Общие вопросы интерпретируемости моделей


Третье направление обсуждение подходов к задаче интерпретируемости моделей в целом. Чаще всего это обзоры, критика подходов и открытые вопросы: например, что понимать под интерпретируемостью. Здесь хотелось бы отметить обзор на CHI-2018 Trends and Trajectories for Explainable, Accountable and Intelligible Systems: An HCI Research Agenda, в котором авторы рассмотрели 289 основных работ, посвященных объяснениям в искусственном интеллекте, и 12 412 публикаций, цитирующих их. С помощью сетевого анализа и тематического моделирования они выделили четыре ключевых направления исследований 1) Intelligent and Ambient (I&A) Systems, 2) Explainable AI: Fair, Accountable, and Transparent (FAT) algorithms and Interpretable Machine Learning (iML), 3) Theories of Explanations: Causality & Cognitive Psychology, 4) Interactivity and Learnability. Кроме того, авторы описали основные тренды исследований: интерактивное обучение и взаимодействие с системой.

Пользовательские исследования


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

Инструментов и алгоритмов интерпретации появилось очень много, поэтому возникает вопрос: как понять, какой же алгоритм выбрать? В работе Questioning the AI: Informing Design Practices for Explainable AI User Experiences как раз обсуждаются вопросы мотивации использования объясняющих алгоритмов и выделяются проблемы, которые при всем многообразии методов еще не решены в достаточной степени. Авторы приходят к неожиданному выводу: большинство существующих методов построены так, что отвечают на вопрос почему (почему у меня такой результат), в то время как пользователям для принятия решений нужен еще и ответ на вопрос почему нет (почему не другой), а иногда что сделать, чтобы результат изменился.

В работе говорится также о том, что пользователям нужно понимать, каковы границы применимости методов, какие у них есть ограничения и это нужно явно внедрять в предлагаемые инструменты. Более ярко эта проблема показана в статье Interpreting Interpretability: Understanding Data Scientists' Use of Interpretability Tools for Machine Learning. Авторы провели небольшой эксперимент со специалистами в области машинного обучения: показали им результаты работы нескольких популярных инструментов для интерпретации моделей машинного обучения и предложили ответить на вопросы, связанные с принятием решения на основе этих результатов. Оказалось, что даже специалисты слишком доверяют подобным моделям и не относятся к результатам критически. Как любой инструмент, объясняющие модели можно использовать неправильно. При разработке инструментария важно учитывать это, привлекая накопленные знания (или специалистов) в области человеко-компьютерного взаимодействия, чтобы учитывать особенности и потребности потенциальных пользователей.

Data Science, Notebooks, Visualization


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

Поэтому предметом этой области HCI становится разработка новых способов визуализации неопределенности в предсказаниях моделей, создание систем для сравнения анализа, проведенного разными способами, а также анализ работы аналитиков с инструментами, например с Jupyter notebooks.

Визуализация неопределенности


Визуализация неопределенности одна из особенностей, которые отличают научную графику от презентационной и бизнес-визуализации. Довольно долго ключевым в последних считался принцип минималистичности и фокуса на основных трендах. Однако это приводит к чрезмерной уверенности пользователей в точечной оценке величины или прогноза, что может быть критичным, особенно, если мы должны сравнивать прогнозы с разной степенью неопределенности. Работа Uncertainty Displays Using Quantile Dotplots or CDFs Improve Transit Decision-Making анализирует, насколько способы визуализации неопределенности в предсказании для точечных графиков и кумулятивных функций распределения помогают пользователям принимать более рациональные решения на примере задачи оценки времени прибытия автобуса по данным мобильного приложения. Что особенно приятно, один из авторов поддерживает пакет ggdist для R с различными вариантами визуализации неопределенности.


Примеры визуализации неопределенности (https://mjskay.github.io/ggdist/)

Однако часто встречаются и задачи визуализации возможных альтернатив, например, для последовательностей действий пользователя в веб-аналитике или аналитике приложений. Работа Visualizing Uncertainty and Alternatives in Event Sequence Predictions анализирует, насколько графическое представление альтернатив на основе модели Time-Aware Recurrent Neural Network (TRNN) помогает экспертам принимать решения и доверять им.

Сравнение моделей


Не менее важный, чем визуализация неопределенности, аспект работы аналитиков сравнение того, как часто скрытый выбор исследователем разных подходов к моделированию на всех его этапах может вести к различным результатам анализа. В психологии и социальных науках набирает популярность предварительная регистрация дизайна исследования и четкое разделение эксплораторных и конфирматорных исследований. Однако в задачах, где исследование в большей степени основано на данных, альтернативой могут стать инструменты, позволяющие оценить скрытые риски анализа за счет сравнения моделей. Работа Increasing the Transparency of Research Papers with Explorable Multiverse Analyses предлагает использовать интерактивную визуализацию нескольких подходов к анализу в статьях. По сути, статья превращается в интерактивное приложение, где читатель может оценить, что изменится в результатах и выводах, если будет применен другой подход. Это кажется полезной идеей и для практической аналитики.

Работа с инструментами организации и анализа данных


Последний блок работ связан с исследованием того, как аналитики работают с системами, подобными Jupyter Notebooks, которые стали популярным инструментом организации анализа данных. Статья Exploration and Explanation in Computational Notebooks анализирует противоречия между исследовательскими и объясняющими целями, изучая найденные на Github интерактивные документы, а в Managing Messes in Computational Notebooks авторы анализируют, как эволюционируют заметки, части кода и визуализации в итеративном процессе работы аналитиков, и предлагают возможные дополнения в инструменты, чтобы поддерживать этот процесс. Наконец, уже на CHI 2020 основные проблемы аналитиков на всех этапах работы, от загрузки данных до передачи модели в продакшн, а также идеи по улучшению инструментов обобщены в статье Whats Wrong with Computational Notebooks? Pain Points, Needs, and Design Opportunities.


Преобразование структуры отчетов на основе логов выполнения (https://microsoft.github.io/gather/)

Подводя итог


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

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

Где учиться программированию в Петербурге программы при поддержке JetBrains

22.06.2020 16:10:43 | Автор: admin
Мы заинтересованы в том, чтобы повышать образовательный уровень в IT-сфере, и готовы строить высшее образование вместе с вузом.

В этом посте мы расскажем об образовательных проектах в Петербурге, которые поддерживает JetBrains: о бакалаврских и магистерских программах в НИУ ВШЭ, ИТМО, СПбГУ и о Computer Science Center.



Бакалаврские программы:
Прикладная математика и информатика в НИУ ВШЭ Санкт-Петербург
Современное программирование в СПбГУ

Магистратура:
Разработка программного обеспечения / Software Engineering на базе Университета ИТМО
Машинное обучение и анализ данных в НИУ ВШЭ Санкт-Петербург
Программирование и анализ данных в НИУ ВШЭ Санкт-Петербург

Дополнительное образование:
Computer Science Center

В чем особенность наших программ?


Участие IT-компаний в обучении


Учебные программы разрабатываются при участии IT-компаний, чтобы давать действительно полезные знания. Курсы читают действующие программисты и учёные. Наши преподаватели: Виталий Брагилевский, Дмитрий Ицыксон, Александр Куликов, Евгений Линский, Денис Москвин, Александр Храбров, Алексей Шпильман.

Индивидуальный подход


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

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

Обратная связь


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

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

Проектная деятельность


Студенты всех программ работают над семестровыми научно-исследовательскими проектами под руководством преподавателей или сотрудников компаний-партнёров. Так они получают опыт разработки в условиях, максимально приближенных к реальным. Задачи, которые они решают в рамках проектной работы, имеют научную или практическую ценность: например, магистранты Машинного обучения и анализа данных работали над плагином для улучшения поддержки естественного языка в IntelliJ IDEA. Смотрите примеры проектов студентов Computer Science Center или студентов Питерской Вышки: здесь, здесь и здесь.

Бакалавриат


Прикладная математика и информатика в НИУ ВШЭ Санкт-Петербург


Программа направлена на подготовку специалистов в области разработки программного обеспечения, языков программирования, анализа данных, машинного обучения. Программирования здесь очень много: за четыре курса студент пробует десяток-другой технологий и языков, проходит code review от опытных разработчиков (не всегда с первой попытки), работает над практическими или научно-исследовательскими задачами от компаний-партнеров, углубляется в какую-то тему и в итоге защищает диплом. А летом студенты могут постажироваться в российских офисах IT-компаний или съездить на стажировку в другую страну.

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


Подробнее
Программа состоит из двух больших частей. На первом и втором годах обучения студенты проходят общеобразовательные дисциплины. Сразу начинаются математика, курс алгоритмов и программирование (на первом курсе годовой курс С++, затем годовой курс Java, а также Unix, Python, функциональное программирование и Haskell, операционные системы и так далее). С третьего года обучения у каждого студента появляется индивидуальная образовательная программа. Можно выбирать спецкурсы из нескольких базовых треков: машинное обучение и анализ данных, software engineering, языки программирования, теоретическая информатика, биоинформатика, низкоуровневое программирование.

Проектная деятельность начинается уже на первом курсе (на Хабре можно почитать статью первокурсников об игровом движке, который они написали на С++, другие примеры проектов есть в нашем Instagram). С третьего курса студенты решают практические задачи от компаний JetBrains, Яндекс, Ростелеком и др. Мы рассказали о некоторых проектах в нашем блоге на Хабре: Как учиться с помощью машинного обучения у экспертов в Dota 2, Как я научила робота бегать по видео с YouTube, Mountain Car: решаем классическую задачу при помощи обучения с подкреплением

Стипендии. Все студенты, которые сдают экзамены без троек, получают спонсорскую стипендию от JetBrains. Она составляет 9-15 тыс. рублей в месяц и зависит от среднего балла. Отличники, а также победители и призеры Всероссийской олимпиады школьников могут претендовать на дополнительные стипендии, и в сумме получать 20-25 тыс рублей в месяц.

Место. Все занятия проходят в отдельном корпусе (отремонтирован в 2019 году) по адресу ул. Кантемировская, д.3А.

42 бюджетных места, 40 платных мест

Полезные ссылки:
Чат программы в Telegram
Блог Питерской Вышки на Хабре
Отзывы студентов

Бакалавриат Современное программирование на факультете математики и компьютерных наук СПбГУ


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

На первых курсах студенты изучают необходимые базовые предметы, а на третьем и четвертом составляют себе индивидуальную траекторию обучения, выбирая из ста с лишним математических спецкурсов. Курсы читают ученые из России и из-за рубежа и разработчики IT-компаний. Во время учебы можно посещать открытые научные семинары лаборатории имени П.Л. Чебышева под руководством С.К. Смирнова, лауреата премии Филдса.

Бакалавриат лидер по количеству призёров Всероссийской олимпиады школьников в 2015-2019 г. в России. Учиться сложно и интересно: рассказ студентки об обучении на первом курсе программы.

Подробнее
Что в программе. Алгебра, дискретная математика, математический анализ. Алгоритмы и структуры данных, C++, парадигмы и языки программирования, функциональное программирование, Java, принципы организации и архитектура компьютерных систем и другие курсы по математике и программированию. Смотрите подробный учебный план и список спецкурсов, доступных для выбора на третьем и четвертом годах обучения.

Помимо учёбы можно заниматься спортивным программированием под руководством тренера сборной СПбГУ.

Программа готовит IT-специалистов: бэкенд- и веб-разработчиков, аналитиков и не только.

Преподаватели: Александр Куликов, Виталий Брагилевский, Денис Москвин, Фёдор Бахарев, Дмитрий Ицыксон, Евгений Линский и другие.

Практические проекты. С первого курса ребята работают над проектами под руководством специалистов IT-компаний. Например, в этом году они сделали веб-приложение Big sister, которое отслеживает активность студентов в течение семестра. Другие проекты: ассистент поэта сервис генерации стихотворений на русском языке; игра в жанре 2D-платформер; тренажёр для публичных выступлений; графическая программа под Android.

Стипендии. Студенты, поступившие без вступительных испытаний, получают спонсорские стипендии JetBrains от 10 до 15 тысяч рублей. В дальнейшем спонсорская стипендия платится по результатам успеваемости. Студенты также получают дополнительные стипендии от государства (например, стипендию КНВШ).

Место. Лекции проходят в историческом центре Петербурга на Васильевском острове.

30 бюджетных мест, 8 платных мест

Полезные ссылки:
Статья о программе на РБК
Блог первокурсника СП
Чат с руководителями программы для поступающих в 2020 году

Магистратура


На Разработку программного обеспечения в ИТМО и на Машинное обучение и анализ данных в Питерскую Вышку могут попасть студенты с базовыми знаниями математики и программирования. При этом первая магистратура специализируется на разработке программного обеспечения и смежных областях, в том числе на теории языков программирования, а вторая на машинном обучении и анализе данных. Подробнее о сходствах и различиях между программами.

На Программировании и анализе данных в Питерской Вышке ждут выпускников бакалаврских программ с углубленным изучением программирования и математики. Здесь учится большинство выпускников Прикладной математики и информатики НИУ ВШЭ Санкт-Петербург.

Разработка программного обеспечения / Software Engineering на базе Университета ИТМО



В магистерской программе Разработка программного обеспечения / Software Engineering много очных занятий и самостоятельной работы над практическими задачами и проектами.

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

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

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

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

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

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

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

Место. Почти все занятия проходят в офисе JetBrains у Кантемировского моста (Кантемировская ул., д. 2). В распоряжении студентов есть кухня, где можно отдохнуть между занятиями, выпить чай или кофе и разогреть еду, а также студенческие комнаты для работы над домашними заданиями и проектами.

Стипендии. Студентам магистратуры в зависимости от успехов в учёбе выплачивается дополнительная спонсорская стипендия от 10 000 до 15 000 рублей. Организаторы помогают с поездками на соревнования, конференции и другие образовательные мероприятия.

30 бюджетных мест, 5 платных мест

Полезные ссылки:
Чат программы в Telegram
Интервью со студентами

Машинное обучение и анализ данных в НИУ ВШЭ Санкт-Петербург


Программа для выпускников бакалавриата, обучавшихся как по профильным (программирование, физмат), так и по непрофильным (экономика, социология и др.) специальностям, и желающих освоить с нуля или углубить знания в области машинного обучения и анализа данных. Упор сделан на индивидуальную практическую работу и участие в промышленных и научно-исследовательских проектах. Результаты этой работы студенты представляют на специальных семинарах, в которых принимают участие представители IT-компаний и сотрудники научно-исследовательских лабораторий НИУ ВШЭ.

Подробнее
Программа. На первом году обучения во время осеннего модуля магистранты проходят базовые курсы по алгебре, теории вероятности и математической статистике. Затем базовые курсы по машинному обучению: Основы алгоритмов, Методы оптимизации и др. На втором году начинаются спецкурсы, и каждый студент выбирает те дисциплины, которые ему интересны. Например, магистранты учатся работать с алгоритмами и программным обеспечением для обучения беспилотных автомобилей, изучают Анализ данных на Python в примерах и задачах, проходят курс по нейробайесовским методам, чтобы создавать генеративные модели. В результате за 2 года магистранты постепенно осваивают область машинного обучения и анализа данных от азов до последних достижений науки.

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

Проекты. JetBrains тесно сотрудничает с программой Машинное обучение и анализ данных. Компания предлагает научно-исследовательские проекты для студентов, приглашает на стажировки, а часть ее сотрудников преподаёт дисциплины магистратуры. Ещё работать над проектами можно в Центре анализа данных и машинного обучения НИУ ВШЭ Санкт-Петербург. Им заведует Алексей Александрович Шпильман преподаватель Питерской Вышки и руководитель лабораторий Прикладное машинное обучение и глубинное обучение и Агентные системы и обучение с подкреплением в JetBrains Research. Студенты проходят летние стажировки и выполняют проекты в этих лабораториях или в других партнёрских компаниях программы.

Стипендии. Спонсорскую стипендию JetBrains от 10 000 до 15 000 рублей в месяц получают те, кто учится без троек. Размер стипендии зависит от успеваемости.

Место. Занятия проходят в отдельном корпусе (отремонтирован в 2019 году) по адресу ул. Кантемировская, д.3А

10 бюджетных мест, 10 мест за счет средств НИУ ВШЭ, 5 платных мест

Полезные ссылки:
Чат в Telegram
Статья о программе
Запись вебинара о программе

Программирование и анализ данных


На этой программе ждут выпускников бакалавриата с углублённым изучением программирования и математики. Это научная магистратура, куда приходят люди с серьёзной подготовкой в области программирования, а также в области машинного обучения и анализа данных. Упор сделан на продвинутые спецкурсы (их не так много: 5-6 занятий в неделю) и научно-исследовательскую работу, которая начинается с первого семестра.

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


Подробнее
Программа. Магистранты изучают фундаментальные аспекты разработки программного обеспечения, базовые и продвинутые модели машинного обучения и анализа данных, а также математические основы, методологии, методы и алгоритмы создания языков программирования. С осеннего семестра первого курса каждый студент работает над проектом. Как правило, это исследовательский проект в области машинного обучения и анализа данных, языков программирования, software engineering, теоретической информатики, биоинформатики или низкоуровневого программирования.

Учёбу в этой магистратуре можно совмещать с работой при условии, что задачи, которые студент решает на работе, имеют научную или практическую ценность. Партнёры программы компании JetBrains, Яндекс, Ростелеком, Газпромнефть и другие предлагают такие проекты.

Стипендии. Именные стипендии размером до 15 000 рублей выплачивают компании-партнёры.

Место. Занятия проходят в отдельном корпусе (отремонтирован в 2019 году) по адресу ул. Кантемировская, д.3А

15 бюджетных мест, 5 мест за счет средств НИУ ВШЭ, 5 платных мест

Полезные ссылки:
Чат в Telegram
Рассказ студентки о программе
Запись вебинара о программе

Дополнительное образование в CS центре


Computer Science Center это совместная инициатива Computer Science клуба, компании JetBrains и Школы анализа данных Яндекса.

Программа. Центр предлагает двух- или трёхлетние очные вечерние курсы в Санкт-Петербурге и Новосибирске, чтобы талантливые студенты и выпускники вузов развивались в направлениях Computer Science, Data Science или Software Engineering. Программа состоит из базовых курсов по каждому направлению, курсов по выбору и практики или научно-исследовательской работы. Примеры практических проектов наших студентов.

Преподаватели. Учёные, сотрудники JetBrains, Яндекса, выпускники центра. Чтобы познакомиться с программой и преподавателями, смотрите курсы, опубликованные на YouTube.

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

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

Полезные ссылки:
Видео об атмосфере в CS центре
Онлайн-курсы центра на Stepik
Записи открытых лекций центра
Канал для поступающих в 2020 году: там много ответов на вопросы

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

НИУ ВШЭ Петербург и JetBrains проведут школу по практическому программированию для старшеклассников

11.03.2021 14:15:49 | Автор: admin

Питерская Вышка и компания JetBrains приглашают учащихся 10 и 11 классов на школу по практическому программированию и анализу данных. Среди лекторов ведущие преподаватели Петербурга и специалисты IT-компаний: Сергей Копелиович, Егор Суворов, Иван Ямщиков, Михаил Дворкин, Алексей Шпильман и другие.

Школа пройдет в два этапа: первый этап состоится с 22 по 28 марта в онлайн-формате. Второй этап будет очным, участники встретятся в Санкт-Петербурге с 5 по 10 мая. Участие в школе бесплатное.

Александр Омельченко, декан факультета Санкт-Петербургская школа физико-математических и компьютерных наук:

Наша школа это первый шаг на пути к самостоятельной работе в IT-компании. Мы не будем заниматься решением олимпиадных задач или подготовкой к ЕГЭ. Наша цель показать, как работать в команде, попробовать свои силы в исследовательском проекте в области машинного обучения, языков программирования, в реальной промышленной разработке. Участники смогут реализовать свой первый проект и понять, готовы ли они заниматься machine learning или software engineering.

Первый этап: с 22 по 28 марта, дистанционно

На этом этапе участников ждет продвинутый курс по алгоритмам от Сергея Копелиовича. Сергей окончил МатМех СПбГУ и учился в Академическом университете. Со школьных лет занимался олимпиадным программированием и математикой. Золотой медалист IOI 2005, 2006 и ACM ICPC 2009. Работал программистом в Яндексе, Вконтакте и ЦРТ. С 2009 года преподает алгоритмы в университетах и образовательных центрах (СПбГУ, СПбАУ, НИУ ВШЭ Петербург, Computer Science Center).Также участникам прочитают обзорные лекции по C++, Python, применению машинного обучения и облачным технологиям. Подробная программа доступна по ссылке.

Второй этап: с 5 по 10 мая, Санкт-Петербург

На втором этапе участники применят полученные знания при разработке собственного проекта. С этим им помогут специалисты из IT-отрасли и студенты бакалаврской программы Прикладная математика и информатика Питерской Вышки. Проекты будут групповыми, по одной из следующих тематик: мобильная разработка, разработка веб-сервисов, машинное обучение, анализ данных, биоинформатика.

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

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

Подробности по ссылке. Регистрация завершится 20-го марта.

Подробнее..

Новости стартапов и венчура за неделю 02-08.11.2020

10.11.2020 18:17:06 | Автор: admin

Привет Хабр! Раз в неделю я рассказываю о крупнейших событиях в отрасли в России и мире.Оригинальный роликна YouTube, ниже расшифровка.

IPO Озон

Главное что случилось в России Озон подал заявку на IPO. Подробно разбирал числа в блоге. Самое главное классическое IPO, огромные убытки, никакого пути к прибыльности не просматривается. Но зато огромный рост по 70-90 % в разные годы, и он только ускоряется. Озон будет очень большим через несколько лет, и только потом начнет поворачивать к прибыли, по крайней мере, такие планы. IPO, скорее всего, будет успешным.

В документах всплыла интересная подробность. Скорее всего, летом Сбер договорился о том, что купит большой кусок Озона. Озон потом передумал продаваться и сейчас, скорее всего, заплатит за это штраф в 1 млрд. рублей. Сумма не чудовищная для компании, его убыток по году будет почти 20 млрд. рублей - миллиардом больше, миллиардом меньше. Но тем не менее, миллиард за то, что передумали.

Facebook мессенджер

Facebook запустил свой мессенджер как отдельное windows- приложение. Я подумал, что вот оно счастье, можно продолжать работать через мессенджер и при этом не заходить на Facebook, не залипать на ленту, не тратить время на чтение непонятных котиков. Нет. Не получается. Очень много мелких ошибок, мелких неудобств. У меня мессенджер запущен, но практически не пишу в нем. Всегда так получается, что отвечаю либо в телефоне, либо в web обычного Facebook. Ну вот недоделано. Можно перечислять, что я конкретно поправил, чтобы мне стало удобней. Это, наверно, не очень важно, а важно то, что пока этим, как рабочим инструментом, пользоваться нельзя. И не факт, что можно будет. Видно, что не очень много энергии вложено в этот продукт. Жаль.

ВШЭ и налоги

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

Голосование в Калифорнии

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

Все подобные сервисы во всем мире вздохнули с облегчением, потому что Калифорния это законодательница мод в Штатах, а Штаты законодатель мод в мире. Если б Калифорния показала пример, рано или поздно, это докатилось бы до всех. Теперь Калифорния показала пример, что нынешнее регулирование, оно правильное, это подрядчики.

Забавный факт, что 72% водителей были за то, чтобы оставить все как есть. То есть, они тоже думали, что лишняя бюрократия сделает им хуже.

Wildberries против продавцов

Интереснейшая история случилась на Wildberries. Wildberries активно готовится к черной пятнице и всем продавцам, которые продают через маркетплейс, очень настойчиво порекомендовал поучаствовать в скидочной акции, сделать -25% к ценам. Ну кто-то согласился, кто-то отказался. Тем, кто отказался Wildberries сказал: Ребята, тогда в эти дни вы вообще не будите продавать, потому что должно быть какие-то единство платформы. На платформе -25% у всех должно быть -25%. Кто-то все равно не хотел. Нет продаж ок, пусть не будет продаж, но не могу продавать себе в убыток тоже логично.

Так вот, как минимум для некоторых из них Wildberries всё равно насильно включил скидку. Будет продавать им в убыток, а они ничего не могут сделать. Единственный выход не участвовать это вообще расторгнуть все отношение с маркетплейском. Показано, кто в доме главный. Главный это, конечно, маркетплейс. Продавец на нем это такой обслуживающий персонал, которому показывают что и когда нужно делать, а он вообщем и вякнуть не может, потому что ничего не может.

Любопытная история. Не думаю что она как-то отразится в отрицательно на бизнесе Wildberries. Что продавцы разбегуться, перестанут его любить. Я думаю, что они будут продолжать жрать кактусы, но вот понятно где центр прибыли. Чем надо заниматься, а чем не надо заниматься. Кто владеет клиентом, тот владеет всем, а остальные так.

Подробнее..

Positive-Unlabeled learning and where to find it

22.07.2020 14:19:29 | Автор: admin
Привет! В этой статье я начну рассказ про Positive-Unlabeled (PU) learning. Расскажу, что это за область машинного обучения и в каких задачах она применяется. В конце будет немного про наше применение PU learning для поиска коррупции в аукционах государственных закупок.




Кто я


Меня зовут Дмитрий Иванов. Я учусь на 2-м курсе аспирантуры по экономике в Питерской Вышке. Работаю в исследовательской группе Агентные Системы и Обучение с Подкреплением в JetBrains Research, а также в международной лаборатории Теории Игр и Принятия Решений в ВШЭ. Помимо PU learning я интересуюсь обучением с подкреплением и исследованиями на стыке машинного обучения и экономики.

Преамбула



Рис. 1а. Положительные данные

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

Ответ здесь

Рис. 1б. Эллипс отделяет положительные данные от возможных отрицательных


Возможно, вы представили себе что-то подобное рисунку 1б: обвели данные в эллипс. На самом деле, так и работают многие методы детекции аномалий.

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

Ответ здесь

Рис. 1в. Прямые отделяют положительные данные от возможных отрицательных (прямые предсказаны алгоритмом детекции аномалий One-Class SVM)

В случае прямой разделяющей линии нет однозначного ответа. В каком направлении рисовать прямую непонятно.

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


Рис. 1г. Положительные (синие) и неразмеченные (красные) точки. Неразмеченные точки состоят из положительных и отрицательных

Ответ здесь

Рис. 1д. Прямая отделяет положительные точки от отрицательных исходя из неразмеченных данных


Стало легче! Хотя мы заранее не знаем, как сгенерирована каждая конкретная неразмеченная точка, мы можем примерно их разметить, сравнив с положительными. Красные точки, похожие на синие, вероятно, положительные. Наоборот, непохожие наверняка отрицательные. В итоге, несмотря на то что у нас нет чистых отрицательных данных, информацию о них можно получить из неразмеченной смеси и использовать ее для более точной классификации. Это и делают алгоритмы Positive-Unlabeled learning, о которых я хочу поведать.

Введение


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

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

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


Рис. 2. Jrgen Schmidhuber and Yann LeCun, NeurIPS 2020

Применение PU learning


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

Первая категория, наверное, наиболее очевидная: PU learning можно применять вместо обычной бинарной классификации. В некоторых задачах данные по своей природе немного грязные. В принципе, это загрязнение можно игнорировать и использовать обычный классификатор. Но можно совсем немного изменить лосс-функцию при тренировке классификатора (Kiryo et al., 2017) или даже сами предсказания уже после тренировки (Elkan & Noto, 2008), и классификация станет точнее.

В качестве примера рассмотрим идентификацию новых генов, отвечающих за развитие каких-либо заболеваний (disease genes). Стандартный подход считать уже найденные disease genes положительными данными, а все остальные гены отрицательными. Очевидно, что в этих отрицательных данных могут присутствовать еще не найденные disease genes. Более того, сама задача состоит в поиске таких disease genes среди отрицательных данных. Это внутреннее противоречие замечают здесь: (Yang et al., 2012). Исследователи отошли от стандартного подхода и рассмотрели гены, не относящиеся к уже обнаруженным disease genes, как неразмеченную смесь, а затем применили методы PU learning.

Другой пример обучение с подкреплением на основе демонстраций эксперта. Задача заключается в том, чтобы обучить агента действовать так же, как эксперт. Этого можно добиться при помощи метода generative adversarial imitation learning (GAIL). В GAIL используется GAN-подобная (generative adversarial networks) архитектура: агент генерирует траектории так, чтобы дискриминатор (классификатор) не мог отличить их от демонстраций эксперта. Недавно исследователи из DeepMind заметили, что в GAIL дискриминатор решает задачу PU learning (Xu & Denil, 2019). Обычно экспертные данные дискриминатор считает положительными, а сгенерированные отрицательными. Это приближение достаточно точно в начале обучения, когда генератор не способен производить данные, похожие на положительные. Однако по мере обучения сгенерированные данные все больше походят на экспертные, пока не станут неотличимыми для дискриминатора в конце обучения. По этой причине исследователи (Xu & Denil, 2019) считают сгенерированные данные неразмеченными данными с непостоянной пропорцией смеси. Позднее похожим образом был модифицирован GAN при генерации картинок (Guo et al., 2020).


Рис. 3. PU learning как аналог стандартной PN классификации

Во второй категории PU learning может быть применен для детекции аномалий как аналог одноклассовой классификации (OCC). Мы уже видели в Преамбуле, чем конкретно неразмеченные данные могут помочь. Все методы ОСС без исключений вынуждены делать предположение о распределении отрицательных данных. Например, разумно обвести положительные данные в эллипс (гиперсферу в многомерном случае), вне которого все точки отрицательны. В этом случае мы предполагаем, что негативные данные распределены равномерно (Blanchard et al., 2010). Вместо того чтобы делать такие предположения, методы PU learning могут оценить распределение отрицательных данных на основе неразмеченных. Это особенно важно, если распределения двух классов сильно пересекаются (Scott & Blanchard, 2009). Один из примеров детекции аномалий с применением PU learning обнаружение фейковых обзоров (Ren et al., 2014).


Рис. 4. Пример фейкового обзора

Детекция коррупции в аукционах российских государственных закупок


В третью категорию применения PU learning можно отнести задачи, в которых ни бинарная, ни одноклассовая классификации не могут быть использованы. В качестве примера я расскажу про наш проект по детекции коррупции в аукционах российских государственных закупок (Ivanov & Nesterov, 2019).

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

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



Рис. 5. Доля коррумпированных аукционов госзакупок в разных регионах России (Ivanov & Nesterov, 2019)

Завершающие ремарки


Чтобы не создавалось впечатление, что PU решение всех бед человечества, упомяну подводные камни. В обычной классификации чем больше у нас данных, тем точнее можно построить классификатор. Более того, увеличивая количество данных до бесконечности, мы можем приближаться к идеальному (по формуле Байеса) классификатору. Так вот, основной подвох PU learning в том, что это ill-posed задача, то есть задача, которая не решается однозначно даже при бесконечном количестве данных. Ситуация становится лучше, если известна пропорция двух классов в неразмеченных данных, однако определение этой пропорции тоже ill-posed задача (Jain et al., 2016). Лучшее, что мы можем определить это интервал, в котором находится пропорция. Более того, методы PU learning часто не предлагают способов оценки этой пропорции и считают ее известной. Есть отдельные методы, которые ее оценивают (задача называется Mixture Proportion Estimation), однако часто они медленны и/или нестабильны, особенно когда два класса представлены в смеси сильно неравномерно.

В этом посте я рассказал про интуитивное определение и применения PU learning. Помимо этого, я могу рассказать про формальное определение PU learning с формулами и их пояснениями, а также про классические и современные методы PU learning. Если этот пост вызовет интерес напишу продолжение.

Список литературы


Blanchard, G., Lee, G., & Scott, C. (2010). Semi-supervised novelty detection. Journal of Machine Learning Research, 11(Nov), 29733009.

Elkan, C., & Noto, K. (2008). Learning classifiers from only positive and unlabeled data. Proceeding of the 14th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining KDD 08, 213. https://doi.org/10.1145/1401890.1401920

Guo, T., Xu, C., Huang, J., Wang, Y., Shi, B., Xu, C., & Tao, D. (2020). On Positive-Unlabeled Classification in GAN. Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, 83858393.

Ivanov, D. I., & Nesterov, A. S. (2019). Identifying Bid Leakage In Procurement Auctions: Machine Learning Approach. ArXiv Preprint ArXiv:1903.00261.

Jain, S., White, M., Trosset, M. W., & Radivojac, P. (2016). Nonparametric semi-supervised learning of class proportions. ArXiv Preprint ArXiv:1601.01944.

Kiryo, R., Niu, G., du Plessis, M. C., & Sugiyama, M. (2017). Positive-unlabeled learning with non-negative risk estimator. Advances in Neural Information Processing Systems, 16751685.

Ren, Y., Ji, D., & Zhang, H. (2014). Positive Unlabeled Learning for Deceptive Reviews Detection. EMNLP, 488498.

Scott, C., & Blanchard, G. (2009). Novelty detection: Unlabeled data definitely help. Artificial Intelligence and Statistics, 464471.

Xu, D., & Denil, M. (2019). Positive-Unlabeled Reward Learning. ArXiv:1911.00459 [Cs, Stat]. http://arxiv.org/abs/1911.00459

Yang, P., Li, X.-L., Mei, J.-P., Kwoh, C.-K., & Ng, S.-K. (2012). Positive-unlabeled learning for disease gene identification. Bioinformatics, 28(20), 26402647.
Подробнее..

Обучение с подкреплением в Super Mario Bros. Сравнение алгоритмов DQN и Dueling DQN

17.06.2021 10:17:44 | Автор: admin

Этой весной Питерская Вышка и JetBrains впервые провели проектную смену для старшеклассников Школу по практическому программированию и анализу данных. В течение пяти дней 50 участников со всей страны работали над групповыми проектами по машинному обучению, NLP, мобильной и web-разработке.

Первое место заняла команда Deep Q-Mario ребята создали нейронную сеть, которая использует reinforcement learning для обучения агента играть в Super Mario Bros. В этом посте они рассказывают, какие алгоритмы использовали и с какими проблемами столкнулись (например, в какой-то момент Марио просто отказался прыгать).

О нас

Мы Владислав и Дмитрий Артюховы, Артём Брежнев, Арсений Хлытчиев и Егор Юхневич учимся в 10-11 классах в разных школах Краснодара. С программированием каждый из нас знаком довольно давно, мы писали олимпиады на С++. Однако почти все члены команды раньше не работали на Python, а для написания проекта в короткий пятидневный срок он был необходим. Поэтому первым испытанием для нас стало преодоление слабой типизации Python и незнакомого синтаксиса. Но обо всем по порядку.

Немного теории

На школе Питерской Вышки нам предстояло создать нейронную сеть, которая использует reinforcement learning для обучения агента играть в Super Mario Bros.

Reinforcement Learning

В основе RL алгоритмов лежит принцип взаимодействия агента и среды. Обучение происходит примерно так: агент совершает в среде действие и получает награду (в нашем случае Марио умеет прыгать и перемещаться вправо); среда переходит в следующее состояние; агент опять совершает действие и получает награду; подобное повторяется, пока агент не попадет в терминальное состояние (например, смерть в игре).

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

Q-learning

В основу нашей модели лег алгоритм Q-learning. Q-learning это модель, которая обучает некоторую функцию полезности (Q-функцию). Эта функция на основании текущего состояния и конкретного действия агента вычисляет прогнозируемую награду за весь эпизод (Q-value).Агент совершает действия на основании некоторого свода правил политики. Политика нашего агента называется Epsilon-Greedy: с некоторой вероятностью агент совершает случайное действие, иначе он совершает действие, которое соответствует максимальному значению Q-функции.

# implementation of Epsilon-Greedy Policy:def act(state):rand_float = random.random() # returns random float in range: [0, 1)if rand_float <= EPS:action = random_action()else:action = model.get_action(state) # returns action that brings max Q-valuereturn action

В классической реализации алгоритма Q-learning формируется таблица из всех возможных состояний среды и всех возможных действий. Задача заключается в том, чтобы посчитать значения Q-values для каждой пары состояние действие.

Обучение происходит так: мы добавляем к рассматриваемому значению Q-функции разность между оптимальным значением и текущим значением данной функции:

Q(s_t,a_t):=Q(s_t,a_t)+(Q_{target}(s_t,a_t)-Q(s_t,a_t))Q_{target}(s_t,a_t)=r_t(s_t,a_t)+ maxQ(s_{t+1},a)

Где Q(s, a) значение Q-функции для состояния и действия;

Qtarget(s, a) это оптимальное, по нашему предположению, значение Q-функции, к которому мы пытаемся свести текущее значение Q-функции;

st, at состояние среды и выбранное действие в момент времени $t$;

rt(st, at) награда за текущее состояние среды и совершенное действие;

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

коэффициент обучения. Он определяет насколько сильно мы изменим текущее значение Q-функции.

Deep Q-Learning

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

Deep Q-learningDeep Q-learning

Experience Replay Buffer

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

# implementation of transition collecting:transition = (state, action, next_state, reward, done)replay_buffer.append(transition)  

Target network

Для того, чтобы весь алгоритм обучения работал, необходимо иметь вторую нейронную сеть target model, которая определяет оптимальное значение Q-функции (Q-target) и является копией модели, взаимодействующей со средой (online model). Единственное отличие этих сетей друг от друга заключается в том, что веса target model обновляются несколько реже, чем у online model у нас это примерно каждый 500-й эпизод. Это нужно для корректного обучения модели: если online model будет производить вычисления Q-target и Q-функций самостоятельно, при изменении весов сети следующие значения Q-target и Q-функций изменятся примерно одинаково, то есть разница между ними останется такой же, и мы не будем сводиться к оптимальному значению.

Существуют два метода обновления весов target model: hard update и soft update. Первый копирует online model в target model каждую n-ую итерацию обучения. Во втором методе веса target model также пересчитываются при обучении, но медленнее, как взвешенное среднее весов двух сетей

Q_{target}:=Q_{target}+(Q_{agent}-Q_{target})

Работа над проектом

Стоит отметить, что до школы никто из нашей команды не делал проекты по машинному обучению. За несколько недель нам сообщили тему проекта, и мы заранее, еще в Краснодаре, начали готовиться. Мы читали статьи, смотрели видео по машинному обучению и нейронным сетям, изучали математику, которая нам может пригодиться. Поэтому можно сказать, что на смену приехали уже подготовленными. Конечно, мы не знали нюансов, но во время школы наш куратор Дмитрий Иванов каждый день давал задания, благодаря которым мы смогли разобраться с деталями.Первые дни после начала школы мы занимались тем, что изучали необходимую теорию по нейронным сетям и обучению с подкреплением вместе с Дмитрием. После настало время кодинга: первая наша попытка реализовать DQN (Deep Q-learning Network) алгоритм и научить агента играть в Марио успехом не увенчалась. После девяти часов обучения прогресса не было, и мы не знали, в чем, собственно, дело. После тщетных попыток дебаггинга на питоне, командой было принято единственное разумное решение переписать код с нуля, что принесло свои плоды. Имея рабочую реализацию DQN, мы решили на этом не останавливаться, а написать модификацию Dueling DQN, сравнить ее со стандартным алгоритмом и посмотреть, какой агент лучше покажет себя в игре после обучения.

Dueling DQN

Основная идея Dueling DQN заключается в том, что нейронная сеть предсказывает не значения Q для всех действий, а отдельно средневзвешенное значение Q-функции по всем действиям (так называемое V-value), а также преимущества для каждого действия, которые определяются как разность между Q-функцией и средневзвешенным значением (подробнее можно почитать здесь).

advantage(s,a)=Q(s,a)-V(s)Визуализация архитектуры модели Dueling DQN (где-то на просторах интернета)Визуализация архитектуры модели Dueling DQN (где-то на просторах интернета)

Дополнительный функционал

Помимо алгоритмов обучения, нам необходимо было сделать еще несколько полезных вспомогательных фич: saver, logger, plotting, visualization.

Saver

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

Logger and Plotting

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

Visualization

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

Возникшие проблемы

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

Возникшая проблема с трубамиВозникшая проблема с трубами

Мы считаем, что эта особенность поведения связана с тем, что отрицательная награда от исхода времени на прохождение эпизода была меньше, чем отрицательная награда от смерти Марио при ударе с врагом. Другими словами, Марио "считал", что завершить уровень из-за истечения времени для него более предпочтительно, чем смерть.Эта проблема действительно поставила нас в тупик: мы не знали, как заставить агента проходить уровень. Мы бились над решением в течение многих часов, пока Арсений Хлытчиев не придумал модификацию функции награды, названную Punishment-оптимизацией (за что мы всей командой выражаем Арсению благодарность!) Он предложил добавлять отрицательную награду за "простой" Марио, чтобы восстановить значимость передвижения агента вперед по уровню. Это улучшение оказало сильное влияние на поведение агента в среде: Марио больше не застревал перед трубами.

Решение проблемы с трубамиРешение проблемы с трубами

Результаты

К окончанию школы мы получили агента, который неплохо справлялся с частичным прохождением первого уровня игры: Марио сумел пройти около 50%. При этом каждый член команды сумел одолеть Марио, дойдя до второго уровня.

Лучший gameplay МариоЛучший gameplay Марио

Оба алгоритма DQN и Dueling DQN после обучения проходили примерно равную часть уровня. Но в силу того, что обычный DQN имел больше времени для обучения, его результат был немного лучше.Так как нашей целью было сравнить обычный алгоритм DQN с его модификацией, давайте проанализируем графики, которые мы получили.

Функция потери

 DQN (слева) и Dueling DQN (справа) DQN (слева) и Dueling DQN (справа)

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

Функция награды

DQN (слева) и Dueling DQN (справа)DQN (слева) и Dueling DQN (справа)

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

Заключение

Наш проект еще можно и нужно дорабатывать. Например, можно продолжить обучать агента, пока он не завершит уровень, подумать над другими оптимизациями алгоритма DQN и т.д. Но сейчас мы заняты другим: кто-то сдает ЕГЭ, кто-то готовится к летним школам по программированию, поэтому добавлять какие-либо изменения пока не планируем.

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

Подробнее..

Бесплатный онлайн-круглый стол Тенденции игрового рынка 2021. Какие игры делать в новом году

12.12.2020 14:20:00 | Автор: admin
23 декабря 2020 года (среда), в 19:00, состоится Онлайн-круглый стол Тенденции игрового рынка 2021. Какие игры делать в новом году!

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



Вы узнаете:

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




Мы приглашаем инди-разработчиков, сотрудников игровых компаний, студентов и ВСЕХ, кто хочет делать собственные игры или играет в игры!

Участие в мероприятии абсолютно бесплатно. Все подробности на сайте>>>
Подробнее..

Стратегия выбрать самую нелогичную стратегию, или как мы заняли второе место в Математической регате Тинькофф

14.08.2020 16:23:02 | Автор: admin
Всем привет! Мы студенты четвертого курса Прикладной математики и информатики Питерской Вышки. В июле мы поучаствовали в Математической регате Тинькофф, и в этом посте расскажем о том, что это за соревнование, о том, какова была наша стратегия, и покажем примеры задач.


Картинка с официального сайта Математической регаты

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

Итак, 18 июля пятеро студентов-программистов, которые вошли в состав команды Just4Fun, собрались участвовать в первом туре соревнования. С нами соперничала 391 команда, в каждой было по 35 человек. Всего 1628 участников из 131 города мира.

Правила первого тура


Первый тур длился два с половиной часа. Было предложено 25 задач, разбитых по 5 уровням сложности и 5 темам: комбинаторика, числовые задачи, алгебра, теория вероятностей, геометрия.

Начальный капитал команды 1000 очков. Каждая задача стоит от 100 до 500 очков: чем выше стоимость, тем сложнее задача. Если команда покупает задачу, ее стоимость вычитается из начального капитала (при этом нельзя уходить в минус). За верное решение с первой попытки начисляется $inline$2x$inline$ от стоимости задачи, со второй $inline$1.5x$inline$, с третьей $inline$1x$inline$.

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

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



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

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

Первый тур


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

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

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

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



Отдельно хочется остановиться на процессе решения задач. Все-таки мы скорее программисты, чем математики, и во время соревнования мы активно пользовались компьютером (это было разрешено правилами). Более половины задач мы решили при помощи Wolfram, Python и, неожиданно, C++ (для действительно быстрых переборов). С одной стороны, это не математично, но с другой позволило решить задачи в максимально короткие сроки.

Правила второго тура


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



Каждой задаче соответствовала доминошка (0:1, 0:2, ..., 6:6 всего 27 штук). В первые 2,5 часа команды решали задачи и собирали себе снаряды в виде доминошек.

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

Допустим, наша команда поставила доминошку [2:5] против команды N и решила, что число 5 будет соответствовать атаке, а 2 защите. Команда N поставила против нас доминошку с защитой 3 и атакой 4. Тогда наша команда получит урон, равный 2 $inline$(4-2=2)$inline$, и команда N тоже $inline$(5-3=2)$inline$. Каждое из этих чисел вычитается из очков команды, которая защищалась, и прибавляется к очкам нападающей команды. Побеждает команда с наибольшим количеством очков по итогам трех раундов.

Второй тур


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

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

По результатам финального тура мы заняли второе место, сильно отстав от первой команды и прилично обогнав третью. У нас 25 очков, у первой 55 и у третьей 14.

Общие впечатления


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

Задачки с турнира


Задача из первого тура


Тема: Вероятность.
Стоимость: 500.
У Вани есть два доллара. Он подбрасывает монетку. Если выпадает орел, Ваня получает 2 доллара; если решка, он теряет половину своих денег. Если решка выпала два раза подряд, то игра заканчивается, при этом в последнем раунде Ваня не теряет деньги. Найти матожидание количества денег у Вани после окончания игры.

Решение:
Найдем количество последовательностей длины $inline$n$inline$ из орлов и решек с фиксированным последним элементом, в которых нет двух решек, идущих подряд.

Число последовательностей длины $inline$n$inline$ с последней решкой обозначим как $inline$h(n)$inline$, с последним орлом $inline$F(n)$inline$.
$inline$h(n) = F(n 1)$inline$ (нельзя, чтобы предпоследний элемент тоже был решкой).
$inline$F(n) = F(n 1) + h(n - 1) = F(n - 1) + F(n - 2)$inline$ (предпоследний элемент любой)

Получили последовательность Фибоначчи c начальными данными $inline$F(0) = F(1) = 1$inline$.

Допустим, Ваня сделал $inline$n$inline$ бросков и игра не закончилась. Зафиксируем последнюю выпавшую сторону монетки (орел или решка) и обозначим сумму Ваниных выигрышей по всем последовательностям, удовлетворяющим условиям (последняя сторона зафиксирована и нет двух решек подряд), как $inline$f(n)$inline$ (последний орел) и $inline$g(n)$inline$ (последняя решка).

Осталось написать рекуррентные соотношения на $inline$f$inline$ и $inline$g$inline$.

Для начала разберемся с $inline$g$inline$. Заметим, что если последовательность оканчивается на решку, то предпоследним должен идти орел (т. к. двух последовательных решек быть не может), следовательно, $inline$g(n) = \frac{f(n 1)}{2}$inline$, при выпадении решки Ванина сумма уменьшилась в два раза.

Теперь с $inline$f$inline$. В этом варианте предпоследним может быть как орел, так и решка. По условию, выпадения орла просто добавляет 2 к сумме,т. е. $inline$f(n) = f(n 1) + g(n - 1) + 2F(n)$inline$ (вот для этого $inline$F$inline$ были посчитаны заранее).

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

Игра заканчивается тогда, когда Ваня выбрасывает вторую решку подряд. Заметим, что вероятность в итоге получить конкретную последовательность длины $inline$n > 1$inline$ (с двумя решками в конце) это $inline$\frac{1}{2^n}$inline$ (случайно равновероятно выбираем каждый элемент). Тогда осталось найти $inline$\sum\limits_{i = 2}^{+\infty} \frac{g(i 1)}{2^i} = \frac{f(i - 2)}{2^{i + 1}}$inline$.

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

Сперва вспомогательная сумма:

$$display$$S_1 = \sum_{n = 1}^{\infty} \frac{F(n)}{2^n} = F(1) + \sum_{n=2}^{\infty} \frac {F(n 1) + F(n - 2)} {2 ^ n} = \\ = F(1) + \frac{3}{4} \sum_{n = 1}^{\infty} \frac{F(n)}{2 ^ n} = F(1) + \frac{3}{4} S_1 \implies S_1 = 4$$display$$



И аналогичные действия уже для нашей рекурренты:

$$display$$S_2 = \sum \frac{f(n)}{ 2 ^ {n + 3}} = \sum \frac {F(n)} {2 ^ {n + 2}} + \sum \frac {f(n 1) + f(n - 2) / 2} {2 ^ {n + 3}} = \\ = S_1 / 4 + \frac{5}{8} S_2 \implies S_2 = \frac{8}{3}$$display$$



Ответ: $inline$\frac{8}{3}$inline$

Задача из второго тура


Соответствовала доминошке [2:3].

Больше всего запомнилась одна простая задачка из второго тура. В ней требовалось посчитать, сколько раз нужно проделать операцию $inline$DF$inline$ с кубиком Рубика, чтобы он вернулся в исходное состояние (операция $inline$DF$inline$: сначала по часовой стрелке повернуть фронтальную часть, затем по часовой стрелке повернуть нижнюю часть).

Математическое решение:
Заметим, что повороты кубика рубика можно описать с помощью некоторой подгруппы симметрической группы S_48.

Обозначим поворот фронтальной части как $inline$F$inline$, а нижней как $inline$D$inline$. В таких обозначениях мы с кубиком сначала совершаем операцию $inline$F$inline$, а затем операцию $inline$D$inline$. Таким образом, если кубик находился в состоянии $inline$x$inline$, то он после одного хода перейдет в состояние $inline$DFx$inline$. Мы хотим найти минимальное количество шагов, которое нужно, чтобы перевести кубик в исходное состояние. Т. е. нужно посчитать порядок элемента $inline$DF$inline$. И $inline$D$inline$, и $inline$F$inline$ описываются перемножением перестановок. Давайте перемножим их все и обозначим результат как некоторую перестановку p. Чтобы посчитать ее порядок, достаточно найти НОК длин ее циклов.

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

Ответ: 105.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru