2012-03-20 17 views
5

मैं पीआरएनजी (जैसे मेर्सन ट्विस्टर और rand() स्टडीलिब के फ़ंक्शन के साथ) खेल रहा हूं और मैं एक अच्छा परीक्षण चाहता हूं जो मुझे पीआरएनजी द्वारा उत्पादित यादृच्छिक डेटा की गुणवत्ता का पता लगाने में मदद करेगी। मैंने पीआरएनजी द्वारा उत्पन्न यादृच्छिक संख्याओं का उपयोग करके पीई के मूल्य की गणना की है, और मुझे rand() और मेर्सन ट्विस्टर एक भेद प्रदान करने के बहुत करीब होने के लिए मिलते हैं (क्या मुझे 10 दशमलव बिंदुओं के बाद जांच करने की आवश्यकता है?)।PRNGs की गुणवत्ता का परीक्षण

मुझे मोंटे कार्लो सिमुलेशन के बारे में ज्यादा जानकारी नहीं है; कृपया मुझे कुछ एल्गोरिदम/एप्लिकेशन (संभवतया कुछ सरल अभी तक जो अच्छी जानकारी प्रदान कर सकता है) के बारे में बताएं जो मुझे गुणवत्ता के संदर्भ में अलग करने में मदद करेगा।


संपादित करें 1: मैंने पहले नोटिस नहीं था, लेकिन एक ऐसी ही धागा है: How to test random numbers?

संपादित करें 2: मैं के रूप में में उल्लेख किया है, NIST के परिणामों interprete नहीं पा रहा हूँ टिप्पणियों में से एक। मुझे random.org से पैटर्न (अगर कोई है) को दृष्टि से व्याख्या करने का यह विचार मिला है और इसकी सादगी के कारण इसका अनुसरण कर रहा हूं। मैं बहुत खुशी होगी अगर किसी को मेरी परीक्षण की प्रक्रिया पर टिप्पणी कर सकते हैं:

  1. [0,1] रैंड() और MT1997
  2. अगर (round(genrand_real1()/rand_0_1())) फिर लाल पिक्सेल, और काले का उपयोग कर
  3. से एन randoms उत्पन्न

जैसा कि मैं समझता हूं कि यह एक बहुत ही सटीक समाधान नहीं है, लेकिन यदि यह उचित अनुमान प्रदान करता है, तो मैं वर्तमान समय में इसके साथ रह सकता हूं।

+0

मैं ** छद्म यादृच्छिक संख्या जनरेटर ** से ** ** यादृच्छिक डेटा ** प्राप्त करने के बारे में इतना निश्चित नहीं हूं ** - लेकिन मुझे लगता है कि आप उनके साथ http://en.wikipedia.org/wiki/Fair_coin#Fair_results_from_a_biased_coin लागू कर सकते हैं .. – Aprillion

+0

क्या आप कह रहे हैं कि पीआरएनजी से उत्पन्न मूल्य अनुमानित हैं? धन्यवाद – Sayan

+0

