![]() КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Генератор псевдослучайных чисел Mersenne TwisterПринцип получения псевдослучайных чисел В качестве наглядного примера, рассмотрим сначала один из простейших генераторов псевдослучайных чисел – метод середины квадратов, предложенный Дж. Нейманом в 1946 г. Пусть g0 = 0.9876 - число, инициализирующее случайную последовательность. Возведение его в квадрат даёт восьмизначное число
Четыре средние цифры этого числа можно использовать как следующий элемент псевдослучайной последовательности: g1 = 0.5353. Дальнейшая генерация аналогична:
Этот пример демонстрирует основные особенности генераторов псевдослучайных чисел: · использование предыдущих членов последовательности для получения следующих; · получение очередного числа как части мантиссы некоторого промежуточного результата; · существование конечного периода последовательности; в показанном примере последовательность повторится полностью после появления числа, совпадающего с одним из предыдущих (поскольку {gi+1=f(gi), gi+2=f(gi+1), ¼}, то совпадение gk = gi приведёт к тому, что gk+1=f(gk) =f(gi), и так далее). Алгоритм генератора Mersenne Twister Принцип работы генератора псевдослучайных чисел Mersenne Twister [11],[14], который мы в дальнейшем будем использовать, похож на показанный выше. Этот алгоритм относится к числу генераторов, основанных на линейных рекуррентных соотношениях, связывающих следующие элементы случайной последовательности {xi} с предыдущими. Элементы последовательности xi в алгоритме Mersenne Twister рассматриваются как w-компонентные векторы из чисел 0 и 1 (в дальнейшем - векторы над полем F2), представляющие собой побитовое представление целых чисел w-битной точности. Ниже w = 32, поскольку именно это значение соответствует одинарной точности вычислений на графических процессорах. Рекуррентное соотношение для генератора Mersenne Twister имеет вид
где Для того, чтобы в умножение на матрицу
где a = [aw-1, aw-1, ¼, a0] – вектор над полем F2, представляющий некоторое целое число с побитовым представлением aw-1, aw-1, ¼, a0. Тогда умножение Здесь z = y Å (z >> u); z = z Å (z << s) AND b; z = z Å (z << t) AND c; z = z Å (z >> l); Здесь u, s, t, l, b и c – параметры генератора, представляющие собой 32-битные векторы над полем F2, соответствующие некоторым целым числам w-битной точности. В результате всех операций, очередной элемент псевдослучайной последовательности xk (k ≥ n) оказывается функцией трёх предыдущих элементов:
Значения m и n, вместе с другими константами, входящими в формулы -, являются параметрами генератора. Первые n членов последовательности {x0, x1, ¼, xn-1} должны быть заданы как инициализирующая последовательность (англ. seeds). Для перехода от случайной последовательности целых чисел {xi} к последовательности вещественных чисел g Î [0; 1] достаточно разделить все числа xi на 2w. Если w = 32, то
Период генератора и значения параметров алгоритма Согласно работе [11], период генератора Mersenne Twister, - количество случайных чисел, генерируемых до зацикливания последовательности, - при оптимальных сочетаниях параметров дается формулой T = 2nw-r - 1, где n – длина инициализирующей последовательности {x0, x1, ¼, xn-1}, w и r – параметры алгоритма, рассмотренные выше. Для получения такого периода и максимального качества случайной последовательности, остальные параметры генератора (a, b, c, u, s, t, l) должны быть согласованы со значениями n, w и r [11]. В работе [11] были исследованы различные наборы параметров, в качестве лучшего из них, по качеству равномерного распределения, был принят набор n = 624, m = 397, r = 31, a = h9908B0DF, b = h9D2C5680, c = hEFC6000, u = 11, s = 7, t = 15, l = 18 [11]. Этим значениям соответствует период T = 219937 - 1 » 106002 чисел, более чем достаточный для любого практического приложения. Этот период является максимальным среди всех генераторов, обсуждавшихся в работе [11].
|