Кіріспе

Статистикалық сынақтар жиынтығы. Diehard сынақтары – кездейсоқ сандар генераторының сапасын өлшеуге арналған статистикалық сынақтар жиынтығы. Олар Джордж Марсальяның бірнеше жылдық еңбегінің нәтижесінде жасалған және алғаш рет 1995 жылы CD-ROM дискісінде, кездейсоқ сандар жинағымен бірге жарияланған. 2006 жылы бастапқы Diehard сынақтары Dieharder сынақтарымен толықтырылды.

Тарих

РНГ-лар үшін кездейсоқтық сынақтарының алғашқы жиынтығы 1969 жылы Дональд Кнуттың «Компьютерлік бағдарламалау өнері» кітабының бірінші басылымында ұсынылған (2-том, 3.3-тарау: Статистикалық сынақтар). Кнуттың сынақтары кейін Джордж Марсальяның Diehard сынақтарымен (1995) алмастырылды, олар он бес түрлі сынақтан тұрды. Сынақ параметрлерін өзгертуге немесе жаңа сынақтар қосуға болмағандықтан, 2007 жылы Монреаль университетінің Пьер Л’Экуйер мен Ричард Симар енгізген TestU01 кітапханасы жасалды.

Сынақ туралы жалпы түсінік

Туған күн аралығы Үлкен интервалда кездейсоқ нүктелерді таңдаңыз. Нүктелер арасындағы аралықтар асимптотикалық түрде экспоненциалды таралуы керек. Атауы туған күн парадоксына негізделген. Үшін-бірі ауыспалы пермутациялар Бес тізбекті кездейсоқ сандардың реттілігін талдаңыз. 120 мүмкін реттелулер статистикалық тұрғыдан бірдей ықтималдықпен пайда болуы керек. Матрицалардың рангі {0,1} жиынындағы матрица құру үшін кездейсоқ сандардан белгілі бір біттерді таңдап, содан кейін матрицаның рангін анықтаңыз. Рангтарды санаңыз. Маймыл сынақтары Біттердің тізбектерін «сөздер» ретінде қарастырыңыз. Бір ағындағы қайталама «сөздерді» санаңыз. Көрсетілмеген «сөздердің» саны белгілі бір таралымды ұстануы керек. Атауы шексіз маймыл теоремасынан алынған. 1-ді санау Бір-бірінен кейін келетін немесе таңдалған байттардағы 1 біттерін санаңыз. Сандарды «әріптерге» түрлендіріп, бес әріпті «сөздердің» жиілігін санаңыз. Автотұрақ сынағы 100x100 шаршыға бірлік шеңберлерді кездейсоқ орналастырыңыз. Шеңбер, егер ол бұрыннан сәтті тұрақталған шеңбермен жапсаспаса, сәтті тұрақталған болып есептеледі. 12 000 әрекеттен кейін, сәтті тұрақталған шеңберлердің саны белгілі бір қалыпты таралымды ұстануы керек. Ең аз қашықтық сынағы 10000x10000 шаршыға 8000 нүктені кездейсоқ орналастырыңыз, содан кейін жұптар арасындағы ең аз қашықтықты табыңыз. Бұл қашықтықтың квадраты белгілі бір орташа мәнмен экспоненциалды таралуы керек. Кездейсоқ сфералар сынағы 1000 қабырғалы текшеде 4000 нүктені таңдаңыз. Әр нүктеде ортасы сол нүктеде болатын сфераны орналастырыңыз, оның радиусы басқа нүктеге ең аз қашықтыққа тең. Ең кішкентай сфераның көлемі белгілі бір орташа мәнмен экспоненциалды таралуы керек. Қысым сынағы 231-ді кездейсоқ санмен 1-ге жеткенше көбейтіңіз. Бұл әрекетті 100 000 рет қайталаңыз. 1-ге жету үшін қажетті көбейтулер саны белгілі бір таралымды ұстануы керек. Үшін-бірі ауыспалы сомалар сынағы Кездейсоқ сандардың ұзақ тізбегін жасаңыз, содан кейін 100 тізбекті сандардың сомасын табыңыз. Сомалар орташа және дисперсиясымен сипатталатын қалыпты таралымды ұстануы керек. Тізбектер сынағы Кездейсоқ сандардың ұзақ тізбегін жасаңыз, өсу және төмендеу тізбектерін санаңыз. Сандардың саны белгілі бір таралымды ұстануы керек. Крэпс сынағы 200 000 крэпс ойынын ойнаңыз, жеңістердің санын және әр ойындағы тастаулар санын санаңыз. Әр санау белгілі бір таралымды ұстануы керек.

