67406

Разработка алгоритмов и программ тестирования генераторов СЧ

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

Информатика, кибернетика и программирование

Поскольку большая величина периода обеспечивает высокую степень случайности чисел в последовательности, то разработан ряд методов увеличения длин периода. Первый способ состоит в использовании нескольких предыдущих членов последовательности при вычислении числа Xn+1.

Русский

2014-09-10

165 KB

1 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Государственное образовательное учреждение высшего профессионального образования

Ижевский Государственный технический университет

Чайковский технологический институт (Филиал ИжГТУ)

Кафедра ИВТ

ЛАБОРАТОРНАЯ РАБОТА3,4

по курсу

« Моделирование систем »

Выполнил                                                                                                 студент гр. АСОИиУ-00

А. Л. Юрьев

Руководитель                                                                                доцент,  канд. техн.  наук

                                                                                                                             В. Г. Тарасов                                                                                     

Чайковский 2004

ЦЕЛЬ РАБОТЫ: изучение специализированных тестов для проверки генераторов равномерно распределенных случайных чисел; разработка алгоритмов и программ тестирования генераторов СЧ.

ПОСТАНОВКА ЗАДАЧИ

GRR10, m=2**9, k=3,4,5. Исследовать влияние параметра  k  на апериодичность, добиться значений апериодичности  >= 2**15.

Покер-тест (проверка комбинаций), d=6.

ОПИСАНИЕ ГЕНЕРАТОРА СЧ

Поскольку большая величина периода обеспечивает высокую степень случайности чисел в последовательности, то разработан ряд методов увеличения длин периода. Первый способ состоит в использовании нескольких предыдущих членов последовательности при вычислении числа Xn+1. Если Xn+1 зависит от Xn и Xn-1, то длину периода можно увеличить до m2, так как последовательность начнет повторятся не раньше, чем  будет выполнено равенство

   (xn+i, xn+i+1) = (xn, xn+1).

Простейший случай зависимости Xn+1 от более чем одного из предыдущих значений реализуется в последовательности Фибоначчи (обозначим GRR9):

  xn+1= (xn+xn-1) mod m.

Можно также применить датчики вида GRR10

  xn+1= (xn+xn-k) mod m,

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

ОПИСАНИЕ ПРОВЕРКИ ГСЧ

Покертест (проверка комбинаций) В этом случае величина d берется небольшой, поэтому и диапазон элементов последовательности <Jn>=<Rn>*d также невелик, и значения <Jn> называют цифрами. Например, при d=8 значения 0 Jn  7 являются восьмеричными цифрами, а при d=10 значения будут десятичными цифрами. В “классическом” покер-тесте рассматриваются N групп из пяти следующих друг за другом целых чисел (J5j, J5j+1,..., J5j+4), 0 j N. Выделяются следующие 7 типов комбинаций, отличающихся различным содержанием цифр. abcde (все разные) aabcd (одна пара) aabbc (две пары) aaabc (три одного вида) aaabb (полный сбор) aaaab (четыре одного вида) aaaaa (пять одного вида) Таким образом, количество классов категорий равно 7, и с помощью критерия 2 проверяется, соответствует ли эмпирические частоты комбинаций теоретическим вероятностям их появления. Предполагая, что каждая из цифр 0,1, ..., d-1 в последовательности J0, J1,... появляется с одинаковой вероятностью , и что отдельные члены этой последовательности независимы, можно определить распределение вероятностей различных пятерок с помощью следующих формул:

 

 

 

Значения этих вероятностей указаны в табл.1 для наиболее часто используемых d=2,4,6,8,10.

Покер-тест применяют для проверки не только равномерно распределенных, но и случайных чисел с произвольным законом распределения. Процедура формирования вспомогательной последовательности <Jn> при этом следующая. Пусть X1, X2, ... последовательность случайных чисел с функцией распределения F. Разделим область значений этой случайной величины на d равновероятных интервалов с помощью точек a0<a1<a2<...<ad-1<ad. Если случайные числа Xj действительно имеют функцию распределения F, то для каждого интервала [ai-1,ai) имеет место равенство  P{aj-1 xj < ai} = 1/d.

D=

2

4

6

8

10

abcde

0

0

0,092593

0,205078

0,3024

aabcd

0

0,234375

0,462963

0,512695

0,504

aabbc

0

0,117188

0,231481

0,153809

0,108

aaabc

0

0,234375

0,154321

