कैसे रंग गेंदों को फेरबदल करने के लिए?


10

मेरे पास 400 गेंदें हैं, जिसमें 100 लाल हैं, 40 पीले हैं, 50 हरे हैं, 60 नीले हैं, 70 बैंगनी हैं, 80 काले हैं। (एक ही रंग की गेंदें समान हैं)

मैं एक कुशल फेरबदल एल्गोरिथ्म की जरूरत है, ताकि फेरबदल के बाद, गेंद एक सूची में हैं, और

कोई भी लगातार 3 गेंदें एक ही रंग की नहीं होती हैं। उदाहरण के लिए, मेरे पास "लाल, लाल, लाल, पीला ..." नहीं हो सकता है।

और, सभी क्रमपरिवर्तन "समान रूप से" होने की संभावना है। (ठीक है, अगर दक्षता बनाम निष्पक्षता का व्यापार-बंद काफी अच्छा है, तो मैं निष्पक्षता से अधिक दक्षता नहीं रखता हूं)।

मैंने फिशर-येट्स-नुथ को अनुकूलित करने की कोशिश की, लेकिन परिणाम आदर्श नहीं है।

क्यों फिशर-येट्स पर्याप्त नहीं हैं? जैसा कि FY ने मोंटे कार्लो का उलटा रूपांतरण अपनाया है। और आउटपुट वितरण एक ही रंग की गेंदों को अलग तरह से व्यवहार करता है, अर्थात यह मेरी जरूरतों के लिए पक्षपाती परिणाम उत्पन्न करेगा।

और, Naive सोच को पूरे अंतरिक्ष से सभी खराब क्रमपरिवर्तन को फ़िल्टर / पीछे करना होगा। जब प्रतिबंध बहुत मजबूत है, तो कहें, अगर हमारे पास केवल 300 गेंदें हैं और जिनमें से 100 लाल हैं, तो एक उचित क्रमचय प्राप्त करने से पहले बहुत अधिक बैक ट्रैकिंग / विफलताएं होंगी।

इसलिए, आखिरकार, मैं सभी अच्छे क्रमपरिवर्तन के माध्यम से पुनरावृति करने में सक्षम होना चाहूंगा। हालांकि, क्योंकि वैध क्रमपरिवर्तन की संख्या बहुत बड़ी है, मैं केवल उनमें से कुछ को बेतरतीब ढंग से नमूना कर सकता हूं। मैं उनमें से कुछ "आबादी" की सांख्यिकीय सुविधा को जितना संभव हो उतना आबादी से जोड़ना चाहता हूं।


3
क्या आपने पूछे गए दूसरे प्रश्न के उत्तर को अनुकूलित करने की कोशिश की है ? दोनों प्रश्न बहुत समान दिखते हैं :)।
गोपी

@ गोपी: हाँ, और मुझे उम्मीद है कि या तो सवाल के जवाब दूसरे के लिए प्रेरणा लाएंगे।
कॉलिनफैंग

मेरे दिमाग में आने वाला सबसे सरल विचार यह है कि किसी रंग से यादृच्छिक रूप से एक गेंद का चयन करना शुरू किया जाए, जहां प्रत्येक रंग को उस रंग के साथ छोड़ी गई गेंदों की संख्या के आधार पर संभाव्यता के साथ चुना जाएगा, इस प्रतिबंध के साथ कि यदि अंतिम 2 गेंदों में एक ही था एक ही रंग, आप इसे वर्तमान पुनरावृत्ति पर नहीं चुन सकते हैं। दक्षता खराब नहीं होनी चाहिए और मैं इसमें कोई पूर्वाग्रह नहीं देख सकता (जिसका मतलब यह नहीं है कि कोई भी नहीं है; शायद मुझे कुछ याद है)।
जॉर्ज

3
@George B .: हम इस प्रक्रिया से जुड़े अन्य सवालों पर पूर्वाग्रह क्यों रखते हैं डेविड एपस्टीन है कि प्रश्न करने के लिए अपने जवाब में बताते हैं, वहाँ एक गतिशील प्रोग्रामिंग एल्गोरिथ्म कि लेता है समय है, जहां कश्मीर रंग की संख्या है। कुछ अधिक कुशल अच्छा होगा - यहां तक ​​कि θ ( एन के / 2 )θ(nk)kθ(nk/2)
पीटर शोर