हां, यह भेद है - यह जांचने के लिए सिर्फ एक अनुस्मारक था कि पीआरएनजी आपके आवेदन के लिए अच्छा विचार है या नहीं और आपको [random.org] जैसे एक टीआरएनजी की आवश्यकता नहीं है (http://random.org) – Aprillion

उत्तर

5

यादृच्छिक संख्याओं के परीक्षण के लिए दो मानक परीक्षण सूट हैं।

  1. NIST परीक्षण सूट। उनके पास implementation in C.
  2. Diehard Test Suite (जॉर्ज मार्सग्लिया द्वारा विकसित) है। इन परीक्षणों के कार्यान्वयन के लिए C library है।

डायहार्डर लाइब्रेरी में एक आर इंटरफ़ेस है, जिसे RDieHarder कहा जाता है। यह पुस्तकालय एनआईएसटी और डाइहार्ड परीक्षण सूट दोनों के लिए एक इंटरफेस प्रदान करता है।

+0

मैं एनआईएसटी का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि हालांकि मेरा परीक्षण गुजरता है, कुछ समस्या है; क्या आप मदद कर सकते हैं? - मैंने लंबे यादृच्छिक मान उत्पन्न किए हैं, और उन्हें बाइनरी में परिवर्तित कर दिया है और फ़ाइल में संग्रहीत किया है। कहें कि फाइल में 100 रैंडम हैं, मैं 100 का आकलन करता हूं और डॉक्टर के "टेस्ट कोड को चलाने" अनुभाग में चरणों का पालन करता हूं (डॉक्टर में 10 के रूप में उत्पन्न बिट स्ट्रीम का चयन किया जाता है)। लेकिन मुझे लगता है कि डिफ़ॉल्ट परीक्षण मामले के लिए मेरा "finalAnalysisReport.txt" लगभग कोई जानकारी नहीं है। – Sayan

+0

आपका सबसे अच्छा शर्त एक और सवाल पूछना है। – csgillespie

+1

यह उत्तर अच्छा था, लेकिन अब पुराना है। एक अद्यतन के लिए अन्य उत्तर देखें (टीएल; डीआर: एल 'इक्वायर का टेस्टयू01, या प्रैक्ट्रैंड)। – Fab

1

आप volume 2 of the Knuth's series पर देख रहे हैं।

एक छोटे से पढ़ने के लिए, संख्यात्मक व्यंजनों के संबंधित अध्याय को देखें।

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

+0

क्या आप इस दावे के सबूत के लिए एक लिंक दे सकते हैं कि मोंटे कार्लो सिमुलेशन के लिए एलजीसी से सबसे अच्छा बचा है? – ziggystar

+0

@ziggystar: ठीक है, आप Knuth में देख सकते हैं। या संख्यात्मक व्यंजनों। या परिणाम मानक परीक्षण सूट, उदाहरण के लिए csgillespie उत्तर से। –

6

कई सांख्यिकीय परीक्षण सूट उपलब्ध हैं।मैंने लिखा, की नकल की है, और नहीं तो एक साथ 120 PRNGs टेस्ट स्वीट प्रति PRNG प्रति 4 घंटे दिए गए परीक्षण सूट की एक किस्म के साथ प्रत्येक को इकट्ठा किया और परीक्षण किया: 78 PRNGs में

  • PractRand (मानक, 1 टेराबाइट) में पाया गया पूर्वाग्रह
  • TestU01 (BigCrush) में पाया गया 50 PRNGs
  • RaBiGeTe (बढ़ाया, 512 मेगाबिट, x1) में पूर्वाग्रह 40 PRNGs
  • Dieharder (कस्टम आदेश पंक्ति विकल्प) में पूर्वाग्रह पाया 25 PRNGs
  • Dieharder में पूर्वाग्रह पाया (-एक आदेश पंक्ति विकल्प) 13 PRNGs
  • NIST STS (डिफ़ॉल्ट, 64 मेगाबिट x128) में पूर्वाग्रह पाया 11 PRNGs

कैसे उन के कई PRNGs में थे में पूर्वाग्रह है कि अन्य परीक्षण स्वीट सब याद पाया?

  • प्रैक्ट्रैंड (मानक, 1 टेराबाइट) श्रेणियों की एक विस्तृत विविधता में 22 अद्वितीय पूर्वाग्रह पाए गए।
  • RaBiGeTe (विस्तारित, 512 मेगाबिट, x1) 5 अद्वितीय पूर्वाग्रह पाए गए, सभी एलसीजी और संयोजन एलसीजी में पाए गए।
  • TestU01 बिगक्रश को छोटे अराजक पीआरएनजी दोनों में 2 अद्वितीय पूर्वाग्रह मिले।
    कोई अन्य परीक्षण सूट कोई अद्वितीय पूर्वाग्रह नहीं मिला।

संक्षेप में, केवल PractRand, TestU01, और संभवतः RaBiGeTe उपयोग करने योग्य हैं।

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

विविध फायदे:

  • PractRand और TestU01 सबसे आसान मेरी राय में के उत्पादन में व्याख्या करने के लिए हो जाते हैं।
  • प्रैक्ट्रैंड और डायहार्डर मुझे लगता है कि कमांड लाइन इंटरफ़ेस के माध्यम से परीक्षण स्वचालित करने के लिए सबसे आसान हो जाता है।
  • प्रैक्ट्रैंड और राबीजीटे मल्टीथ्रेड परीक्षण का समर्थन करने वाले अकेले थे।

विविध नुकसान:

  • PractRand आवश्यक इनपुट की अधिक बिट्स अन्य परीक्षण स्वीट से परीक्षण करने के लिए - एक समस्या हो सकती है यदि आपके RNG बहुत धीमी है या अन्यथा उत्पादित डेटा की मात्रा पर सीमित कर दिया।
  • राबीजी और एनआईएसटी एसटीएस दोनों में इंटरफ़ेस समस्याएं हैं।
  • डायहार्डर और एनआईएसटी एसटीएस दोनों में झूठी सकारात्मक समस्याएं हैं।
  • एनआईएसटी एसटीएस की मेरी राय में सबसे खराब इंटरफ़ेस था।
  • मैं विंडोज पर संकलन करने के लिए Dieharder नहीं मिला। मैं विंडोज़ पर संकलन करने के लिए TestU01 प्राप्त करने में कामयाब रहा लेकिन कुछ काम किया।
  • RaBiGeTe के हाल के संस्करण बंद-स्रोत और केवल विंडोज़ हैं।

परीक्षण किया PRNGs के सेट: PRNG सेट 1 बड़ा GFSR, 1 बड़ा LFSR, 4 xorshift प्रकार PRNGs, 2 xorwow प्रकार PRNGs, 3 अन्य नहीं-काफी-LFSR PRNGs भी शामिल है। इसमें 10 साधारण पावर ऑफ -2 मॉड्यूलस एलसीजी (जो स्वीकार्य गुणवत्ता के स्तर तक पहुंचने के लिए कम बिट्स को छोड़ देते हैं), 10 पावर ऑफ -2 मॉड्यूलस-काफी-एलसीजी, और 9 संयोजन जेनरेटर मुख्य रूप से एलसीजी के आसपास आधारित नहीं हैं और काफी एलसीजी नहीं हैं । इसमें सीएसपीआरएनजी के 1 9 कम ताकत वाले संस्करण, साथ ही एक पूर्ण ताकत सीएसपीआरएनजी भी शामिल है। उनमें से 14, संकेत/गतिशील एस-बक्से (जैसे आरसी 4, आईएसएएसी) पर आधारित थे, चार चाचा/साल्सा पैरामीटर थे, और शेष 2 ट्रिवियम वेरिएंट थे। इसमें 11 पीआरएनजी व्यापक रूप से एलएफआईबी-प्रकार या समान के रूप में वर्गीकृत हैं, एलएफएसआर/जीएफएसआर की गणना नहीं करते हैं। बाकी (लगभग 35) छोटे राज्य अराजक पीआरएनजी थे, जिनमें से 10 प्रयुक्त गुणात्मक थे और अन्य अंकगणित और बिटवाई तर्क के लिए सीमित थे।

संपादित करें:gjrand में परीक्षण सेट भी है, जो बहुत अस्पष्ट और थोड़ा अजीब है, लेकिन वास्तव में बहुत अच्छा करता है।

इसके अलावा, परीक्षण किए गए सभी पीआरएनजी को प्रैक्ट्रैंड में गैर अनुशंसित पीआरएनजी के रूप में शामिल किया गया है।

+0

मुझे आपके उत्तर की सिफारिश करने में प्रसन्नता हो रही है, हालांकि, जैसा कि लिखा गया है, इसमें कोई सबूत नहीं है। क्या आप कागजात के लिंक प्रदान कर सकते हैं, जो आपके दावे का बैक अप लेते हैं? या अपने प्रयोगों को दोहराने के तरीके पर कुछ निर्देश। – csgillespie

+0

देखें http://pracrand.sourceforge.net/Tests_results.txt – user3535668

+0

यह स्वीकार्य उत्तर होना चाहिए। – plasmacel

संबंधित मुद्दे