एक यादृच्छिक संख्या जनरेटर में वास्तव में एक बीज क्या है?


21

मैंने कुछ सामान्य Google खोज आदि की कोशिश की, लेकिन मुझे जो उत्तर मिले वे या तो कुछ अस्पष्ट या भाषा / पुस्तकालय विशिष्ट हैं जैसे कि पायथन या सी ++ stdlib.hआदि।

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

इसके अलावा, इस संदर्भ में एक शुरुआती बिंदु का क्या मतलब है? इसे कहने का एक गैर कठोर तरीका है एक तत्व xX एक नक्शे के डोमेन के f:XY ? या मुझे कुछ गलत हो रहा है?


7
मैं एक उत्तर लिखने के लिए योग्य नहीं लगता, लेकिन आप मेर्सेन ट्विस्टर प्रबोधन पर विकिपीडिया लेख पा सकते हैं , विशेषकर आरंभीकरण की धारा । संक्षेप में, मेरसेन ट्विस्टर की तरह एक छद्म आयामी संख्या जनरेटर अंततः अपने आउटपुट को दोहराएगा। एमटी के मामले में इस अवधि की लंबाई है 2^19937 − 1। बीज इस अत्यंत लंबे अनुक्रम का बिंदु है जहां जनरेटर शुरू होता है। तो हाँ, यह निर्धारक है।
इयॉनसोल्यूशंस

1
एक छद्म यादृच्छिक संख्या जनरेटर संख्या की निश्चित सूची को दोहराता है। कहाँ से शुरू होता है? आप कहते हैं।
whuber

2
@ जब भी मुझे लगता है कि वास्तव में आपकी टिप्पणी एक महान जवाब होगा।
डेविड जेड

जवाबों:


22

अधिकांश छद्म-यादृच्छिक संख्या जनरेटर (PRNG) एल्गोरिदम पर निर्मित होते हैं, जिसमें आधार मूल्य से शुरू होने वाले कुछ प्रकार के पुनरावर्ती विधि शामिल होते हैं जो "बीज" नामक एक इनपुट द्वारा निर्धारित होते हैं। अधिकांश सांख्यिकीय सॉफ़्टवेयर (R, पायथन, स्टाटा, आदि) में डिफ़ॉल्ट PRNG Mersenne Twister एल्गोरिथम MT19937 है, जो Matsumoto और Nishimura (1998) में स्थापित किया गया है । यह एक जटिल एल्गोरिथ्म है, इसलिए इस पर पेपर पढ़ना सबसे अच्छा होगा यदि आप जानना चाहते हैं कि यह कैसे विस्तार से काम करता है। इस विशेष एल्गोरिथ्म में, डिग्री का पुनरावृत्ति संबंध है , और आपका इनपुट बीज वैक्टर x 0 , x 1 , का एक प्रारंभिक सेट है ,n । एल्गोरिथ्म एक रैखिक पुनरावृत्ति संबंध का उपयोग करता है जो उत्पन्न करता है:x0,x1,...,xn1

xn+k=f(xk,xk+1,xk+m,r,A),

आर 1mnrA

अब, यह नोट करना महत्वपूर्ण है कि MT19937 एल्गोरिथ्म का उपयोग करके यह केवल एक उदाहरण है। ऐसे कई PRNG हैं जिनका उपयोग सांख्यिकीय सॉफ़्टवेयर में किया जा सकता है, और उनमें से प्रत्येक में अलग-अलग पुनरावर्ती विधियाँ शामिल हैं, और इसलिए बीज का अर्थ है कि उनमें से प्रत्येक में एक अलग चीज़ (तकनीकी शब्दों में) है। आप के लिए PRNGs का एक पुस्तकालय पा सकते हैं Rमें इस दस्तावेज़ , जो उपलब्ध एल्गोरिदम और कागजात है कि इन एल्गोरिदम का वर्णन सूचीबद्ध करता है।

