Pull to refresh
  • by relevance
  • by date
  • by rating

Пишем музыку с помощью PHP

Abnormal programmingPHPAlgorithms
Translation
Я не специалист по теории вероятностей, искусственного интеллекта и машинного обучения, кроме того уроки начальной музыкальной школы давно забыты. Но если вы уделите мне 10 минут, то обнаружите, что даже небольшой запас знаний может дать впечатляющие результаты при их творческом применении. Я хочу поделиться с вами, как научить PHP сочинять музыку.

Например, такую:

сгенерированная мелодия
Читать дальше →
Total votes 66: ↑49 and ↓17 +32
Views20.2K
Comments 40

Математика игры 2048

Game developmentMathematics
Translation

Часть 1. Расчёт минимального количества ходов для победы с помощью цепей Маркова


Screenshot of 2048

После недавнего обновления экран «You win!» игры 2048 начал показывать количество ходов, потребовавшихся для победы, и я задался вопросом: сколько же нужно ходов, чтобы выиграть?

В первой части статьи мы ответим на этот вопрос, смоделировав игру 2048 в виде цепи Маркова и проанализировав её, чтобы показать, что вне зависимости от мастерства игрока для победы в среднем нужно не менее 938,8 ходов. Это даёт нам неплохое мерило отсчёта — если вы можете выигрывать примерно за такое количество ходов, то неплохо играете.

Количество ходов, необходимых для победы, зависит от случайности, потому что игра добавляет тайлы 2 и 4 случайным образом. Анализ также покажет, что распределение минимального количества ходов до победы имеет стандартное отклонение в 8,3 хода, и что его общая форма хорошо аппроксимируется смесью биномиальных распределений.
Читать дальше →
Total votes 49: ↑48 and ↓1 +47
Views30.6K
Comments 23

Считаем кур, пока их не заклевали

Entertaining tasksMathematics
Translation
Эта история началась с короткой статьи в New York Times о Люке Робитейле, 13-летнем школьнике из Юлесса, штат Техас, который выиграл Raytheon Mathcounts National Competition, правильно ответив на следующий вопрос:
В амбаре кружком сидят 100 кур. Каждая из кур случайным образом клюёт свою ближайшую соседку слева или справа. Каково ожидаемое количество кур, которых никто не клюнул?
Судя по статье Times, Робитейлу потребовалось на ответ меньше секунды.

На следующий день Джордан Элленберг твитнул такую задачу:

Text of Ellenberg's tweet: 100 chicks in a circle. Each pecks R or L at random. Pecked chicks don't peck. Iterate until no two unpecked chicks adjacent. How many left?

«100 кур сидят в круге. Каждая клюёт случайным образом R или L. Клюнутые куры никого не клюют. Итерации проводятся до тех пор, пока не останется двух соседних неклюнутых кур. Сколько кур осталось?»

Мне не нужно умещать эту историю в 140 символов, поэтому я дополню вопрос Элленберга подробностями так, как я его понял. Исходная задача относилась к одной итерации синхронизированного случайного клевания, а теперь у нас есть несколько итераций. Во время одной итерации каждая курица случайным образом поворачивается влево или вправо и клюёт одну из своих соседок. Однако если курицу уже клюнули, она больше никогда не клюёт, даже её продолжают клевать. Если две соседние курицы клюют друг друга в одной итерации, обе они вылетают из игры на все последующие раунды. Если неклюнутая курица оказывается между двумя клюнутыми, её уже никогда не клюнут и поэтому она может клевать бесконечно. Вопрос заключается в том, какая часть кур выживет и станет «неуязвимыми»?

Ниже представлены спойлеры, так что сейчас вы можете попробовать ответить на вопрос сами. Пока вы этим занимаетесь, я немного поговорю о курах и о риторике и семиотике математических «текстовых задач».
Читать дальше →
Total votes 53: ↑52 and ↓1 +51
Views18.1K
Comments 11

