बाधाओं के साथ यादृच्छिक वैक्टर बनाना


10

मुझे निम्नलिखित अवरोधों को संतुष्ट करते हुए वास्तविक संख्या a_i के यादृच्छिक वैक्टर बनाने की आवश्यकता है:

abs(a_i) < c_i;      
sum(a_i)< A;        # sum of elements smaller than A
sum(b_i * a_i) < B; # weighted sum is smaller than B 
aT*A*a < D          # quadratic multiplication with A smaller than D

where c_i, b_i, A, B, D are constants.

इस तरह के वेक्टर को कुशलतापूर्वक उत्पन्न करने के लिए विशिष्ट एल्गोरिदम क्या होगा?


1
चौथे बाधा से आपका क्या मतलब है, "एक की विशालता है .."
एम। टिबबिट्स

मेरी गलती। समाप्त विवरण। प्रतिक्रिया के लिए धन्यवाद।

यह कैसे a_iवितरण का अनुसरण करता है p_iऔर यह भी कम है c? ऐसा इसलिए है क्योंकि वितरण p_iभी कम है c? किस वितरण में आप सोच रहे हैं?
डिप्स_स्टेट्स

@deps_stats। बहुत अच्छे अंक। छद्म कोड बहुत स्पष्ट नहीं था। मेरे मन में जो वितरण है वह पोइसन वितरण है। प्रत्येक तत्व एक अलग लैम्ब्डा के साथ एक पॉइसन वितरण का अनुसरण करता है। उस स्थिति को ध्यान में रखते हुए, मुझे लगता है कि पहली शर्त (a_i <c) आवश्यक नहीं है क्योंकि मैं पीढ़ी को समाप्त करने के लिए a_i को पुनः संतुष्ट कर सकता हूं।
लुइसहिफ्रे

मुझे कुछ और पूछते हैं ... कर रहे हैं c, A, Bऔर lambdas तय?
डिप्स_स्टैट

जवाबों:


4

अगर मैं आपको सही तरीके से समझता हूं, तो केवल कुछ छोटी मात्रा में एन-डायमेंशनल स्पेस आपकी बाधाओं को पूरा करता है।

आपका पहला अवरोध इसे एक हाइपरस्फियर के आंतरिक हिस्से में बाधा डालता है, जो मुझे comp.graphics.algorithms की याद दिलाता है " सामान्य क्षेत्र के समान अंक" और 3-डी यूनिट बॉल में समान रूप से वितरित अंक कैसे उत्पन्न करें? दूसरा बाधा हाइपरस्फेयर से थोड़ा बाहर खिसकता है, और दूसरी बाधाएं आगे की मात्रा में दूर हो जाती हैं जो आपके अवरोधों को पूरा करती हैं।

मुझे लगता है कि सबसे सरल बात यह है कि अक्सर पूछे जाने वाले दृष्टिकोणों में से एक है:

  • कुछ मनमाने ढंग से एक्सिस-संरेखित बाउंडिंग बॉक्स चुनें जो हमें यकीन है कि पूरी मात्रा में हैं। इस स्थिति में, -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c में संपूर्ण विवश आयतन सम्‍मिलित है, क्‍योंकि इसमें पहली बाधा द्वारा वर्णित हाइपरस्‍फेयर सम्‍मिलित है, और अन्‍य बाधाएं सम्‍मिलित रहती हैं। उस मात्रा पर दूर।
  • एल्गोरिथ्म समान रूप से उस बाउंडिंग बॉक्स में पॉइंट करता है। इस स्थिति में, एल्गोरिथ्म स्वतंत्र रूप से -c से + c तक के कुछ समान रूप से वितरित यादृच्छिक संख्या के लिए एक उम्मीदवार वेक्टर के प्रत्येक समन्वय को निर्धारित करता है। (मुझे लगता है कि आप इस मात्रा के बराबर घनत्व के साथ वितरित किए गए अंक चाहते हैं। मुझे लगता है कि आप एल्गोरिथ्म को कुछ या सभी निर्देशांक एक पॉइसन वितरण या कुछ अन्य गैर-समान वितरण के साथ चुन सकते हैं, अगर आपके पास ऐसा करने का कोई कारण था)।
  • एक बार जब आपके पास एक उम्मीदवार वेक्टर हो, तो प्रत्येक बाधा की जांच करें। यदि यह उनमें से किसी को भी विफल करता है, तो वापस जाएं और एक अन्य बिंदु चुनें।
  • एक बार जब आपके पास एक उम्मीदवार वेक्टर होता है, तो इसे बाद में उपयोग के लिए कहीं स्टोर करें।
  • यदि आपके पास पर्याप्त संचित वैक्टर नहीं हैं, तो वापस जाएं और एक और उत्पन्न करने का प्रयास करें।

