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


23

मैं बस php rand()फ़ंक्शन के बारे में विचार कर रहा था , और यह सोचकर कि मैं इसे कैसे रीमेक कर सकता हूं, और मैं पूरी तरह से मूर्ख बन गया।

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


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

क्या वायुमंडलीय शोर यादृच्छिक होने की गारंटी है?


14
function rand() { return 4; /* determined by die roll - guaranteed to be random */ }
नील

3
किसी को यह करना होगा: xkcd.com/221 ;)
वलेरा कोलुपाएव

जवाबों:


7

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

यह विकिपीडिया लेख आपको स्पष्टीकरण में मदद करने में सक्षम हो सकता है: http://en.wikipedia.org/wiki/Random_number_generators


जो मैं समझता हूं, उसमें मूल रूप से एक RNG के दो भाग होते हैं: बीज, और फिर उस बीज से चुने गए यादृच्छिक संख्या। जब आप RNG को बीज देते हैं, तो आप इसे एक प्रारंभिक बिंदु के बराबर दे रहे हैं। उस शुरुआती बिंदु में संख्याओं का एक समूह होता है जो इसके "अंदर" होते हैं जिन्हें प्रोग्राम चुनता है। PHP में, आप बीज को "फेरबदल" करने के लिए सरंड () का उपयोग कर सकते हैं, इसलिए आपको लगभग हमेशा एक अलग उत्तर मिलता है। फिर आप बीज में जाने के लिए रैंड (न्यूनतम, अधिकतम) का उपयोग कर सकते हैं और न्यूनतम और अधिकतम के बीच एक संख्या चुन सकते हैं।


चेतावनी, पोस्सेबल चीज़ एनालाजी AHEAD!

प्रत्येक 'बीज' को बर्फ की छाती के रूप में सोचो, और फिर बर्फ के टुकड़े के रूप में यादृच्छिक संख्या। मान लीजिए कि आपके पास 1000 आइस चेस्ट हैं और प्रत्येक चेस्ट के अंदर 1000 आइस क्यूब्स हैं। काउंटी मेले में, वे पेय के लिए उपयोग करना शुरू करने के लिए एक आइस चेस्ट का चयन करेंगे, और वे केवल एक आइस क्यूब का उपयोग कर सकते हैं। हालांकि, उन्हें केवल 1 क्यूबिक इंच से बड़े बर्फ के टुकड़े चाहिए। तो वे उन 1000 चेस्ट के बीच यादृच्छिक पर एक छाती का चयन करेंगे, और फिर वे यादृच्छिक रूप से उस छाती के अंदर एक आइस क्यूब चुनेंगे। यदि यह उनके इच्छित आकार के लिए काम करता है, तो वे इसका उपयोग करते हैं। यदि यह नहीं है, तो वे इसे वापस दूसरों के साथ छाती में डालते हैं। यदि वे इसे थोड़ा और मज़ेदार बनाना चाहते हैं, तो वे कुल गुमनामी के लिए चेस्ट को पहले से बदल देंगे, अगर आप करेंगे!

जैसा कि PHP वास्तव में शारीरिक रूप से बीज और यादृच्छिक संख्या को चुनता है, मेरे पास इसके लिए पर्याप्त ज्ञान नहीं है (जो शायद आप सबसे अधिक सोच रहे थे!)। मैं कोशिश नहीं करूंगा और रैंड () फ़ंक्शन को फिर से करूँगा; आपके द्वारा किए जाने वाले अधिकांश वेब आधारित अनुप्रयोगों के लिए, रैंड () को आपके द्वारा आवश्यक किसी भी यादृच्छिक संख्या के लिए पर्याप्त होना चाहिए।

इसके अलावा रैखिक बधाई देने वाले जनरेटर की जाँच करें, यह अधिक हो सकता है यदि आप गंदे विवरण चाहते हैं तो आप क्या देख रहे हैं: http://en.wikipedia.org/wiki/Linear_congruential_generator

उम्मीद है की यह मदद करेगा!


7
godकम से कम बिट में यादृच्छिक कैसे कार्य करेगा ? उस के ऊपर, बिजली या तो यादृच्छिक नहीं है, यह विभिन्न परिस्थितियों द्वारा निर्धारित पथ का अनुसरण करता है। साथ ही, संख्या को उत्पन्न करने वाला दुभाषिया अनिवार्य रूप से अप्रासंगिक है।

