मर्सेन ट्विस्टर: Difference between revisions

From Vigyanwiki
No edit summary
Line 17: Line 17:
यह [[अपाचे कॉमन्स]] में,<ref>{{cite web|title=डेटा जनरेशन|url=http://commons.apache.org/proper/commons-math/userguide/random.html|work=Apache Commons Math User Guide}}</ref> मानक [[C++]] लाइब्रेरी में ([[C++11]] के उपरांत),<ref>{{cite web|title=C++11 में यादृच्छिक संख्या सृजन|url=https://isocpp.org/files/papers/n3551.pdf|work=Standard C++ Foundation}}</ref><ref>{{cite web|title=std::mersenne_twister_engine|url=http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine|access-date=2012-09-25|work=Pseudo Random Number Generation}}</ref> और मैथेमैटिका में<ref>[http://reference.wolfram.com/language/tutorial/RandomNumberGeneration.html#569959585] Mathematica Documentation</ref> भी उपलब्ध है। बूस्ट सी++ लाइब्रेरी सहित कई प्रोग्राम लाइब्रेरी जैसे सीयूडीए,<ref>{{cite web|title=होस्ट एपीआई अवलोकन|url=http://docs.nvidia.com/cuda/curand/host-api-overview.html#generator-types|access-date=2016-08-02|work=CUDA Toolkit Documentation}}</ref> और [[एनएजी न्यूमेरिकल लाइब्रेरी]]<ref>{{cite web|title=G05 – Random Number Generators|url=http://www.nag.co.uk/numeric/fl/nagdoc_fl23/xhtml/G05/g05intro.xml|access-date=2012-05-29|work=NAG Library Chapter Introduction}}</ref>में इसके युग्मित कार्यान्वयन प्रदान किए जाते हैं।<ref>{{cite web|title=boost/random/mersenne_twister.hpp|url=http://www.boost.org/doc/libs/1_49_0/boost/random/mersenne_twister.hpp|access-date=2012-05-29|work=Boost C++ Libraries}}</ref>  
यह [[अपाचे कॉमन्स]] में,<ref>{{cite web|title=डेटा जनरेशन|url=http://commons.apache.org/proper/commons-math/userguide/random.html|work=Apache Commons Math User Guide}}</ref> मानक [[C++]] लाइब्रेरी में ([[C++11]] के उपरांत),<ref>{{cite web|title=C++11 में यादृच्छिक संख्या सृजन|url=https://isocpp.org/files/papers/n3551.pdf|work=Standard C++ Foundation}}</ref><ref>{{cite web|title=std::mersenne_twister_engine|url=http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine|access-date=2012-09-25|work=Pseudo Random Number Generation}}</ref> और मैथेमैटिका में<ref>[http://reference.wolfram.com/language/tutorial/RandomNumberGeneration.html#569959585] Mathematica Documentation</ref> भी उपलब्ध है। बूस्ट सी++ लाइब्रेरी सहित कई प्रोग्राम लाइब्रेरी जैसे सीयूडीए,<ref>{{cite web|title=होस्ट एपीआई अवलोकन|url=http://docs.nvidia.com/cuda/curand/host-api-overview.html#generator-types|access-date=2016-08-02|work=CUDA Toolkit Documentation}}</ref> और [[एनएजी न्यूमेरिकल लाइब्रेरी]]<ref>{{cite web|title=G05 – Random Number Generators|url=http://www.nag.co.uk/numeric/fl/nagdoc_fl23/xhtml/G05/g05intro.xml|access-date=2012-05-29|work=NAG Library Chapter Introduction}}</ref>में इसके युग्मित कार्यान्वयन प्रदान किए जाते हैं।<ref>{{cite web|title=boost/random/mersenne_twister.hpp|url=http://www.boost.org/doc/libs/1_49_0/boost/random/mersenne_twister.hpp|access-date=2012-05-29|work=Boost C++ Libraries}}</ref>  


[[एसपीएसएस]] में मेर्सन ट्विस्टर, दो पीआरएनजी में से एक है: अन्य जनरेटर केवल पुराने प्रोग्रामों के साथ संगतता हेतु रखा गया है, और मर्सेन ट्विस्टर को "अधिक विश्वसनीय" घोषित किया जाता है।<ref>{{cite web|title=यादृच्छिक संख्या जेनरेटर|url=http://pic.dhe.ibm.com/infocenter/spssstat/v20r0m0/index.jsp?topic=%2Fcom.ibm.spss.statistics.help%2Fidh_seed.htm|access-date=2013-11-21|work=IBM SPSS Statistics}}</ref> मेर्सन ट्विस्टर इसी तरह [[एसएएस (सॉफ्टवेयर)|एसएएस]] में विभिन्न पीआरएनजी में से एक है: अन्य जनरेटर पुराने और अप्रचलित हैं।<ref>{{cite web|title=यादृच्छिक-संख्या फ़ंक्शंस का उपयोग करना|url=http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001281561.htm|access-date=2013-11-21|work=SAS Language Reference}}</ref> मेर्सन ट्विस्टर स्टाटा में डिफ़ॉल्ट पीआरएनजी है, दूसरा स्टाटा के पुराने संस्करणों के साथ संगतता के लिए [[KISS (एल्गोरिदम)|केआइएसएस]] विधिकलन का उपयोग किया जाता है।<ref>Stata help: [https://www.stata.com/help.cgi?set%20rng set rng -- Set which random-number generator (RNG) to use]</ref>
[[एसपीएसएस]] में मेर्सन ट्विस्टर, दो पीआरएनजी में से एक है: अन्य उत्पन्नक केवल पुराने प्रोग्रामों के साथ संगतता हेतु रखा गया है, और मर्सेन ट्विस्टर को "अधिक विश्वसनीय" घोषित किया जाता है।<ref>{{cite web|title=यादृच्छिक संख्या जेनरेटर|url=http://pic.dhe.ibm.com/infocenter/spssstat/v20r0m0/index.jsp?topic=%2Fcom.ibm.spss.statistics.help%2Fidh_seed.htm|access-date=2013-11-21|work=IBM SPSS Statistics}}</ref> मेर्सन ट्विस्टर इसी तरह [[एसएएस (सॉफ्टवेयर)|एसएएस]] में विभिन्न पीआरएनजी में से एक है: अन्य उत्पन्नक पुराने और अप्रचलित हैं।<ref>{{cite web|title=यादृच्छिक-संख्या फ़ंक्शंस का उपयोग करना|url=http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001281561.htm|access-date=2013-11-21|work=SAS Language Reference}}</ref> मेर्सन ट्विस्टर स्टाटा में डिफ़ॉल्ट पीआरएनजी है, दूसरा स्टाटा के पुराने संस्करणों के साथ संगतता के लिए [[KISS (एल्गोरिदम)|केआइएसएस]] विधिकलन का उपयोग किया जाता है।<ref>Stata help: [https://www.stata.com/help.cgi?set%20rng set rng -- Set which random-number generator (RNG) to use]</ref>




Line 30: Line 30:


== हानि ==
== हानि ==
* 2.5 [[KiB]] का अपेक्षाकृत बड़ा राज्य बफर, जब तक कि TinyMT वैरिएंट (नीचे चर्चा की गई) का उपयोग नहीं किया जाता है।
* 2.5 [[KiB]] का अपेक्षाकृत बड़ा स्टेट बफर, जब तक कि टाइनीएमटी संस्करण का उपयोग नहीं किया जाता है।
* आधुनिक मानकों के अनुसार औसत दर्जे का थ्रूपुट, जब तक कि एसएफएमटी संस्करण (नीचे चर्चा की गई) का उपयोग नहीं किया जाता है।<ref>{{cite web|title=SIMD-oriented Fast Mersenne Twister (SFMT): twice faster than Mersenne Twister|url=http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/|access-date=27 March 2017|website=Japan Society for the Promotion of Science}}</ref>
* आधुनिक मानकों के अनुसार औसत श्रेणी का थ्रूपुट, जब तक कि एसएफएमटी संस्करण का उपयोग नहीं किया जाता है।<ref>{{cite web|title=SIMD-oriented Fast Mersenne Twister (SFMT): twice faster than Mersenne Twister|url=http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/|access-date=27 March 2017|website=Japan Society for the Promotion of Science}}</ref>
* TestU01 सुइट में क्रश और बिगक्रश दोनों में दो स्पष्ट विफलताएं (रैखिक जटिलता) प्रदर्शित होती हैं। मेर्सन ट्विस्टर की तरह परीक्षण, एक पर आधारित है <math>\textbf{F}_2</math>-बीजगणित।<ref name="TestU01" />* कई उदाहरण जो केवल बीज मूल्य (लेकिन अन्य मापदंडों में नहीं) में भिन्न होते हैं, आम तौर पर [[ मोंटे कार्लो सिमुलेशन ]] के लिए उपयुक्त नहीं होते हैं। मोंटे-कार्लो सिमुलेशन के लिए स्वतंत्र यादृच्छिक संख्या जनरेटर की आवश्यकता होती है, हालांकि पैरामीटर मानों के कई सेट चुनने के लिए एक विधि मौजूद है।<ref>{{cite web|author1=Makoto Matsumoto|author2=Takuji Nishimura|title=छद्म यादृच्छिक संख्या जेनरेटर का गतिशील निर्माण|url=http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/DC/dgene.pdf|access-date=19 July 2015}}</ref><ref>{{cite web|author1=Hiroshi Haramoto|author2=Makoto Matsumoto|author3=Takuji Nishimura|author4=François Panneton|author5=Pierre L'Ecuyer|title=Efficient Jump Ahead for F2-Linear Random Number Generators|url=http://www.iro.umontreal.ca/~lecuyer/myftp/papers/jumpf2.pdf|access-date=12 Nov 2015}}</ref>
* TestU01 सुइट में क्रश और बिगक्रश दोनों में दो स्पष्ट विफलताएं प्रदर्शित होती हैं। मेर्सन ट्विस्टर की तरह परीक्षण, एक <math>\textbf{F}_2</math>-बीजगणित पर आधारित है।<ref name="TestU01" />* कई उदाहरण जो केवल बीजगणितीय मानों में भिन्न होते हैं, सामान्यतः [[ मोंटे कार्लो सिमुलेशन ]]के लिए उपयुक्त नहीं होते हैं। मोंटे-कार्लो सिमुलेशन के लिए स्वतंत्र यादृच्छिक संख्या उत्पन्नक की आवश्यकता होती है, यद्यपि पैरामीटर मानों के कई समुच्चयों को चुनने के लिए एक विधि उपलब्ध है।<ref>{{cite web|author1=Makoto Matsumoto|author2=Takuji Nishimura|title=छद्म यादृच्छिक संख्या जेनरेटर का गतिशील निर्माण|url=http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/DC/dgene.pdf|access-date=19 July 2015}}</ref><ref>{{cite web|author1=Hiroshi Haramoto|author2=Makoto Matsumoto|author3=Takuji Nishimura|author4=François Panneton|author5=Pierre L'Ecuyer|title=Efficient Jump Ahead for F2-Linear Random Number Generators|url=http://www.iro.umontreal.ca/~lecuyer/myftp/papers/jumpf2.pdf|access-date=12 Nov 2015}}</ref>
* खराब प्रसार: [[ यादृच्छिकता परीक्षण ]] पास करने वाले आउटपुट को उत्पन्न करने में लंबा समय लग सकता है, यदि प्रारंभिक स्थिति अत्यधिक गैर-यादृच्छिक है - खासकर यदि प्रारंभिक स्थिति में कई शून्य हैं। इसका एक परिणाम यह है कि जनरेटर के दो उदाहरण, प्रारंभिक अवस्थाओं के साथ शुरू हुए जो लगभग समान हैं, आमतौर पर अंततः अलग होने से पहले, कई पुनरावृत्तियों के लिए लगभग समान अनुक्रम का उत्पादन करेंगे। एमटी एल्गोरिदम के लिए 2002 के अपडेट ने आरंभीकरण में सुधार किया है, इसलिए ऐसी स्थिति के साथ शुरुआत करना बहुत ही असंभव है।<ref>{{cite web|title=mt19937ar: Mersenne Twister with improved initialization|url=http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html|access-date=4 October 2015|work=hiroshima-u.ac.jp}}</ref> GPU संस्करण (MTGP) को और भी बेहतर बताया गया है।<ref name="fog">{{cite journal|last1=Fog|first1=Agner|date=1 May 2015|title=वेक्टर प्रोसेसर और मल्टीकोर प्रोसेसर के लिए छद्म-यादृच्छिक संख्या जेनरेटर|journal=Journal of Modern Applied Statistical Methods|volume=14|issue=1|pages=308–334|doi=10.22237/jmasm/1430454120|doi-access=free}}</ref>
* खराब प्रसार: यदि प्रारंभिक स्थिति अत्यधिक गैर-यादृच्छिक है - विशेषकर यदि प्रारंभिक स्थिति में कई शून्य हैं तो [[ यादृच्छिकता परीक्षण |यादृच्छिकता परीक्षण]] उत्तीर्ण करने वाले आउटपुट को उत्पन्न करने में लंबा समय लग सकता है। इसका एक परिणाम यह है कि उत्पन्नक के दो उदाहरण, प्रारंभिक अवस्थाओं के साथ प्रारंभ हुए जो लगभग समान हैं, सामान्यतः अंततः अलग होने से पहले, कई पुनरावृत्तियों के लिए लगभग समान अनुक्रम का उत्पादन करते हैं। एमटी विधिकलन के लिए 2002 के अपडेट ने आरंभीकरण में सुधार किया है, इसलिए ऐसी स्थिति के साथ प्रारंभ करना असंभव है।<ref>{{cite web|title=mt19937ar: Mersenne Twister with improved initialization|url=http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html|access-date=4 October 2015|work=hiroshima-u.ac.jp}}</ref> जीपीयू संस्करण एमटीजीपी को और भी बेहतर बताया गया है।<ref name="fog">{{cite journal|last1=Fog|first1=Agner|date=1 May 2015|title=वेक्टर प्रोसेसर और मल्टीकोर प्रोसेसर के लिए छद्म-यादृच्छिक संख्या जेनरेटर|journal=Journal of Modern Applied Statistical Methods|volume=14|issue=1|pages=308–334|doi=10.22237/jmasm/1430454120|doi-access=free}}</ref>
* इसमें 1 से अधिक 0 वाले अनुवर्ती शामिल हैं। इससे कई-शून्य राज्यों से पुनर्प्राप्ति को कठिन बनाने के लिए खराब प्रसार संपत्ति जुड़ जाती है।
* इसमें 1 से अधिक 0 वाले अनुवर्ती सम्मिलित हैं। इससे कई-शून्य स्टेट से पुनर्प्राप्ति को कठिन बनाने के लिए खराब प्रसार गुण युग्मित हो जाता है।
* [[सीएसपीआरएनजी]] नहीं है, जब तक कि क्रिप्टएमटी वैरिएंट (नीचे चर्चा की गई) का उपयोग नहीं किया जाता है। इसका कारण यह है कि पर्याप्त संख्या में पुनरावृत्तियों (MT19937 के मामले में 624, क्योंकि यह राज्य वेक्टर का आकार है जिससे भविष्य की पुनरावृत्तियाँ उत्पन्न होती हैं) का अवलोकन करने से किसी को भविष्य की सभी पुनरावृत्तियों की भविष्यवाणी करने की अनुमति मिलती है।
* यदि क्रिप्टएमटी संस्करण का उपयोग नहीं किया जाता है तो मर्सेन ट्विस्टर कैरिप्टोग्राफिकली सुरक्षित नहीं होता है। कारण यह है कि पर्याप्त संख्या के आवर्तनों की पर्यवेक्षण (MT19937 के परिप्रेक्ष्य में 624, क्योंकि इससे भविष्य के आवर्तन उत्पन्न होते हैं) से भविष्य के सभी आवर्तनों की पूर्वानुमान करने में सक्षम हो जाता है।


== विकल्प ==
== विकल्प ==
एक वैकल्पिक जनरेटर, अच्छी तरह से समान वितरित लंबी अवधि रैखिक ([[अच्छी तरह से समान रूप से वितरित लंबी अवधि की रैखिक]]), त्वरित पुनर्प्राप्ति, समान यादृच्छिकता और लगभग समान गति प्रदान करता है।<ref>P. L'Ecuyer, "Uniform Random Number Generators", ''[[International Encyclopedia of Statistical Science]]'', Lovric, Miodrag (Ed.), Springer-Verlag, 2010.</ref>
एक वैकल्पिक उत्पन्नक, अच्छी तरह से समान वितरित लंबी अवधि रैखिक ([[अच्छी तरह से समान रूप से वितरित लंबी अवधि की रैखिक]]), त्वरित पुनर्प्राप्ति, समान यादृच्छिकता और लगभग समान गति प्रदान करता है।<ref>P. L'Ecuyer, "Uniform Random Number Generators", ''[[International Encyclopedia of Statistical Science]]'', Lovric, Miodrag (Ed.), Springer-Verlag, 2010.</ref>
मार्साग्लिया के ए[[ xorshift ]] जनरेटर और वेरिएंट एलएफएसआर की श्रेणी में सबसे तेज़ हैं।<ref>{{cite web|title=xorshift*/xorshift+ generators and the PRNG shootout|url=http://prng.di.unimi.it}}</ref>
मार्साग्लिया के ए[[ xorshift ]] उत्पन्नक और वेरिएंट एलएफएसआर की श्रेणी में सबसे तेज़ हैं।<ref>{{cite web|title=xorshift*/xorshift+ generators and the PRNG shootout|url=http://prng.di.unimi.it}}</ref>
64-बिट एमईएलजी (64-बिट अधिकतम समान वितरित <math>\textbf{F}_2</math>-मेर्सन प्राइम पीरियड के साथ लीनियर जेनरेटर) के-वितरण गुणों के संदर्भ में पूरी तरह से अनुकूलित हैं।<ref>{{Cite journal|last1=Harase|first1=S.|last2=Kimoto|first2=T.|date=2018|title=Implementing 64-bit Maximally Equidistributed F<sub>2</sub>-Linear Generators with Mersenne Prime Period|url=https://github.com/sharase/melg-64|journal=ACM Transactions on Mathematical Software|volume=44|issue=3|pages=30:1–30:11|arxiv=1505.06582|doi=10.1145/3159444|s2cid=14923086}}</ref>
64-बिट एमईएलजी (64-बिट अधिकतम समान वितरित <math>\textbf{F}_2</math>-मेर्सन प्राइम पीरियड के साथ लीनियर जेनरेटर) के-वितरण गुणों के संदर्भ में पूरी तरह से अनुकूलित हैं।<ref>{{Cite journal|last1=Harase|first1=S.|last2=Kimoto|first2=T.|date=2018|title=Implementing 64-bit Maximally Equidistributed F<sub>2</sub>-Linear Generators with Mersenne Prime Period|url=https://github.com/sharase/melg-64|journal=ACM Transactions on Mathematical Software|volume=44|issue=3|pages=30:1–30:11|arxiv=1505.06582|doi=10.1145/3159444|s2cid=14923086}}</ref>
[[ACORN (PRNG)]] (प्रकाशित 1989) एक और k-वितरित PRNG है, जो MT के समान कम्प्यूटेशनल गति और बेहतर सांख्यिकीय गुण दिखाता है क्योंकि यह सभी मौजूदा (2019) TestU01 मानदंडों को पूरा करता है; जब मापदंडों के उचित विकल्पों के साथ उपयोग किया जाता है, तो ACORN में मनमाने ढंग से लंबी अवधि और सटीकता हो सकती है।
[[ACORN (PRNG)]] (प्रकाशित 1989) एक और k-वितरित PRNG है, जो MT के समान कम्प्यूटेशनल गति और बेहतर सांख्यिकीय गुण दिखाता है क्योंकि यह सभी मौजूदा (2019) TestU01 मानदंडों को पूरा करता है; जब मापदंडों के उचित विकल्पों के साथ उपयोग किया जाता है, तो ACORN में मनमाने ढंग से लंबी अवधि और सटीकता हो सकती है।


पर्म्यूटेड सर्वांगसम जनरेटर एक अधिक आधुनिक लंबी अवधि वाला जनरेटर है, जिसमें बेहतर कैश स्थानीयता और आधुनिक विश्लेषण विधियों का उपयोग करके कम पता लगाने योग्य पूर्वाग्रह है।<ref>{{cite web|date=27 July 2017|title=पीसीजी पेपर|url=https://www.pcg-random.org/paper.html}}</ref>
पर्म्यूटेड सर्वांगसम उत्पन्नक एक अधिक आधुनिक लंबी अवधि वाला उत्पन्नक है, जिसमें बेहतर कैश स्थानीयता और आधुनिक विश्लेषण विधियों का उपयोग करके कम पता लगाने योग्य पूर्वाग्रह है।<ref>{{cite web|date=27 July 2017|title=पीसीजी पेपर|url=https://www.pcg-random.org/paper.html}}</ref>




Line 139: Line 139:
\end{aligned}
\end{aligned}
</math>
</math>
ध्यान दें कि मेर्सन ट्विस्टर के 32-बिट कार्यान्वयन में आम तौर पर d = FFFFFFFF होता है<sub>16</sub>. परिणामस्वरूप, कभी-कभी डी को एल्गोरिदम विवरण से हटा दिया जाता है, क्योंकि उस स्थिति में डी के साथ बिटवाइज़ तार्किक संयोजन का कोई प्रभाव नहीं पड़ता है।
ध्यान दें कि मेर्सन ट्विस्टर के 32-बिट कार्यान्वयन में सामान्यतः d = FFFFFFFF होता है<sub>16</sub>. परिणामस्वरूप, कभी-कभी डी को एल्गोरिदम विवरण से हटा दिया जाता है, क्योंकि उस स्थिति में डी के साथ बिटवाइज़ तार्किक संयोजन का कोई प्रभाव नहीं पड़ता है।


MT19937-64 के लिए गुणांक हैं:<ref name="std::mersenne_twister_engine">{{cite web|title=std::mersenne_twister_engine|url=http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine|access-date=2015-07-20|work=Pseudo Random Number Generation}}</ref>
MT19937-64 के लिए गुणांक हैं:<ref name="std::mersenne_twister_engine">{{cite web|title=std::mersenne_twister_engine|url=http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine|access-date=2015-07-20|work=Pseudo Random Number Generation}}</ref>
Line 165: Line 165:


* एल्गोरिदम द्वारा उत्पन्न पहला मान उस पर आधारित होता है <math>x_n</math>, पर नहीं <math>x_0</math>.
* एल्गोरिदम द्वारा उत्पन्न पहला मान उस पर आधारित होता है <math>x_n</math>, पर नहीं <math>x_0</math>.
* स्थिरांक f जनरेटर के लिए एक और पैरामीटर निर्मित करता है, हालांकि एल्गोरिदम का उचित हिस्सा नहीं है।
* स्थिरांक f उत्पन्नक के लिए एक और पैरामीटर निर्मित करता है, यद्यपि एल्गोरिदम का उचित हिस्सा नहीं है।
* MT19937 के लिए f का मान 1812433253 है।
* MT19937 के लिए f का मान 1812433253 है।
* MT19937-64 के लिए f का मान 6364136223846793005 है।<ref name="std::mersenne_twister_engine" />
* MT19937-64 के लिए f का मान 6364136223846793005 है।<ref name="std::mersenne_twister_engine" />
Line 193: Line 193:


* अवधि सैद्धांतिक ऊपरी सीमा तक पहुँचती है <math>2^{nw-r}-1</math> (सिवाय यदि 0 से प्रारंभ किया गया हो)
* अवधि सैद्धांतिक ऊपरी सीमा तक पहुँचती है <math>2^{nw-r}-1</math> (सिवाय यदि 0 से प्रारंभ किया गया हो)
* एन आयामों में समान वितरण (उदाहरण के लिए [[रैखिक सर्वांगसम जनरेटर]] पांच आयामों में उचित वितरण का सर्वोत्तम प्रबंधन कर सकता है)
* एन आयामों में समान वितरण (उदाहरण के लिए [[रैखिक सर्वांगसम जनरेटर|रैखिक सर्वांगसम उत्पन्नक]] पांच आयामों में उचित वितरण का सर्वोत्तम प्रबंधन कर सकता है)


=== स्यूडोकोड ===
=== स्यूडोकोड ===
निम्नलिखित छद्मकोड सामान्य मेर्सन ट्विस्टर एल्गोरिथ्म को लागू करता है। स्थिरांक w, n, m, r, a, u, d, s, b, t, c, l, और f उपरोक्त एल्गोरिथम विवरण के अनुसार हैं। यह माना जाता है कि int w बिट्स के साथ मान रखने के लिए पर्याप्त प्रकार का प्रतिनिधित्व करता है:
निम्नलिखित छद्मकोड सामान्य मेर्सन ट्विस्टर एल्गोरिथ्म को लागू करता है। स्थिरांक w, n, m, r, a, u, d, s, b, t, c, l, और f उपरोक्त एल्गोरिथम विवरण के अनुसार हैं। यह माना जाता है कि int w बिट्स के साथ मान रखने के लिए पर्याप्त प्रकार का प्रतिनिधित्व करता है:
   ''// जनरेटर की स्थिति को संग्रहीत करने के लिए एक लंबाई एन सरणी बनाएं''
   ''// उत्पन्नक की स्थिति को संग्रहीत करने के लिए एक लंबाई एन सरणी बनाएं''
   int[0..n-1] एमटी
   int[0..n-1] एमटी
   पूर्णांक सूचकांक := n+1
   पूर्णांक सूचकांक�:= n+1
   const int low_mask = (1 << r) - 1 ''// अर्थात, r 1'' की द्विआधारी संख्या
   const int low_mask = (1 << r) - 1 ''// अर्थात, r 1'' की द्विआधारी संख्या
   स्थिरांक पूर्णांक ऊपरी_मास्क = निम्नतम डब्ल्यू बिट्स (बिटवाइज़ ऑपरेशन # लोअर_मास्क नहीं)
   स्थिरांक पूर्णांक ऊपरी_मास्क = निम्नतम डब्ल्यू बिट्स (बिटवाइज़ ऑपरेशन # लोअर_मास्क नहीं)
    
    
   ''// एक बीज से जनरेटर आरंभ करें''
   ''// एक बीज से उत्पन्नक आरंभ करें''
   फ़ंक्शन सीड_एमटी(इंट सीड) {
   फ़ंक्शन सीड_एमटी(इंट सीड) {
       सूचकांक := एन
       सूचकांक�:= एन
       एमटी[0] := बीज
       एमटी[0][:= बीज
       i के लिए 1 से (n - 1) तक { ''// प्रत्येक तत्व पर लूप''
       i के लिए 1 से (n - 1) तक { ''// प्रत्येक तत्व पर लूप''
           MT[i] := न्यूनतम w बिट्स (f * (MT[i-1] बिटवाइज़ ऑपरेशन#XOR (MT[i-1] >> (w-2))) + i)
           MT[i]]:= न्यूनतम w बिट्स (f * (MT[i-1] बिटवाइज़ ऑपरेशन#XOR (MT[i-1] >> (w-2))) + i)
       }
       }
   }
   }
Line 222: Line 222:
       }
       }
    
    
       'int' y := MT[सूचकांक]
       'int' yt:= MT[सूचकांक]
       y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y >> 'u') 'बिटवाइज़ ऑपरेशन#AND' 'd')
       y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y >> 'u') 'बिटवाइज़ ऑपरेशन#AND' 'd')
       y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y << 's') 'बिटवाइज़ ऑपरेशन#AND' 'b')
       y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y << 's') 'बिटवाइज़ ऑपरेशन#AND' 'b')
       y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y << 't') 'बिटवाइज़ ऑपरेशन#AND' 'c')
       y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y << 't') 'बिटवाइज़ ऑपरेशन#AND' 'c')
       y := y 'बिटवाइज़ ऑपरेशन#XOR' (y >> 'l')
       y
:= y 'बिटवाइज़ ऑपरेशन#XOR' (y >> 'l')
    
    
       सूचकांक := सूचकांक + 1
       सूचकांक�:= सूचकांक + 1
       (y) के निम्नतम 'w' बिट्स 'वापसी' करें
       (y) के निम्नतम 'w' बिट्स 'वापसी' करें
   }
   }
Line 237: Line 238:
           'int' x := (MT[i] 'बिटवाइज़ ऑपरेशन#AND' अपर_मास्क)
           'int' x := (MT[i] 'बिटवाइज़ ऑपरेशन#AND' अपर_मास्क)
                     | (एमटी[(i+1) '[[मोडुलो ऑपरेशन]]' 'एन'] 'बिटवाइज़ ऑपरेशन#और' लोअर_मास्क)
                     | (एमटी[(i+1) '[[मोडुलो ऑपरेशन]]' 'एन'] 'बिटवाइज़ ऑपरेशन#और' लोअर_मास्क)
           'int' xA := x >> 1
           'int' xAA:= x >> 1
           'if' (x 'मोडुलो ऑपरेशन' 2) != 0 {// x का निम्नतम बिट 1 है
           'if' (x 'मोडुलो ऑपरेशन' 2)2!= 0 {// x का निम्नतम बिट 1 है
               xA := xA 'बिटवाइज़ ऑपरेशन#XOR' 'a'
               xA := xA 'बिटवाइज़ ऑपरेशन#XOR' 'a'
           }
           }
           MT[i] := MT[(i + 'm') 'मोडुलो ऑपरेशन' 'n'] 'बिटवाइज़ ऑपरेशन#XOR' xA
           MT[i]M:= MT[(i + 'm') 'मोडुलो ऑपरेशन' 'n'] 'बिटवाइज़ ऑपरेशन#XOR' xA
       }
       }
       सूचकांक := 0
       सूचकांक�:= 0
   }
   }


Line 250: Line 251:
=== क्रिप्टएमटी ===
=== क्रिप्टएमटी ===
{{Main article|CryptMT}}
{{Main article|CryptMT}}
[[CryptMT]] एक [[ धारा सिफर ]] और [[क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म यादृच्छिक संख्या जनरेटर]] है जो आंतरिक रूप से मेर्सन ट्विस्टर का उपयोग करता है।<ref name="eSTREAM">{{cite web|title=क्रिप्टएमटी और फ़ुबुकी|url=http://www.ecrypt.eu.org/stream/cryptmtfubuki.html|access-date=2017-11-12|publisher=[[eCRYPT]]}}</ref><ref>{{Cite web|last1=Matsumoto|first1=Makoto|last2=Nishimura|first2=Takuji|last3=Hagita|first3=Mariko|last4=Saito|first4=Mutsuo|year=2005|title=Cryptographic Mersenne Twister and Fubuki Stream/Block Cipher|url=http://eprint.iacr.org/2005/165.pdf}}</ref> इसे मात्सुमोतो और निशिमुरा ने मारिको हागिटा और मुत्सुओ सैतो के साथ मिलकर विकसित किया था। इसे [[eCRYPT]] नेटवर्क के [[eSTREAM]] प्रोजेक्ट में सबमिट किया गया है।<ref name="eSTREAM" />मेर्सन ट्विस्टर या इसके अन्य डेरिवेटिव के विपरीत, क्रिप्टएमटी [[सॉफ्टवेयर पेटेंट]] है।
[[CryptMT]] एक [[ धारा सिफर ]] और [[क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म यादृच्छिक संख्या जनरेटर|क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म यादृच्छिक संख्या उत्पन्नक]] है जो आंतरिक रूप से मेर्सन ट्विस्टर का उपयोग करता है।<ref name="eSTREAM">{{cite web|title=क्रिप्टएमटी और फ़ुबुकी|url=http://www.ecrypt.eu.org/stream/cryptmtfubuki.html|access-date=2017-11-12|publisher=[[eCRYPT]]}}</ref><ref>{{Cite web|last1=Matsumoto|first1=Makoto|last2=Nishimura|first2=Takuji|last3=Hagita|first3=Mariko|last4=Saito|first4=Mutsuo|year=2005|title=Cryptographic Mersenne Twister and Fubuki Stream/Block Cipher|url=http://eprint.iacr.org/2005/165.pdf}}</ref> इसे मात्सुमोतो और निशिमुरा ने मारिको हागिटा और मुत्सुओ सैतो के साथ मिलकर विकसित किया था। इसे [[eCRYPT]] नेटवर्क के [[eSTREAM]] प्रोजेक्ट में सबमिट किया गया है।<ref name="eSTREAM" />मेर्सन ट्विस्टर या इसके अन्य डेरिवेटिव के विपरीत, क्रिप्टएमटी [[सॉफ्टवेयर पेटेंट]] है।


=== एमटीजीपी ===
=== एमटीजीपी ===

Revision as of 00:08, 2 July 2023

मर्सेन ट्विस्टर एक साधारण-उद्देश्य प्रतीतिसंद्ध संख्या उत्पन्नक (पीआरएनजी) है जिसे 1997 में मकोतो मकोतो मत्सुमोटो [ja] (松本 眞) और ताकुजी निशिमुरा (西村 拓士) द्वारा विकसित किया गया था।[1][2] इसका नाम इस तथ्य से प्राप्त होता है कि इसकी अवधि की लंबाई को मर्सेन प्रधान संख्या के रूप में चुना जाता है।

मेर्सन ट्विस्टर को विशेष रूप से पुराने पीआरएनजी में पाई गई अधिकांश त्रुटियों को दूर करने के लिए प्ररूपित किया गया था।

मेर्सन ट्विस्टर विधिकलन का सबसे अधिक उपयोग किया जाने वाला संस्करण मेर्सन प्राइम पर आधारित है। इसका मानक कार्यान्वयन, MT19937, 32-बिट शब्द लंबाई का उपयोग करता है। इसके अतिरिक्त एक और कार्यान्वयन MT19937-64 है[3] जो 64-बिट शब्द लंबाई, का उपयोग करता है। यह एक भिन्न अनुक्रम उत्पन्न करता है।

अनुप्रयोग

सॉफ्टवेयर

निम्नलिखित सॉफ्टवेयर द्वारा मेर्सन ट्विस्टर का उपयोग डिफ़ॉल्ट पीआरएनजी के रूप में किया जाता है:

यह अपाचे कॉमन्स में,[30] मानक C++ लाइब्रेरी में (C++11 के उपरांत),[31][32] और मैथेमैटिका में[33] भी उपलब्ध है। बूस्ट सी++ लाइब्रेरी सहित कई प्रोग्राम लाइब्रेरी जैसे सीयूडीए,[34] और एनएजी न्यूमेरिकल लाइब्रेरी[35]में इसके युग्मित कार्यान्वयन प्रदान किए जाते हैं।[36]

एसपीएसएस में मेर्सन ट्विस्टर, दो पीआरएनजी में से एक है: अन्य उत्पन्नक केवल पुराने प्रोग्रामों के साथ संगतता हेतु रखा गया है, और मर्सेन ट्विस्टर को "अधिक विश्वसनीय" घोषित किया जाता है।[37] मेर्सन ट्विस्टर इसी तरह एसएएस में विभिन्न पीआरएनजी में से एक है: अन्य उत्पन्नक पुराने और अप्रचलित हैं।[38] मेर्सन ट्विस्टर स्टाटा में डिफ़ॉल्ट पीआरएनजी है, दूसरा स्टाटा के पुराने संस्करणों के साथ संगतता के लिए केआइएसएस विधिकलन का उपयोग किया जाता है।[39]


लाभ

  • क्रिप्टएमटी के अतिरिक्त मेर्सन ट्विस्टर, सभी संस्करणों के लिए अनुमेय-लाइसेंसीकृत और पेटेंट-मुक्त है।
  • मर्सेन ट्विस्टर सांख्यिकीय यादृच्छिकता के लिए कई परीक्षणों, जैसे डाइहार्ड परीक्षण और अधिकांश TestU01 परीक्षणों, को पार करता है। यद्यपि, यह सभी TestU01 परीक्षणों को पूरा नहीं करता है।।[40]
  • बहुत लम्बी अवधि . ध्यान दें कि यद्यपि लंबी अवधि यादृच्छिक संख्या उत्पन्नक में गुणवत्ता की गारंटी नहीं है, छोटी अवधि, जैसे कि कई पुराने सॉफ़्टवेयर पैकेजों में सामान्य, समस्याग्रस्त हो सकता है।[41]
  • प्रत्येक के लिए k-वितरण 32-बिट सटीकता को समर्थित करता है।
  • कार्यान्वयन सामान्यतः हार्डवेयर-कार्यान्वित विधियों की तुलना में तेजी से यादृच्छिक संख्याएं निर्मित करता है। एक अध्ययन में पाया गया कि मेर्सन ट्विस्टर हार्डवेयर-कार्यान्वित, प्रोसेसर-आधारित आरडीरैंड निर्देश समुच्चय की तुलना में लगभग बीस गुना तेजी से 64-बिट फ़्लोटिंग पॉइंट यादृच्छिक संख्याएँ निर्मित करता है।[42]


हानि

  • 2.5 KiB का अपेक्षाकृत बड़ा स्टेट बफर, जब तक कि टाइनीएमटी संस्करण का उपयोग नहीं किया जाता है।
  • आधुनिक मानकों के अनुसार औसत श्रेणी का थ्रूपुट, जब तक कि एसएफएमटी संस्करण का उपयोग नहीं किया जाता है।[43]
  • TestU01 सुइट में क्रश और बिगक्रश दोनों में दो स्पष्ट विफलताएं प्रदर्शित होती हैं। मेर्सन ट्विस्टर की तरह परीक्षण, एक -बीजगणित पर आधारित है।[40]* कई उदाहरण जो केवल बीजगणितीय मानों में भिन्न होते हैं, सामान्यतः मोंटे कार्लो सिमुलेशन के लिए उपयुक्त नहीं होते हैं। मोंटे-कार्लो सिमुलेशन के लिए स्वतंत्र यादृच्छिक संख्या उत्पन्नक की आवश्यकता होती है, यद्यपि पैरामीटर मानों के कई समुच्चयों को चुनने के लिए एक विधि उपलब्ध है।[44][45]
  • खराब प्रसार: यदि प्रारंभिक स्थिति अत्यधिक गैर-यादृच्छिक है - विशेषकर यदि प्रारंभिक स्थिति में कई शून्य हैं तो यादृच्छिकता परीक्षण उत्तीर्ण करने वाले आउटपुट को उत्पन्न करने में लंबा समय लग सकता है। इसका एक परिणाम यह है कि उत्पन्नक के दो उदाहरण, प्रारंभिक अवस्थाओं के साथ प्रारंभ हुए जो लगभग समान हैं, सामान्यतः अंततः अलग होने से पहले, कई पुनरावृत्तियों के लिए लगभग समान अनुक्रम का उत्पादन करते हैं। एमटी विधिकलन के लिए 2002 के अपडेट ने आरंभीकरण में सुधार किया है, इसलिए ऐसी स्थिति के साथ प्रारंभ करना असंभव है।[46] जीपीयू संस्करण एमटीजीपी को और भी बेहतर बताया गया है।[47]
  • इसमें 1 से अधिक 0 वाले अनुवर्ती सम्मिलित हैं। इससे कई-शून्य स्टेट से पुनर्प्राप्ति को कठिन बनाने के लिए खराब प्रसार गुण युग्मित हो जाता है।
  • यदि क्रिप्टएमटी संस्करण का उपयोग नहीं किया जाता है तो मर्सेन ट्विस्टर कैरिप्टोग्राफिकली सुरक्षित नहीं होता है। कारण यह है कि पर्याप्त संख्या के आवर्तनों की पर्यवेक्षण (MT19937 के परिप्रेक्ष्य में 624, क्योंकि इससे भविष्य के आवर्तन उत्पन्न होते हैं) से भविष्य के सभी आवर्तनों की पूर्वानुमान करने में सक्षम हो जाता है।

विकल्प

एक वैकल्पिक उत्पन्नक, अच्छी तरह से समान वितरित लंबी अवधि रैखिक (अच्छी तरह से समान रूप से वितरित लंबी अवधि की रैखिक), त्वरित पुनर्प्राप्ति, समान यादृच्छिकता और लगभग समान गति प्रदान करता है।[48] मार्साग्लिया के एxorshift उत्पन्नक और वेरिएंट एलएफएसआर की श्रेणी में सबसे तेज़ हैं।[49] 64-बिट एमईएलजी (64-बिट अधिकतम समान वितरित -मेर्सन प्राइम पीरियड के साथ लीनियर जेनरेटर) के-वितरण गुणों के संदर्भ में पूरी तरह से अनुकूलित हैं।[50] ACORN (PRNG) (प्रकाशित 1989) एक और k-वितरित PRNG है, जो MT के समान कम्प्यूटेशनल गति और बेहतर सांख्यिकीय गुण दिखाता है क्योंकि यह सभी मौजूदा (2019) TestU01 मानदंडों को पूरा करता है; जब मापदंडों के उचित विकल्पों के साथ उपयोग किया जाता है, तो ACORN में मनमाने ढंग से लंबी अवधि और सटीकता हो सकती है।

पर्म्यूटेड सर्वांगसम उत्पन्नक एक अधिक आधुनिक लंबी अवधि वाला उत्पन्नक है, जिसमें बेहतर कैश स्थानीयता और आधुनिक विश्लेषण विधियों का उपयोग करके कम पता लगाने योग्य पूर्वाग्रह है।[51]


के-वितरण

एक छद्म यादृच्छिक क्रम अवधि P के w-बिट पूर्णांकों को k-वितरित v-बिट सटीकता के लिए कहा जाता है यदि निम्नलिखित मान्य हो।

ट्रंक करने दोv(x) x के अग्रणी v बिट्स द्वारा बनाई गई संख्या को निरूपित करें, और k v-बिट वैक्टर के P पर विचार करें
.
फिर प्रत्येक बिट्स का संभावित संयोजन एक अवधि में समान संख्या में होता है, पूर्ण-शून्य संयोजन को छोड़कर जो एक बार कम बार होता है।

एल्गोरिथम विवरण

मेर्सन ट्विस्टर का उपयोग करके छद्म-यादृच्छिक 32-बिट पूर्णांकों की पीढ़ी का विज़ुअलाइज़ेशन। 'नंबर निकालें' अनुभाग एक उदाहरण दिखाता है जहां पूर्णांक 0 पहले ही आउटपुट हो चुका है और सूचकांक पूर्णांक 1 पर है। 'जनरेट नंबर' तब चलाया जाता है जब सभी पूर्णांक आउटपुट हो चुके होते हैं।

डब्ल्यू-बिट शब्द लंबाई के लिए, मेर्सन ट्विस्टर श्रेणी में पूर्णांक उत्पन्न करता है .

मेर्सन ट्विस्टर एल्गोरिदम एक परिमित बाइनरी अंक प्रणाली फ़ील्ड (गणित) पर पुनरावृत्ति संबंध पर आधारित है . एल्गोरिदम एक मुड़ा हुआ सामान्यीकृत फीडबैक शिफ्ट रजिस्टर है[52] (ट्विस्टेड जीएफएसआर, या टीजीएफएसआर) तर्कसंगत सामान्य रूप (टीजीएफएसआर (आर)) के साथ, स्टेट बिट रिफ्लेक्शन और टेम्परिंग के साथ। मूल विचार एक श्रृंखला को परिभाषित करना है एक सरल पुनरावृत्ति संबंध के माध्यम से, और फिर फॉर्म की आउटपुट संख्याएँ , जहां T एक व्युत्क्रमणीय है -मैट्रिक्स को टेम्पर्ड प्रतिनिधित्व कहा जाता है।

सामान्य एल्गोरिदम को निम्नलिखित मात्राओं द्वारा दर्शाया जाता है (इनमें से कुछ स्पष्टीकरण शेष एल्गोरिदम को पढ़ने के बाद ही समझ में आते हैं):

  • w: शब्द का आकार (बिट्स की संख्या में)
  • एन: पुनरावृत्ति की डिग्री
  • एम: मध्य शब्द, श्रृंखला को परिभाषित करने वाले पुनरावृत्ति संबंध में प्रयुक्त एक ऑफसेट ,
  • आर: एक शब्द का पृथक्करण बिंदु, या निचले बिटमास्क के बिट्स की संख्या,
  • ए: तर्कसंगत सामान्य रूप ट्विस्ट मैट्रिक्स के गुणांक
  • बी, सी: टीजीएफएसआर (आर) टेम्परिंग बिटमास्क
  • एस, टी: टीजीएफएसआर (आर) टेम्परिंग बिट शिफ्ट
  • यू, डी, एल: अतिरिक्त मेर्सन ट्विस्टर टेम्परिंग बिट शिफ्ट/मास्क

उस प्रतिबंध के साथ एक मेरसेन प्राइम है। यह विकल्प आदिमता परीक्षण और K-वितरण|k-वितरण परीक्षण को सरल निर्मित करता है जो पैरामीटर खोज में आवश्यक हैं।

श्रृंखला पुनरावृत्ति संबंध के साथ डब्ल्यू-बिट मात्राओं की एक श्रृंखला के रूप में परिभाषित किया गया है:

कहाँ बिट वैक्टरों के संयोजन को दर्शाता है (बाईं ओर ऊपरी बिट्स के साथ), बिटवाइज़ एकमात्र (XOR), मतलब ऊपरी wr का , और का मतलब निम्न आर बिट्स है . मोड़ परिवर्तन ए को तर्कसंगत सामान्य रूप में परिभाषित किया गया है:

साथ के रूप में शिनाख्त सांचा। तर्कसंगत सामान्य रूप का लाभ यह है कि ए द्वारा गुणा को कुशलतापूर्वक इस प्रकार व्यक्त किया जा सकता है: (याद रखें कि यहां मैट्रिक्स गुणा किया जा रहा है , और इसलिए बिटवाइज़ XOR जोड़ का स्थान लेता है)
कहाँ का निम्नतम ऑर्डर बिट है .

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

ए के साथ, हम आसानी से गणना करने योग्य होने के लिए एक टेम्परिंग ट्रांसफॉर्म चुनते हैं, और इसलिए वास्तव में टी का निर्माण नहीं करते हैं। मेर्सन ट्विस्टर के मामले में तड़के को इस प्रकार परिभाषित किया गया है

कहाँ श्रृंखला से अगला मान है, एक अस्थायी मध्यवर्ती मूल्य है, और एल्गोरिथ्म से लौटाया गया मान है और बिट-शिफ्ट के रूप में, और बिटवाइज तार्किक संयोजन के रूप में। निचले-बिट समवितरण को बेहतर बनाने के लिए पहला और आखिरी परिवर्तन जोड़ा जाता है। टीजीएफएसआर की संपत्ति से, ऊपरी बिट्स के लिए समवितरण की ऊपरी सीमा तक पहुंचना आवश्यक है।

MT19937 के लिए गुणांक हैं:

ध्यान दें कि मेर्सन ट्विस्टर के 32-बिट कार्यान्वयन में सामान्यतः d = FFFFFFFF होता है16. परिणामस्वरूप, कभी-कभी डी को एल्गोरिदम विवरण से हटा दिया जाता है, क्योंकि उस स्थिति में डी के साथ बिटवाइज़ तार्किक संयोजन का कोई प्रभाव नहीं पड़ता है।

MT19937-64 के लिए गुणांक हैं:[53]


आरंभीकरण

मेर्सन ट्विस्टर कार्यान्वयन के लिए आवश्यक स्थिति प्रत्येक डब्ल्यू बिट्स के एन मानों की एक सरणी है। सरणी को प्रारंभ करने के लिए, आपूर्ति के लिए एक w-बिट बीज मान का उपयोग किया जाता है द्वारा व्यवस्थित करके बीज मूल्य और उसके बाद सेटिंग

के लिए से को .

  • एल्गोरिदम द्वारा उत्पन्न पहला मान उस पर आधारित होता है , पर नहीं .
  • स्थिरांक f उत्पन्नक के लिए एक और पैरामीटर निर्मित करता है, यद्यपि एल्गोरिदम का उचित हिस्सा नहीं है।
  • MT19937 के लिए f का मान 1812433253 है।
  • MT19937-64 के लिए f का मान 6364136223846793005 है।[53]


शास्त्रीय जीएफएसआर के साथ तुलना

हासिल करने के लिए टीजीएफएसआर में अवधि की सैद्धांतिक ऊपरी सीमा, एक आदिम बहुपद (क्षेत्र सिद्धांत) होना चाहिए, का अभिलक्षणिक बहुपद होना

ट्विस्ट परिवर्तन निम्नलिखित प्रमुख गुणों के साथ शास्त्रीय जीएफएसआर में सुधार करता है:

  • अवधि सैद्धांतिक ऊपरी सीमा तक पहुँचती है (सिवाय यदि 0 से प्रारंभ किया गया हो)
  • एन आयामों में समान वितरण (उदाहरण के लिए रैखिक सर्वांगसम उत्पन्नक पांच आयामों में उचित वितरण का सर्वोत्तम प्रबंधन कर सकता है)

स्यूडोकोड

निम्नलिखित छद्मकोड सामान्य मेर्सन ट्विस्टर एल्गोरिथ्म को लागू करता है। स्थिरांक w, n, m, r, a, u, d, s, b, t, c, l, और f उपरोक्त एल्गोरिथम विवरण के अनुसार हैं। यह माना जाता है कि int w बिट्स के साथ मान रखने के लिए पर्याप्त प्रकार का प्रतिनिधित्व करता है:

 // उत्पन्नक की स्थिति को संग्रहीत करने के लिए एक लंबाई एन सरणी बनाएं
 int[0..n-1] एमटी
 पूर्णांक सूचकांक�:= n+1
 const int low_mask = (1 << r) - 1 // अर्थात, r 1 की द्विआधारी संख्या
 स्थिरांक पूर्णांक ऊपरी_मास्क = निम्नतम डब्ल्यू बिट्स (बिटवाइज़ ऑपरेशन # लोअर_मास्क नहीं)
 
 // एक बीज से उत्पन्नक आरंभ करें
 फ़ंक्शन सीड_एमटी(इंट सीड) {
     सूचकांक�:= एन
     एमटी[0][:= बीज
     i के लिए 1 से (n - 1) तक { // प्रत्येक तत्व पर लूप
         MT[i]]:= न्यूनतम w बिट्स (f * (MT[i-1] बिटवाइज़ ऑपरेशन#XOR (MT[i-1] >> (w-2))) + i)
     }
 }
 
 // एमटी[सूचकांक] के आधार पर एक टेम्पर्ड मान निकालें
 // प्रत्येक n संख्या में ट्विस्ट() को कॉल करना
 फ़ंक्शन एक्सट्रेक्ट_नंबर() {
     यदि सूचकांक >= n {
         यदि सूचकांक > n {
           त्रुटि जेनरेटर कभी भी सीड नहीं किया गया था
           //वैकल्पिक रूप से, स्थिर मूल्य वाला बीज; 5489 का उपयोग संदर्भ सी कोड में किया जाता है[54]}
         मोड़()
     }
 
     'int' yt:= MT[सूचकांक]
     y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y >> 'u') 'बिटवाइज़ ऑपरेशन#AND' 'd')
     y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y << 's') 'बिटवाइज़ ऑपरेशन#AND' 'b')
     y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y << 't') 'बिटवाइज़ ऑपरेशन#AND' 'c')
     y
:= y 'बिटवाइज़ ऑपरेशन#XOR' (y >> 'l')
 
     सूचकांक�:= सूचकांक + 1
     (y) के निम्नतम 'w' बिट्स 'वापसी' करें
 }
 
 // श्रृंखला x_i से अगले n मान उत्पन्न करें
 'फ़ंक्शन' ट्विस्ट() {
     'के लिए' मैं 'से' 0 'से' ('एन'-1) {
         'int' x := (MT[i] 'बिटवाइज़ ऑपरेशन#AND' अपर_मास्क)
                   | (एमटी[(i+1) 'मोडुलो ऑपरेशन' 'एन'] 'बिटवाइज़ ऑपरेशन#और' लोअर_मास्क)
         'int' xAA:= x >> 1
         'if' (x 'मोडुलो ऑपरेशन' 2)2!= 0 {// x का निम्नतम बिट 1 है
             xA := xA 'बिटवाइज़ ऑपरेशन#XOR' 'a'
         }
         MT[i]M:= MT[(i + 'm') 'मोडुलो ऑपरेशन' 'n'] 'बिटवाइज़ ऑपरेशन#XOR' xA
     }
     सूचकांक�:= 0
 }

वेरिएंट

क्रिप्टएमटी

CryptMT एक धारा सिफर और क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म यादृच्छिक संख्या उत्पन्नक है जो आंतरिक रूप से मेर्सन ट्विस्टर का उपयोग करता है।[55][56] इसे मात्सुमोतो और निशिमुरा ने मारिको हागिटा और मुत्सुओ सैतो के साथ मिलकर विकसित किया था। इसे eCRYPT नेटवर्क के eSTREAM प्रोजेक्ट में सबमिट किया गया है।[55]मेर्सन ट्विस्टर या इसके अन्य डेरिवेटिव के विपरीत, क्रिप्टएमटी सॉफ्टवेयर पेटेंट है।

एमटीजीपी

एमटीजीपी मुत्सुओ सैटो और माकोतो मात्सुमोतो द्वारा प्रकाशित ग्राफ़िक्स प्रोसेसिंग युनिट के लिए अनुकूलित मेर्सन ट्विस्टर का एक प्रकार है।[57] बुनियादी रैखिक पुनरावृत्ति संचालन को एमटी से बढ़ाया जाता है और मेमोरी लोड को कम करने के लिए अपने राज्य स्थान को साझा करते हुए, समानांतर में पुनरावृत्ति की गणना करने के लिए कई थ्रेड्स को अनुमति देने के लिए पैरामीटर चुने जाते हैं। पेपर में एमटी पर समान वितरण में सुधार और 5×10 के लिए 4.7 एमएस के बहुत पुराने जीपीयू (192 कोर के साथ एNVIDIA जीटीएक्स260) पर प्रदर्शन का दावा किया गया है।7यादृच्छिक 32-बिट पूर्णांक।

सुफ़ा

{{Expand section|date=June 2007}एसएफएमटी (एकल निर्देश, एकाधिक डेटा-उन्मुख फास्ट मेर्सन ट्विस्टर) मेर्सन ट्विस्टर का एक प्रकार है, जिसे 2006 में पेश किया गया था।[58] 128-बिट SIMD पर चलने पर इसे तेज़ बनाने के लिए डिज़ाइन किया गया है।

  • यह मेरसेन ट्विस्टर से लगभग दोगुना तेज़ है।[59]
  • इसमें एमटी की तुलना में वी-बिट सटीकता की बेहतर समान वितरण संपत्ति है, लेकिन वेल इक्विडिस्ट्रिब्यूटेड लॉन्ग-पीरियड लीनियर | वेल (वेल इक्विडिस्ट्रिब्यूटेड लॉन्ग-पीरियड लीनियर) से भी बदतर है।
  • इसमें MT की तुलना में शून्य-अतिरिक्त प्रारंभिक अवस्था से त्वरित पुनर्प्राप्ति होती है, लेकिन WELL की तुलना में धीमी होती है।
  • यह 2 से विभिन्न अवधियों का समर्थन करता है607- 1 से 2216091--1.

Intel SSE2 और PowerPC AltiVec SFMT द्वारा समर्थित हैं। इसका उपयोग PlayStation 3 में सेल (माइक्रोप्रोसेसर) वाले गेम के लिए भी किया जाता है।[60]


टाइनीएमटी

टाइनीएमटी मेरसेन ट्विस्टर का एक प्रकार है, जिसे 2011 में सैटो और मात्सुमोतो द्वारा प्रस्तावित किया गया था।[61] TinyMT केवल 127 बिट्स स्टेट स्पेस का उपयोग करता है, जो मूल स्टेट के 2.5 KiB की तुलना में एक महत्वपूर्ण कमी है। यद्यपि, इसकी एक अवधि होती है , मूल से बहुत छोटा है, इसलिए लेखकों द्वारा इसकी अनुशंसा केवल उन मामलों में की जाती है जहां मेमोरी प्रीमियम पर है।

संदर्भ

  1. Matsumoto, M.; Nishimura, T. (1998). "Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator" (PDF). ACM Transactions on Modeling and Computer Simulation. 8 (1): 3–30. CiteSeerX 10.1.1.215.1141. doi:10.1145/272991.272995. S2CID 3332028.
  2. E.g. Marsland S. (2011) Machine Learning (CRC Press), §4.1.1. Also see the section "Adoption in software systems".
  3. John Savard. "मेर्सन ट्विस्टर". A subsequent paper, published in the year 2000, gave five additional forms of the Mersenne Twister with period 2^19937-1. All five were designed to be implemented with 64-bit arithmetic instead of 32-bit arithmetic.
  4. "यादृच्छिक लिंक". Dyalog Language Reference Guide. Retrieved 2020-06-04.
  5. "रैंडोमू (आईडीएल संदर्भ)". Exelis VIS Docs Center. Retrieved 2013-08-23.
  6. "यादृच्छिक संख्या जेनरेटर". CRAN Task View: Probability Distributions. Retrieved 2012-05-29.
  7. ""यादृच्छिक" वर्ग दस्तावेज़ीकरण". Ruby 1.9.3 documentation. Retrieved 2012-05-29.
  8. "रैंडम". free pascal documentation. Retrieved 2013-11-28.
  9. "mt_rand — Generate a better random value". PHP Manual. Retrieved 2016-03-02.
  10. "NumPy 1.17.0 Release Notes — NumPy v1.21 Manual". numpy.org. Retrieved 2021-06-29.
  11. "9.6 random — Generate pseudo-random numbers". Python v2.6.8 documentation. Retrieved 2012-05-29.
  12. "8.6 random — Generate pseudo-random numbers". Python v3.2 documentation. Retrieved 2012-05-29.
  13. "random — Generate pseudo-random numbers — Python 3.8.3 documentation". Python 3.8.3 documentation. Retrieved 2020-06-23.
  14. "डिज़ाइन विकल्प और एक्सटेंशन". CMUCL User's Manual. Retrieved 2014-02-03.
  15. "यादृच्छिक अवस्थाएँ". The ECL manual. Retrieved 2015-09-20.
  16. "यादृच्छिक संख्या सृजन". SBCL User's Manual.
  17. "Random Numbers · The Julia Language". docs.julialang.org. Retrieved 2022-06-21.
  18. "Random Numbers: GLib Reference Manual".
  19. "यादृच्छिक संख्या एल्गोरिदम". GNU MP. Retrieved 2013-11-21.
  20. "16.3 Special Utility Matrices". GNU Octave. Built-in Function: rand
  21. "यादृच्छिक संख्या पर्यावरण चर". GNU Scientific Library. Retrieved 2013-11-24.
  22. Mélard, G. (2014), "On the accuracy of statistical procedures in Microsoft Excel 2010", Computational Statistics, 29 (5): 1095–1128, CiteSeerX 10.1.1.455.5508, doi:10.1007/s00180-014-0482-5, S2CID 54032450.
  23. "GAUSS 14 Language Reference" (PDF).
  24. "uniform". Gretl Function Reference.
  25. "New random-number generator—64-bit Mersenne Twister".
  26. "Probability Distributions — Sage Reference Manual v7.2: Probablity".
  27. "भव्य - यादृच्छिक संख्याएँ". Scilab Help.
  28. "रैंडम संख्या जनरेटर". Maple Online Help. Retrieved 2013-11-21.
  29. "यादृच्छिक संख्या जनरेटर एल्गोरिदम". Documentation Center, MathWorks.
  30. "डेटा जनरेशन". Apache Commons Math User Guide.
  31. "C++11 में यादृच्छिक संख्या सृजन" (PDF). Standard C++ Foundation.
  32. "std::mersenne_twister_engine". Pseudo Random Number Generation. Retrieved 2012-09-25.
  33. [1] Mathematica Documentation
  34. "होस्ट एपीआई अवलोकन". CUDA Toolkit Documentation. Retrieved 2016-08-02.
  35. "G05 – Random Number Generators". NAG Library Chapter Introduction. Retrieved 2012-05-29.
  36. "boost/random/mersenne_twister.hpp". Boost C++ Libraries. Retrieved 2012-05-29.
  37. "यादृच्छिक संख्या जेनरेटर". IBM SPSS Statistics. Retrieved 2013-11-21.
  38. "यादृच्छिक-संख्या फ़ंक्शंस का उपयोग करना". SAS Language Reference. Retrieved 2013-11-21.
  39. Stata help: set rng -- Set which random-number generator (RNG) to use
  40. 40.0 40.1 P. L'Ecuyer and R. Simard, "TestU01: "A C library for empirical testing of random number generators", ACM Transactions on Mathematical Software, 33, 4, Article 22 (August 2007).
  41. Note: 219937 is approximately 4.3 × 106001; this is many orders of magnitude larger than the estimated number of particles in the observable universe, which is 1087.
  42. Route, Matthew (August 10, 2017). "रेडियो-फ्लेयरिंग अल्ट्राकूल बौना जनसंख्या संश्लेषण". The Astrophysical Journal. 845 (1): 66. arXiv:1707.02212. Bibcode:2017ApJ...845...66R. doi:10.3847/1538-4357/aa7ede. S2CID 118895524.
  43. "SIMD-oriented Fast Mersenne Twister (SFMT): twice faster than Mersenne Twister". Japan Society for the Promotion of Science. Retrieved 27 March 2017.
  44. Makoto Matsumoto; Takuji Nishimura. "छद्म यादृच्छिक संख्या जेनरेटर का गतिशील निर्माण" (PDF). Retrieved 19 July 2015.
  45. Hiroshi Haramoto; Makoto Matsumoto; Takuji Nishimura; François Panneton; Pierre L'Ecuyer. "Efficient Jump Ahead for F2-Linear Random Number Generators" (PDF). Retrieved 12 Nov 2015.
  46. "mt19937ar: Mersenne Twister with improved initialization". hiroshima-u.ac.jp. Retrieved 4 October 2015.
  47. Fog, Agner (1 May 2015). "वेक्टर प्रोसेसर और मल्टीकोर प्रोसेसर के लिए छद्म-यादृच्छिक संख्या जेनरेटर". Journal of Modern Applied Statistical Methods. 14 (1): 308–334. doi:10.22237/jmasm/1430454120.
  48. P. L'Ecuyer, "Uniform Random Number Generators", International Encyclopedia of Statistical Science, Lovric, Miodrag (Ed.), Springer-Verlag, 2010.
  49. "xorshift*/xorshift+ generators and the PRNG shootout".
  50. Harase, S.; Kimoto, T. (2018). "Implementing 64-bit Maximally Equidistributed F2-Linear Generators with Mersenne Prime Period". ACM Transactions on Mathematical Software. 44 (3): 30:1–30:11. arXiv:1505.06582. doi:10.1145/3159444. S2CID 14923086.
  51. "पीसीजी पेपर". 27 July 2017.
  52. Matsumoto, M.; Kurita, Y. (1992). "मुड़े हुए जीएफएसआर जनरेटर". ACM Transactions on Modeling and Computer Simulation. 2 (3): 179–194. doi:10.1145/146382.146383. S2CID 15246234.
  53. 53.0 53.1 "std::mersenne_twister_engine". Pseudo Random Number Generation. Retrieved 2015-07-20.
  54. Takuji Nishimura; Makoto Matsumoto. "A C-program for MT19937, with initialization improved 2002/1/26". Retrieved 20 July 2015.
  55. 55.0 55.1 "क्रिप्टएमटी और फ़ुबुकी". eCRYPT. Retrieved 2017-11-12.
  56. Matsumoto, Makoto; Nishimura, Takuji; Hagita, Mariko; Saito, Mutsuo (2005). "Cryptographic Mersenne Twister and Fubuki Stream/Block Cipher" (PDF).
  57. Mutsuo Saito; Makoto Matsumoto (2010). "मेरसेन ट्विस्टर के वेरिएंट ग्राफिक प्रोसेसर के लिए उपयुक्त हैं". arXiv:1005.4973v3 [cs.MS].
  58. "SIMD-उन्मुख फास्ट मेरसेन ट्विस्टर (SFMT)". hiroshima-u.ac.jp. Retrieved 4 October 2015.
  59. "SFMT:Comparison of speed". hiroshima-u.ac.jp. Retrieved 4 October 2015.
  60. "PlayStation3 License". scei.co.jp. Retrieved 4 October 2015.
  61. "टिनी मेरसेन ट्विस्टर (टिनीएमटी)". hiroshima-u.ac.jp. Retrieved 4 October 2015.


अग्रिम पठन


बाहरी संबंध