बीज का उद्देश्य उपयोगकर्ता को छद्म यादृच्छिक संख्या जनरेटर को "लॉक" करने के लिए, प्रतिकृति विश्लेषण की अनुमति देना है। कुछ विश्लेषक एक सच्चे यादृच्छिक-संख्या जनरेटर (TRNG) का उपयोग करके बीज को सेट करना पसंद करते हैं जो प्रारंभिक बीज संख्या उत्पन्न करने के लिए हार्डवेयर इनपुट का उपयोग करता है, और फिर इसे लॉक किए गए नंबर के रूप में रिपोर्ट करता है। यदि मूल उपयोगकर्ता द्वारा बीज को सेट और रिपोर्ट किया जाता है तो एक ऑडिटर विश्लेषण को दोहरा सकता है और मूल उपयोगकर्ता के समान छद्म यादृच्छिक संख्याओं का अनुक्रम प्राप्त कर सकता है। यदि बीज सेट नहीं है, तो एल्गोरिथ्म आमतौर पर कुछ प्रकार के डिफ़ॉल्ट बीज (जैसे, सिस्टम घड़ी से) का उपयोग करेगा, और आमतौर पर यादृच्छिकता को दोहराने के लिए संभव नहीं होगा।


+1। यह जोड़ना अच्छा होगा कि क्या (आमतौर पर) होता है अगर कोई स्पष्ट रूप से बीज प्रदान नहीं करता है।
अमीबा का कहना है कि मोनिका

1
@amoeba: मेरे उत्तर का 4 वां पैराग्राफ, इस पर संक्षेप में चर्चा करता है।
ब्रूसेट

1
हालांकि यह प्रश्न की मूल बातों का जवाब देता है। यह इस तथ्य को नहीं छूता है कि हमें सिमुलेशन में इसकी आवश्यकता क्यों है। TRUE यादृच्छिकता का उत्पादन करना बहुत कठिन है - और जब आपके पास ऐसा है कि आप मूल उत्तर को पुन: पेश नहीं कर सकते हैं! PNRG दर्ज करें ... अपनी सभी समस्याओं के साथ।
पॉल पालम्पजे

@amoeba: जैसा कि अनुरोध किया गया है, मैंने इसे निकालने के लिए एक अतिरिक्त पैराग्राफ जोड़ा है।
मोनिका

1
धन्यवाद। "डिफॉल्ट सीड" थोड़ा ऐसा लगता है जैसे यह हमेशा बीज का एक ही डिफ़ॉल्ट मूल्य है; मेरा मतलब है कि आमतौर पर बीज को सिस्टम क्लॉक से लिया जाता है। मुझे लगता है कि यह जानना अच्छा है।
अमीबा का कहना है कि

16

सबसे पहले, आज के कंप्यूटर में उत्पन्न "यादृच्छिक संख्या" में कोई सच्ची यादृच्छिकता नहीं है । सभी छद्म आयामी जनरेटर निर्धारक तरीकों का उपयोग करते हैं। (संभवतः, क्वांटम कंप्यूटर बदल जाएगा।)

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

आप सही हैं कि बीज सेट करना आपको एक विशेष रूप से ज्ञात शुरुआती बिंदु पर छद्म आयामी संख्याओं की लंबी सूची में शुरू करता है। आर, पायथन और इतने पर लागू किए गए जनरेटर के लिए, सूची बेहद लंबी है। लंबे समय तक पर्याप्त नहीं है कि सबसे बड़ी व्यवहार्य सिमुलेशन परियोजना जनरेटर की 'अवधि' से अधिक हो जाएगी ताकि मान पुन: चक्रित होने लगें।

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

आमतौर पर, एक जनरेटर के आउटपुट में ऐसे मूल्य शामिल होते हैं जो व्यावहारिक उद्देश्यों के लिए नहीं होते हैं, संख्याओं से अलग-अलग सही मायने में यादृच्छिक रूप में चुने गए समान वितरणफिर उन छद्म आयामी संख्याओं में हेरफेर किया जाता है, ताकि दूसरे वितरण जैसे कि द्विपद, पॉसों, सामान्य, घातीय, आदि से यादृच्छिक पर नमूना प्राप्त हो सके।(0,1).

जनरेटर का एक परीक्षण यह देखने के लिए है कि क्या 'अवलोकनों' में उसके क्रमिक जोड़े रूप में सिम्युलेटेड हैं , वे वास्तव में ऐसे दिखते हैं जैसे वे यूनिट स्क्वायर को यादृच्छिक पर भर रहे हैं। (नीचे दो बार किया गया है।) थोड़ा अचंभित रूप अंतर्निहित परिवर्तनशीलता का परिणाम है। यह एक साजिश प्राप्त करने के लिए बहुत संदिग्ध होगा जो पूरी तरह से समान रूप से ग्रे दिखता था। [कुछ प्रस्तावों पर, एक नियमित रूप से मौआ पैटर्न हो सकता है; यदि यह घटित होता है, तो उस फर्जी प्रभाव से छुटकारा पाने के लिए आवर्धन को ऊपर या नीचे करें।]Unif(0,1)

