Краткие сведения из теории построения генераторов

1. Мультипликативный конгруэнтный метод

Стандартным случайным числом называют величину z, равномерно распределенную на интервале (0,1). Плотность Краткие сведения из теории построения генераторов - student2.ru распределения случайного числа z имеет вид

Краткие сведения из теории построения генераторов - student2.ru (1)

Генератор стандартных случайных чисел должен выдавать по запросу случайное число z. Повторяя запросы, можно получить последовательность Краткие сведения из теории построения генераторов - student2.ru случайных чисел. Эти числа должны быть статистически независимы. При статистическом моделировании на ЭВМ вместо случайных последовательностей используют псевдослучайные последовательности Краткие сведения из теории построения генераторов - student2.ru , формируемые по детерминированным алгоритмам. При решении широкого класса задач они могут считаться как случайные.

Для генерации чисел Краткие сведения из теории построения генераторов - student2.ru применяются различные программы, называемые генераторами стандартных псевдослучайных чисел (ГСПЧ). Среди разнообразных алгоритмов вычисления Краткие сведения из теории построения генераторов - student2.ru широкое распространение получил так называемый мультипликативный конгруэнтный алгоритм. Он основан на применении операции

A mod B вычисления неотрицательного остатка от деления на A и B. Этот алгоритм при известных значениях трех положительных целочисленных параметров Краткие сведения из теории построения генераторов - student2.ru предписывает последовательно вычислять целые псевдослучайные числа Краткие сведения из теории построения генераторов - student2.ru по рекуррентной формуле:

Краткие сведения из теории построения генераторов - student2.ru (2)

и через них – стандартные псевдослучайные числа Краткие сведения из теории построения генераторов - student2.ru по формуле:

Краткие сведения из теории построения генераторов - student2.ru (3)

Получаемая с помощью ГСПЧ последовательность Краткие сведения из теории построения генераторов - student2.ru должна быть как можно более близка по своим статистическим свойствам к математической последовательности Краткие сведения из теории построения генераторов - student2.ru стандартных случайных чисел. Отсюда следует, что для идеального ГСПЧ должны выполняться следующие два требования:

- числа Краткие сведения из теории построения генераторов - student2.ru должны иметь равномерное распределение на отрезке (0,1);

- числа Краткие сведения из теории построения генераторов - student2.ru должны быть статистически независимы.

Близость мультипликативного конгруэнтного ГСПЧ к идеальному определяется тем, насколько удачно в формуле (2) подобраны параметры Краткие сведения из теории построения генераторов - student2.ru (модуль, множитель и начальное значение).

2. Выбор модуля, множителя и начального значения.

Очевидно, что параметры Краткие сведения из теории построения генераторов - student2.ru следует выбирать таким образом, чтобы в последовательности (1) целых псевдослучайных чисел Краткие сведения из теории построения генераторов - student2.ru ни при каком i не появилось число Краткие сведения из теории построения генераторов - student2.ru , так как в этом случае все последующие члены также будут нулевыми и последовательность не будет псевдослучайной. Чтобы избежать нулевых Краткие сведения из теории построения генераторов - student2.ru достаточно выбрать параметр Краткие сведения из теории построения генераторов - student2.ru четным, а множитель Краткие сведения из теории построения генераторов - student2.ru и начальное значение Краткие сведения из теории построения генераторов - student2.ru - нечетными. В этом случае все Краткие сведения из теории построения генераторов - student2.ru будут нечетными и тем самым исключается возможность появления нулевого члена.

Принадлежность чисел Краткие сведения из теории построения генераторов - student2.ru отрезку (0,1) автоматически обеспечивается формулами (2) и (3). Действительно, каждое Краткие сведения из теории построения генераторов - student2.ru есть неотрицательный остаток от деления некоторого числа на Краткие сведения из теории построения генераторов - student2.ru . Следовательно, Краткие сведения из теории построения генераторов - student2.ru . Разделив это неравенство на Краткие сведения из теории построения генераторов - student2.ru , получим Краткие сведения из теории построения генераторов - student2.ru , или, с учетом (3), Краткие сведения из теории построения генераторов - student2.ru .

Нетрудно доказать, что последовательность Краткие сведения из теории построения генераторов - student2.ru и Краткие сведения из теории построения генераторов - student2.ru заведомо будут периодическими. Это вытекает хотя бы из того, что число возможных остатков от деления на m конечно и, таким образом, конечно число возможных значений x. Длина периода должна быть достаточно велика, чтобы при практическом использовании Краткие сведения из теории построения генераторов - student2.ru они не повторялись. Поэтому рекомендуется для построения ГСПЧ брать достаточно большое значение модуля m.

Еще одно заведомое отличие последовательности Краткие сведения из теории построения генераторов - student2.ru от идеальной заключается в том, что эти числа могут принимать в интервале (0,1) лишь дискретный ряд значений, отстоящих друг от друга не менее чем на 1/m. Этот недостаток также становится практически несущественным если выбирается достаточно большое число m.

Равномерность распределения чисел Краткие сведения из теории построения генераторов - student2.ru обычно достигается за счет выбора параметров Краткие сведения из теории построения генераторов - student2.ru , не имеющих общих делителей. В этом случае множество остатков Краткие сведения из теории построения генераторов - student2.ru , вычисляемых по формуле (1), имеет тенденцию равномерно заполнять промежуток между 0 и m.