Сынақ сипаттамалары

Туған күн аралығы сынағы: n күндік бір жылда m туған күнді таңдаңыз. Туған күндері аралығындағы аралықтарды тізімдеңіз. Егер j – бұл тізімде бірден көп кездесетін мәндер саны болса, онда j асимптотикалық түрде Poisson таралымымен орташа мәнімен таралады. Тәжірибе көрсеткендей, n өте үлкен болуы керек, мысалы, n ≥ 2, нәтижелерді осы орташа мәнімен Poisson таралымымен салыстыру үшін. Бұл сынақ n = 2 және m = 2 қолданады, сондықтан j үшін негізгі таралым Poisson болып есептеледі. 500 js үлгісі алынады, және chi-квадрат сәйкестік сынағы p мәнін береді. Бірінші сынақ көрсетілген файлдағы бүтін сандардан 1–24 биттерді (солдан санап) пайдаланады. Содан кейін файл жабылады және қайта ашылады. Келесі кезде 2–25 биттер туған күндерді, содан кейін 3–26 және т.б. 9–32 биттерді қамтамасыз ету үшін қолданылады. Биттердің әрбір жиынтығы p мәнін береді, ал тоғыз p мәні KSTEST үшін үлгі береді. 5 ауыспалы пермутация сынағы. Бұл OPERM5 сынағы. Ол 1 миллион 32 биттік кездейсоқ бүтін сандар тізбесін қарастырады. Әрбір бес қатарлы бүтін сандар жиыны 120 күйдің бірінде болуы мүмкін, 5! бес санның мүмкін реттелулері үшін. Осылайша, 5-ші, 6-шы, 7-ші сандар әрқайсысы бір күйді қамтамасыз етеді. Мыңдаған күйлердің ауысуы байқалғандықтан, әрбір күйдің пайда болу санының жиынтық есебі жасалады. Содан кейін 120×120 ковариациялық матрицаның әлсіз инверсиясындағы квадраттық нысан, 120 ұяшықтар санының көрсетілген (асимптотикалық) қалыпты таралымнан 120×120 ковариациялық матрицамен (99 рейтингімен) келген ықтималдық қатынасы сынағына баламалы сынақты береді. Бұл нұсқада 1000000 бүтін сан екі рет қолданылады. Бұл сынақта тұрақты түрде нашар p мәндерін тудыратын шешілмеген қателер болуы мүмкін. 31×31 матрицалар үшін бинарлық қатарлы тест. Тестілеу тізбесінен 31 кездейсоқ бүтін санның сол жақтағы 31 биті {0,1} өрісінде 31×31 бинарлық матрицаны құру үшін қолданылады. Ранг анықталады. Бұл ранг 0-ден 31-ге дейін болуы мүмкін, бірақ 28-ден төмен рангтар сирек кездеседі, және олардың саны 28-ші рангтағылармен біріктіріледі. 40000 осындай кездейсоқ матрицалар үшін рангтар анықталады және 31, 30, 29 және ≤ 28 рангтары бойынша хи-квадрат сынағы жүргізіледі. 32×32 матрицалар үшін бинарлық қатарлы тест. Кездейсоқ 32×32 бинарлық матрица құрылады, әр қатары 32 биттік кездейсоқ бүтін сан. Ранг анықталады. Бұл ранг 0-ден 32-ге дейін болуы мүмкін, 29-дан төмен рангтар сирек кездеседі, және олардың саны 29-шы рангтағылармен біріктіріледі. 40000 осындай кездейсоқ матрицалар үшін рангтар анықталады және 32, 31, 30 және ≤ 29 рангтары бойынша хи-квадрат сынағы жүргізіледі. 6×8 матрицалар үшін бинарлық қатарлы тест. Сынақтан өткізілетін генератордан алынған 32 биттік кездейсоқ бүтін сандардың әрқайсысынан белгіленген байт таңдалады, ал алынған алты байт 6×8 бинарлық матрицаны құрайды, оның ранги анықталады. Бұл ранг 0-ден 6-ға дейін болуы мүмкін, бірақ 0, 1, 2, 3 рангтары сирек кездеседі; олардың саны 4-ші рангтағылармен біріктіріледі. 100000 кездейсоқ матрицалар үшін рангтар анықталады, ал 6, 5 және ≤ 4 рангтары бойынша хи-квадрат сынағы жүргізіледі. Бит ағыны сынағы. Сыналатын файл бит ағыны ретінде қаралады. Алфавит екі әріптен тұрады, 0 және 1, ал биттердің ағыны 20 әріптен тұратын сөздердің біріне бірі қосылғандығы сияқты. Бірінші сөз bb b, екіншісі bb b және т.б. Бит ағыны сынағы 20 әріпті (20 бит) сөздердің жоғалған санын 2 үсті-үстіне жабысатын 20 әріпті сөз тізбегінде есептейді. 20 әріпті сөздің 2 түрі бар. 2 + 19 битті шынайы кездейсоқ тізбек үшін j деген сөздердің саны орташа 141,909 және сигма 428 бойынша қалыпты түрде таралуы керек. Осылайша стандартты қалыпты өзгермелі (z ұпай) болуы керек, ол бірыңғай [0,1) p мәнін береді. Сынақ жиырма рет қайталанады. OPSO, OQSO және DNA сынақтары. OPSO – бір-біріне көп орынды иеленетін жұптарды білдіреді. OPSO тесті 1024 әріпті әліпбидегі екі әріпті сөздерді қарастырады. Әрбір әріп сыналатын реттіліктегі 32 биттік бүтін саннан белгіленген он битке белгіленеді. OPSO 2 (өзара жабысатын) 2 әріпті сөздерді (2 + 1 "кешіруден") шығарады және жоғалған сөздердің санын санайды, яғни 2 әріпті сөздерді бүкіл тізбекте көрсетпейді. Бұл сан 141909 орташа, сигма 290 нормада таралғанға өте жақын болуы керек. Осылайша (missingwrds – 141909) / 290 стандартты қалыпты айнымалы болуы керек. OPSO сынағы сынақ файлынан бір мезгілде 32 битті алады және он бірізді биттердің белгіленген жиынтығын қолданады. Содан кейін ол келесі 10 битті қайта бастайды және т.б. OQSO – төрт еселенген, аз қамтылған. OQSO сынағы ұқсас, бірақ ол 32 әріпті әліпбиден 4 әріпті сөзді қарастырады, әр әріп сынақ файлынан белгіленген бес бірізді биттермен анықталады, олардың 32 биттік кездейсоқ бүтін сандар екендігі болжанады. 2 (өзара жабысатын) төрт әріпті сөз тізбегіндегі жоғалған сөздердің орташа саны (2 + 3 "кешіруден") қайтадан 141909, сигма = 295. Орташа мән теорияға негізделген; сигма кең ауқымды симуляциядан алынған. DNA сынағы C, G, A, T төрт әріптен тұратын әліпбиді қарастырады, сыналатын кездейсоқ бүтін сандар тізбегіндегі екі белгіленген битпен анықталады. Ол 10 әріпті сөздерді қарастырады, сондықтан OPSO және OQSO сияқты, 2 мүмкін сөз бар, ал 2 (үсті-үстіне жабысатын) 10 әріпті сөз тізбегінен (2 + 9 "кешіруден") жоғалған сөздердің орташа саны 141909. Стандартты ауытқу сигма = 339 OQSO сияқты симуляциямен анықталды. (OPSO үшін сигма, 290, нақты мән (үш орынға дейін), симуляциямен анықталған жоқ). Байт ағынындағы 1-ді санау сынағы. Сыналатын файлды байт ағыны ретінде қарастырыңыз (әр 32 биттік бүтін сан үшін төрт). Әр байтта 0-ден 8-ге дейін 1-ді қамтуы мүмкін, 1, 8, 28, 56, 70, 56, 28, 8, 1 ықтималдықтарымен 256-ға бөлінген. Енді байт ағыны 5 әріпті сөздердің үсті-үстіне жабысатын тізбегін қамтамасыз етсін, әрбір "әріп" A, B, C, D, E мәндерін қабылдайды. Әріптер байттағы 1-дердің санымен анықталады: 0, 1, немесе 2 → A, 3 → B, 4 → C, 5 → D және 6, 7 немесе 8 → E. Осылайша, әр түрлі ықтималдықтармен (37, 56, 70, 56, 37 256-ға бөлінген) бес пернеге басатын маймыл бар. 55 мүмкін 5 әріпті сөз бар, және 256000 (үсті-үстіне жабысатын) 5 әріпті сөз тізбегінен әрбір сөздің жиілігі бойынша есептеледі. Ұяшықтар санының ковариациялық матрицасының әлсіз инверсиясындағы квадраттық нысан хи-квадрат сынағын Q5–Q4 қамтамасыз етеді, 5 және 4 әріпті ұяшықтар бойынша есептердің қарапайым Пирсон қосындыларының айырмасы. Нақты байттар үшін 1-ді санау сынағы. Сыналатын файлды 32 биттік бүтін сандар ағыны ретінде қарастырыңыз. Әрбір бүтін сандан белгілі бір байт таңдалады, мысалы, сол жақтағы 1-ден 8-ге дейінгі биттер. Әр байтта 0-ден 8-ге дейін 1-ді қамтуы мүмкін, 1, 8, 28, 56, 70, 56, 28, 8, 1 ықтималдықтарымен 256-ға бөлінген. Енді тізбектелген бүтін сандардан белгіленген байттар (үсті-үстіне жабысатын) 5 әріпті сөздер тізбегін қамтамасыз етеді, әрбір "әріп" байттағы 1-дердің санымен анықталған A, B, C, D, E мәндерін қабылдайды: 0, 1, немесе 2 → A, 3 → B, 4 → C, 5 → D және 6, 7 немесе 8 → E. Осылайша, әр түрлі ықтималдықтармен (37, 56, 70, 56, 37 256-ға бөлінген) бес пернеге басатын маймыл бар. 5 мүмкін 5 әріпті сөз бар, және 256000 (үсті-үстіне жабысатын) 5 әріпті сөз тізбегінен әрбір сөздің жиілігі бойынша есептеледі. Ұяшықтар санының ковариациялық матрицасының әлсіз инверсиясындағы квадраттық нысан хи-квадрат сынағын Q5 – Q4 қамтамасыз етеді, 5 және 4 әріпті ұяшықтар бойынша есептердің қарапайым Пирсон қосындыларының айырмасы. Тұрақтап қою сынағы. 100 қабырғалы шаршыда, кездейсоқ түрде "тұрақтап қойыңыз" – 1 радиусы бар шеңбер. Содан кейін 2-ші, 3-ші және т.б. тұрақтап қоюға тырысыңыз, әр жолы тұрақтап қоюға тырысқанда, бұрын тұрақтап қойылғандармен соқтығысса, жаңа кездейсоқ орынға көшіңіз. (Жол мәселелерін болдырмау үшін, көліктердің орнына тікұшақтарды тұрақтап қоюды қарастырыңыз). Әрбір тырысқанда соқтығысу немесе сәттілік болады, соңғысы тұрақтап қойылған көліктер тізіміне қосылады. Егер біз n: тырысқандар саны мен k: сәтті тұрақтап қойылғандар саны арасындағы графикті салып көрсетсек, онда ол мінсіз кездейсоқ санмен қамтамасыз етілгендерге ұқсас қисық болады.