Оптимальная игра в 2048 с помощью марковского процесса принятия решений

Mathematics
Translation

В предыдущей статье про 2048 мы использовали цепи Маркова, чтобы выяснить, что в среднем для победы нужно не менее 938,8 ходов, а также исследовали с помощью комбинаторики и полного перебора количество возможных конфигураций поля игры.

В этом посте мы используем математический аппарат под названием «марковский процесс принятия решений» для нахождения доказуемо оптимальных стратегий игры 2048 для полей размером 2x2 и 3x3, а также на доске 4x4 вплоть до тайла 64. Например, вот оптимальный игрок в игру 2x2 до тайла 32:

GIF

Случайное начальное число (random seed) определяет случайную последовательность тайлов, добавляемых игрой на поле. «Стратегия» игрока задаётся таблицей, называемой алгоритмом (policy). Она сообщает нам, в каком направлении нужно сдвигать тайлы в любой возможной конфигурации поля. В этом посте мы рассмотрим способ создания алгоритма, оптимального в том смысле, что он максимизирует шансы игрока на получение тайла 32.

Оказывается, что в игре 2x2 до тайла 32 очень сложно выиграть — даже если играть оптимально, игрок выигрывает только примерно в 8% случаев, то есть игра оказывается не особо интересной. Качественно игры 2x2 сильно отличаются от игр 4x4, но они всё равно полезны для знакомства с основными принципами.

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

Однако мы можем найти оптимальный алгоритм для укороченной игры 4x4 до тайла 64, и, к счастью, мы увидим, что оптимальная игра на полях 3x3 качественно выглядит похожей на некоторые успешные стратегии полной игры.

Код (исследовательского качества), на котором основана эта статья, выложен в открытый доступ.
Читать дальше →
Total votes 30: ↑30 and ↓0 +30
Views15.7K
Comments 9

Как построить защиту от фрода в масштабах корпорации. Лекция на YaC 2018

Яндекс corporate blogInformation SecurityMachine learning
29 мая прошла Yet another Conference 2018 — ежегодная и самая большая конференция Яндекса. На YaC этого года было три секции: о технологиях маркетинга, умном городе и информационной безопасности. По горячим следам мы публикуем один из ключевых докладов третьей секции — от Юрия Леонычева tracer0tong из японской компании Rakuten.


Как мы аутентифицируем? В нашем случае ничего экстраординарного нет, но один метод хочу упомянуть. Кроме традиционных видов — капчи и одноразовых паролей — мы используем Proof of Work, PoW. Нет, мы не майним биткоины на компьютерах пользователей. Мы используем PoW, чтобы замедлить атакующего и иногда даже заблокировать полностью, заставив его решить очень сложную задачу, на которую он потратит очень много времени.

Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Views6.2K
Comments 11

Теория счастья. Закон зебры и чужой очереди

Entertaining tasksMathematicsPopular science
Продолжаю знакомить читателей Хабра с главами из своей книжки «Теория счастья» с подзаголовком «Математические основы законов подлости». Это ещё не изданная научно-популярная книжка, очень неформально рассказывающая о том, как математика позволяет с новой степенью осознанности взглянуть на мир и жизнь людей. Она для тех кому интересна наука и для тех, кому интересна жизнь. А поскольку жизнь наша сложна и, по большому счёту, непредсказуема, упор в книжке делается, в основном, на теорию вероятностей и математическую статистику. Здесь не доказываются теоремы и не даются основы науки, это ни в коем случае не учебник, а то, что называется recreational science. Но именно такой почти игровой подход позволяет развить интуицию, скрасить яркими примерами лекции для студентов и, наконец, объяснить нематематикам и нашим детям, что же такого интересного мы нашли в своей сухой науке.





Мы поговорим о фатуме, землетрясениях, очередях и замечательных процессах: пуассоновском потоке, случайном блуждании и немного о цепях Маркова.
Читать дальше →
Total votes 45: ↑43 and ↓2 +41
Views35.6K
Comments 30

