2011-01-24 18 views
17

मान लीजिए कि मेरे पास प्रत्येक किनारे से जुड़ी दूरी के साथ एक पूर्ण, अप्रत्यक्ष ग्राफ जी है। किनारे का अर्थ (यू, वी) लंबाई एल है "अंक यू और वी एल के अलावा एक दूसरे के करीब नहीं हो सकता है।" मेरा लक्ष्य एक विमान में इस ग्राफ के नोड्स को रखना है ताकि इन दूरी की बाधाओं में से कोई भी उल्लंघन न हो और इस तरह के बिंदुओं के उत्तल ढक्कन में कम से कम कुल क्षेत्र हो। उदाहरण के तौर पर, मान लीजिए कि मेरे पास विद्युत घटकों का एक गुच्छा है जिसे मैं एक चिप पर रखना चाहता हूं, जिनमें से प्रत्येक बिजली की हस्तक्षेप उत्पन्न करता है। यदि मैं घटकों को एक साथ बहुत करीब रखता हूं, तो वे एक दूसरे के साथ हस्तक्षेप करना शुरू कर देंगे, पूरे सिस्टम को बेकार कर देंगे। न्यूनतम दूरी को देखते हुए प्रत्येक बिंदु एक दूसरे बिंदु से होना चाहिए, चिप पर घटकों को रखने का सबसे अधिक अंतरिक्ष-कुशल तरीका क्या है?विमान में क्लोज-पैकिंग अंक?

मुझे नहीं पता कि इस बारे में भी सोचना शुरू करना है। मुझे यह भी नहीं पता कि समस्या उच्च-आयामी मामले (हाइपरप्लेन में पैकिंग पॉइंट्स) को सामान्यीकृत कैसे कर सकती है। क्या किसी को इस समस्या से निपटने का एक अच्छा तरीका पता है?

+0

आप ग्राफ ड्राइंग देखना चाहते हैं। बल-निर्देशित तकनीकें आपको इस मामले के लिए एक अच्छा परिणाम दे सकती हैं। – novalis

+0

@ novalis- मुझे इन तकनीकों से अवगत है, लेकिन मेरे सबसे अच्छे ज्ञान के लिए कोई प्रमाण नहीं है कि ये इष्टतम समाधान (या इष्टतम समाधान के करीब कुछ भी) देते हैं। मैं एक एल्गोरिदम की तलाश में हूं जो इष्टतम के कुछ अनुमानित कारक के भीतर होगा। – templatetypedef

+0

उत्तल हॉल (प्रति क्रिस हॉपमैन के उत्तर) के क्षेत्र की बजाय, आप शायद पहलू अनुपात के उत्पाद और त्रिज्या से दूरदराज के बिंदु तक कुछ कम करना चाहते हैं। मैं यह समझने के लिए मान रहा हूं कि आपका ग्राफ पूरी तरह से घना है - आपके पास ऐसे घटक नहीं हैं जो एक ही स्थिति में 'ढेर' हो सकते हैं? – Novelocrat

उत्तर

6

मेरे पास एक इष्टतम समाधान है, लेकिन आप इसे पसंद नहीं करेंगे :)।

आइए लेबल हमारे नोड्स एक्स , एक्स , ..., एक्स n। चलो बी = अधिकतम i, j < n (जिले (एक्स मैं, एक्स जे)), जहां जिले (एक्स मैं, एक्स जे) x मैं और एक्स के बीच न्यूनतम दूरी है जे।प्रत्येक के लिए, स्थिति (0, i * बी) पर नोड x i रखें। अब प्रत्येक नोड कम से कम बी सभी अन्य लोगों से दूर है, और उत्तल हलचल क्षेत्र 0 है।

वास्तविक बिंदु यह है कि अकेले उत्तल हलचल के क्षेत्र को कम करने से आपको एक गैरकानूनी समाधान मिल जाएगा। एक संभावित रूप से बेहतर उपाय उत्तल झुकाव का व्यास होगा।

+1

यह एक बहुत अच्छा मुद्दा है। यदि आप व्यास के साथ काम करने के लिए समस्या स्थापित करते हैं, तो क्या आपके पास कोई विचार है? आप एक प्रमुख एल्गोरिदम विज़ार्ड प्रतीत होते हैं, और मुझे समस्या पर आपके विचार सुनना अच्छा लगेगा। – templatetypedef

+0

हे। आश्चर्यजनक! – RBarryYoung

3

मुझे लगता है कि इष्टतम एल्गोरिदम खोजने में मुश्किल होगी। अगर मैं एनपी-हार्ड समस्या बन गया तो मुझे आश्चर्य नहीं होगा। हालांकि, यदि आप एक व्यावहारिक एल्गोरिदम में दिलचस्पी रखते हैं जो सभ्य समाधान उत्पन्न करता है, तो मैं force-based graph drawing algorithms पर एक नज़र डालने की सलाह देता हूं।

