Эта статья входит в число добротных статей

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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Описание[править | править код]

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

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

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

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

 — соль
 — множитель
 — приращение

В случае простого n[править | править код]

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

  if
if

В случае составного n[править | править код]

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

 

Параметры подбираются таким образом, чтобы .

Период[править | править код]

Последовательность периодична, причём период не превышает размерности кольца . Максимальный период достигается в случае, если многочлен является примитивным. Достаточным условием максимального периода последовательности является такой выбор констант и , чтобы многочлен был неприводим[4].[неавторитетный источник][источник не указан 3042 дня]

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

Пример[править | править код]

Инверсный конгруэнтный генератор с параметрами генерирует последовательность в кольце , где числа и , а также и обратны друг другу. В данном примере многочлен неприводим в и числа не являются его корнями, благодаря чему период максимален и равен .

Примеры реализации[править | править код]

Python[править | править код]

C++[править | править код]

Составные инверсные генераторы[править | править код]

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

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

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

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

Пусть  — последовательность случайных чисел в пределах , где .

Результирующая последовательность определяется как сумма: .

Период результирующей последовательности [6].

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

Пример составного инверсного генератора[править | править код]

Пусть и . Для упрощения положим and . Для каждого вычислим .

Тогда . То есть мы получили последовательность с периодом .

Чтобы избавится от дробных чисел, можно умножить каждый элемент полученной последовательности на и получить последовательность целых чисел:

Преимущества инверсных конгруэнтных генераторов[править | править код]

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

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

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

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

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

Недостатки инверсных конгруэнтных генераторов[править | править код]

Основным недостатком инверсных конгруэнтных генераторов является медленная скорость генерации элементов последовательности: на вычисление одного элемента последовательности затрачивается операций умножения[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».

Литература[править | править код]

Книги
Статьи