Требуется обновление браузера.

Аппаратные генераторы случайных чисел


Просмотров: 5153
19 октября 2016 года
Обновление: 10 мая 2022
Обновление: 7 мая 2021
Обновление: 25 апреля 2021
Обновление: 7 августа 2017
Обновление: 12 февраля 2017
Обновление: 13 января 2017
Обновление: 4 января 2017
Обновление: 2 января 2017
Обновление: 18 декабря 2016

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

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

Так вот: вопрос-то я поднимал, но в разговорах, время от времени, наталкиваюсь, с одной стороны - на непонимание собеседниками аспектов генерации, с другой - на интерес к игральным костям, с диапазоном выходных значений отличным от [1;6]. Данное обстоятельство подтолкнуло меня сделать небольшой обзор генераторов, имеющихся в продаже которые я сумел приобрести.

На заметку
По-английски, игральная кость - dice, поэтому кубик (имеющий, соответственно, 6 равновероятных состояний) обозначается как 1D6. Результат бросания нескольких (N) кубиков, или одного кубика несколько (N) раз - обозначается как ND6.


Равномерное распределение


В этом разделе рассмотрены кости с равномерным (в теории) распределением результатов. Для генераторов 2d6, 2d10 и т.п. приведён алгоритм, сохраняющий равномерное распределение итогового результата.

На заметку
В соответствующем столбце указаны лишь диапазоны, которые можно получить посредством алгоритмов, обеспечивающих отображение всех возможных состояний исходного генератора в новые состояния. Например, для кубика не указывается диапазон [1;5], так как алгоритм его генерации (с сохранением равномерного распределения) требует произвольного количества (которое, тем не менее, можно оценить аналитически) бросков: необходимо перебрасывать кубик, если выпало "6" (для него нет отображения).

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

Набросок на Python
123456789
N = 12 # Укажите максимальную мощность генератора (3D6 => N=6**3=216)
if N < 3:
    nums = [N]
else:
    nums = [int(N / x) for x in range(1, N - 1) if N % x == 0]

diaps = ["[1;" + str(x) + "]" for x in nums]
text = ", ".join(diaps)
print(text)

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

Внешний вид
Название
Диапазон значений
Примечание
const, 1D1
[1;1]
Любой объект, обладающий постоянным (в обозримом времени) состоянием (в некотором смысле), рассматриваемого нами параметра. Я и не предполагал, что кто-то будет выпускать такие игральные кости, так как они бесполезны для классического (игрового) применения. Но, я забыл про сувенирную продукцию.

За основу взят куб, на каждую грань которого нанесено единственно возможное для данного генератора значение. Формально, одна пятёрка не отличается от другой.
1D2
[1;2]*
Самый дешёвый генератор случайных чисел (можно взять монетку номиналом в 1 копейку), который всегда под рукой. «Орёл или решка». см. ещё. Существует малая вероятность выдачи неопределённого значения (монетка может встать на ребро, существование которого - неминуемая "плата" за попытку имитации двумерного объекта в трёхмерном Мире).

Сувенирная продукция радует нас специально подготовленными для наших задач "монетами". Конкретно этот экземпляр я приобрёл в Туле. Маркировка следующая:
Цитата
ДА - на Ваш вопрос ответ всегда
Цитата
НЕТ - на Ваш вопрос таков ответ
Используя результат N бросков, можно получить диапазон [1;2N].
1D2
[1;2]
Любопытный генератор, полученный сужением диапазона 1D6-генератора. По сути, результат образуется как
1
R=ceil(rnd/3)
(Но можно и, например, через таблицу соответствия значений.) Несколько лучше варианта с монеткой, так как практически отсутствует возможность выдачи значения вне диапазона. Используя результат N бросков, можно получить диапазон [1;2N].
1D3
[1;3]
Как и в случае с 1D2, генератор получен путём сужения диапазона 1D6-генератора. Маркировка на гранях: "да", "нет", "может быть" (каждый вариант повторен).

Любопытно, что данный кубик я обнаружил в магазине случайно, так как товар проходил как кубик для гадания на решения. Вот так простая смена маркировки кодкоманда, концептуально меняет для некоторых пользователей область применения предмета. На самом деле, разумеется, нет никаких проблем в том, чтобы взять любой ZDN-генератор, придумать к нему (его выходным значениям) командный алфавит объёмом NZ и заняться гаданием.

Спасибо пользователю за присланный снимок его экземпляра 1D3-генератора (вторая фотография). Данная игральная кость позаимствована из игры "Tick...Tack...Boom!". Принцип тот же: каждый вариант повторён.

