यादृच्छिक चर पीढ़ी एल्गोरिदम का परीक्षण


12

यादृच्छिक चर पीढ़ी एल्गोरिदम के परीक्षण के लिए कौन से तरीकों का उपयोग किया जाता है?


1
SO पर समान प्रश्न: stackoverflow.com/questions/56411/…
Ami

जवाबों:


9

कट्टर टेस्ट सुइट यादृच्छिक संख्या जनरेटर के परीक्षण के लिए एक गोल्डन स्टैंडर्ड के पास कुछ है। इसमें कई परीक्षण शामिल हैं जहां एक अच्छा यादृच्छिक संख्या जनरेटर को कुछ ज्ञात वितरण के अनुसार वितरित परिणाम का उत्पादन करना चाहिए जिसके खिलाफ परीक्षण किए गए जनरेटर का उपयोग करने वाले परिणाम की तुलना की जा सकती है।

संपादित करें

मुझे इसे अपडेट करना होगा क्योंकि मैं बिल्कुल सही नहीं था: डायथर्ड का उपयोग अभी भी बहुत किया जा सकता है, लेकिन अब इसे बनाए रखा नहीं है और अत्याधुनिक नहीं है। NIST तब से बेहतर परीक्षणों के सेट के साथ आया है ।


9

बस सम्मान के जवाब में थोड़ा सा जोड़ने के लिए, PRHG के लिए मानक परीक्षण सूट (जॉर्ज मार्साग्लिया द्वारा विकसित) मानक परीक्षण हैं।

वहाँ एक अच्छा Diehard C पुस्तकालय है जो आपको इन परीक्षणों तक पहुँच प्रदान करता है। साथ ही मानक डैनहार्ड परीक्षण भी कुछ अन्य PRNG परीक्षणों के लिए कार्य प्रदान करता है (अन्य बातों के अलावा) बिट क्रम की जाँच। RNG की गति का परीक्षण करने और अपने स्वयं के परीक्षण लिखने के लिए एक सुविधा भी है।

Dieharder लाइब्रेरी में R इंटरफ़ेस है, जिसे RDieHarder कहा जाता है :

library(RDieHarder)
dhtest = dieharder(rng="randu", test=10, psamples=100, seed=12345)
print(dhtest)

