Это не официальный сайт wikipedia.org 01.01.2023

Инверсный конгруэнтный метод — Википедия

Инверсный конгруэнтный метод

Инверсный конгруэнтный метод (или генератор Эйхенауэра — Лена, также возможно Эйченауэра — Лехна) — метод генерации псевдослучайных чисел, основанный на использовании обратного по модулю числа для генерации следующего члена последовательности.

Пример инверсного конгруэнтного генератора с параметрами n = 7, seed = 0, a = 4, c = 5

ОписаниеПравить

Инверсный конгруэнтный метод был предложен Эйченауэром и Лехном в 1986 году[1] как замена линейному конгруэнтному методу, не обладающему решётчатой структурой[2].

Данный метод состоит в вычислении последовательности случайных чисел X n   в кольце вычетов по модулю натурального числа n  .

Основным отличием от линейного метода является использование при генерации последовательности числа, обратного к предыдущему элементу, вместо самого предыдущего элемента.

Параметрами генератора являются[3]:

s e e d   — соль
a   — множитель ( 0 a < n )  
b   — приращение ( 0 b < n )  

В случае простого nПравить

Значение членов последовательности задается в виде:

x 0 = s e e d  
x i + 1 ( a x i 1 + b ) mod n     if x i 0  
x i + 1 = b   if x i = 0  

В случае составного nПравить

Если число X n   является составным, элементы последовательности вычисляются следующим образом:

x 0 = s e e d  
x i + 1 ( a x i 1 + b ) mod n    

Параметры подбираются таким образом, чтобы ( s e e d , n ) = 1 ; ( a , n ) = 1  .

ПериодПравить

Последовательность x i + 1   периодична, причём период не превышает размерности кольца n  . Максимальный период n   достигается в случае, если многочлен f ( x ) = x 2 b x a F n [ x ]   является примитивным. Достаточным условием максимального периода последовательности является такой выбор констант a   и b  , чтобы многочлен f ( x )   был неприводим[4].[неавторитетный источник?][источник не указан 2598 дней]

В случае составного n   максимально возможный период равен φ ( n )   (функция Эйлера)[5].[неавторитетный источник?][источник не указан 2598 дней]

ПримерПравить

Инверсный конгруэнтный генератор с параметрами n = 5 , a = 2 , b = 3 , s e e d = 1   генерирует последовательность { 1 , 0 , 3 , 2 , 4 , 1 , . . . }   в кольце F 5  , где числа 1   и 4  , а также 2   и 3   обратны друг другу. В данном примере многочлен f ( x ) = x 2 3 x 2   неприводим в F 5 [ x ]   и числа 0 , 1 , 2 , 3 , 4   не являются его корнями, благодаря чему период максимален и равен n = 5  .

Примеры реализацииПравить

PythonПравить

C++Править

Составные инверсные генераторыПравить

 
Объединение двух инверсных конгруэнтных генераторов

Основным недостатком инверсных конгруэнтных генераторов является возрастание сложности вычислений при увеличении периода. Данный недостаток исправлен в составных инверсных конгруэнтных генераторах.

Конструкция составных инверсных генераторов представляет из себя объединение двух или более инверсных конгруэнтных генераторов.

Пусть p 1 , , p r   — различные простые числа, каждое p j 5  . Для каждого индекса j   в пределах 1 j   r   пусть { y n ( j ) } n 0   — последовательность элементов F p j   с периодом p j  . Другими словами, { y n ( j ) | 0 n p j } F p j  .

Пусть { x n ( j ) } n 0   — последовательность случайных чисел в пределах x n ( j ) [ 0 ; 1 ]  , где x n ( j ) = y n ( j ) p j ; n 0 ; 1 j   r  .

Результирующая последовательность ( x n ) n 0   определяется как сумма: x n := x n ( 1 ) + x n ( 2 ) + + x n ( r ) mod 1  .

Период результирующей последовательности T = p 1 p 2 p r  [6].

Одни из преимуществ данного подхода является возможность использовать инверсные конгруэнтные генераторы работающие параллельно.

Пример составного инверсного генератораПравить

Пусть r = 2 , p 1 = 5   и p 2 = 7  . Для упрощения положим ( y k ( 1 ) ) k 0 = ( 0 , 1 , 2 , 3 , 4 , )   and ( y k ( 2 ) ) k 0 = ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , )  . Для каждого 1 n 35   вычислим x n = y n ( 1 ) 5 + y n ( 2 ) 7  .