2
@GeorgeB। यहां तक ​​कि अगर डेविड एप्पस्टीन का दृष्टिकोण सस्ता है, तो मुझे इस बात में दिलचस्पी होगी कि एमसीएमसी दृष्टिकोण के साथ इस समस्या को कैसे हल किया जाए।
पीटर शोर

जवाबों:


7

गेंदों के सभी संभावित अनुक्रमों पर एक समान वितरण के लिए एक मार्कोव श्रृंखला के लिए अभिसरण करने के लिए आपको जो चाहिए वह यह है कि यह प्रतिवर्ती है: अनुक्रम से अनुक्रम j में जाने की संभावना विपरीत दिशा में बढ़ने के समान है। मैं इस प्रकार प्रस्ताव करता हूं कि आप सभी संभावित अनुक्रमों पर मार्कोव श्रृंखला का प्रदर्शन करने के लिए निम्नलिखित चालों (कुछ निश्चित संभाव्यता वितरण के साथ किस प्रकार की चाल का चयन करें) का उपयोग करें। निम्नलिखित में, एक "रन" एक ही रंग की गेंदों की अधिकतम लंबाई लगातार होती है। यह मार्कोव श्रृंखला कम से कम तीन रंगों के होने पर निर्भर करती है।ij

  1. यादृच्छिक पर दो रन उठाओ। यदि आप उन्हें एक्सचेंज कर सकते हैं और फिर भी कानूनी अनुक्रम हो, तो ऐसा करें।

  2. दो आसन्न रन चुनें। यदि आप उन्हें एक्सचेंज कर सकते हैं और फिर भी कानूनी अनुक्रम हो, तो ऐसा करें।

  3. एक ही रंग के दो रन उठाओ। कानूनी संभावनाओं के बीच बेतरतीब ढंग से उनमें गेंदों को फिर से वितरित करें (इसलिए यदि एक रन में गेंदों की अधिकतम संख्या 3 थी, और आपके पास चुने गए दो रनों में कुल 5 गेंदें थीं, तो पहले 2 या 3 गेंदों को प्राप्त करने की समान संभावना है; कुल 3 गेंदें थीं, पहली समान रूप से 1 या 2 प्राप्त होने की संभावना है; यदि कुल 4 गेंदें थीं, 1, 2, और 3 सभी समान रूप से होने की संभावना है)।

  4. यादृच्छिक पर कुछ रंग उठाओ । अनुक्रम पर विचार एस ' रंग के सभी गेंदों के साथ गेंदों की सी मैं हटा दिया। अब, S में यादृच्छिक दो बिंदुओं को चुनें, जहाँ विभिन्न रंगों के आसन्न गोले स्पर्श करते हैं।CiSCiS

    ए। यदि मूल अनुक्रम S में इन दो बिंदुओं पर रंग दो रन हैं , और न ही अधिकतम लंबाई है, तो एक गेंद को एक से दूसरे तक ले जाएं, प्रत्येक दिशा के साथ संभावना ½ चुनी जाती है।CiS

    ख। यदि मूल अनुक्रम S में इन दो बिंदुओं पर रंग दो रन हैं , लेकिन एक अधिकतम लंबाई है और दूसरा नहीं है, तो एक गेंद को अधिकतम लंबाई तक ले जाएं, जिसे प्रायिकता ½ के साथ छोटे से एक पर ले जाएं।CiS

    सी। यदि S में इन दो बिंदुओं में से किसी एक पर रंग का सिर्फ एक रन है , तो संभावना के साथ ½ एक गेंद को दूसरे बिंदु पर चलाएगी। CiS

    घ। अगर वहाँ रंग का कोई रन है इन बातों में से किसी पर, या अगर कोई इन बातों के दोनों पर अधिकतम लंबाई के रन कर रहे हैं, कुछ भी नहीं।Ci

यदि मेरा विश्लेषण सही है, तो यह एक प्रतिवर्ती मार्कोव श्रृंखला है जो अंततः रंगीन गेंदों के कानूनी अनुक्रमों के एक समान वितरण में परिवर्तित होती है, इसलिए यदि आप इस श्रृंखला को लंबे समय तक चलाते हैं, तो आप इस समान वितरण के बहुत करीब पहुंच जाएंगे।

