2010-02-12 19 views
23

क्या किसी के पास पसंदीदा बूस्ट यादृच्छिक संख्या जनरेटर है और क्या आप इसे कोड में कार्यान्वित करने के तरीके पर थोड़ा सा समझा सकते हैं। मैं काम करने के लिए मेर्सन ट्विस्टर पाने की कोशिश कर रहा हूं और सोच रहा था कि किसी को दूसरों में से एक की तरफ वरीयता है।यादृच्छिक संख्या जनरेटर

उत्तर

63

इस कोड http://www.boost.org/doc/libs/1_42_0/libs/random/index.html पर बढ़ावा पुस्तिका से अनुकूलित है:

#include <iostream> 
#include "boost/random.hpp" 
#include "boost/generator_iterator.hpp" 
using namespace std; 

int main() { 
     typedef boost::mt19937 RNGType; 
     RNGType rng; 
     boost::uniform_int<> one_to_six(1, 6); 
     boost::variate_generator< RNGType, boost::uniform_int<> > 
        dice(rng, one_to_six); 
     for (int i = 0; i < 6; i++) { 
      int n = dice(); 
      cout << n << endl; 
    } 
} 

बिट्स व्याख्या करने के लिए:

  • mt19937 Mersenne ट्विस्टर जनरेटर, जो कच्चे यादृच्छिक संख्या उत्पन्न करता है। टाइपिफ़ का उपयोग यहां किया जाता है ताकि आप आसानी से यादृच्छिक संख्या जेनरेटर प्रकार बदल सकें।

  • rng ट्विस्टर जनरेटर का एक उदाहरण है।

  • one_to_six एक वितरण का एक उदाहरण है। यह उन संख्याओं को निर्दिष्ट करता है जिन्हें हम उत्पन्न करना चाहते हैं और उनके द्वारा अनुसरण किए जाने वाले वितरण को निर्दिष्ट करते हैं। यहां हम 1 से 6 चाहते हैं, समान रूप से वितरित।

  • dice वह चीज है जो कच्ची संख्या और वितरण लेती है, और हमारे लिए वास्तव में इच्छित संख्याएं बनाती है।

  • dice()dice वस्तु है, जो अगले यादृच्छिक संख्या वितरण निम्नलिखित हो जाता है, एक यादृच्छिक छह पक्षीय पासा फेंक अनुकरण के लिए operator() के लिए एक कॉल है।

जैसा कि यह खड़ा है, यह कोड प्रत्येक बार पासा फेंकने का एक ही अनुक्रम उत्पन्न करता है। आप जनरेटर को अपने कन्स्ट्रक्टर में यादृच्छिक बना सकते हैं:

RNGType rng(time(0)); 

या इसके बीज() सदस्य का उपयोग करके।

+0

दोहरा अधिकतम शुरू होता है और वहाँ मिनट की किसी भी तरह से है और पूर्णांक वितरण की एक नया "पासा" बनाने के बिना बदला जा सकता है? –

+0

किसी को भी इस जनरेटर के साथ यादृच्छिक बीजिंग सेट करने के बारे में पता है? –

1

कोई भी आकार-फिट नहीं है-सभी आरएनजी। कभी-कभी सांख्यिकीय गुण महत्वपूर्ण होते हैं, कभी-कभी क्रिप्टोलॉजी, कभी-कभी कच्ची गति।

+0

मैं जरूरी नहीं था कि एक आकार सभी फिट बैठे, मुझे पता है कि कुछ लोग एक दूसरे को पसंद करते हैं और मैं देखना चाहता हूं कि लोगों को कौन सा सबसे अच्छा पसंद आया। – shinjuo

4

मुझे यह link मिला जो विभिन्न यादृच्छिक संख्या जेनरेटर के गुणों का एक अच्छा अवलोकन देता है। मैं सुविधा के लिए ऊपर दिए गए लिंक से मेज की नकल की है:

 
+-----------------------+-------------------+-----------------------------+------------------------+ 
|  generator  | length of cycle | approx. memory requirements | approx. relative speed | 
+-----------------------+-------------------+-----------------------------+------------------------+ 
| minstd_rand   | 2^31-2   | sizeof(int32_t)    |      40 | 
| rand48    | 2^48-1   | sizeof(uint64_t)   |      80 | 
| lrand48 (C library) | 2^48-1   | -       |      20 | 
| ecuyer1988   | approx. 2^61  | 2*sizeof(int32_t)   |      20 | 
| kreutzer1986   | ?     | 1368*sizeof(uint32_t)  |      60 | 
| hellekalek1995  | 2^31-1   | sizeof(int32_t)    |      3 | 
| mt11213b    | 2^11213-1   | 352*sizeof(uint32_t)  |     100 | 
| mt19937    | 2^19937-1   | 625*sizeof(uint32_t)  |     100 | 
| lagged_fibonacci607 | approx. 2^32000 | 607*sizeof(double)   |     150 | 
| lagged_fibonacci1279 | approx. 2^67000 | 1279*sizeof(double)   |     150 | 
| lagged_fibonacci2281 | approx. 2^120000 | 2281*sizeof(double)   |     150 | 
| lagged_fibonacci3217 | approx. 2^170000 | 3217*sizeof(double)   |     150 | 
| lagged_fibonacci4423 | approx. 2^230000 | 4423*sizeof(double)   |     150 | 
| lagged_fibonacci9689 | approx. 2^510000 | 9689*sizeof(double)   |     150 | 
| lagged_fibonacci19937 | approx. 2^1050000 | 19937*sizeof(double)  |     150 | 
| lagged_fibonacci23209 | approx. 2^1200000 | 23209*sizeof(double)  |     140 | 
| lagged_fibonacci44497 | approx. 2^2300000 | 44497*sizeof(double)  |      60 | 
+-----------------------+-------------------+-----------------------------+------------------------+ 

के चक्र लंबाई: यादृच्छिक संख्या अनुक्रम की लंबाई से पहले यह

संबंधित मुद्दे