मैं खेल की शुरुआत में एक प्रक्रियात्मक रूप से उत्पन्न दुनिया के साथ एक खेल बना रहा हूं, जिसमें ग्रिड द्वारा दर्शाए गए कई क्षेत्रों से मिलकर बनता है (जैसे, 8x8, 9x6, आकार आदर्श रूप से मनमाना होगा)। इन क्षेत्रों को एक निर्भरता सूची के माध्यम से एक दूसरे से जोड़ा जाना चाहिए।
एक कनेक्शन मौजूद है जब उन दो क्षेत्रों के बीच उस ग्रिड के कम से कम 3 स्थान उजागर होते हैं। उस 3 अंतरिक्ष कनेक्शन क्षेत्र के मध्य सेल में क्षेत्रों के बीच का द्वार है:
मैं उन्हें जोड़ने का एक तरीका निकालने की कोशिश कर रहा हूं, लेकिन यह उतना ही जटिल होता जा रहा है, जितने अधिक क्षेत्रों में आपको एक ही समय में विचार करने की आवश्यकता है।
मैंने कुछ कागजी प्रोटोटाइपिंग की कोशिश की है और जबकि यह एक बहुत ही सरल प्रक्रिया है जब इसे नेत्रहीन करते हुए, मुझे गणितीय अभिव्यक्तियों का एक अच्छा सेट नहीं मिला है जो मुझे कोड द्वारा समान दक्षता के साथ कमरे लगाने की अनुमति देता है।
यहाँ एक "सरल" उदाहरण है जो मैं अभी संघर्ष कर रहा हूँ:
- क्षेत्र 'ए' को 'बी' और 'सी' से जोड़ने की जरूरत है
- क्षेत्र 'बी' को 'ए' और 'डी' से जोड़ने की जरूरत है
- क्षेत्र 'c' को 'a' और 'd' से जोड़ने की आवश्यकता है
- क्षेत्र 'd' को 'b' और 'c' से जोड़ना होगा
विचार करें, सादगी के लिए, हम सूची में उनकी उपस्थिति के क्रम से कमरे रख रहे हैं (मैंने दूसरों की कोशिश की है)। तो मैं इसे आपके मानक प्रक्रियात्मक कालकोठरी पीढ़ी एल्गोरिथ्म के रूप में देख रहा हूं।
हम 'a' को बोर्ड पर कहीं भी रखते हैं, क्योंकि यह पहला क्षेत्र है। अगला, हम एक दीवार को यादृच्छिक रूप से चुनते हैं और, चूंकि कुछ भी उस दीवार से जुड़ा नहीं है, हम वहां 'बी' रख सकते हैं:
अब हमें 'सी' लगाने की आवश्यकता है, लेकिन 'ए' पहले से ही बोर्ड पर है, और एक अधिकृत दीवार है, इसलिए हम इसे दूसरी दीवार पर लगाने का फैसला करते हैं। लेकिन हर प्लेसमेंट ऐसा नहीं करेगा, क्योंकि 'd' सामने आ रहा है और इसे 'b' और 'c' से कनेक्ट करना होगा:
मैंने एक संभावित सीमा की कोशिश की कि 2 कमरे जिसमें निर्भरता का एक ही सेट है विपरीत दीवारों पर नहीं हो सकता है, लेकिन यहां तक कि सफलता की गारंटी नहीं है:
और अन्य मामलों में, जहां क्षेत्रों के अलग-अलग आकार हैं, विपरीत दीवारों पर होना काम कर सकता है:
इसके अलावा, उपयोग की गई दीवार पर विचार न करना एक त्रुटिपूर्ण धारणा है क्योंकि यह वैध समाधानों को नियंत्रित करती है:
मैंने अन्य प्रक्रियात्मक पीढ़ी के एल्गोरिदम या इसी तरह के ऑप्टिमल रेक्टेंगल पैकिंग और ग्राफ़ लेआउट एल्गोरिदम पर शोध करने की कोशिश की है, लेकिन आमतौर पर वे एल्गोरिदम इस समस्या के हर बाधा को ध्यान में नहीं रखते हैं और एक साथ मिश्रण करना मुश्किल है।
मैंने दृष्टिकोणों के एक समूह के बारे में सोचा, जिसमें एक क्षेत्र और बैकट्रैक शामिल है, जब तक कि एक उपयुक्त प्लेसमेंट नहीं मिला है, लेकिन वे परीक्षण और त्रुटि पर निर्भर हैं और गणना के मामले में महंगे हैं। लेकिन, मेरे द्वारा बताई गई अंतिम दो समस्याओं पर व्यापक शोध को देखते हुए, यह एकमात्र / सर्वोत्तम समाधान हो सकता है?
मैं सिर्फ यह देखना चाहता था कि क्या किसी को अतीत में इसी तरह की समस्या हुई है या वह मुझे यह पता लगाने में मदद करने के लिए तैयार है और मुझे कुछ संकेत दे सकता है जहां मुझे एल्गोरिथ्म के साथ शुरू करना चाहिए। या, यह असफल होने पर, मुझे उन बाधाओं को देखना पड़ेगा जो मैंने निर्धारित किए हैं।