set.seed(1776);  m = 50000
par(mfrow=c(1,2))
  u = runif(m);  plot(u[1:(m-1)], u[2:m], pch=".")
  u = runif(m);  plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,1))

यहाँ छवि विवरण दर्ज करें

कभी-कभी बीज लगाना उपयोगी होता है। कुछ ऐसे उपयोग इस प्रकार हैं:

  1. जब प्रोग्रामिंग और डिबगिंग यह अनुमानित उत्पादन के लिए सुविधाजनक है। इतने सारे प्रोग्रामर set.seedएक कार्यक्रम की शुरुआत में एक बयान डालते हैं जब तक कि लेखन और डिबगिंग नहीं किया जाता है।

  2. जब सिमुलेशन के बारे में पढ़ाना। अगर मैं छात्रों को यह दिखाना चाहता हूं कि मैं sampleआर में फ़ंक्शन का उपयोग करके एक निष्पक्ष मर के रोल का अनुकरण कर सकता हूं, तो मैं धोखा दे सकता हूं, कई सिमुलेशन चला रहा हूं, और जो एक लक्ष्य सैद्धांतिक मूल्य के सबसे करीब आता है उसे उठा सकता है। लेकिन यह एक अवास्तविक धारणा देगा कि अनुकरण वास्तव में कैसे काम करता है।

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

    उदाहरण के लिए, दो उचित पासा लुढ़कने पर कुल 10 प्राप्त करने की संभावनाएक लाख 2-पासा प्रयोगों के साथ मुझे लगभग दो या तीन जगह सटीकता मिलनी चाहिए। सिमुलेशन त्रुटि का 95% मार्जिन2

    3/36=1/12=0.08333333.
    2(1/12)(11/12)/106=0.00055.
    set.seed(703);  m = 10^6
    s = replicate( m, sum(sample(1:6, 2, rep=T)) )
    mean(s == 10)
    [1] 0.083456         # aprx 1/12 = 0.0833
    2*sd(s == 10)/sqrt(m)
    [1] 0.0005531408     # aprx 95% marg of sim err.
    
  3. सांख्यिकीय विश्लेषण साझा करते समय जिसमें सिमुलेशन शामिल होता है। आजकल कई सांख्यिकीय विश्लेषणों में कुछ सिमुलेशन शामिल हैं, उदाहरण के लिए एक क्रमपरिवर्तन परीक्षण या गिब्स नमूना। बीज को दिखाकर, आप उन लोगों को सक्षम करते हैं जो विश्लेषण पढ़ते हैं, यदि वे चाहें तो परिणामों को ठीक से दोहरा सकते हैं।

  4. रैंडमाइजेशन से जुड़े अकादमिक लेख लिखते समय। अकादमिक लेख आमतौर पर सहकर्मी की समीक्षा के कई दौर से गुजरते हैं। एक प्लॉट ओवरप्लेटिंग को कम करने के लिए, बेतरतीब ढंग से घबराने वाले बिंदुओं का उपयोग कर सकता है। यदि समीक्षकों की टिप्पणियों के जवाब में विश्लेषणों को थोड़ा बदलना आवश्यक है, तो यह अच्छा है यदि एक विशेष असंबंधित घबराना समीक्षा के दौर के बीच नहीं बदलता है, जो कि विशेष रूप से नाइटपिक समीक्षकों के लिए असंतोषजनक हो सकता है, इसलिए आप घबराना के साथ एक बीज निर्धारित करते हैं।


1
बहुत अच्छा, +1। मैंने चौथे अंक को जोड़ने की स्वतंत्रता ली।
एस। कोलासा - मोनिका जूल

तो क्या आपका मतलब है कि एक छद्म कंडोम संख्या जनरेटर मूल रूप से यादृच्छिक संख्या (समान रूप से [0, 1] में वितरित) के आवधिक अनुक्रम को संग्रहीत करता है और एक बीज अनुक्रम का एक सूचकांक मात्र है? तो क्या इसका मतलब यह है कि उत्पन्न यादृच्छिक संख्या बीज का एक नियतात्मक कार्य है?
डेला

