2012-09-16 11 views
7

क्या गारंटी है कि random.setstate() या random.seed() के साथ यादृच्छिक जनरेटर के साथ pyhon2/python3 स्क्रिप्ट विभिन्न संस्करणों और प्लेटफार्मों में छद्म-यादृच्छिकता के समान अनुक्रम का उत्पादन करेगी? (उदाहरण के लिए python 3.1 on Mac , the same as python 3.2 on Linux 64-bit)पायथन random.setstate(), बीज() - क्या कार्यान्वयन में समान परिणामों की गारंटी है?

प्रश्न दोनों के बारे में है: python2 और python3, धारणा के साथ कि python3 स्क्रिप्ट python3 दुभाषियों और इसके विपरीत पर चलेंगे।

+0

http://docs.python.org/dev/ लाइब्रेरी/random.html # random.seed –

+0

यह नहीं कहता है कि python3.x और python3.y जहां x! = y समान परिणाम –

+1

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

उत्तर

6

पायथन 2.3 और बाद वाले वर्शन मेर्सन ट्विस्टर जेनरेटर का उपयोग करें, जो सिस्टम यादृच्छिक फ़ंक्शन से स्वतंत्र है (पायथन के लिए सी एक्सटेंशन मॉड्यूल के रूप में कार्यान्वित)। मेर्सन ट्विस्टर का उपयोग कर किसी भी संस्करण के लिए, परिणाम संस्करणों और प्लेटफार्मों में समान होना चाहिए।

पहले, आप WichmannHill जनरेटर का उपयोग कर पिछड़ा संगतता की गारंटी दे सकते हैं, लेकिन दुर्भाग्य से ऐसा लगता है कि पायथन 3.x में हटा दिया गया है।

आप पूरी तरह अनुकूलता की गारंटी करने की जरूरत है, अपने स्वयं के Random उपवर्ग बारे में (या एक स्थिर बाहरी कार्यान्वयन, जैसे simplerandom का उपयोग करें) के रूप में random प्रलेखन द्वारा सिफारिश की:

कक्षा रैंडम भी subclassed किया जा सकता है अगर आप चाहते हैं अपने स्वयं के विविधीकरण के एक अलग मूल जनरेटर का उपयोग करने के लिए: उस स्थिति में, यादृच्छिक(), बीज(), getstate(), setstate() और jumpahead() विधियों को ओवरराइड करें। वैकल्पिक रूप से, एक नया जनरेटर एक getrandbits() विधि की आपूर्ति कर सकता है - यह एक मनमाने ढंग से बड़ी सीमा पर चयन का उत्पादन करने के लिए randrange() की अनुमति देता है।

4

आप simplerandom मॉड्यूल का उपयोग कर सकते हैं, जिसमें पाइथन प्लेटफॉर्म से एक सतत कार्यान्वयन स्वतंत्र है। इसमें पायथन 2.4, 2.5, 2.6, 2.7, 3.1, और 3.2 के लिए समर्थन है। इसमें 9 अलग-अलग एल्गोरिदम हैं।

>>> import simplerandom.iterators as sri 
>>> rng = sri.MWC1(12345) 
>>> next(rng) 
498186671L 
>>> next(rng) 
888940288L 
>>> next(rng) 
345072384L 

और जब तक आप एक ही मूल्य के साथ बीज के रूप में, आप एक ही परिणाम प्राप्त:

यहाँ एक उदाहरण है

>>> rng = sri.MWC1(12345) 
>>> next(rng) 
498186671L 
>>> rng = sri.MWC1(98765) 
>>> next(rng) 
3546724783L 
संबंधित मुद्दे