Для обеспечения независимости следует выбирать достаточно большое значение множителя a, например, a > 1000, чтобы в (2) по возможности на каждом шаге произведение Краткие сведения из теории построения генераторов - student2.ru многократно превышало модуль m. Соблюдение приведенных простых рекомендаций повышает вероятность того, что выбираемые значения параметров ГСПЧ обеспечат достаточно высокое его качество. Для более достоверной оценки пригодности синтезированного ГСПЧ необходимо выполнить анализ статистических свойств генерируемой на выходе ГСПЧ псевдослучайной последовательности Краткие сведения из теории построения генераторов - student2.ru .

Контрольные вопросы

1. Какие свойства имеет последовательность Краткие сведения из теории построения генераторов - student2.ru на выходе генератора стандартных чисел?

2. Какие требования предъявляются к ГСПЧ?

3. Как вычисляется последовательность Краткие сведения из теории построения генераторов - student2.ru псевдослучайных чисел по мультипликативному конгруэнтному алгоритму?

4. Почему из конечного числа остатков от деления на модуль m вытекает периодичность мультипликативной конгруэнтной последовательности Краткие сведения из теории построения генераторов - student2.ru ?

Задания к работе

1. Изучите мультипликативный конгруэнтный метод построения ГСПЧ и рекомендации по выбору его параметров. Выберите в соответствии с этими рекомендациями значения параметров ГСПЧ.

2. Напишите программу для вычисления и вывода n чисел, порожденных генератором. В программе должна быть реализована функция выбора длины псевдослучайной последовательности (выбор n). Также, в программу должно быть включено сравнение с функцией random() построением графика функции r(n), где r – псевдослучайное число, n – номер числа.

3. Оценить полученный результат визуально на графике r(n) в сравнении с графиком функции random(). Результат должен быть схожим при одинаковом размере выборки.

Содержание отчета о работе:

1. цель работы

2. формулы генерации псевдослучайных чисел (для выбранных значений Краткие сведения из теории построения генераторов - student2.ru )

3. скриншоты, отражающие сравнение вашей функции r(x) и random(x) на графиках

4. скриншоты, содержащие сгенерированную псевдослучайную последовательность в текстовом виде (не менее 20 чисел).

5. Полный листинг программы

Рекомендации по выполнению лабораторной работы

Пример программы-генератора и сравнение со встроенной функцией С++ random() изображен на рис. 1

Краткие сведения из теории построения генераторов - student2.ru

Рис. 1 Конгруэнтный генератор и сравнение его работы с функцией random(x)/x

Для построения графиков необходимо использовать компонент Chart, поместив его на форму:

Краткие сведения из теории построения генераторов - student2.ru

Краткие сведения из теории построения генераторов - student2.ru

Затем добавить сам график двойным кликом мыши на установленном объекте и в открывшемся окне нажать Add, выбрав тип графика Point, галочку 3D убрать.

Перейти на вкладку Series и установить следующие параметры для графика:

Краткие сведения из теории построения генераторов - student2.ru

Далее, Создать объекты Button, Memo, Edit, Label, чтобы привести программу к виду на рис 1.

Каждое последующее случайное число рассчитывается на основе предыдущего случайного числа по следующей формуле:

Краткие сведения из теории построения генераторов - student2.ru = mod(k · Краткие сведения из теории построения генераторов - student2.ru + b, M).

M — модуль (0 < M);

k — множитель (0 ≤ k < M);

b — приращение (0 ≤ b < M);

r0 — начальное значение (0 ≤ r0 < M).

По этой формуле генерируются псевдослучайные целые числа. Для приведения их к виду с плавающей запятой от 0 до 1 (X), следует Краткие сведения из теории построения генераторов - student2.ru разделить на M:

X= Краткие сведения из теории построения генераторов - student2.ru /M;

В языке программирования C++ существует функция, позволяющая генерировать псевдослучайные последовательности чисел по равномерному закону распределения. Такой функцией является random(x); где x – максимальное возможное значение псевдослучайного числа, например, функция random(10); генерирует число, имеющее возможные значения в интервале [0,10]. Данная функция генерирует только целочисленные значения.

Циклический вызов данной функции позволяет сгенерировать необходимую псевдослучайную последовательность, например конструкция:

for (int i=0;i<10;i++)

Series2->AddXY(i,(double)random(10000)/10000);

строит на графике псевдослучайную последовательность из 10 чисел, имеющих значения от 0 до 1. Деление на 10000 производится для того, чтобы привести целые числа, выводимые функцией random() к типу с плавающей запятой (по аналогии с делением на M). Данная функция является аналогом той, которую создаем в данной лабораторной работе, поэтому ее удобно использовать для проверки корректности работы.

По нажатию кнопки программа должна начать генерацию любого количества чисел, указанного пользователем, для этого необходимо кликнуть 2 раза на объекте Button1 и вписать код в открывшуюся конструкцию. Считывание числа N из компоненты Edit1 следует следующим образом:

N=StrToFloat(Edit1->Text); // преобразование строки в численное значение

Остаток от деления находится в С++ следующим образом:

a=b%c; // a,b,c – переменные типа long

Выводить числа последовательно в компоненту Memo необходимо следующим образом:

Memo1->Lines->Add (ri); // ri – ваше псевдослучайное число

Их отображение удобно делать сразу следующей строкой для сравнения с функцией random на втором графике:

Series1->AddXY(i,ri);

Series2->AddXY(i,(double)random(10000)/10000);

Лабораторная работа 2

Анализ качества ГСПЧ

Цель работы

Анализ равномерности распределения и статистической независимости чисел на выходе ГСПЧ.

Наши рекомендации