Краткое введение в цепи Маркова

Search enginesMathematicsPopular science
Translation
image

В 1998 году Лоуренс Пейдж, Сергей Брин, Раджив Мотвани и Терри Виноград опубликовали статью «The PageRank Citation Ranking: Bringing Order to the Web», в которой описали знаменитый теперь алгоритм PageRank, ставший фундаментом Google. Спустя чуть менее двух десятков лет Google стал гигантом, и даже несмотря на то, что его алгоритм сильно эволюционировал, PageRank по-прежнему является «символом» алгоритмов ранжирования Google (хотя только немногие люди могут действительно сказать, какой вес он сегодня занимает в алгоритме).

С теоретической точки зрения интересно заметить, что одна из стандартных интерпретаций алгоритма PageRank основывается на простом, но фундаментальном понятии цепей Маркова. Из статьи мы увидим, что цепи Маркова — это мощные инструменты стохастического моделирования, которые могут быть полезны любому эксперту по аналитическим данным (data scientist). В частности, мы ответим на такие базовые вопросы: что такое цепи Маркова, какими хорошими свойствами они обладают, и что с их помощью можно делать?
Читать дальше →
Total votes 51: ↑51 and ↓0 +51
Views97.9K
Comments 11

Как мы используем цепи Маркова в оценке решений и поиске багов. Со скриптом на Python

Skyeng corporate blogPythonSystem Analysis and DesignMachine learningResearch and forecasts in IT
Нам важно понимать, что происходит с нашими студентами во время обучения, и как эти события влияют на результат, поэтому мы выстраиваем Customer Journey Map — карту клиентского опыта. Ведь процесс обучения — не нечто непрерывное и цельное, это цепочка взаимосвязанных событий и действий студента, причем эти действия могут сильно отличаться у разных учеников. Вот он прошел урок: что он сделает дальше? Пойдет в домашнее задание? Запустит мобильное приложение? Изменит курс, попросит сменить учителя? Сразу зайдет в следующий урок? Или просто уйдет разочарованным? Можно ли, проанализировав эту карту, выявить закономерности, приводящие к успешному окончанию курса или наоборот, «отваливанию» студента?



Обычно для выстраивания CJM используют специализированные, весьма дорогие инструменты с закрытым кодом. Но нам хотелось придумать что-то простое, требующее минимальных усилий и по возможности опенсорсное. Так появилась идея воспользоваться цепями Маркова — и у нас получилось. Мы построили карту, интерпретировали данные о поведении студентов в виде графа, увидели совершенно неочевидные ответы на глобальные вопросы бизнеса и даже нашли глубоко спрятанные баги. Все это мы сделали с помощью опенсорсных решений Python-скрипта. В этой статье я расскажу про два кейса с теми самыми неочевидными результатами и поделюсь скриптом со всеми желающими.
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Views7.9K
Comments 7

Цепи Маркова для процедурной генерации зданий

Game development
Translation
image

Примечание: полный исходный код этого проекта можно найти [здесь]. Так как он является частью более масштабного проекта, я рекомендую смотреть коммит на момент выпуска этой статьи, или файл /source/helpers/arraymath.h, а также /source/world/blueprint.cpp.

В этой статье я хочу подробно рассказать о принципах использования цепей Маркова и статистики для процедурной генерации 3D-зданий и других систем.

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

Этот метод является обобщённым способом процедурной генерации систем, удовлетворяющих определённым требованиям, поэтому я рекомендую дочитать хотя бы до конца первого раздела, чтобы вы могли понять, сможет ли эта методика быть полезной в вашем случае, потому что ниже я объясняю необходимые требования.
Читать дальше →
Total votes 30: ↑30 and ↓0 +30
Views10.5K
Comments 5

Математики на примере «пятнашек» вычисляют, как возникает случайность

MathematicsPopular science
Translation
image

Задача головоломки «пятнашки» — упорядочить пронумерованные плитки. Сегодня математики решили обратную задачу — как перепутать головоломку.

