क्या Fortuna या Mersenne Twister एक एल्गोरिथम RNG के रूप में बेहतर है?


19

एक हालिया उत्तर में एक मोंटे कार्लो सिमुलेशन को बीज बनाने के लिए Fortuna या Mersenne Twister रैंडम नंबर जेनरेटर ( RNG ) के उपयोग का उल्लेख किया गया है । मैंने फोर्टुना के बारे में नहीं सुना था इसलिए मैंने इसे देखा - ऐसा लगता है कि यह मुख्य रूप से क्रिप्टोग्राफ़िक उपयोग के लिए है।

मैं वर्तमान में K- मीन्स एल्गोरिथ्म को बीज बनाने के लिए उत्पादन कोड में एक मेर्सेन ट्विस्टर का उपयोग करता हूं।

कौन सी (Fortuna या Mersenne Twister) "एल्गोरिदमिक सीडिंग" अनुप्रयोगों के लिए सबसे अच्छी मानी जाती है (उदाहरण के लिए, मोंटे कार्लो और के-मीन्स को सीडिंग करना)? या यह "टॉस अप" है - यानी सबसे सुविधाजनक का उपयोग करें।

जहां से मैं बैठा हूं, "सर्वश्रेष्ठ" को उच्चतम गुणवत्ता वाले यादृच्छिक नंबर प्रदान करना चाहिए, जल्दी से काम करना चाहिए, और (संभवतः) कम स्मृति पदचिह्न होना चाहिए। इनमें से, गुणवत्ता शायद हम में से अधिकांश के लिए सबसे महत्वपूर्ण है।


6
क्रिप्टोग्राफिक PRNGs अधिकांश अन्य PRNG की तुलना में धीमी गति से होते हैं; यदि आप एक मोंटे कार्लो सिमुलेशन कर रहे हैं, जहां आपके PRNG संचालन संख्या लाखों में है, तो आपको क्रिप्टोग्राफ़िक तरीके बहुत महंगे लगेंगे।
JM

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

@JM क्रिप्टोग्राफिक RGG के बारे में अच्छी बात है - Fortuna के खिलाफ निशान
winwaed

यहाँ PRNG के और कई अलग अलग आँकड़े का एक अच्छा सूची आप उपयोगी आशा यह मदद करता है> पा सकते हैं कि boost.org/doc/libs/1_48_0/doc/html/boost_random/...
pyCthon

Cstdlib के साथ मेरी समस्या ग्रैन्युलैरिटी थी - केवल RAND_MAX=32768संभव मूल्य। मैं वर्तमान में मोंटे कार्लो के लिए एमटी का उपयोग कर रहा हूँ रीमार्टिंग सिम। हालाँकि, मैं अपने प्रोफाईल में एमटी को एक प्रदर्शन अड़चन के रूप में नहीं देखता, शायद इसलिए कि मैं एक पूर्वप्रक्रम के रूप में रे दिशाओं जैसी चीजों की "यादृच्छिक" पीढ़ी कर रहा हूं । उदाहरण के लिए, मैं स्टार्टअप पर १,००,००० किरणों की एक सरणी उत्पन्न कर सकता हूं, उन्हें एक सरणी में संग्रहीत कर सकता हूं, और रनटाइम पर यादृच्छिक रूप से चयनित सरणी प्रारंभ स्थिति (१०,००० किरणों या संग्रह के लिए चल रहा है)। अच्छे यादृच्छिक संख्या वितरण के बदले में यह अपेक्षाकृत उच्च मेमोरी ओवरहेड है।
बोबोबो

जवाबों:


14

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

  1. होमवर्क के लिए काफी अच्छा है।
  2. अपनी कंपनी पर दांव लगाने के लिए पर्याप्त है।
  3. अपने देश पर दांव लगाने के लिए काफी अच्छा है।

रैखिक बधाई PRNGs (आमतौर पर अधिकांश पुस्तकालयों में लागू की जाने वाली विधि) श्रेणी 1 में ठोस रूप से होती है। फोर्टुना और मेरसेन ट्विस्टर दोनों श्रेणी 2 में ठोस हैं।

एक दिलचस्प लेख के लिए कैसे एक फेरबदल एल्गोरिथ्म गड़बड़ कर सकता है आप अपनी कंपनी / कैसीनो खर्च कर सकते हैं, मैं 1999 से यह एक सलाह देते हैं । लिंक सड़ने के कारण, छवियां चली गई हैं, लेकिन आंकड़ा 4, जिस पर आप पिछली संख्या के खिलाफ PRNG से अगली संख्या की साजिश करते हैं, उत्पन्न समानांतर रेखाओं का एक सेट है।

जैसा कि जेएम बताते हैं, फोर्टुना धीमा है। जैसा कि आपने बताया है, मेरसेन ट्विस्टर यथोचित रूप से तेज है।