0,102539

0,072

aaabb

0,625

0,117188

0,03858

0,01709

0,009

aaaab

0,3125

0,058594

0,01929

0,008545

0,0045

aaaaa

0,0625

0,003906

0,000772

0,000244

0,0001

Выполняя преобразование Jj=i для Xj[ai, ai+1), i=0, 1, 2, ... ,  d-1, как раз и получим вспомогательную последовательность случайных чисел <Jn>, каждое из которых принимает только равновероятные значения 0, 1, 2, ..., d-1.

Табл.1.


ТЕКСТ ПРОГРАММЫ

unit GRR10;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Spin, ExtCtrls;

type

 TForm1 = class(TForm)

   ListBox1: TListBox; L1: TLabel;    L3: TLabel;    L2: TLabel;

   Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    Label4: TLabel;

   Edit1: TEdit;    Edit2: TEdit;    Edit3: TEdit;    Edit4: TEdit;

   Edit5: TEdit;    Edit6: TEdit;    Label5: TLabel;    Bevel1: TBevel;

   Label6: TLabel;    Label7: TLabel;    Label8: TLabel;    Label9: TLabel;

   Label91: TLabel;    Label81: TLabel;    Label71: TLabel;    element: TSpinEdit;

   m: TSpinEdit;    k: TSpinEdit;    Button1: TButton;    Button2: TButton;

   Button3: TButton;    Shape1: TShape;    Shape2: TShape;    Shape3: TShape;

   Shape4: TShape;    Label10: TLabel;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

const

 symb:array [1..5] of char=('a','b','c','d','e');

var

 Form1: TForm1;

 i,i1,i2,i3,n:longint;

 x:array [1..330010] of integer;

 y:array [1..330010] of byte;

 s1,s2:array [1..66002] of string[5];

implementation

{$R *.dfm}

PROCEDURE TForm1.Button1Click(Sender: TObject);

begin

for i:=1 to element.Value do x[i]:=0;

Label3.Caption:=timetostr(time); ListBox1.Clear;

 {начальные значения}

