यादृच्छिक संख्याओं के लिए रैखिक अनुरूप जनरेटर की गुणवत्ता


14

मैं विभिन्न बाहरी ताकतों के लिए, लैंग्विन समीकरण के कुछ सिमुलेशन कर रहा हूं। कहा जा रहा है कि सी rand()सेstdlib.h मेरे परिणामों में पूर्वाग्रह का परिचय सकता है, मैं एक Mersenne Twister का उपयोग कर रहा हूं।

फिर भी, मैं यह जानना (और देखना) चाहता हूं कि मेरे अनुकार में एक रैखिक अभिनंदन जनरेटर किस तरह की त्रुटियों को प्रस्तुत कर सकता है। ये चीजें हैं जो मैंने कोशिश की हैं:

  • हाइपरप्लेन को देखने की कोशिश करने के लिए रैंडम के 3 डी टुपल्स बनाना। मैं कुछ नहीं देख सकता।
  • यादृच्छिक संख्याओं के एक बड़े वेक्टर का एफएफटी करना। यह लगभग दोनों मेर्सेन ट्विस्टर के लिए समान है औरrand()
  • ब्राउनियन गति में एक कण के लिए प्रतिक्षेपण सिद्धांत की जाँच करना। दोनों इंटीग्रेटर्स ators KE = 1 के अपेक्षित मूल्य में सहमत हैंKE=12kBTमहत्वपूर्ण अंकों के समान संख्या के साथ
  • यह देखते हुए कि वे कितने डिब्बे में बिन करते हैं जो एक शक्ति दो नहीं है। दोनों एक ही गुणात्मक परिणाम देते हैं, कोई भी बेहतर नहीं है।
  • ब्राउनियन रास्तों को देखते हुए ver x = 0 से स्पष्ट डाइवर्जेंस देखनाx=0 । फिर, कोई भाग्य नहीं।
  • एक सर्कल में अंकों का वितरण। भरा हुआ, और केवल परिधि में। उन सभी के बीच और निकटतम पड़ोसियों के बीच (शोर का जवाब, टिप्पणियों में नीचे)। इस gist में उपलब्ध है , बस आवश्यक लाइब्रेरी स्थापित करने के बाद इसे जूलिया 0.5.0 के साथ चलाएं (निर्देशों के लिए देखें)।

मैं इस बात पर जोर देना चाहूंगा कि मैं भौतिक सिमुलेशन के संदर्भ में शुरू किए गए पूर्वाग्रह की तलाश कर रहा हूं। उदाहरण के लिए, मैंने देखा है कि rand()मेर्सेन ट्विस्टर नहीं होने के दौरान मौत के बाद परीक्षण करने में बुरी तरह से कैसे विफल हो जाता है, लेकिन उस क्षण के लिए जो मेरे लिए बहुत ज्यादा मायने नहीं रखता है।

क्या आपके पास कोई भौतिक, ठोस, उदाहरण है कि कैसे एक खराब यादृच्छिक संख्या जनरेटर एक मोंटेकार्लो सिमुलेशन को मिटा देता है?

नोट: मैंने देखा है कि कैसे PRNG की तरह RANDUभयानक हो सकता है। मुझे स्पष्ट उदाहरणों में दिलचस्पी नहीं है, उन जनरेटर के बारे में जो निर्दोष दिखते हैं लेकिन अंततः पूर्वाग्रह का परिचय देते हैं।


1
आपके अनुरोधित उदाहरण नहीं हैं, लेकिन मेरे स्वयं के C कार्यक्रमों में रैंड () / srand () के बजाय drand48 () / srand48 () का उपयोग कर रहे हैं। उनके संबंधित मैन पेज इस्तेमाल किए गए अलग-अलग prng एल्गोरिदम का दस्तावेज़ करते हैं (देखें कि आदमी रैंड के एल्गोरिदम के लिए यादृच्छिक है), और मेरा मानना ​​है कि ड्रैंड 48 आमतौर पर बेहतर होता है, हालांकि मेरी विस्तृत समझ गायब है। जब मैं प्लेटफ़ॉर्म पर पोर्टेबल रिप्रोड्यूसबिलिटी की गारंटी चाहता हूं, तो मैंने सी, 2 वें संस्करण, व्हाट्सएप, एट अल, कैम्ब्रिज यूपी 1992, आईएसबीएन 0-521-43108-5, पृष्ठ 280 में न्यूमेरिकल रेसिपीज से रेन 1 () कोडित किया। मैं बता सकता हूं, लेकिन मात्रात्मक रूप से परीक्षण नहीं किया है।