आप कैसे बता सकते हैं कि यह कब परिवर्तित हुआ है? मैं इस अनुक्रम की एन्ट्रापी देखने का सुझाव दूंगा, और जब यह बढ़ना बंद हो जाएगा तब रुकेंगे। आप एन्ट्रापी की गणना कैसे करते हैं? एन्ट्रापी गणना में दो मुख्य शब्द हैं: रन लंबाई का वितरण, और प्रत्येक रन के रंगों का क्रम। रन लंबाई के वितरण के लिए, मान लें कि लंबाई k के साथ रंग i के k रन हैं । एन्ट्रापी के लिए इनमें से योगदान है Σ मैं लोग इन 2 ( Σ कश्मीर n मैं , कश्मीरni,kik जहाँrएक रन की अधिकतम अनुमेय लंबाई है। अब, एंट्रोपी को रंग अनुक्रम के योगदान पर विचार करें। मान लीजिए किमीi,jजगहें हैं जहाँ रंग की एक रनIको तुरंत कलरj(somi,i=0) मेंसे एक के बाद किया जाता है। एन्ट्रापी को यह का योगदान है Σमैंलोग इन2(Σजेमीटर

i log2 (kni,kni,1 ni,2  ni,r),
rmi,jijmi,i=0 जहाँcरंगों की संख्या है।
i log2 (jmi,jmi,1 mi,2  mi,c),
c

(सटीकता के हित में, मुझे ध्यान देना चाहिए कि हम पहली गेंद के रंग सहित एन्ट्रापी में कई योगदानों को छोड़ रहे हैं, लेकिन ये निचले क्रम की शर्तें हैं जो उपेक्षा के लिए सुरक्षित होनी चाहिए।)

अपडेट करें:

इसमें तेजी लाने के तरीके होने चाहिए। मेरा मानना ​​है कि चरणों सी और डी के लिए, आप एक ही बार में एक रंग के सभी रनों से अधिक इन दोनों चरणों को करने के लिए विश्लेषण का उपयोग कर सकते हैं। ए और बी के चरणों के लिए, यह बाधा के साथ रंगीन गेंदों का एक यादृच्छिक अनुक्रम खोजने के सवाल के बराबर है कि एक ही रंग के दो गेंदों को नहीं छूता है। इस समस्या के लिए मिश्रण करने का कोई अच्छा तरीका होना चाहिए। फिर आपको बस a / b स्टेप्स को c / d स्टेप्स के साथ अल्टरनेट करना है, जहाँ प्रत्येक स्टेप पूरी तरह से उन दो चालों को मिलाता है। मुझे लगता है कि इसे काफी तेजी से परिवर्तित करना चाहिए, हालांकि इस मार्कोव श्रृंखला के लिए मेरे पास कोई कठोर विश्लेषण नहीं है।


0

जैसा कि आपने कहा, यह सुनिश्चित करना संभव नहीं है कि प्रत्येक क्रमपरिवर्तन समान रूप से संभव है और सुनिश्चित करें कि रंग समान रूप से वितरित किए गए हैं, क्योंकि क्रमपरिवर्तन में से एक पंक्ति में सभी लाल हैं।

एक बहुत ही सुरुचिपूर्ण, लेकिन निश्चित रूप से स्पष्ट नहीं है, रंगों को समान रूप से वितरित करने के लिए विधि कम विसंगति अनुक्रम का लाभ उठाने के लिए है।

N=4001Ns

सुनिश्चित करें कि एक ही रंग की सभी गेंदों को लगातार क्रमांकित किया जाता है। यही है, आपके मामले में, पहली 100 गेंदों को लाल होने दें, अगले 40 को पीला, अगले 50 को हरा, आदि।

kthxk

xk=(s+kϕ)(mod1),
  • ϕ=1+52=1.61803399...
  • (mod1)
  • s

Nxk

xk

s=0

{B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,G,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K}
BK

s

xk

n=400

phi = (1+pow(5,0.5))/2
x = np.zeros(n)                 
s = np.random.uniform(0,1)
for i in range(n):
    x = (s + phi*(i+1)) %1

print (s)
print (x)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.