Если вы пишете много бизнес-приложений, у вас может не было много нужно для рандомизации. В конце концов, когда клиент проверяет в вашей корзине, вы не хотите заряжать их случайную цену. Или добавить случайное количество налога на продажу. Или отправьте им случайный продукт.
Но есть определенно несколько раз, когда «случайная» является критической особенностью. И … Вот где все становится сложно. Поскольку многие Devs недооценивают, насколько сложно представлять «случайность» в приложении. Они также недооценивают общего невежества общественности о случайности и вероятностях.
Случайный (Иш)
Большинство языков облегчают создание виртуальной «случайности». Например, в JavaScript мы можем сделать это:
const dieRoll = Math.floor(Math.random() * 6) + 1;
Эта линия кода бросает виртуальный шестигранный кубик. Если вы сделали чтение о внутренней сантехнике информатики, вы уже можете знать, что эта строка кода не предоставляет правда случайность. Чтобы поставить его другим способом, «случайный» результат этой линии кода на самом деле предсказуемый результат, если бы мы должны были свертывать под крышками и отслеживать семя Это используется для создания этого так называемого «случайного» номера. Это часто называют псевдо-случайность Отказ
Другой способ подумать о псевдо-случайности, это то, что это случайно тебе . Теоретически, если вы отслеживаете, в режиме реального времени все входы, которые используют алгоритм для генерации «случайного» номера, вообще не было бы случайным. Вы можете предсказать, с 100% уверенностью, каковы каждый последующий «случайный» номер, каждый раз, когда мы провели эту строку кода.
Но вы, вероятно, не смотрите на кишки вашего микропроцессора. Вы, вероятно, не имеете представления, что использовалось точное семя, в последний раз этот код был запущен. Итак, для всех практических целей число случайно – тебе . И для большинства приложений, требующих «случайности», этот нижний уровень псевдо -randomness просто отлично.
Эта статья на самом деле является не глубоко погружение в удивительно-сложное преследование правда случайность. Для остальной части этой статьи я собираюсь справиться только с псевдо-случайностью. Потому что глубже Проблема, которая влияет на многие приложения, не имеет ничего общего с академическим преследованием правда случайность. Более глубокая проблема заключается в том, что большинство людей даже не распознают случайность, когда они видят это. И когда они неправильно понимают характер случайности, они склонны обвинять приложение, которое генерирует предположительно-случайную последовательность.
Случайные вхождения против случайных наборов
По моему опыту большинство людей имеют очень ограниченные вероятности вероятностей. (И в качестве игрока покера у меня есть справедливый опыт с этим.) Они обычно могут дать вам разумную оценку по вероятности, что одно событие может произойти. Но когда вы спросите их, насколько вероятно, что данный Набор событий произойдет в течение определенного периода Точность их предсказаний быстро разваливается.
Например, если я спрошу людей:
Каковы шансы на прокат 1
на одном броске из шестисторонней смерти?
Подавляющее большинство всех, которых я знаю, будет (точно), говорят, что шанс 1-в-6 (16,6%). Но Если я спрошу тех то же самое люди:
Каковы шансы на прокат 1
хотя бы раз Если я брошу шестигранный кубик шесть раз ??
Слишком часто люди считают этот сценарий и отвечают, что ответ: 100%. Их (ошибочные) рассуждения идут так:
Если шансы на прокат 1
1-в-6, то шансы прокатки хотя бы одного 1
, над шесть броски, это 1/6 + 1/6 + 1/6 + 1/6 + 1/6 +/6%
.
(Если вы не уверены в ответе самостоятельно, шанс прокатиться на 1
, по крайней мере один раз в течение шести рулонов шестисторонней смерти: 66,6%.)
В целом, люди также плохо работают, когда их просят оценить распределение всего случайного набора. Например:
Давайте представим, что у нас есть один, шестигранный умирают. И мы собираемся катиться, что умереть шесть раз. Но прежде чем мы сделаем эти рулоны, мы будем задавать людей предсказывать Сколько раз каждый номер будет происходить. Большинство людей записали предсказание, которое будет выглядеть что-то подобное:
Number of rolls that will result in `1`: 1 Number of rolls that will result in `2`: 1 Number of rolls that will result in `3`: 1 Number of rolls that will result in `4`: 1 Number of rolls that will result in `5`: 1 Number of rolls that will result in `6`: 1 -- Total rolls that will occur 6
Так вот критический вопрос:
Каковы шансы, что вышеперечисленное прогнозирование будет правильным ??
Ответ удивит многих людей.
Существует шанс 1,5%, что каждое из шести чисел произойдет только Однажды в течение шести разных рулонов.
Другими словами, есть шанс 98,5%, что эти шесть рулонов будут не привести к каждому номеру, происходящему один раз (и только один раз).
Фантомные узоры
Точно так же, как мы можем не понимать вероятность случайных вхождений, мы также можем «воспринимать» неслучайные события, которые происходят в середине случайных шум Отказ Человеческий мозг, по сути, аналоговый шаблон, соответствующий машине. Эта черта превратилась в миллионы лет – и мы бы не были бы здесь сегодня, если бы это не было.
Вы не можете дождаться, чтобы отреагировать, пока лев прыгнул на вас. Вы должны быть в состоянии различить узор его лица – даже когда он в основном скрыт в кустах.
Вы не можете дождаться, чтобы заплатить вождению своих уважение, пока он не стоит прямо перед вами. Вы должны быть в состоянии различить узор его внешнего вида – даже когда он несколько путей от улицы.
Другими словами, сопоставление шаблона обычно является Хорошо предмет. Мы хотим определить шаблоны как можно раньше и как можно чаще. Но эта уклонная способность часто может работать против нас – потому что мы иногда воспринимаем узоры где они не существуют Отказ (Кстати, имя для этого: Паридолия .) И когда мы убедимся, что появился шаблон, мы также убедимся, что так называемый «случайный» генератор не удался.
Мы предполагаем, что узоры не существуют в случайном шуме. И поэтому, если мы воспринимать Узор в случайном шуме, мы прыгаем к выводу, что этот «шум» на самом деле вообще не случайно. Чтобы увидеть, как это играет в реальной жизни, давайте рассмотрим сценарий с помощью каких-то игральных карт.
Представьте, что у меня есть стандартная колода из 52 карт. Мы предположим, что это «справедливый» палуба (здесь нет волшебника), и что я дал ему обширную перетасовку, используя тщательные и «принятые» методы. После того, как колода была полностью рандомизирована, я вытащил верхнюю карточку с палубы, и это:
Туз пик
Это приведет к удивлению вас? Надеюсь нет. Потому что, предполагая, что колода «Ярмарка», и мои навыки спретра являются полными, туз пик имеет одинаковые шансы о том, чтобы заканчиваться на вершине колоды, как и любая другая карта.
Так что теперь я положил туз пики обратно в колоду. И я снова проводлю тщательный и расширенный перерыв всех 52 карт. Однажды я закончу, я вытащил верхнюю карточку с палубы, и это:
Туз пик(!)
Это приведет к удивлению вас? Может быть. Если ничего другого, это, безусловно, ощущается как странное совпадение, нет? Но я предлагаю, что даже самый хардкорный теоретик заговора признал, что это возможно Для той же карты, чтобы перетасоваться на вершину колоды дважды подряд.
Так что теперь я положил туз пики обратно в колоду. И я снова проводлю тщательный и расширенный перерыв всех 52 карт. Однажды я закончу, я вытащил верхнюю карточку с палубы, и это:
Туз пик!!!!!
OK. Я почти могу слышать Вы думаете прямо сейчас. Вы говорите: «C’mmonnn … Туз пик? Три раз в ряд ?? Это Должен Будьте оснащены! » Но вот мой вопрос вам:
Сколько раз нужна туз пики с вершины колоды, прежде чем мы сможем Доказать что колода и/или метод перетасовки и/или человек, делающий перетасовку – это оснащенный ??
Ответ очень простой. Пока мы ничего не оцениваем, кроме наблюдаемых результатов, Это невозможно когда-либо заключить, окончательно, что любая часть процесса «оснащена» Отказ Это связано с тем, что, без более глубокого анализа процессов, которые окружают постоянно повторяющийся туз пик, невозможно определить, что это не просто, просто невероятная последовательность событий.
Быть ясным, я понимаю, что на практическом уровне в определенный момент невероятный характер последовательности становится SOOOO невероятно, а SOOOO разум, чтобы выбросить целостность всего упражнения на вопрос. Чтобы поставить по этому пути, вы можете достичь точки, где «статистическая невероятность» становится неотличимой от «невозможности».
Но я указываю на эти фантомные узоры потому что твой Пользователи будет гораздо быстрее претендовать «невозможность», чем вы.
Какая разница??
Эта статья будет двухподаром. Если я попытаюсь покрасить это в одно в блоге, никто никогда не прочитал его. Часть два объяснят, в некоторых деталях, почему программисты не могут игнорировать эти проблемы.
Это может почувствовать себя как «проблемы», которые я изложил, являются лишь когнитивными предубеждениями, которые не имеют ничего общего с вашим кодом. Но во второй части я собираюсь контур, как эти умственные ловушки не просто пользователи ‘ проблема. Даже если ваш код «идеально», и ваша рандомизация математически безупречный , это не так хорошо, если пользователи не доверие Ваш процесс.
В частности, я собираюсь наметить некоторые реальные случаи использования из Spotify, где они отталкивали некоторые из своих собственных подписчиков, потому что они не смогли объяснить все способы, которыми люди не могут постичь случайность. Я также собираюсь проиллюстрировать, как игнорирование проблемы может выключить своих собственных клиентов – но слишком сложно «исправить», это также может сделать проблему хуже Отказ
Оригинал: “https://dev.to/bytebodger/random-can-break-your-app-58bo”