Тогда ( x n ) n 0 = { 0.0 ,   0.34 ,   0.69 ,   0.03 ,   0.37 ,   0.71 ,   0.06 ,   0.4 ,   0.74 ,   0.09 ,   0.43 ,   0.77 ,   0.11 ,   0.46 ,   0.8 ,   0.14 ,   0.49 ,   0.83 ,   0.17 ,   0.51 ,   0.86 ,   0.2 ,   0.54 ,   0.89 ,   0.23 ,   0.57 ,   0.91 ,   0.26 ,   0.6 ,   0.94 ,   0.29 ,   0.63 ,   0.97 ,   0.31 ,   0.66 ,   0.0 }  . То есть мы получили последовательность с периодом 5 × 7 = 35  .

Чтобы избавится от дробных чисел, мы может умножить каждый элемент полученной последовательности на 35   и получить последовательность целых чисел: ( x n ( i n t ) ) n 0 = { 0 ,   12 ,   24 ,   1 ,   13 ,   25 ,   2 ,   14 ,   26 ,   3 ,   15 ,   26 ,   4 ,   16 ,   28 ,   5 ,   17 ,   28 ,   6 ,   18 ,   30 ,   7 ,   19 ,   31 ,   8 ,   20 ,   32 ,   9 ,   21 ,   33 ,   10 ,   22 ,   34 ,   11 ,   22 ,   0 }  

Преимущества инверсных конгруэнтных генераторовПравить

Инверсные конгруэнтные генераторы применяются в практических целях по ряду причин.

Во-первых, инверсные конгруэнтные генераторы обладают достаточно неплохой равномерностью[7], кроме того полученные последовательности совершенно лишены решетчатой структуры, характерной для линейных конгруэнтных генераторов[1][8][9].

Во-вторых, двоичные последовательности, полученные с помощью ИКГ не имеют нежелательных статистических отклонений. Полученные данным методом последовательности проверены рядом статистических тестов и остаются стабильными при изменении параметров[7][8][10][11].

В-третьих, составные генераторы обладают теми же свойствами, что и одиночные линейные инверсные генераторы[12], но при этом имеют период значительно превышающий период одиночных генераторов[13]. Кроме того, устройство составных генераторов позволяет добиться высокого прироста производительности при использовании на многопроцессорных системах[14].

Существует алгоритм, позволяющий разрабатывать составные генераторы, обладающие предсказуемыми длиной периода и уровнем сложности, а также хорошими статистическими свойствами выходных последовательностей [15].

Недостатки инверсных конгруэнтных генераторовПравить

Основным недостатком инверсных конгруэнтных генераторов является медленная скорость генерации элементов последовательности: на вычисление одного элемента последовательности затрачивается O ( log n )   операций умножения[16][неавторитетный источник?].

ПримечанияПравить

  1. 1 2 Кнут, 2013, с. 45.
  2. Eichenauer, Lehn, 1986.
  3. Hellekalek, 1995, p. 255: «We have to choose the modulus p, a multiplier a, an additive term b».
  4. Amy Glen: On the Period Length of Pseudorandom Number Sequences, 2002, 5.3, p. 67: «If x2-bx-a is a primitive polynomial over Fp then Xi has full period length p».
  5. Amy Glen: On the Period Length of Pseudorandom Number Sequences, 2002, 5.4, p. 69: «The sequence Xi is purely periodic with period length d ≤ φ(m)».
  6. Hellekalek, 1995, p. 256: «It is elementary to see that the period of the sequence (Xn)n equals M := p1*p2*...* pr».
  7. 1 2 Eichenauer-Herrmannn, Niederreiter, 1992.
  8. 1 2 Eichenauer-Herrmannn, 1991.
  9. Eichenauer-Herrmannn, Grothe, Niederreiter et al, 1990, p. 81: «These generators do not show the simple lattice structure of the widely used linear congruential generators».
  10. Eichenauer-Herrmannn, 1993.
  11. Hellekalek, 1995, p. 261: «The excellent theoretical and empirical properties of inversive methods remain stable under the variation of parameters, provided we have maximal period length».
  12. Bubicz, Stoklosa, 2006, p. 2: «Compound approach gives the same outstanding properties of produced sequences as single inversive generators».
  13. Bubicz, Stoklosa, 2006, p. 2: «Compound inversive generators allow obtaining period length significantly greater than obtained by a single ICG».
  14. Bubicz, Stoklosa, 2006, p. 2: «They seem to be designed for application with multiprocessor parallel hardware platforms».
  15. Bubicz, Stoklosa, 2006, p. 2: «There exists steady and simple way of parameter choice, based on the Chou algorithm. It guarantees maximum period length».
  16. Anne Gille-Genest: Pseudo-Random Numbers Generators, 2012, p. 12: «The main disadvantage of those both inverse generators is that a calculation of one random number takes O(log m) multiplication in Fm so the algorithm is not fast».

ЛитератураПравить

Книги
Статьи