क्या पर्ल में निर्मित छद्म-यादृच्छिक संख्या जनरेटर की वर्तमान स्थिति को संग्रहीत करने का कोई तरीका है ताकि जब मेरा प्रोग्राम दोबारा चलाया जाए, तो यह अनुक्रम को एक नए अनुक्रम से शुरू करने के बजाए छोड़ दिया जा सकता है?मैं पर्ल में छद्म-यादृच्छिक जनरेटर की स्थिति कैसे संग्रहीत कर सकता हूं?
अभी, मैं भंडारण कर रहा हूँ जहाँ मैं और साथ ही प्रारंभिक बीज हूं और उसके बाद प्रारंभिक खंड जो मैं पहले से ही करने के लिए कुछ इसी तरह का उपयोग कर देखा है दूर फेंक:
sub consume_upto_n {
my ($seed, $n) = @_;
$n = 1 unless defined $n and $n >= 1;
srand $seed;
rand for 1 .. $n - 1;
return;
}
उदाहरण के लिए:
srand 0x18;
my @v = map { rand } 1 .. 5;
बाद में:
consume_upto_n(0x18, 3);
my @z = map { rand } 3 .. 5;
फिर, $z[0] == $v[2]
, 01,239,आदि
@cjm यह सिमुलेशन उद्देश्यों के लिए है। मान लें कि मेरे पास सिमुलेशन है जिसके लिए 10,000 ड्रॉ की आवश्यकता है। यादृच्छिक संख्या जनरेटर की गुणवत्ता इससे कोई फर्क नहीं पड़ता है लेकिन प्रतिलिपि बनाने की क्षमता (किसी दिए गए 'perl' + OS + ऐप संस्करण संयोजन के लिए) एक अनुक्रम अनुक्रम महत्वपूर्ण है। मैं इसे बीच में बाधित करने में सक्षम होना चाहता हूं और जहां से हमने छोड़ा था वहां से चुनना चाहता हूं। इस तरह, मैं प्रारंभिक बीज को संग्रहीत करके बाद में घटनाओं के सटीक अनुक्रम को दोहरा सकता हूं। –
सीनान: ऐसी कई चीजें हैं जिनके लिए आप पूछ रहे हैं: कुछ मनमानी बिंदु पर अनुक्रम जारी रखने और सटीक उसी बिंदु को पुनरारंभ करने में सक्षम होने के नाते। दोनों को मैथ :: रैंडम :: * मॉड्यूल में से एक का उपयोग करके किया जा सकता है लेकिन पर्ल स्रोतों के एक कर्सर निरीक्षण से, यह एक्सएस से भी बिल्टिन रैंड() के साथ (आसानी से) नहीं किया जा सकता है! (पर्ल सी पुस्तकालय के रैंड() को अपने रैंड() के हिस्से के रूप में कॉल कर सकता है और कार्यान्वयन प्लेटफ़ॉर्म पर निर्भर करता है।) – tsee
@cjm और @tsee यह बेहतर है कि 'रैंड' में निर्मित भरोसा न करें। –