7
मैं कानूनी अर्थों में भगवान के कृत्यों का उपयोग कर रहा हूं: en.wikipedia.org/wiki/Act_of_God क्योंकि वे स्पष्ट मानव नियंत्रण से परे हैं, उन्हें यादृच्छिक माना जाता है।

4
इसलिए अनिवार्य रूप से, ऐसा कुछ भी नहीं है जो यादृच्छिक हो। लेकिन इसके लिए हर प्रतीत होने वाले यादृच्छिक भोगवाद की आवश्यकता होगी, जो तब काम नहीं करता जब आप समय की बहुत शुरुआत करते हैं .... ऐसा लगता है कि मैं कुछ दर्शन कक्षाएं लेने जा रहा हूं = डी

6
@ कोर्विन, जहां तक ​​हम जानते हैं, रेडियोधर्मी क्षय की तरह क्वांटम घटनाएं या एक उत्साहित परमाणु द्वारा फोटॉन का उत्सर्जन वास्तव में यादृच्छिक हैं। हालांकि, गणितज्ञ और दार्शनिक यह तर्क देते हैं कि वास्तव में यादृच्छिक होने का क्या मतलब है। और जब आम लोगों को लगता है कि एक सिक्का टॉस बहुत यादृच्छिक है, चुस्त चरण जादूगर ( news.stanford.edu/pr/2004/diaconis-69.html ) नियमित रूप से 10 फ्लैप पर 10 सिर प्राप्त कर सकते हैं।
चार्ल्स ई। ग्रांट

1
@Charles - एक सिक्का टॉस भी एक द्विआधारी सिर / पूंछ नहीं है, यह वास्तव में सिर / पूंछ / किनारा है, इसलिए एक बहुत अच्छा मंच जादूगर इसे न तो नीचे आने के लिए मिल सकता है और न ही पूंछ। * 8 ')
मार्क बूथ

18

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

छद्म यादृच्छिक संख्याओं में एक उपयोगी गुण होता है जो सही यादृच्छिक संख्याओं में नहीं होता है: यदि आप उसी बीज का उपयोग करते हैं जब आप शुरू करते हैं तो आपको एक समान अनुक्रम वापस मिलेगा। यह परीक्षण के लिए बहुत उपयोगी हो सकता है।


अगर मैं आपके दूसरे कथन को सही ढंग से समझ रहा हूँ: random(5332)हमेशा बराबर रहेगा random(5332)?

2
@ कोर्विन, नहीं, मेरा मतलब है कि यदि आप कॉल करते हैं srand(5332)तो अगला नंबर randहमेशा के लिए वापस आ जाएगा।
मार्क रैनसम

3
"यादृच्छिक प्रतीत होता है" -> वास्तव में यादृच्छिक संख्याओं के समान सांख्यिकीय गुण हैं।

एलजीसी विकिपीडिया लिंक के लिए +1, इस बात का एक उत्कृष्ट एनीमेशन है कि बहुदलीय मोंटे-कार्लो सिमुलेशन करते समय सरल PRNGs की गंभीर सीमाएं क्यों हैं।
मार्क बूथ

4

क्या आप छद्म आयामी या यादृच्छिक के लिए पूछ रहे हैं? दूसरों ने छद्म आयामी के बारे में जवाब दिया, मुझे रैंडम के बारे में बात करने दें।

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

OTOH, यदि आप किसी भी एम्बेडेड सिस्टम डेवलपर से मिलते हैं, तो वे इन पर हँसेंगे। एक माइक्रोकंट्रोलर को प्रोग्रामिंग करने के सामान्य उद्देश्यों के लिए, किसी भी 16-बिट एनालॉग-डिजिटल कनवर्टर के कम 4 बिट्स पढ़ने से एक फ्लोटिंग (असंबद्ध) पिन पर्याप्त बैंडविड्थ से अधिक (कम से कम मतदान की अवधि और अधिक) पर पूरी तरह से अच्छा यादृच्छिक शोर पैदा करेगा शोर "रीडआउट), और वास्तविक आरएनजी दिनचर्या लिखने की तुलना में आसान है। और यह मानते हुए कि ADCs को सामान्यतः माइक्रोकंट्रोलर्स के सिलिकॉन में लागू किया जाता है, आमतौर पर लागू किया जाता है, और अक्सर 8 चैनलों के साथ लागू किया जाता है, जिसमें से आपको अपने आवेदन के लिए शायद 5 की आवश्यकता होती है, यह व्यावहारिक रूप से मुफ्त है।

