मूल रूप से, आप जो पूछ रहे हैं, वह एक "अर्ध-यादृच्छिक" इवेंट जनरेटर है जो निम्नलिखित गुणों के साथ घटनाओं को उत्पन्न करता है:
प्रत्येक घटना की औसत दर पहले से निर्दिष्ट होती है।
एक ही घटना एक पंक्ति में दो बार होने की संभावना कम होती है, क्योंकि यह यादृच्छिक पर होगी।
घटनाएं पूरी तरह से अनुमानित नहीं हैं।
ऐसा करने का एक तरीका पहले गैर-यादृच्छिक घटना जनरेटर को लागू करना है जो लक्ष्यों 1 और 2 को संतुष्ट करता है, और फिर 3 को संतुष्ट करने के लिए कुछ यादृच्छिकता जोड़ देता है।
गैर-यादृच्छिक इवेंट जनरेटर के लिए, हम एक साधारण डीथिरिंग एल्गोरिथ्म का उपयोग कर सकते हैं । विशेष रूप से, p 1 , p 2 , ..., p n , घटनाओं 1 के n के सापेक्ष संभावनाएं हैं , और s = p 1 + p 2 + ... + p n भार का योग हो। फिर हम निम्नलिखित एल्गोरिथ्म का उपयोग करके घटनाओं का एक गैर-यादृच्छिक अधिकतम समतुल्य अनुक्रम उत्पन्न कर सकते हैं:
प्रारंभ में, ई 1 = ई 2 = ... = ई एन = 0।
एक घटना बनाने के लिए, प्रत्येक को बढ़ा देते ई मैं द्वारा पी मैं , और उत्पादन घटना कश्मीर जिसके लिए ई कश्मीर सबसे बड़ा (संबंधों जैसे चाहें वैसे तोड़ने) है।
कमी ई के द्वारा s , और चरण 2 से दोहराएँ।
उदाहरण के लिए, तीन घटनाओं A, B और C को p A = 5, p B = 4 और p C = 1 के साथ दिया गया है, यह एल्गोरिथम आउटपुट के निम्नलिखित अनुक्रम जैसा कुछ उत्पन्न करता है:
A B A B C A B A B A A B A B C A B A B A A B A B C A B A B A
ध्यान दें कि 30 घटनाओं के इस क्रम में 15 As, 12 Bs और 3 Cs शामिल हैं। यह काफी आशावादी रूप से वितरित नहीं है - एक पंक्ति में दो अस की कुछ घटनाएं हैं, जिन्हें टाला जा सकता था - लेकिन यह करीब हो जाता है।
अब, इस क्रम में यादृच्छिकता जोड़ने के लिए, आपके पास कई (जरूरी नहीं कि पारस्परिक रूप से अनन्य) विकल्प हों:
आप कुछ उचित आकार एन के लिए, फिलीपींस की सलाह का पालन कर सकते हैं और एन आगामी घटनाओं के "डेक" को बनाए रख सकते हैं । हर बार जब आपको कोई ईवेंट जनरेट करने की आवश्यकता होती है, तो आप डेक से एक रैंडम ईवेंट चुनते हैं, और फिर इसे अगले ईवेंट आउटपुट के साथ ऊपर दिए गए एल्गोरिथ्म द्वारा प्रतिस्थापित करते हैं।
N = 3 के साथ उपरोक्त उदाहरण पर लागू होता है, उदाहरण के लिए :
A B A B C A B B A B A B C A A A A B B A B A C A B A B A B A
जबकि N = 10 अधिक यादृच्छिक दिखने वाली उपज देता है:
A A B A C A A B B B A A A A A A C B A B A A B A C A C B B B
ध्यान दें कि कफ़न के कारण आम घटनाएँ A और B बहुत अधिक चलती हैं, जबकि दुर्लभ C घटनाएँ अभी भी काफी अच्छी तरह से समाप्त हो चुकी हैं।
आप सीधे बेतरतीब एल्गोरिथ्म में कुछ यादृच्छिकता इंजेक्षन कर सकते हैं। उदाहरण के लिए, बजाय बढ़ाने की ई मैं द्वारा पी मैं चरण 2 में, आप इसे से बढ़ा देते सकता है पी मैं × यादृच्छिक (0, 2), जहां यादृच्छिक ( एक , ख ) एक समान रूप से के बीच यादृच्छिक संख्या वितरित किया जाता है एक और ख ; यह निम्नलिखित की तरह उत्पादन होगा:
A B B C A B A A B A A B A B A A B A A A B C A B A B A C A B
या आप e i को p i + random (- c , c ) द्वारा बढ़ा सकते हैं , जो उत्पादन करेगा ( c = 0.1 × s के लिए ):
B A A B C A B A B A B A B A C A B A B A B A A B C A B A B A
या, c = 0.5 × s के लिए :
B A B A B A C A B A B A A C B C A A B C B A B B A B A B C A
ध्यान दें कि कैसे बहुसांस्कृतिक की तुलना में आम घटनाओं ए और बी की तुलना में, योगात्मक घटनाओं के लिए योगात्मक योजना का अधिक मजबूत यादृच्छिक प्रभाव है; यह वांछनीय हो सकता है या नहीं भी हो सकता है। बेशक, आप भी इन योजनाओं, या वेतन वृद्धि करने के लिए किसी अन्य समायोजन के कुछ संयोजन है, जब तक इस्तेमाल कर सकते हैं के रूप में यह संपत्ति को बरकरार रखता है कि औसत की वेतन वृद्धि ई मैं बराबर होती है पी मैं ।
वैकल्पिक रूप से, आप कभी-कभी चुने गए ईवेंट k को यादृच्छिक एक (कच्चे वज़न p i के अनुसार चुना गया ) के स्थान पर डिथरिंग अल्गोरिथम के आउटपुट को बढ़ा सकते हैं । जब तक आप चरण 3 में एक ही k का उपयोग करते हैं जब तक आप चरण 2 में आउटपुट करते हैं, तब तक dithering प्रक्रिया अभी भी यादृच्छिक उतार-चढ़ाव को समाप्त कर देगी।
उदाहरण के लिए, यहां कुछ उदाहरण आउटपुट, प्रत्येक घटना का 10% मौका बेतरतीब ढंग से चुना गया है:
B A C A B A B A C B A A B B A B A B A B C B A B A B C A B A
और यहां एक उदाहरण है कि प्रत्येक आउटपुट के 50% संभावना यादृच्छिक है:
C B A B A C A B B B A A B A A A A A B B A C C A B B A B B C
तुम भी, जैसा कि ऊपर वर्णित एक डेक मिश्रण पूल / में विशुद्ध रूप से यादृच्छिक और डिदर्ड घटनाओं का मिश्रण खिलाने पर विचार कर सकते, या शायद का चयन करके हिचकिचाहट एल्गोरिथ्म randomizing कश्मीर बेतरतीब ढंग से, के रूप में द्वारा तौला ई मैं एस (शून्य के रूप में नकारात्मक वजन इलाज)।
Ps। यहाँ कुछ पूरी तरह से यादृच्छिक घटना क्रम हैं, समान औसत दरों के साथ, तुलना के लिए:
A C A A C A B B A A A A B B C B A B B A B A B A A A A A A A
B C B A B C B A A B C A B A B C B A B A A A A B B B B B B B
C A A B A A B B C B B B A B A B A A B A A B A B A C A A B A
स्पर्शरेखा: चूंकि डेक-आधारित समाधानों के लिए, क्या यह आवश्यक है, इस बारे में टिप्पणियों में कुछ बहस हुई है, कि रिफिल होने से पहले डेक को खाली करने की अनुमति देने के लिए, मैंने कई डेक-फिलिंग रणनीतियों की चित्रमय तुलना करने का फैसला किया:
अर्ध-यादृच्छिक सिक्का फ़्लिप (औसतन 50 से 50 के अनुपात में पूंछ के साथ) उत्पन्न करने के लिए कई रणनीतियों का प्लॉट। क्षैतिज अक्ष फ़्लिप की संख्या है, ऊर्ध्वाधर अक्ष अपेक्षित अनुपात से संचयी दूरी है, जिसे (हेड - टेल) / 2 = हेड - फ़्लिप / 2 के रूप में मापा जाता है।
भूखंड पर लाल और हरे रंग की लाइनें तुलना के लिए दो गैर-डेक-आधारित एल्गोरिदम दिखाती हैं:
- रेड लाइन, नियतात्मक डिथरिंग : सम-संख्या वाले परिणाम हमेशा सिर होते हैं, विषम संख्या वाले परिणाम हमेशा पूंछ होते हैं।
- ग्रीन लाइन, स्वतंत्र यादृच्छिक फ़्लिप : प्रत्येक परिणाम को रैंडम रूप से स्वतंत्र रूप से चुना जाता है, जिसमें 50% सिर और 50% पूंछ की संभावना होती है।
अन्य तीन लाइनें (नीला, बैंगनी और सियान) तीन डेक-आधारित रणनीतियों के परिणाम दिखाती हैं, जिनमें से प्रत्येक को 40 कार्डों के डेक का उपयोग करके लागू किया जाता है, जो शुरू में 20 "सिर" कार्ड और 20 "पूंछ" कार्ड से भरा होता है:
- नीली रेखा, खाली होने पर भरें : डेक खाली होने तक कार्ड यादृच्छिक रूप से तैयार किए जाते हैं, फिर डेक को 20 "हेड" कार्ड और 20 "टेल" कार्ड के साथ रिफिल किया जाता है।
- बैंगनी रेखा, आधा खाली होने पर भरें : कार्ड यादृच्छिक रूप से तब तक खींचे जाते हैं जब तक कि डेक में 20 कार्ड न बचे हों; तब डेक 10 "सिर" कार्ड और 10 "पूंछ" कार्ड के साथ सबसे ऊपर है।
- सियान लाइन, लगातार भरें : कार्ड यादृच्छिक पर खींचे जाते हैं; समान संख्या वाले ड्रॉ को तुरंत "हेड्स" कार्ड के साथ बदल दिया जाता है, और विषम-संख्या वाले ड्रॉ को "टेल्स" कार्ड के साथ बदल दिया जाता है।
बेशक, ऊपर दिया गया प्लॉट एक यादृच्छिक प्रक्रिया का केवल एक साकार रूप है, लेकिन यह यथोचित प्रतिनिधि है। विशेष रूप से, आप देख सकते हैं कि सभी डेक-आधारित प्रक्रियाओं में सीमित पूर्वाग्रह हैं, और लाल (निर्धारक) रेखा के काफी करीब रहते हैं, जबकि विशुद्ध रूप से यादृच्छिक हरी रेखा अंततः भटक जाती है।
(वास्तव में, शून्य से दूर नीली, बैंगनी और सियान रेखाओं का विचलन डेक के आकार से कड़ाई से घिरा होता है: नीली रेखा कभी भी शून्य से 10 कदम से अधिक दूर नहीं जा सकती है, बैंगनी रेखा शून्य से केवल 15 कदम दूर हो सकती है। , और सियान लाइन शून्य से अधिकतम 20 कदम की दूरी पर बह सकती है। बेशक, व्यवहार में, वास्तव में इसकी सीमा तक पहुंचने वाली किसी भी रेखा की संभावना बेहद कम है, क्योंकि अगर वे बहुत दूर भटकते हैं, तो शून्य के करीब लौटने की उनकी एक मजबूत प्रवृत्ति है। बंद।)
एक नज़र में, अलग-अलग डेक-आधारित रणनीतियों के बीच कोई स्पष्ट अंतर नहीं है (हालांकि, औसतन, नीली रेखा लाल रेखा के कुछ हद तक करीब रहती है, और सियान रेखा कुछ और दूर रहती है), लेकिन नीली रेखा का एक निकट निरीक्षण एक अलग निर्धारक पैटर्न को प्रकट करता है: प्रत्येक 40 ड्रॉ (बिंदीदार ग्रे ऊर्ध्वाधर लाइनों द्वारा चिह्नित), नीली रेखा बिल्कुल शून्य पर लाल रेखा से मिलती है। बैंगनी और सियान रेखाएं इतनी कठोर नहीं हैं, और किसी भी बिंदु पर शून्य से दूर रह सकती हैं।
सभी डेक-आधारित रणनीतियों के लिए, उनकी भिन्नता को बनाए रखने वाली महत्वपूर्ण विशेषता यह तथ्य है कि, जबकि कार्ड डेक से बेतरतीब ढंग से खींचे जाते हैं , डेक को निर्दिष्ट रूप से रिफिल किया जाता है। यदि डेक को फिर से भरने के लिए उपयोग किए जाने वाले कार्डों को खुद बेतरतीब ढंग से चुना गया था, तो डेक-आधारित रणनीतियों के सभी शुद्ध यादृच्छिक विकल्प (ग्रीन लाइन) से अप्रभेद्य बन जाएंगे।