2013-10-11 5 views
7

मैं * 100 विमान पर समान रूप से वितरित मंडल/अंक/नोड्स उत्पन्न करना चाहता हूं। इसके लिए मैं जावा में रैंडम() विधि का उपयोग कर रहा हूं। विशेष रूप से मैं इसे निम्नलिखित तरीके से में कर रहा हूँ:विमान में समान रूप से वितरित बिंदु जावा में क्लस्टर हो रहे हैं, क्यों?

Random r1=new Random(); 
    for(int i=0;i<100;i++){ 
    x=100*r1.nextDouble(); 
    y=100*r1.nextDouble(); 
} 

लेकिन समस्या यह है कि के रूप में मैं फिर से अधिक से अधिक कोड चलाने के लिए, नोड्स समान रूप से विमान पर स्थान दिया गया है नहीं कर रहे हैं है, यानी, वहाँ सांद्रता के समूहों रहे हैं और गैर कब्जे वाले अंतरिक्ष के कुछ हिस्सों।

कोई भी विचार, सिफारिशों की अत्यधिक सराहना की जाएगी। छवि belows क्लस्टर और सफेद रिक्त स्थान के साथ एक ठेठ आउटपुट दिखाता है। मंडलियों की संख्या केवल मंडलियों की आईडी हैं। enter image description here

+6

यह एक आम गलतफहमी है कि यादृच्छिक संख्याएं बिना रुकावट हैं। यदि उनमें से पर्याप्त नहीं हैं तो वे निश्चित रूप से फॉर्म क्लस्टर करते हैं। यदि आप एकरूपता चाहते हैं तो एक समान जनरेटर को कोड करें (विमान को समान रूप से विभाजित करें और तदनुसार अंक डालें)। – Adam

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, क्या आप अधिक स्पष्ट कर सकते हैं। मुझे वह हिस्सा नहीं मिला जहां आपने विमान को समान रूप से विभाजित करने और तदनुसार नोड्स डालने के लिए कहा था। – OAH

+0

@ एंडरसन आपको [जन्मदिन की समस्या] (http://en.wikipedia.org/wiki/Birthday_problem) पर एक नज़र डालना चाहिए। – SpaceTrucker

उत्तर

5

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

उदाहरण के लिए आप Low-discrepancy sequence: Halton sequence नामक कुछ का उपयोग कर सकते हैं, या Sobol sequence। जैसा कि आप विकिपीडिया उदाहरण चित्रों में देख सकते हैं, वे क्लस्टर और अंतराल से बचते हैं जो आपके पास समान वितरण के साथ होंगे।

+0

आपको बहुत धन्यवाद, मैंने जल्दी विकिपीडिया में चित्रों को देखा और यह वही है जो मैं यादृच्छिक रूप से ढूंढ रहा हूं लेकिन बिना किसी अंतराल के।बस एक त्वरित सवाल यह है कि इन "कम विसंगति अनुक्रम" को समान वितरण के कुछ कार्यान्वयन माना जाता है? क्योंकि वे मुझे समान रूप से वितरित दिखते हैं। फिर से धन्यवाद। – OAH

+1

वे एक समान हैं। हैल्टन अनुक्रम के लिए देखना आसान है, यह केवल एक्स पर समान रूप से श्रेणी को विभाजित कर रहा है और समान रूप से y पर, केवल एक अलग "समान रूप से" है। – Adam

+0

@Flavio क्या आप जानते हैं कि जिटर जोड़ने का सबसे अच्छा तरीका क्या होगा? जाहिर है आप यादृच्छिक रूप से निर्देशांक को परेशान कर सकते हैं, लेकिन यह समानता को कैसे प्रभावित करेगा? – Adam

1

मुझे लगता है कि आप 100 अंक के साथ 100x100 इकाई विमान का मतलब मानते हैं।

आपके विमान पर 10x10 ग्रिड ओवरलैड, 1 बिंदु प्रति ग्रिड बॉक्स का मतलब 100 समान रूप से वितरित बिंदु है।

सटीक एकरूपता के लिए केंद्र में रखें अंक सुंदर है कि:

for(int i=0;i<100;i++){ 
    x = 5 + 10*(i/10); 
    y = 5 + i % 10; 
} 

या घबराना का एक छोटा सा के लिए, प्रत्येक ग्रिड बॉक्स के अंदर स्थान randomize:

Random r1=new Random(); 
for(int i=0;i<100;i++){ 
    x = 10*r1.nextDouble() + 10*(i/10); 
    y = 10*r1.nextDouble() + i % 10; 
} 
+0

इसके लिए आपको बहुत बहुत धन्यवाद। हालांकि मैं ऐसा कुछ ढूंढ रहा हूं जो ग्रिड नहीं है। मेरा मतलब है कि संलग्न आंकड़े में मंडलियों को देखकर, कुछ हिस्सों को इतनी भारी लोड किया जाता है जबकि अन्य कुछ नहीं होते हैं, मैं चरम सेटिंग से आगे बढ़ने का एक तरीका ढूंढ रहा हूं जो अब मेरे पास कुछ समान वितरण (लेकिन ग्रिड नहीं है))। क्या कोई चीज है जो मैं यादृच्छिक संख्या जेनरेटर के साथ कर सकता हूं, यानी वाई-निर्देशांक के लिए दूसरे आरएनजी का उपयोग करने के लिए या ऐसा कुछ? Thx – OAH

+0

आपकी दृष्टिकोण को नियंत्रित करने के लिए दूसरा दृष्टिकोण एक बड़ा/छोटा ग्रिड का उपयोग करके समायोजित किया जा सकता है। यदि आप प्रति बॉक्स 4 यादृच्छिक बिंदुओं के साथ 5x5 ग्रिड का उपयोग करते हैं तो आपके पास अधिक यादृच्छिकता, कम समानता है, लेकिन आपके समाधान में जितना अधिक नहीं है। वास्तव में आपका समाधान 1x1 ग्रिड के साथ होता है। – Adam

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