n:=k.Value+1;

 if n>=1 then x[1]:=strtoint(Edit1.Text){20{};

if n>=2 then x[2]:=strtoint(Edit2.Text){31{};

if n>=3 then x[3]:=strtoint(Edit3.Text){82{};

if n>=4 then x[4]:=strtoint(Edit4.Text){58{};

if n>=5 then x[5]:=strtoint(Edit5.Text){63{};

if n>=6 then x[6]:=strtoint(Edit6.Text){1{};

for i:=1 to n do

 ListBox1.Items.Add(inttostr(i)+'   '+inttostr(x[i]));

{***генератор случайных чисел***}

REPEAT

x[n+1]:=(x[n]+x[n-k.Value]) mod m.Value;

n:=n+1;

ListBox1.Items.Add(inttostr(n)+')   '+inttostr(x[n])+'   ');

UNTIL n>=element.Value;

{***^^^^^^***}

Label4.Caption:=timetostr(time);

end;

{*** Периодичность ***}

PROCEDURE TForm1.Button2Click(Sender: TObject);

var stroka1,stroka2:string;

label met1, met2, met3;

begin

Label3.Caption:=timetostr(time); i3:=0;

{вычисление периода и апериода}

REPEAT

  i3:=i3+1;

  stroka1:='';

  if (i3>=(element.Value-k.Value)) then goto met2;

  for i1:=i3 to i3+k.value do stroka1:=stroka1+' '+inttostr(x[i1]);

 FOR i:=i3 to element.Value do

 Begin

  stroka2:='';

  for i2:=i+1 to i+1+k.value do

   stroka2:=stroka2+' '+inttostr(x[i2]);

   if stroka1=stroka2 then

    begin

     label1.Caption:=stroka1+' / '+stroka2;

     goto met1;

    end;

 End;

UNTIL (i3>=(element.Value-k.Value));

met1: label2.Caption:='Длина Периода= '+inttostr(i-(i3-1))+',  Апериод= '+inttostr(i);

goto met3;

met2: label2.Caption:='Длина периода больше '+inttostr(element.Value);

met3: Label4.Caption:=timetostr(time);

end;

{*** Покер-тест ***}

PROCEDURE TForm1.Button3Click(Sender: TObject);

var d6:byte;

   a,b,c,d,e:byte;

   aaaaa,abcde,aaaab,aaabb,aaabc,aabbc,aabcd,kol,elem:longint;

   kl:array[1..7] of longint;

begin

for i:=1 to 66002 do begin s1[i]:='';s2[i]:=''; end;

 d6:=6; n:=0; ListBox1.Clear;

{получение вспомогательной последовательности с диапазоном <0,1,2,3,4,5>}

 for i:=1 to element.Value do

 begin

  y[i]:=trunc((x[i]/m.Value)*d6);

 end;

{получение последовательностей из цифр по пять в каждой

например, 01211; 12355; 33333 и т.п.}

for i:=1 to element.Value div 5 do

  for i1:=1 to 5 do

   begin

    n:=n+1;

    s1[i]:=s1[i]+inttostr(y[n]);

    s2[i]:=s2[i]+inttostr(y[n]);

   end;

{преобразование последовательностей из цифр в

последовательности abcde,aabcd,aaabcd,aabbc,aaabb,aaaab,aaaaa}

 for i2:=1 to element.Value div 5 do

for i:=1 to 5 do

 for i1:=1 to 5 do

  if s1[i2][i1]=s2[i2][i] then s1[i2][i1]:=symb[i];

{поиск классов (все разные, одна пара, две пары и т.д.)}

aaaaa:=0;abcde:=0;aaaab:=0;aaabb:=0;aaabc:=0;aabbc:=0;aabcd:=0;kol:=0;

 FOR i1:=1 to element.Value div 5 DO

Begin

 a:=0;b:=0;c:=0;d:=0;e:=0;

 for i2:=1 to 5 do

  for i3:=1 to 5 do

   if s1[i1][i3]=symb[i2] then

    begin

     if symb[i2]='a' then a:=a+1;

     if symb[i2]='b' then b:=b+1;

     if symb[i2]='c' then c:=c+1;

     if symb[i2]='d' then d:=d+1;

     if symb[i2]='e' then e:=e+1;

    end;

  {Распределение по классам}

  if (a=1)and(b=1)and(c=1)and(d=1)and(e=1) then abcde:=abcde+1 {Все разные} else

  if (a=5) then aaaaa:=aaaaa+1 {Пять одного вида} else

  if (a=4)or(b=4) then aaaab:=aaaab+1 {Четыре одного вида} else

  if ((a=2)and(b=3))or

     ((a=3)and(b=2))or

     ((a=3)and(c=2))or

     ((a=3)and(d=2))or

     ((a=2)and(c=3)) then aaabb:=aaabb+1 {Полный сбор} else

  if (a=3)or(b=3)or(c=3) then aaabc:=aaabc+1 {Три одного вида} else

  if ((a=2)and(b=2))or

     ((a=2)and(c=2))or

     ((b=2)and(c=2))or

     ((a=2)and(d=2))or

     ((b=2)and(d=2)) then aabbc:=aabbc+1 {Две пары} else aabcd:=aabcd+1 {Одна пара};

{^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^}

End;

kol:=aaaaa+abcde+aaaab+aaabb+aaabc+aabbc+aabcd;

 {сортировка классов от меньшего к большему}

  kl[1]:=aaaaa;kl[2]:=abcde;kl[3]:=aaaab;kl[4]:=aaabb;

  kl[5]:=aaabc;kl[6]:=aabbc;kl[7]:=aabcd;

 for i1:=1 to 7 do

  begin

   for i2:=i1 to 6 do

   begin

     elem:=kl[i1];

     if elem>kl[i2+1] then //по не убыванию - >

     begin

       kl[i1]:=kl[i2+1];

       kl[i2+1]:=elem;

     end;

   end;

  end;

{вывод результатов на экран (в Label)}

 label10.Caption:='N * P(min) = '+floattostr(element.Value*(kl[1]/kol));

 label7.Caption:=  'a= '+inttostr(a)+';  b= '+inttostr(b)+';  c= '+inttostr(c)+

                ';  d= '+inttostr(d)+';  e= '+inttostr(e)+';';

 label71.Caption:='Сумма P(1..7) = '+floattostr((abcde/kol)+(aabcd/kol)+

                  (aabbc/kol)+(aaabc/kol)+(aaabb/kol)+(aaaab/kol)+(aaaaa/kol));

 label8.Caption:=         'kol= '+inttostr(kol)+'; '

                 +'  (1) abcde= '+inttostr(abcde)

                +';  (2) aabcd= '+inttostr(aabcd)

                +';  (3) aabbc= '+inttostr(aabbc)

                +';  (4) aaabc= '+inttostr(aaabc)+';';

 label81.Caption:=  '(5) aaabb= '+inttostr(aaabb)

                +';  (6) aaaab= '+inttostr(aaaab)

                +';  (7) aaaaa= '+inttostr(aaaaa);

 label9.Caption:=   'P(1)= '+floattostr(abcde/kol)+

                 ';  P(2)= '+floattostr(aabcd/kol)+

                 ';  P(3)= '+floattostr(aabbc/kol)+

                 ';  P(4)= '+floattostr(aaabc/kol)+';';

 label91.Caption:=  'P(5)= '+floattostr(aaabb/kol)+

                 ';  P(6)= '+floattostr(aaaab/kol)+

                 ';  P(7)= '+floattostr(aaaaa/kol);

{вывод пятерок на экран (в LISTBOX)}

 ListBox1.Clear;

for i:=1 to element.Value div 5 do

ListBox1.Items.Add(inttostr(i)+')   '+s1[i]+'   ');

end;

end.

РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ


 

А также другие работы, которые могут Вас заинтересовать

40877. Визначення мови та її функцій 70.5 KB
  Напрямки дослідження мови. Визначення мови та її функції. Майбутні вчителі мови повинні мати повне уявлення про те чого вони навчають.
40878. Оптимізація епістемної функції мови 87.5 KB
  Термінознавство є розділом лексикології що вивчає терміносистеми мови принципи їхньої організації механізми творення термінів вимоги до них а також розв'язує прикладні завдання впорядкування й кодифікації терміносистем і їхніх відповідників у різних мовах. Терміносистема не відповідна метамові певної галузі оскільки до метамови входять формули символіка які не належать до природної мови. Лейчик вважає що це традиційне питання може бути розв'язане на підставі кваліфікації терміна як лексичної одиниці мови для спеціальних потреб.
40879. СОВРЕМЕННАЯ ПОЛИТИЧЕСКАЯ ЛИНГВИСТИКА 227.5 KB
  Каждый новый поворот в историческом развитии государства приводит к языковой перестройке создает свой лексикофразелогический тезаурус включающий также концептуальные метафоры и символы. Специальные исследования показывают что абсолютное большинство исследований политической метафоры выполняется на материале современного дискурса. Вместе с тем появляются публикации в которых рассматриваются метафоры характерные для иных политических периодов. Согласно такой точке зрения и в Древней Греции и в средневековой Европе и в любой стране...
40880. Фізичні причини виділення діапазону НВЧ 187 KB
  Рівняння Максвела 2ого порядку описують всі електромагнітні явища: де густина струму напруженість ЕП напруженість МП індукція МП індукція ЕП густина заряду поверхневий струм. Це – не всі рівняння Максвела у такій формі їх іноді називають рівняннями Герца. Рівняння записано в СГСЕ. Ці диференційні рівняння в частинних похідних другого порядку неоднорідні.
40881. Конституційне право України – провідна галузь національного права України 145.5 KB
  €œКонституційне право України – провідна галузь національного права України†План Поняття і предмет конституційного права України. Поняття і структура системи конституційного права України. Інститути конституційного права України: поняття і види. Метою даної лекції є формування у студентів знань щодо поняття “конституційне право України†як галузі права; засвоєння ними понять предмету і методів конституційноправового регулювання вивчення системи конституційного права України та її елементів а також поняття...
40883. Класифікація електромагнітних явищ 165 KB
  Рівняння магнітостатики: рівняння електростатики: . Рівняння магнітостатики має місце і там де . Звідси тобто звідки одержуємо рівняння Лапласа: з урахуванням заряду Пуасона: без.
40884. Конституційне право України як наука і навчальна дисципліна 253 KB
  €œКонституційне право України як наука і навчальна дисципліна План Конституційне право України як наука: поняття предмет система науки джерела науки основні функції науки. Конституційне право України як навчальна дисципліна: поняття структура курсу основна характеристика. Джерела конституційного права України як галузі права: поняття основні вимоги до джерел види джерел. Література Основна до всіх тем Конституція України від 28 червня 1996 р Відомості Верховної Ради України.
40885. Затухання у металі, скін – шар 67 KB
  В металі хвиля затухає як . Глибина на якій хвиля спадає в раз називається скін – шаром. Ми не врахували те що існує також відбита хвиля у середовищі