यादृच्छिक () या drand48 () / lrand48 () का उपयोग करें (मैं हमेशा आणविक गतिशीलता और मोंटे कार्लो सिमुलेशन के लिए उत्तरार्द्ध का उपयोग करता हूं और यह बहुत अच्छा है)। इसके अलावा, एक यादृच्छिक बीज का उपयोग करने का प्रयास करें। यह एकल कण Langevin समीकरण के अनुकरण के लिए पर्याप्त से अधिक होना चाहिए।
वेलेरियो

हमने एक परिधि का उपयोग किया, चक्र का नहीं।

@PeterShor सुधार के लिए धन्यवाद। मैंने जवाब को अपडेट कर दिया है, फिर भी मुझे कोई डर नहीं है।
RedPointyJackson

1
@DanielShapero यादृच्छिक और यूरेनियम को क्रिप्टोग्राफिक उद्देश्यों के लिए क्रिप्टोग्राफिक रूप से सुरक्षित माना जाता है, जिसका उद्देश्य क्रिप्टोग्राफ़िक उद्देश्यों के लिए है। इसका हार्डवेयर पहलू यह है कि लिनक्स पर, वे पर्यावरण एन्ट्रापी का उपयोग करते हैं, यह हार्डवेयर-त्वरित के समान नहीं है। वे वास्तव में मोंटे कार्लो सिमुलेशन जैसी किसी भी चीज़ के लिए अभिप्रेत नहीं हैं।
किरिल

जवाबों:


3

एक दिलचस्प संदर्भ जो अपर्याप्त आरएनजी (हालांकि वे एक एलसीजी का उपयोग नहीं किया था) के कारण एक शारीरिक प्रणाली के मोंटे कार्लो सिमुलेशन की विफलता का वर्णन करता है:

ए। फेरेनबर्ग और डीपी लांडौ। मोंटे कार्लो सिमुलेशन: "गुड" रैंडम नंबर जेनरेटर से छिपे हुए त्रुटियाँ। शारीरिक समीक्षा पत्र 63 (23): 3382-3384, 1992।

फेरिंगबर्ग और लैंडुआ ने जिन इस्सिंग मॉडल का अध्ययन किया, वे आरएनजी के अच्छे परीक्षण हैं क्योंकि आप एक सटीक समाधान (2-डी समस्या के लिए) के साथ तुलना कर सकते हैं और अंकों में त्रुटियों का पता लगा सकते हैं। इन मॉडलों को बहुत अधिक कठिनाई के बिना एक पुराने जमाने 32 बिट अंकगणितीय PMMLCG में दोष दिखाना चाहिए।

एक और दिलचस्प संदर्भ है:

एच। बाउक और स्टीफ़न मर्टेंस। छद्म यादृच्छिक सिक्के पूंछ की तुलना में अधिक प्रमुख दिखाते हैं। arXiv: cond-mat / 0307138 [cond-mat.stat-mech]

ब्यूक और मर्टेंस बाइनरी रैखिक प्रतिक्रिया पारी रजिस्टर शैली यादृच्छिक संख्या जनरेटर के खिलाफ एक मजबूत मामला बनाते हैं। बाउक और मर्टेंस के पास इससे संबंधित कुछ अन्य कागजात हैं।