Об использовании композиции из N бросков - см. ниже.
1D4
[1;4],[1;2]
Генератор имеет форму правильного тетраэдра (правильного многогранника с минимальным количеством граней, возможного в трёхмерном евклидовом пространстве). Для определения результата броска удобно использовать число возле нижней грани (читаемое без дополнительных вращений надписи). Об использовании композиции из N бросков - см. ниже.
1D6
[1;6],[1;3],[1;2]
Думается, что это самый популярный (после монетки) аппаратный ГСЧ. Генератор имеет форму гексаэдра (куба). Для определения результата броска удобно использовать число на верхней грани. Наиболее частый вариант маркировки - рисунок из точек. Встречаются варианты с числовым кодированием граней, с маркировкой рисунками, и смешанные варианты.

Обратите внимание на кубик от LEGO (4-ая фотография сверху): согласно фильму от National Geographic, пресс-форма для изготовления этого кубика стоит 0.25 млн. евро (проблема в органичном сочетании резины и пластика). Спасибо читателю блога за предоставленный для съёмок экземпляр.

Кубик с божьей коровкой, на мой взгляд, удачно обыгрывает графическую созвучность рисунка на крыльях жука Coccinella septempunctata (у которого, впрочем, семь точек на надкрыльях) и точек на гранях игральной кости. Забрал последний экземпляр в магазине.

Кубик с маркировкой 2i - "куб удвоения" для игры в нарды. Исходы расположены на числовой прямой неравномерно, но вероятности самих исходов - одинаковы. Вы можете взять двоичный логарифм от исхода и получить "классический" кубик.

Об использовании композиции из N бросков - см. ниже.
1D8
[1;8],[1;4],[1;2]
Октаэдр - следующий за кубом (в порядке возрастания количества граней) правильный многогранник. Не перепутайте "6" и "9"! Об использовании композиции из N бросков - см. ниже.
1D10
[0;9],[0;4],[0;1]
Кость имеет весьма специфическую форму, которую сперва можно принять за бипармиду (дельтаэдр). На самом деле, каждая грань представляет собой дельтоид, а сама кость, очевидно - банальный пятиугольный трапецоэдр (5 * 2 = 10 граней, 5 * 4 = 20 рёбер).

Данный генератор часто нужен в игровом процессе. Об использовании композиции из N бросков - см. ниже.
1D12
[1;12],[1;6],[1;4],[1;3],[1;2]
Генератор имеет форму додекаэдра. Только у него и куба - среди правильных многогранников, возможных в трёхмерном евклидовом пространстве - грань имеет форму, отличную от треугольника.
Цитата
Пожалуй, самый древний предмет в форме додекаэдра был найден в северной Италии, около Падуи, в конце XIX века, он датируется 500 г. до н. э. и предположительно использовался этрусками в качестве игральной кости
Об использовании композиции из N бросков - см. ниже.
1D20
[1;20],[1;10],[1;5],[1;4],[1;2]
Икосаэдр - правильный многогранник с максимальным (среди возможных в трёхмерном евклидовом пространстве) количеством граней. Об использовании композиции из N бросков - см. ниже.
1D30
[1;30],[1;15],[1;10],[1;6],[1;5],[1;3],[1;2]
Генератор - ромботриаконтаэдр.

Об использовании композиции из N бросков - см. ниже.
2D6
[1;36],[1;18],[1;12],[1;9],[1;6],[1;4],[1;3],[1;2]
Генератор - два гексаэдра. В компактном варианте - один физически содержится внутри другого. Аналог так называемого "процентного кубика" (пары кубиков) для системы счисления с основанием 6: внутренний кубик кодирует значение младшего разряда, внешний - старшего (можно и наоборт). На фотографии, таким образом, генератор выдал число 056=510. "Классический" процентник должен иметь маркировку граней от 0 до N-1, то есть всех цифр системы счисления с основанием N. Если маркировка не содержит 0, то вычитание единицы из значения грани ложится на оператора генератора, впрочем, для младшего разряда операцию можно не проводить, если диапазон значений генератора [1;N], а не [0;N-1]. Например, 3610 выглядит как шестёрки на гранях двух кубиков сразу, или 566=(5*61+6*60)10=(30+6)10=3610.
Возможно, Вас терзает вопрос: "Что за бред? Какие ещё системы? - почему просто не сложить показания обоих кубиков?" Если аббревиатура Ц.П.Т. Вам ничего не говорит, то Вам - сюда. К тому же, 2⩽
rnd(1;6)+rnd(1;6)
⩽12. (Нужно ли пояснять: чем плохо умножение результатов?)
Об использовании композиции из N бросков - см. ниже.
1D60
[1;60],[1;30],[1;20],[1;15],[1;12],[1;10],[1;6],[1;5],[1;4],[1;3],[1;2]
Ожидал, что генератор будет иметь форму пентакисдодекаэдра, но - нет. Каждая грань фигуры имеет форму дельтоида.

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