और यहां तक ​​कि अगर आपके पास कोई एडीसी नहीं है, तो डिजिटल जीपीआईओ पिन से जुड़े तत्वों के जोड़े बहुत अच्छा शोर पैदा करेंगे। एम्बेडेड में, शोर कभी-कभी मौजूद होता है (और लगातार लड़ा जाता है), और इसलिए कुछ सच्ची यादृच्छिकता प्राप्त करना बहुत आसान है।


2

संख्याओं के "यादृच्छिक" अनुक्रम का अनुकरण करने के लिए कई तरीके हैं। आपका पहला पड़ाव रैखिक बधाई देने वाले जनरेटर के बारे में पढ़ना चाहिए , निश्चित रूप से। यह सबसे बुनियादी यादृच्छिक संख्या जनरेटर कैसे काम करता है, और मैं शर्त लगाऊंगा कि PHP का रैंड () फ़ंक्शन कैसे काम करता है।

विचार करने के लिए और अधिक दिलचस्प अगला सवाल यह है कि यह स्वयं कैसे बीज करता है? पहर? आईपी ​​पता? आदि।


बीज वह है जो मुझे भ्रमित कर रहा है, मैं किसी भी चीज के बारे में नहीं सोच सकता हूं जो संभवतः किसी प्रकार के पैटर्न के बिना फ़ंक्शन को बीज कर सकता है, और यहां तक ​​कि अगर नहीं, तो क्या यादृच्छिक बीज पहली जगह में उत्पन्न हो रहा है!

3
मेरा मानना ​​है कि टाइमस्टैम्प का उपयोग अक्सर एक प्रारंभिक बीज के रूप में किया जाता है जब कोई भी वास्तव में किसी अन्य स्रोत से प्रदान नहीं किया जाता है। पुराने बेसिक में, RANDOMIZE TIMERएक सामान्य मुहावरा था, और अधिकांश (गैर-क्रिप्टोग्राफिक) उद्देश्यों के लिए "पर्याप्त अच्छा" था। मैन 3 सरैंड के अनुसार , जीएनयू सी लाइब्रेरी 1 के एक निश्चित बीज का उपयोग करती है जब तक कि पीआरएनजी को फिर से शुरू नहीं किया जाता है।
एक सीवीएन

1

सबसे पहले, लगभग सभी rand()फ़ंक्शन सही यादृच्छिकता प्रदान नहीं करते हैं, बल्कि वे तथाकथित छद्म यादृच्छिक संख्या प्रदान करते हैं।

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

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


तथ्य की बात के रूप में, आजकल कंप्यूटर में वास्तविक यादृच्छिक संख्याओं तक पहुंच होती है: वे बाहरी उपकरणों द्वारा उत्पादित इंटरप्ट्स के समय में घबराना से स्टेम करते हैं। लिनक्स एक छोटी सी अनिश्चितता के इन मूल्यों का उपयोग लगातार "एन्ट्रापी पूल" में हलचल करने के लिए करता है, जो कि केवल कुछ किलोबाइट आंतरिक स्थिति है। इस एन्ट्रापी पूल पर आधारित क्रिप्टोग्राफिक हैश /dev/randomऔर /dev/urandomउपकरणों के माध्यम से उपलब्ध कराया गया है। तो, वास्तव में बहुत अच्छे यादृच्छिक संख्याओं तक पहुंच इन दोनों उपकरणों में से एक को खोलने और उनसे कुछ बाइट्स पढ़ने के रूप में सरल है।


-2

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

रैंडम नंबर के दो प्रकार होते हैं 1. ट्रू रैंडम नंबर 2. स्यूडो रैंडम नंबर।

रैंडम नंबर कैसे जेनरेट किए जाते हैं


1
कृपया उद्धरण चिह्नों का उपयोग यह बताने के लिए करें कि उत्तर के कौन से हिस्से आपके हैं और जो आपके द्वारा उद्धृत स्रोत से हैं। यदि आपका सारा उत्तर बाहरी स्रोत से कॉपी / पेस्ट है, तो यह यहाँ अच्छा जवाब नहीं है।
चटाई

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