9
क्वांटम घटना का उपयोग करने के लिए आपको क्वांटम कंप्यूटर की आवश्यकता नहीं है, एक यादृच्छिक जनरेटर ( en.wikipedia.org/wiki/Hardware_random_number_generator )
Guiroux

1
@Della। आपके पास अनिवार्य रूप से सही विचार है। लेकिन कृपया समझें कि व्यवहार में 'काल' को वास्तव में बहुत बड़ा होना चाहिए। (कोई फर्क नहीं पड़ता कि आपकी अनुकार परियोजना कितनी बड़ी है, आप इसे दोहराना नहीं चाहते हैं।) उदाहरण के लिए, IonicSolutions ने Q के बाद टिप्पणी की है कि Mersenne Twilster जनरेटर की अवधि कुछ हद तक मैं आसानी से कल्पना कर सकता हूं। // यदि आप बीज को जानते हैं, तो आप वहां से छद्म आकार के सीक का उत्पादन कर सकते हैं। // जनरेटर का उपयोग संदेशों को एन्क्रिप्ट करने के लिए किया गया है। लेकिन एन्क्रिप्शन के लिए सुरक्षित जनरेटर के मानक प्रायिकता सिमुलेशन के लिए जनरेटर के मानकों से अलग हैं। 2199371,
ब्रूसेट

@Guiroux। संभावना है कि मैं फिर से क्वांटम कंप्यूटरों का उल्लेख करने की कोशिश कर रहा था, आज के छद्म रूप से उत्पन्न जनरेटर के रूप में सही यादृच्छिक संख्या जनरेटर होना चाहिए। 1950 के दशक में 'सच' रैंडम नंबरों का इस्तेमाल प्रायोगिक डिजाइन में रैंडमाइजेशन के लिए और (धीमे, सीमित) प्रोब सिमुलेशन के लिए किया गया था। शायद मिलियन रैंडम अंक देखें ।
ब्रूसेट

0

टी एल; डॉ;

एक बीज आमतौर पर आपको यादृच्छिक संख्याओं के अनुक्रम को पुन: पेश करने में सक्षम बनाता है। इस अर्थ में वे सच यादृच्छिक संख्याएँ नहीं हैं, लेकिन "छद्म यादृच्छिक संख्याएँ" हैं, इसलिए PNR जेनरेटर (PNRG)। ये वास्तविक जीवन में एक वास्तविक मदद हैं!

थोड़ा और विस्तार:

वस्तुतः कंप्यूटर भाषाओं में लागू सभी "यादृच्छिक" संख्या जनरेटर छद्म यादृच्छिक संख्या जनरेटर हैं। ऐसा इसलिए है क्योंकि उन्हें एक प्रारंभिक मूल्य (===> बीज) दिया जाता है वे हमेशा छद्म यादृच्छिक परिणामों के समान अनुक्रम प्रदान करेंगे। एक अच्छा जनरेटर एक अनुक्रम का उत्पादन करेगा जिसे प्रतिष्ठित नहीं किया जा सकता है - सांख्यिकीय शब्दों में - एक सच्चे यादृच्छिक अनुक्रम से (एक सच्चा मरो, सच्चा सिक्का, आदि फेंक दो)।

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

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

अब एक "सच" RNG की कल्पना करें। एक मशीन में एक तरह की यादृच्छिकता के आधार पर इसे लागू कर सकता है। यदि आप केवल एक यादृच्छिक बीज लेते हैं (जैसे अब समय) तो आप एक यादृच्छिक प्रारंभिक बिंदु बनाते हैं लेकिन अनुक्रम की यादृच्छिकता अभी भी अगले संख्याओं को निर्धारित करने के लिए एल्गोरिथ्म पर निर्भर करती है। यह ज्यादातर मामलों में शुरुआती बिंदु से अधिक महत्वपूर्ण है क्योंकि परिणामों का वितरण वास्तविक "परिणाम" निर्धारित करता है। यदि आपका अनुक्रम वास्तव में यादृच्छिक होना चाहिए, तो आप इसे कैसे लागू करेंगे? कंप्यूटर के क्लॉक टिक्स को नियतात्मक कहा जा सकता है और अन्यथा संभवतः बहुत अधिक ऑटो-सहसंबंध दिखाई देगा। तो आप क्या कर सकते हैं? एक ठोस पीएनआरजी को लागू करने के लिए अब तक का सबसे अच्छा दांव है।

क्वांटम कम्प्यूटिंग? मुझे यकीन नहीं है कि इसे ठीक कर देंगे।

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