Найти в Дзене
Наша жизнь и IT

Как нас обманывают "честным" рандомом?

Оглавление

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

Photo by Tachina Lee on Unsplash
Photo by Tachina Lee on Unsplash

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

  • Равномерность
  • Независимость
  • Стохастичность

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

Равномерность

Равномерность ─ это когда все числа, которые когда либо встречались в последовательности, появляются примерно одинаковое количество раз. Попробуем сгенерировать большую последовательность целых чисел от 1 до 10 и построить по этой последовательности гистограмму. Например, если у числа 6 столбик высотой 0.5, то это означает, что число 6 встречается в последовательности с частотой 0.5 (50%). Более простым языком, наша последовательность наполовину состоит из шестерок.

Частотная гистограмма
Частотная гистограмма

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

-3

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

Создаем свой рандом

В данном коде мы снова генерируем случайные числа от 1 до 10, только теперь производим с ними абсолютно странные математические вычисления, объединяем в одно число и получаем вот такую гистограмму:

-4

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

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

Вывод

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