ग्राफ़ नोड्स के बीच किनारों को बेतरतीब ढंग से उत्पन्न करने के लिए एक अच्छी विधि क्या है?


10

मैं 4X स्पेस गेम के लिए एक यादृच्छिक मैप जनरेटर कर रहा हूं।

खेल में प्रत्येक नोड 2d ग्रिड पर एक यादृच्छिक (x, y) समन्वय पर होता है। एक नोड में दूसरे नोड के लिए एक या एक से अधिक द्वि-दिशात्मक किनारे हो सकते हैं (वर्महोल का प्रतिनिधित्व करते हैं)। सभी नोड्स में कम से कम एक वर्महोल होना चाहिए, और सभी नोड्स एक ही ग्राफ से संबंधित होने चाहिए।

आदर्श रूप से, एक वर्महोल अधिकतम लंबाई से अधिक नहीं होना चाहिए और यदि संभव हो, तो वर्महोल एक दूसरे को पार नहीं करना चाहिए।

मेरा अनुभवहीन कार्यान्वयन सभी नोड्स के माध्यम से पुनरावृत्ति करना है और नोड लिंक को निकटतम 3 नोड्स तक पहुंचाना है। हालांकि, मैं कई उप रेखांकन के साथ समाप्त होता हूं। नोड्स के लिए किनारों को उत्पन्न करने के लिए एक अच्छी विधि क्या है?


कैसे आकाशगंगा में बिखरे हुए हैं नोड्स? मेरा मतलब है कि मैं मान सकता हूं कि आकाशगंगा में हर बिंदु (X, Y) के लिए एक नोड है? या कम से कम उनमें से अधिकांश के लिए या नहीं?
अली

सभी निर्देशांक में एक नोड नहीं होगा। लगभग 40% मैं कहूंगा।
एक्सट्रैकन

जवाबों:


9

यहां एक समान प्रश्न का एक अच्छा जवाब है।

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


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


+1 चूंकि यह एक बहुत अच्छा उत्तर है, लेकिन मुझे इस तरह की पीढ़ी पसंद नहीं है इसलिए मैं अगले कुछ दिनों में एक बेहतर एल्गोरिदम के बारे में सोचूंगा!
181 बजे अली

हाँ, इसका कोई 'सही' जवाब नहीं है, मुझे यह देखने में दिलचस्पी है कि दूसरे क्या करते हैं।
फिलिप

ऑफटॉपिक, लेकिन मैं अपने उत्तर से भी जुड़ने जा रहा था! : p
r2d2rigo

इस तरह मुझे इसके लिए अंक मिलते हैं, हा!
फिलिप

7

आपकी समस्या के मुख्य कारण दो गुना हैं: 1-जुड़ा हुआ ग्राफ बनाना; और समीपस्थ कनेक्शन के साथ इसे बना रहा है। फिलिप का उत्तर, जबकि कुछ मूल्यवान है, आपकी समस्या के सभी बाधाओं को संबोधित नहीं करता है

आदर्श रूप से, एक वर्महोल अधिकतम लंबाई से अधिक नहीं होना चाहिए और यदि संभव हो, तो वर्महोल एक दूसरे को पार नहीं करना चाहिए।

जब आप किसी क्लाउड में पॉइंट को कनेक्ट करते हैं, तो आप इन शर्तों के जोखिम (और उस पर एक उच्च) को पूरा नहीं करते हैं।

तो आप देखते हैं, समस्या कनेक्टिविटी का इतना अधिक नहीं है जितना कि उन कनेक्शनों में निकटता। यह एक ग्राफ में हर नोड को हर दूसरे नोड से जोड़ने के लिए तुच्छ है, लेकिन केवल उन लोगों से कनेक्ट करना जो समग्र ग्राफ़ के 1-कनेक्टिविटी को बनाए रखते हुए निकटतम हैं, थोड़ा और मुश्किल है।

यह एक Delaunay त्रिभुज बनाता है, n आयामों में। Delaunay triangulation का उपयोग करने का पहला कारण यह है कि यह इन दोनों को पूरा करता है। दूसरा कारण यह है कि इस तरह के ग्राफ (जो आप नहीं चाहते हैं और कोने को घटाना) से पीछे की ओर काम करना बहुत आसान है, अन्य तरीकों से इसे बनाने की कोशिश करना।

  1. बेतरतीब ढंग से अपना पूरा पॉइंट क्लाउड बनाएं।
  2. Delaunay-triangulate it।
  3. ग्राफ (बिंदुओं का कनेक्शन) का निर्माण करें। इसमें, आप या तो पूरे ग्राफ़ (हर स्टार) को पहले उत्पन्न कर सकते हैं, और फिर अपने वर्महोल-कनेक्टेड क्षेत्रों का प्रतिनिधित्व करने वाले नाबालिगों के रूप में ग्राफ प्राप्त कर सकते हैं, जब चरण 4 प्रदर्शन करते हैं। वैकल्पिक रूप से आप केवल वर्महोल-कनेक्टेड क्षेत्रों का निर्माण करते हुए, दूसरे तरीके से काम कर सकते हैं। पहले सुपरग्राफ नोड्स के रूप में, और फिर एक दूसरे चरण में, उन क्षेत्रों के बाउंडिंग वॉल्यूम के भीतर अलग-अलग सितारों को उत्पन्न करें (इन के लिए मैं डेलगुन ट्राइंगुलेशन के ग्राफ दोहरे - वोरोनोई आरेख 3 आयामों में प्राप्त करूँगा)। अब आपके पास अनुमानित रूप से जुड़े स्टार क्लस्टर हैं, और सभी क्लस्टर दुर्लभ वर्महोल से जुड़े हुए हैं: आपकी टोपोलॉजी और स्थलाकृति खिलाड़ी के लिए समझ में आती है।
  4. सुपर-और सबग्राफ को आकार देने के लिए बुद्धिमान तरीके लागू करें, इस पर निर्भर करता है कि आपने इसे चरण 3 में इलाज के लिए कैसे चुना है।

यह देखना महत्वपूर्ण है कि यह एक पदानुक्रमित प्रक्रिया है। वर्महोल कनेक्टिविटी के साथ पहला स्तर संबंधित है; एक मानक जहाज ड्राइव का उपयोग करके दूरी के साथ दूसरा सौदा संभव है। आप अपनी बाधाओं को पूरा करने के लिए एक या दोनों स्तरों पर डेलौनाय लागू कर सकते हैं।

विशुद्ध रूप से ऐसा करने से आप वर्महोल के साथ छोड़ देंगे, जिसका कोई मतलब नहीं है, क्योंकि वे आकाशगंगा में तारों के एक उच्च घनत्व के बावजूद (और शायद यहां तक ​​कि वर्महोल के सीधे मार्ग पर गिरते हुए) आकाशगंगा के एक किनारे को दूसरे से जोड़ सकते हैं। टोपोलॉजी टोपोग्राफी नहीं है; उत्तरार्द्ध पूर्व के ऊपर और ऊपर एक विचार है। आप निकटता और इस प्रकार स्थलाकृति से चिंतित हैं।


Delaunay त्रिकोण एक अच्छा विचार है, लेकिन यह यादृच्छिक किनारों का निर्माण नहीं करता है। आप Delaunay त्रिकोण द्वारा बनाई गई किनारों से बेतरतीब ढंग से किनारों को हटा सकते हैं, लेकिन फिर आपको अलग से ग्राफ़ बनाने का जोखिम होगा ...
bummzack

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

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