Diehard Count the 1s Test (byte)

       data:  Created by RNG `randu' with seed=12345, 
              sample of size 100 p-value < 2.2e-16

इससे पता चलता है कि RANDU RNG जनरेटर न्यूनतम-दूरी / 2dsphere परीक्षण में विफल रहता है।


8

यादृच्छिक संख्या जनरेटर द्वारा उत्पादित संख्याओं के परीक्षण के लिए डायहार्ड परीक्षण एक व्यावहारिक दृष्टिकोण है। लेकिन वे परीक्षण मनमाने ढंग से लगते हैं और एक को आश्चर्यचकित किया जा सकता है कि क्या अधिक शामिल किया जाना चाहिए या यदि वास्तव में यादृच्छिकता की जांच करने का कोई तरीका है।

यादृच्छिक अनुक्रम की परिभाषा के लिए सबसे अच्छा उम्मीदवार मार्टिन-लोफ यादृच्छिकता प्रतीत होता है । इस तरह की यादृच्छिकता के लिए मुख्य विचार, खूबसूरती से नथ, खंड 3.5 में विकसित किया गया है , यादृच्छिक संख्याओं के अनुक्रम के सभी प्रकार के उप-अनुक्रमों के लिए एकरूपता के लिए परीक्षण करना है। यह सुनिश्चित करना कि सभी प्रकार की अनुवर्ती परिभाषाएँ सही निकलीं, जब कोई संगणना की धारणाओं का उपयोग करता है तब भी वास्तव में कठिन होता है।

द डाईहार्ड परीक्षण कुछ संभावित नतीजे हैं जिन पर कोई विचार कर सकता है और उनकी विफलता मार्टिन-लोफ यादृच्छिकता को बाहर कर देगी।


4

आप साबित नहीं कर सकते, क्योंकि यह असंभव है; आप केवल तभी जांच कर सकते हैं कि कोई शर्मनाक ऑटोकॉर्लेशन या डिस्ट्रीब्यूशन डिस्टर्बेंस तो नहीं है, और वास्तव में इसके लिए डेडहार्ड एक मानक है। यह आँकड़ों / भौतिकी के लिए है, क्रिप्टोग्राफ़र मुख्य रूप से (अन्य बातों के अलावा) जाँचेंगे कि भविष्य के मूल्यों को प्राप्त करने के लिए डेटा के लिए जनरेटर को फिट करना कितना कठिन है।


4

कॉलिन के पद पर छोटे सुधार: क्रैन पैकेज RDieHarder के लिए एक इंटरफेस है DieHarder , कट्टर पुनर्लेखन / विस्तार / फेरबदल के द्वारा किया रॉबर्ट जी ब्राउन (जो एक सह-लेखक मेरी RDieHarder रैपर के आधार पर के रूप में कृपया सूचियों मुझे) डेविड Bauer द्वारा हाल ही में योगदान के साथ।

अन्य बातों के अलावा, DieHarder में मार्क की पोस्ट में उल्लिखित परीक्षणों की NIST बैटरी के साथ-साथ कुछ नए भी शामिल हैं। यह शोध जारी है और कुछ समय के लिए है। मैंने useR पर एक बात दी! RDieHarder के बारे में 2007 जो आप यहाँ से प्राप्त कर सकते हैं


3

यह निष्कर्ष निकालना उपयोगी है कि कुछ सार में "यादृच्छिक" है। अधिक बार आप यह परीक्षण करना चाहते हैं कि क्या यह एक निश्चित प्रकार की यादृच्छिक संरचना है। उदाहरण के लिए, आप परीक्षण कर सकते हैं कि क्या किसी चीज़ का समान वितरण है, एक निश्चित सीमा में सभी मूल्यों के साथ समान रूप से। या आप यह परीक्षण करना चाहते हैं कि क्या किसी चीज का सामान्य वितरण है, आदि का परीक्षण करने के लिए कि क्या डेटा का कोई विशेष वितरण है, आप फिट टेस्ट की अच्छाई का उपयोग कर सकते हैं जैसे कि ची स्क्वायर टेस्ट या कोलमोगोरोव-स्मिरनोव टेस्ट।


3

यादृच्छिक संख्या जनरेटर का परीक्षण करने के लिए दो भाग हैं। यदि आप केवल एक समान जनरेटर के परीक्षण से संबंधित हैं, तो हाँ, DIEHARD टेस्ट सूट जैसा कुछ अच्छा विचार है।

लेकिन अक्सर आपको एक समान जनरेटर के परिवर्तन का परीक्षण करने की आवश्यकता होती है। उदाहरण के लिए, आप समान रूप से या सामान्य रूप से वितरित मान बनाने के लिए एक समान जनरेटर का उपयोग कर सकते हैं। आपके पास एक उच्च-गुणवत्ता वाला एकसमान जनरेटर हो सकता है - मान लें कि आपके पास एक प्रसिद्ध एल्गोरिथ्म जैसे कि मर्सिएन ट्विस्टर का एक विश्वसनीय कार्यान्वयन है - लेकिन आपको यह परीक्षण करने की आवश्यकता है कि परिवर्तित आउटपुट का सही वितरण है या नहीं। उस मामले में आपको फिट टेस्ट की कुछ अच्छाई करने की जरूरत है जैसे कि कोलमोगोरोव-स्मिरनोव। लेकिन शुरुआत के लिए, आप यह सत्यापित कर सकते हैं कि नमूना माध्य और भिन्नता में आपके द्वारा अपेक्षित मूल्य हैं।

अधिकांश लोग ऐसा नहीं करते हैं और नहीं - खरोंच से अपने स्वयं के यादृच्छिक यादृच्छिक जनरेटर को लिखना चाहिए। एक अच्छा जनरेटर लिखना मुश्किल है और अपने आप को यह सोचकर मूर्ख बनाना आसान है कि आपने एक अच्छा लिखा है जब आपने नहीं किया है। उदाहरण के लिए, डोनाल्ड नुथ ने एक यादृच्छिक संख्या जनरेटर के टीएओसीपी वॉल्यूम 2 में कहानी बताई जो उन्होंने लिखा था कि यह भयानक था। लेकिन नए वितरण से यादृच्छिक मूल्यों का उत्पादन करने के लिए लोगों को अपना कोड लिखना पड़ता है।


2

NIST सांख्यिकीय परीक्षण की एक सूची प्रकाशित करती है सी में एक संदर्भ कार्यान्वयन के साथ

सम्मानित PRNG शोधकर्ता पियरे L'Ecuyer सहित कुछ स्मार्ट लोगों द्वारा TestU01 भी है । फिर, सी में एक संदर्भ कार्यान्वयन है।

जैसा कि अन्य टिप्पणीकारों ने बताया है, ये छद्म यादृच्छिक बिट्स की पीढ़ी के परीक्षण के लिए हैं। यदि आप इन बिट्स को एक अलग रैंडम वैरिएबल (जैसे बॉक्स-मुलर को यूनिफॉर्म से नॉर्मल में बदलते हैं) में तब्दील करते हैं, तो आपको ट्रांसफॉर्मेशन एल्गोरिथ्म की शुद्धता की पुष्टि करने के लिए अतिरिक्त परीक्षणों की आवश्यकता होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.