यहां सामान्य विचार है (कुछ उच्च गणित दिखाई देगा)। यह किसी भी आयाम को सामान्यीकृत करता है।

एक फ़ंक्शन f बनाएं जो प्रत्येक नोड लेआउट के लिए मान निर्दिष्ट करता है - एक मान जिसे आप कम करना चाहते हैं। आपके मामले में, फ़ंक्शन किसी दिए गए लेआउट के लिए उत्तल हल के क्षेत्र की गणना कर सकता है + प्रत्येक बाधा के लिए एक बड़ा जुर्माना जो पूरा नहीं हुआ था। या यह एक आसान फ़ंक्शन g हो सकता है जो उचित रूप से पूर्व को अनुमानित करता है: संक्षेप में,छोटे होने पर छोटे होने के लिए g चाहते हैं, और इसके विपरीत। अपेक्षाकृत सरल कार्य चुनना अच्छा होता है, क्योंकि आपको इसके आंशिक डेरिवेटिव (नोड्स के निर्देशांक के संबंध में) की गणना करने की आवश्यकता होगी।

अब मान लें कि आपके पास 100 नोड्स हैं और आप उन्हें 3 डी में रखना चाहते हैं। इसका मतलब है कि आपके पास 300 अज्ञात संख्याएं हैं (प्रत्येक नोड के लिए 100 नोड्स समय 3 निर्देशांक)। फंक्शन fआर से R से एक फ़ंक्शन है, और आदर्श रूप में हम इसे वैश्विक न्यूनतम खोजना चाहते हैं। अधिक यथार्थवादी, पर्याप्त गहरा स्थानीय न्यूनतम पर्याप्त होगा।

ऐसे न्यूनतम खोजने के लिए अच्छी तरह से ज्ञात संख्यात्मक एल्गोरिदम हैं, उदाहरण के लिए: Conjugate gradient, BFGS। अच्छी बात यह है कि, आपको वास्तव में उन्हें विवरण में समझना नहीं है, ये एल्गोरिदम कई भाषाओं में लागू किए गए हैं। आपको केवल f(x) और f'(x) की गणना करने की विधि प्रदान करना है, जो एल्गोरिदम द्वारा अनुरोध किए गए x और प्रारंभिक लेआउट x₀ के लिए है।

+0

मैंने वास्तव में थोड़ी देर के लिए ऐसा करने के बारे में सोचा, लेकिन तथ्य यह है कि मुझे कोई गारंटी नहीं है कि परिणामी ग्राफ इष्टतम के पास कहीं भी है, हमेशा मुझे इसे बंद कर देता है। – templatetypedef

+0

व्यावहारिक उद्देश्यों के लिए आप अलग-अलग (यादृच्छिक) प्रारंभिक लेआउट के साथ कई बार एल्गोरिदम चला सकते हैं, और सर्वोत्तम परिणाम संतोषजनक होना चाहिए। बेशक, अभी भी कोई गारंटी नहीं है कि आप इष्टतम के पास कहीं भी पहुंचें। यह एक सैद्धांतिक दृष्टिकोण से एक बहुत ही रोचक समस्या है! – Bolo

2

अतिरिक्त बाधाओं के साथ यह 2 डी bin packing problem (जो एनपी हार्ड है) है। मैंने सुना है अनुरूपित एनीलिंग सर्किट/चिप डिजाइन के लिए बहुत अच्छा प्रदर्शन करता है।

मैं वास्तव में looking for real-world test-data of a big bin packing problemDrools Planner के लिए हूं।

+0

नकली एनीलिंग वास्तव में ऐसी समस्याओं के लिए बहुत अच्छा है। किसी डोमेन को जाल करने के लिए बिंदु कहां रखना है (बाधाओं के साथ: त्रिभुज "वसा" होना चाहिए और उनके व्यास को डोमेन पर कुछ घनत्व के रूप में वितरित किया जाना चाहिए) काफी समान दिखता है, और एसए के साथ हल किया जा सकता है। –

+2

मुझे यकीन नहीं है कि मैं अनुसरण करता हूं ... आप कह रहे हैं कि यह 2 डी बिन-पैकिंग में कमी के माध्यम से एनपी-हार्ड है? यदि हां, तो आप यह कैसे साबित करते हैं? यदि नहीं, तो बस यह कहकर कि आप इसे बिन पैकिंग का उपयोग करके हल कर सकते हैं जटिलता के बारे में कुछ भी नहीं कहता है। – templatetypedef

+0

@templatetypedef अच्छा बिंदु। चूंकि मेरे पास सभी बाधाएं नहीं हैं, इसलिए मैं दावा नहीं कर सकता कि यह "निश्चित रूप से एनपी हार्ड" है। और यहां तक ​​कि अगर मेरे पास सभी बाधाएं थीं, तो यह साबित करना मुश्किल है कि कुछ एनपी कठिन है :) मुझे अभी भी लगता है कि यह संभवतः एनपी मुश्किल है। –

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