Об использовании композиции из N бросков - см. ниже.
1D100
[1;100], [1;50], [1;25], [1;20], [1;10], [1;5], [1;4], [1;2]
Честно говоря, уже немного охладел к теме, но интерес собеседника мотивировал меня разместить информацию об этом генераторе.

Итак, самый мощный генератор (из имеющихся у меня), представляющий собой единый элемент (а не систему из нескольких костей), то есть генератор типа 1Dx. Количество граней столь велико, что это уже не столько игральный «кубик» (как обобщённо называют игральные кости), сколько игральный «шар». Дальнейшее увеличение выглядит утопичным – так сказать, на этом генераторе наступает кризис классической архитектуры: добавление ещё одной кости (см. ниже 2D10) позволяет получить те же мощности, уменьшив количество граней каждого отдельного элемента в 10 раз.

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

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

Об использовании композиции из N бросков - см. ниже.
2D10
[0;99],[0;49],[0;24],[0;19],[0;9],[0;4],[0;3],[0;1]
Генератор имеет форму дельтаэдра, конкретно - пятиугольной бипирамиды (одна бипирамида в другой). банального пятиугольного трапецоэдра (каждая грань представляет собой дельтоид). Процентник с удобным человеку интерфейсом. "Классический" процентник имеет маркировку граней от 0 до 9 - для получения числа, нужно просто записать в строчку показания обоих кубиков. На фотографии (на сколько можно судить) запечатлён момент генерации числа 12 (или 21).
Об использовании композиции из N бросков - см. ниже.
2D12
[1;144],[1;72],[1;48],[1;36],[1;24],[1;18],[1;16],[1;12],[1;9],[1;8],[1;6],[1;4],[1;3],[1;2]
Генератор - два додекаэдра.

Об использовании композиции из N бросков - см. ниже.
3D6
[1;216],[1;108],[1;72],[1;54],[1;36],[1;27],[1;24],[1;18],[1;12],[1;9],[1;8],[1;6],[1;4],[1;3],[1;2]
Генератор - три кубика в шестигранном прозрачном боксе. Оцените юмор: шесть в КУБЕ. Понимаете: "три шестигранника в КУБЕ" и мощность генератора = 63 - "шесть в КУБЕ".

Я неоднократно видел данный генератор в интернет-магазинах, но, из-за скудного описания и плохих фотографий, был уверен, что это не 3D6. Полюбуйтесь: какие изумительные диапазоны он может создавать!

Внутренние кубики очень лёгкие, поэтому, порой, прилипают (из-за статики) к стенкам бокса. С другой стороны - походный вариант игры: и игральные кости, и стакан, и стол - всё заключено в маленькую коробку (поэтому грани бокса без маркировки).

Об использовании композиции из N бросков - см. ниже.
2D20
[1;400],[1;200],[1;100],[1;80],[1;50],[1;40],[1;25],[1;20],[1;16],[1;10],[1;8],[1;5],[1;4],[1;2]
Генератор - два икосаэдра. За один такт работы (бросок) этот гигант генерирует более чем один байт иформации (шума). (Точнее, log2(400) бит.) Об использовании композиции из N бросков - см. ниже.

На заметку
О том, как и какие диапазоны можно получить (не нарушая исходное распределение), используя композицию из нескольких генераторов, я подробно написал в этой заметке.
В случае, если допускается переброс кости, Вы можете просто откидывать числа вне диапазона. Таким образом, посредством генератора 1DZ, Вы можете получить любые дискретные диапазоны от [1;2] до [1;Z], не нарушив равномерное распределение.


Иные распределения


Приведены только кости, нативно порождающие неравномерное распределение. Так как для генераторов 2d6, 2d10 и т.п. можно придумать множество алгоритмов интерпретации результатов (порождающих различные распределения), данные кости здесь не указаны (см. их описание в разделе выше).

Внешний вид
Кол-во исходов
Распределение
Примечание
5

1 - 1/6;
2 - 1/6;
3 - 1/6;
Автобус - 1/6;
МИСТЕР МОНОПОЛИЯ - 2/6;
Кубик для быстрой игры в "Монополию". Значок "МИСТЕР МОНОПОЛИЯ" присутствует дважды.
Спасибо читателю блога за предоставленный для съёмок экземпляр.
6

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

Запись опубликована в категориях:

Инструменты Математика в быту Алгоритмы и аспекты  
 

Комментарии

Инкогнито
  Загружаем captcha
Rachulya Noreiji
21 Rachulya Noreiji  Гугл 16 апреля 2017 09:06
Статья немного "желтовата", но любопытно:
http://nerdist.com/behold-the-worlds-oldest-known-d20/