3 डी स्कैटर प्लॉट में मार्साग्लिया विमानों को ढूंढना मुश्किल हो सकता है। आप एक बेहतर दृश्य प्राप्त करने के लिए भूखंड को घुमाने की कोशिश कर सकते हैं और कभी-कभी वे आपको बस बाहर निकाल देंगे। आप सांख्यिकीय एकरूपता के 3 डी परीक्षण भी कर सकते हैं- पुराने 32 बिट एलसीजी के लिए, ये काफी कम संख्या में डिब्बे में विफल होंगे। उदाहरण के लिए 3 आयामों में डिब्बे के 20x20x20 ग्रिड के साथ एकरूपता परीक्षण व्यापक रूप से इस्तेमाल (और पहले से माना जाता है) के लिए एकरूपता की कमी का पता लगाने के लिए पर्याप्त है = m ^ 2 ^ 31-1, a = 7 ^ 5 के साथ PMMLCG।


1

PRNG परीक्षणों के TestU01 सूट का उपयोग करना संभव है ताकि पता लगाया जा सके कि उन परीक्षणों में से कौन साrand विफल है। ( TestU01 देखें : परीक्षण सूट के अवलोकन के लिए रैंडम नंबर जनरेटरों के अनुभवजन्य परीक्षण के लिए एसी लाइब्रेरी ।) किसी के खुद के मोंटे कार्लो सिमुलेशन के साथ आने से आसान है। एक तरह से यह सॉफ्टवेयर कंपोजिबिलिटी (और सॉफ्टवेयर शुद्धता) का भी सवाल है: एक PRNG दिया गया जो छोटे, सरल परीक्षणों पर ठीक काम करता प्रतीत होता है, आपको कैसे पता चलेगा कि इसके पैथोलॉजिकल बिहेवियर को एक बड़े प्रोग्राम द्वारा ट्रिगर नहीं किया जाएगा?

यहाँ कोड है:

#include "TestU01.h"

int main() {
  // Same as rand() on my machine
  unif01_Gen* gen = ulcg_CreateLCG(2147483647, 16807, 0, 12345);

  bbattery_SmallCrush(gen);
  bbattery_Crush(gen);

  return 0;
}

के लिए SmallCrush सूट, वहाँ 3 से 15 से बाहर नाकाम रहने के परीक्षण कर रहे हैं (देखें guidelongtestu01.pdf लंबे वर्णन और सभी संदर्भों के लिए TestU01 में, इन 10 परीक्षणों से 15 के आंकड़े हैं)।

  • n tdtdtI1,{Ij+1Ij}

  • n t[0,1)tdt

  • nt[0,1)XnP(X<x)=xtn=2×106t=6χ2<10300

मान लें कि ये सभी "विशिष्ट" मोंटे कार्लो सिमुलेशन हैं (हालांकि वे उन समस्याओं के समान नहीं हो सकते हैं जो आपके मन में थे), निष्कर्ष यह है कि randउनमें से कुछ अज्ञात उपसमूह विफल हो जाते हैं। मुझे नहीं पता कि यह विशेष रूप से क्यों है कि सबसेट, हालांकि, इसलिए मेरे लिए यह कहना असंभव है कि यह आपकी समस्या पर काम करेगा या नहीं।

MaxOft विशेष रूप से संदिग्ध लगता है, यह देखते हुए कि विवरण कितना सीधा है।

क्रश सूट में परीक्षणों के बीच , rand140 में से 51 (96 परीक्षणों में 140 आँकड़े) विफल रहता है। कुछ असफल परीक्षण (जैसे फूरियर 3 ) बिट स्ट्रिंग्स पर किए जाते हैं, इसलिए शायद यह संभव है कि वे आपके लिए प्रासंगिक नहीं होंगे। एक और जिज्ञासु परीक्षण जो विफल रहता है वह है जीसीडी , जो दो यादृच्छिक पूर्णांकों के जीसीडी के वितरण का परीक्षण करता है। (फिर, मुझे नहीं पता कि यह विशेष परीक्षण विफल क्यों है या क्या आपका अनुकरण इससे पीड़ित होगा या नहीं)

पुनश्च : फिर भी ध्यान देने वाली एक और बात यह है कि rand()वास्तव में कुछ PRNG की तुलना में धीमी है जो सफलतापूर्वक सभी SmallCrush , Crush , BigCrush परीक्षणों को पास करती है, जैसे MRG32k3a (ऊपर L'Ecuyer & Simp paper देखें)।

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