क्या कोई मुझे बता सकता है कि मैं कैसे अनुकरण कर सकता हूं , कहाँ पे , एक सिक्का टॉस (के रूप में कई बार के रूप में आप की आवश्यकता के साथ) का उपयोग कर ?
मैं अस्वीकृति नमूने का उपयोग करने के बारे में सोच रहा था, लेकिन इसे नीचे नहीं कर सकता था।
क्या कोई मुझे बता सकता है कि मैं कैसे अनुकरण कर सकता हूं , कहाँ पे , एक सिक्का टॉस (के रूप में कई बार के रूप में आप की आवश्यकता के साथ) का उपयोग कर ?
मैं अस्वीकृति नमूने का उपयोग करने के बारे में सोच रहा था, लेकिन इसे नीचे नहीं कर सकता था।
जवाबों:
क्योंकि बेशुमार समाधान हैं, चलो एक कुशल खोजें ।
इसके पीछे एक विचार बर्नौली चर को लागू करने के लिए एक मानक तरीके से शुरू होता है: एक समान यादृच्छिक चर की तुलना करें पैरामीटर के लिए । कब, वापसी ; अन्यथा, वापस लौटें।
हम उपयोग कर सकते हैं -एक समान यादृच्छिक संख्या जनरेटर के रूप में यूरो । एक संख्या उत्पन्न करने के लिए किसी भी अंतराल के भीतर समान रूप से , सिक्का पलटें। जब यह प्रमुख होता है, पुनरावर्ती रूप से एक समान मूल्य उत्पन्न करता है पहली बार में अंतराल का हिस्सा; जब यह पूंछ, पुनरावृत्ति उत्पन्न करता है के पिछले अंतराल का हिस्सा। कुछ बिंदु पर लक्ष्य अंतराल इतना छोटा हो जाएगा कि वास्तव में इससे कोई फर्क नहीं पड़ता कि आप इससे कोई संख्या कैसे लेते हैं: यही कारण है कि पुनरावृत्ति शुरू हो जाती है। यह स्पष्ट है कि यह प्रक्रिया समान रूप से (किसी भी वांछित परिशुद्धता तक) उत्पन्न करती है, जैसा कि आसानी से प्रेरण द्वारा सिद्ध किया जाता है।
यह विचार कुशल नहीं है, लेकिन यह एक कुशल विधि की ओर जाता है। चूंकि प्रत्येक चरण में आप कुछ दिए गए अंतराल से एक संख्या आकर्षित करने जा रहे हैं, पहले यह क्यों नहीं जांचें कि क्या आपको इसे खींचने की आवश्यकता है? यदि आपका लक्ष्य मान इस अंतराल के बाहर है, तो आप पहले से ही यादृच्छिक मूल्य और लक्ष्य के बीच तुलना का परिणाम जानते हैं। इस प्रकार, यह एल्गोरिथ्म तेजी से समाप्त होता है। (यह प्रश्न में अनुरोधित अस्वीकृति नमूना प्रक्रिया के रूप में माना जा सकता है ।)
हम आगे इस एल्गोरिथ्म को अनुकूलित कर सकते हैं। किसी भी स्तर पर, हमारे पास वास्तव में दो सिक्के हैं जिनका हम उपयोग कर सकते हैं: हमारे सिक्के को रीलेबल करके हम इसे एक में बदल सकते हैं जो कि मौका के साथ प्रमुख है। इसलिए, एक प्रीकम्प्यूटेशन के रूप में, हम पुनरावर्ती रूप से चयन कर सकते हैं, जो भी relabeling समाप्ति की जरूरत flips की कम अपेक्षित संख्या की ओर जाता है। (यह गणना एक महंगा कदम हो सकता है।)
उदाहरण के लिए, एक सिक्के का उपयोग करना अक्षम है एक बर्नौली का अनुकरण करने के लिएचर सीधे: यह औसत पर लगभग दस flips लेता है। लेकिन अगर हम ए सिक्का है, तो सिर्फ दो flips में हम सुनिश्चित किया जाएगा और flips की अपेक्षित संख्या बस है ।
यहाँ विवरण हैं।
किसी भी आधे-खुले अंतराल में विभाजन अंतराल में
यह दो परिवर्तनों को परिभाषित करता है तथा जो आधे-खुले अंतराल पर काम करते हैं।
शब्दावली के रूप में, यदि वास्तविक संख्याओं के किसी भी सेट को अभिव्यक्ति दें
मतलब कि के लिए एक कम बाध्य है : सबके लिए । इसी तरह, माध्यम के लिए एक ऊपरी बाध्य है ।
लिखो । (वास्तव में, इससे कोई फर्क नहीं पड़ेगा अगरतर्कसंगत के बजाय वास्तविक है; हमें केवल इसकी आवश्यकता है।)
यहाँ एक वैरिएबल का उत्पादन करने के लिए एल्गोरिथ्म है वांछित बर्नौली पैरामीटर के साथ:
सेट तथा ।
जबकि {उत्पादन के लिए सिक्का टॉस । सेट वेतन वृद्धि ।}
अगर फिर सेट करें । अन्यथा, सेट करें।
वर्णन करने के लिए, यहां R
फ़ंक्शन के रूप में अलोरिथ का कार्यान्वयन है draw
। इसके तर्क लक्ष्य मूल्य हैं और अंतराल , शुरू में । यह सहायक फ़ंक्शन s
कार्यान्वयन का उपयोग करता है। हालाँकि इसकी आवश्यकता नहीं है, यह भी सिक्के की संख्या को ट्रैक करता है। यह यादृच्छिक चर, tosses की गिनती, और अंतिम अंतराल का निरीक्षण करता है।
s <- function(x, ab, p) {
d <- diff(ab) * p
if (x == 1) c(ab[1], ab[1] + d) else c(ab[1] + d, ab[2])
}
draw <- function(target, p) {
between <- function(z, ab) prod(z - ab) <= 0
ab <- c(0,1)
n <- 0
while(between(target, ab)) {
n <- n+1; ab <- s(runif(1) < p, ab, p)
}
return(c(target > ab[2], n, ab))
}
इसके उपयोग और इसकी सटीकता के परीक्षण के एक उदाहरण के रूप में, मामला लें तथा । आओ बनाते हैं एल्गोरिथ्म का उपयोग करने वाले मूल्य, माध्य (और इसकी मानक त्रुटि) पर रिपोर्ट करते हैं, और उपयोग किए गए फ़्लिप की औसत संख्या का संकेत देते हैं।
target <- 0.01
p <- 0.9
set.seed(17)
sim <- replicate(1e4, draw(target, p))
(m <- mean(sim[1, ])) # The mean
(m - target) / (sd(sim[1, ]) / sqrt(ncol(sim))) # A Z-score to compare to `target`
mean(sim[2, ]) # Average number of flips
इस सिमुलेशन में फ़्लिप के प्रमुख थे। हालांकि के लक्ष्य से कम है, का जेड-स्कोर महत्वपूर्ण नहीं है: इस विचलन को संयोग के लिए जिम्मेदार ठहराया जा सकता है। फ़्लिप की औसत संख्या थी- दस से थोड़ा कम। अगर हमने इस्तेमाल किया होता सिक्का, मतलब होता --still लक्ष्य से बहुत अलग नहीं है, लेकिन केवल औसत रूप से फ़्लिप की आवश्यकता होती।
यहाँ एक समाधान है (थोड़ा गड़बड़ है, लेकिन यह मेरा पहला छुरा है)। आप वास्तव में अनदेखी कर सकते हैं और WLOG मान लेते हैं । क्यों? दो पक्षपाती सिक्का फ़्लिप से एक निष्पक्ष सिक्का फ्लिप करने के लिए एक चतुर एल्गोरिथ्म मौजूद है । तो हम मान सकते हैं।
उत्पन्न करने के लिए , मैं दो समाधानों के बारे में सोच सकता हूं (पहला मेरा अपना नहीं है, लेकिन दूसरा एक सामान्यीकरण है):
निष्पक्ष सिक्के को पलटें बार। अगरसिर मौजूद नहीं हैं, शुरू करें। अगरसिर कर रहे हैं वर्तमान, वापसी है कि क्या पहले सिक्का एक सिर है या नहीं (क्योंकि)
इसे किसी भी मूल्य तक बढ़ाया जा सकता है । लिखोद्विआधारी रूप में। उदाहरण के लिए,
हम सिक्का फ़्लिप का उपयोग करके एक नया बाइनरी नंबर बनाएंगे। के साथ शुरू, और अगर एक सिर (1) या पूंछ (0) प्रकट होता है, तो अंकों को जोड़ते हैं। प्रत्येक फ्लिप पर, बाइनरी प्रतिनिधित्व के साथ अपने नए बाइनरी नंबर की तुलना करें उसी अंक तक । आखिरकार दोनों अलग हो जाएंगे, और अगर लौटेंगे तो आपके बाइनरी नंबर से अधिक है।
पायथन में:
def simulate(p):
binary_p = float_to_binary(p)
binary_string = '0.'
index = 3
while True:
binary_string += '0' if random.random() < 0.5 else '1'
if binary_string != binary_p[:index]:
return binary_string < binary_p[:index]
index += 1
कुछ प्रमाण:
np.mean([simulate(0.4) for i in range(10000)])
0.4 के बारे में है (हालांकि तेज़ नहीं)
मुझे एक सरल समाधान दिखाई देता है, लेकिन इसमें कोई संदेह नहीं है कि इसे करने के कई तरीके हैं, कुछ संभवतः इससे सरल हैं। इस दृष्टिकोण को दो चरणों में विभाजित किया जा सकता है:
समान संभावना वाले दो घटनाओं से उत्पन्न एक अनुचित सिक्का-टॉसिंग प्रक्रिया (विशेष सिक्के के संयोजन और विधि जिसके द्वारा यह संभावना के साथ एक सिर पैदा करने के लिए फेंक दिया जाता है) )। हम इन दोनों को समान रूप से संभावित घटनाओं को कह सकते हैं, तथा । [इसके लिए एक सरल तरीका है जिसमें टॉज़ के जोड़े लेने की आवश्यकता होती है तथा दो समान रूप से संभावित परिणामों का उत्पादन करने के लिए, अन्य सभी परिणामों के साथ फिर से प्रयास करने के लिए एक नई जोड़ी बनाने के लिए अग्रणी।]
अब आप नकली मेले का उपयोग करके दो अवशोषित राज्यों के साथ एक यादृच्छिक चलना उत्पन्न करते हैं। मूल से अवशोषित राज्यों की दूरी (ऊपर एक और उसके नीचे एक) का चयन करके, आप अवशोषण की संभावना को ऊपरी अवशोषक राज्य को पूर्णांकों का वांछित अनुपात कह सकते हैं। विशेष रूप से, यदि आप ऊपरी अवशोषित अवरोध को जगह पर रखते हैं और निचले एक पर (और मूल से प्रक्रिया शुरू), और अवशोषण तक यादृच्छिक चलना चलाते हैं, ऊपरी बाधा पर अवशोषण की संभावना है ।
(इसे दिखाने के लिए यहां कुछ गणनाएँ की जानी हैं, लेकिन आप पुनरावृत्ति संबंधों के साथ काम करके संभावनाओं को काफी आसानी से प्राप्त कर सकते हैं ... या आप इसे अनंत श्रृंखला के योग द्वारा कर सकते हैं ... या अन्य तरीके भी हैं।)
[self-study]
टैग जोड़ें और इसकी विकी पढ़ें । ध्यान दें कि आपके प्रश्न के अंत में मदद के लिए कोई दलील देने की आवश्यकता नहीं है - हम जानते हैं कि जो कोई भी यहाँ पोस्ट करता है वह मदद की उम्मीद कर रहा है!