पर्याप्त रूप से उच्च-गुणवत्ता वाले यादृच्छिक संख्या जनरेटर के साथ, यह आपको संग्रहीत निर्देशांक का एक सेट देता है जो आपके मानदंड (अपेक्षित) एक समान घनत्व के साथ मिलते हैं।

काश, अगर आपकी अपेक्षाकृत उच्च आयामीता n है (यानी, यदि आप प्रत्येक वैक्टर को निर्देशांक की अपेक्षाकृत लंबी सूची से बाहर का निर्माण करते हैं), तो खुदा हुआ क्षेत्र (आपकी सीटी-डाउन मात्रा बहुत कम) कुल मात्रा के आश्चर्यजनक रूप से छोटा हिस्सा है कुल बाउंडिंग बॉक्स, इसलिए इसे कई पुनरावृत्तियों को निष्पादित करने की आवश्यकता हो सकती है, उनमें से अधिकांश आपके विवश क्षेत्र के बाहर एक बिंदु खोजने से पहले, आपके विवश क्षेत्र के बाहर अस्वीकार किए गए बिंदुओं को उत्पन्न करते हैं। चूंकि इन दिनों कंप्यूटर बहुत तेज हैं, क्या यह काफी तेज होगा?


तो आप जो सुझाव दे रहे हैं वह अंतरिक्ष के नमूने के लिए प्रभावी है। मुझे एक समान समस्या मिली है एक बाउंडिंग बॉक्स को खोजने के अलावा सांख्यिकीय रूप से नहीं किया जा सकता (आईई, हार्ड-कोड नहीं किया जा सकता है)। अनुभव से, यह टूट जाता है यदि आपकी बाधाएं f1(x1) + f2(x2) == Cकिसी भी सुझाव के रूप में हैं?
ग्रोस्तव

यदि आपके पास समानता ("==") की कमी है, तो नमूना विधि काम नहीं करती है। ऐसे बिंदुओं में बाधाएँ, जो एक गोले की सतह पर होती हैं, या एक सिलेंडर की सतह पर होती हैं, आदि (त्रिज्या == R), बजाय गोले के अंदर (त्रिज्या <= R)। पूरे वॉल्यूम पर समान रूप से चयन करने वाले बिंदु "कभी नहीं" (संभावना 0 के करीब) आपकी इच्छित सतह पर टकराएंगे। तो आपको किसी तरह से केवल उस सतह पर मौजूद पॉइंट्स लेने की जरूरत है - यानी, पॉइंट्स को खोजने के लिए [X1, x2, x3] जैसे कि f1 (X1) + f2 (x2) == C, आप बेतरतीब ढंग से X1 उठा सकते हैं और फिर फोर्स कर सकते हैं। x2 = inverse_f2 (C - f1 (X1))।
डेविड कैरी

एक गोले की सतह पर समान रूप से वितरित बिंदुओं के विशेष मामले के लिए, "गोले पर समान यादृच्छिक अंक" देखें
डेविड कैरी

@Groostav: शायद आपका प्रश्न मूल प्रश्न से काफी अलग है कि आप इसे एक नए शीर्ष-स्तरीय प्रश्न के रूप में पोस्ट कर सकते हैं? "मुझे बताया गया है कि मुझे एक अनुवर्ती प्रश्न पोस्ट करना है, क्यों और कैसे?"
डेविड कैरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.