Вероятно, вы играли в «пятнашки». Это расстраивающая, но аддиктивная игра, состоящая из 15 плиток и одного пустого пространства, выстроенных в сетку 4 на 4. Задача заключается в перемещении плиток и выстраивании их в порядке возрастания чисел или, в некоторых версиях, сборке из них изображения.

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

Сегодня появилось новое доказательство решения «игры в 15», но в обратном порядке. Математики Юн Чу и Роберт Хоу из Университета Стони Брук определили количество ходов, необходимое для превращения упорядоченного поля в случайное.
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Views3.6K
Comments 10

Julia и дистрибутивная семантика

ProgrammingJuliaMachine learningArtificial IntelligenceNatural Language Processing
Tutorial


С момента выхода прошлой публикации в мире языка Julia произошло много интересного:



В то же время заметен рост интереса со стороны разработчиков, что выражается обильными бенчмаркингами:



Мы же просто радуемся новым и удобным инструментам и продолжаем их изучать. Сегодняшний вечер будет посвящен текстовому анализу, поиску скрытого смысла в выступлениях президентов и генерации текста в духе Шекспира и джулиа-программиста, а на сладкое — скормим рекуррентной сети 40000 пирожков.

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Views3.9K
Comments 4

Сертификация. Стоит ли пользоваться дампами и при чем здесь цепи Маркова?

MathematicsIT career
Более 20 лет назад я заинтересовался телекомом. Я начал с чтения книжек, одной из которых был курс CCNA. Тогда это была довольно тоненькая книжечка с FDDI, Token Ring, ISDN и подобными вещами, о которых новое поколение сетевиков только слышали. И тогда я впервые прочитал про CCIE сертификацию. У меня осталось впечатление, что обладатели этого статуса являются воистину IT богами. Конечно же, мне захотелось достичь этого сетевого самадхи.

С тех пор прошло много времени. Я получил CCNA потом CCNP, с успехом просрочил все эти сертификаты за ненужностью и лет через 10 стал CCIE. Я по-прежнему занимаюсь сетями, и, надо сказать, похоже, люблю свою работу, но романтизм, конечно, прошел. Двадцать лет назад отношение ко всему этому было совсем другим. Это был драйв, это было настоящее приключение.

Сейчас такого интереса уже нет, и отношение к сертификации у разных инженеров тоже разное, да и сам я отношусь к этому неоднозначно. Я ясно осознаю, что это своеобразная игра, часто не совсем честная игра, и, если вы не знаете правил, то, даже обладая прекрасными знаниями и навыками, у вас достаточно большой шанс проиграть. В этой статье мы с помощью несложной математики рассмотрим эти правила, что позволит вам составить свою по возможности максимально честную и одновременно выигрышную стратегию.
Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Views2.5K
Comments 5

Где я и где конечный автомат? Доклад Вадима Пацева о математике во фронтенде

Яндекс corporate blogAlgorithmsInterfacesMathematics
Некоторые фронтенд-разработчики полушутливо называют себя «форма-клепатель». Это не так. Руководитель фронтенда Яндекс.Маршрутизации Вадим Пацев поставил себе задачу — на примере развития и «уточнения» одной простой задачи взаимодействия с пользователем показать: не стоит бояться лезть в такие вещи, как конечный автомат, цепи Маркова и так далее. Во фронтенде тоже есть место «взрослым» архитектурным паттернам и алгоритмам. Ссылка на видео — в конце текста.



— Меня зовут Вадим Пацев, я долгое время работаю в Яндексе, участвовал в таких проектах, как Я.ру, Музыка, Почта, Диск, а также в проектах вне Яндекса, это Roborace, система управления гонками беспилотных автомобилей, и ExperimentX — комплекс по анализу крови. Вообще, я люблю программировать, занимаюсь этим достаточно давно, и это одна из причин, почему я тут и хочу вам рассказать про всякие интересные вещи.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Views5.9K
Comments 1