2
लेख के मुद्रण योग्य संस्करण के माध्यम से त्वरित रूप से स्किमिंग , "चित्र 4" चित्र के बजाय कोड प्रतीत होता है। "चित्र 5" कपुट दिखता है, लेकिन यह वह छवि है जो मुझे वेबैक मशीन से मिली थी ।
JM

धन्यवाद। ऐसा लग रहा है कि गति इस मामले में Fortuna के खिलाफ एक निशान है। पुन। खराब फेरबदल: हाँ, मैं काफी जानता हूं (ज्यादा नहीं!) कि आरएनजी की यादृच्छिकता को "पूर्ववत" करना आसान है - उदाहरण के लिए, एक खराब शुरुआती बीज का चयन करके।
बजकर

बेहतर चित्रों के साथ एक और संस्करण यहां है: cigital.com/papers/download/developer_gambling.php
Tangurena

1
32 बिट आउटपुट के साथ 96-बिट एलसीजी मेर्सेन ट्विस्टर की तुलना में अधिक सांख्यिकीय परीक्षण पास करते हैं। आजकल किसी को भी मेर्सेन ट्विस्टर का उपयोग नहीं करना चाहिए, बशर्ते कि सभ्य गैर-क्रिप्टोग्राफ़िक PRNG बनाना इतना आसान हो जो हर सार्थक संबंध में MT से कहीं बेहतर हो।
विड्रैक

4

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

यदि आप एक यूनिक्स जैसी प्रणाली पर चल रहे हैं, तो आप अपने रैंडम नंबरों को सीधे / dev / urandom से प्राप्त करने पर विचार कर सकते हैं , ऑपरेटिंग सिस्टम सर्विस जो अच्छी (हालांकि जरूरी नहीं कि क्रिप्टो) गुणवत्ता वाली रैंडम संख्या प्रदान करती है। आपके द्वारा उपयोग किए जा रहे विशेष OS के आधार पर, यह यारो एल्गोरिथ्म का उपयोग कर सकता है - जिनमें से Fortuna एक संस्करण है। लेकिन सबसे दिलचस्प पहलू यह है कि ऑपरेटिंग सिस्टम में कुछ सच्चे यादृच्छिक संख्याओं तक पहुंच है: आंतरिक तापमान सेंसर से थर्मल शोर, उदाहरण के लिए। आमतौर पर, यह डेटा यादृच्छिक पूल में मिलाया जाता है जब भी यह डेटा को अप्रत्याशित रखने के लिए उपलब्ध हो जाता है।

यादृच्छिकता में मिश्रण की यह अवधारणा बताती है कि इस प्रकार दोनों दुनिया का सर्वश्रेष्ठ प्राप्त करना संभव हो सकता है। अपने मूल RNG के रूप में Mersenne जैसे तेज, उचित रूप से अच्छी गुणवत्ता वाले यादृच्छिक संख्या जनरेटर का उपयोग करें। एक दूसरे, बेहतर गुणवत्ता वाले यादृच्छिक संख्या जनरेटर को बनाए रखें - जैसे कि Fortuna। हर संख्या में 25 का कहना है कि बेहतर RNG की एक पुनरावृत्ति चलाएं और परिणाम को अपने मूल RNG की स्थिति में जोड़ें। इस तरह आपको काफी उच्च प्रदर्शन और काफी उच्च गुणवत्ता वाले परिणाम प्राप्त होंगे। (मुझे लगता है कि यह क्रिप्टो के लिए बेकार होगा, क्योंकि इस मिश्रित जनरेटर की ताकत सबसे कमजोर लिंक की ताकत हो सकती है। लेकिन सिमुलेशन के लिए, जहां आपके पास आमतौर पर दुर्भावनापूर्ण विरोधी नहीं होता है, यह काम कर सकता है।)


/ dev / urandom, linux और free-bsd पर क्रिप्टोग्राफी के लिए उपयोग करने के लिए सुरक्षित है। इस उत्तर को देखें
एडम कुर्कविज़

सिमुलेशन के लिए, यह यादृच्छिक संख्याओं के लिए सच होने के लिए एक वांछनीय विशेषताएं क्यों होगी? ज़रूर, कुछ छद्म यादृच्छिक संख्या जनरेटर बदतर हैं, लेकिन अन्य सभी व्यावहारिक उद्देश्यों के लिए बराबर होंगे। तो, आप trueness को se की अच्छी विशेषता क्यों मानते हैं?
12 अप्रैल को Wrzlprmft

2

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


0

मुझे लगता है कि जवाब बहुत हद तक उस एप्लिकेशन पर निर्भर करता है जिसका आप RNG के लिए उपयोग करने का इरादा कर रहे हैं। मैं तंगुरेना के किसी न किसी वर्गीकरण के लिए एक अगली श्रेणी सुझाता हूं: "कोई वास्तविक लाभ नहीं।"

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

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