शाखा और बाउंड स्पष्टीकरण


9

मेरे पास शाखा और बाध्य एल्गोरिथ्म के बारे में एक परीक्षण है। मैं सैद्धांतिक रूप से समझता हूं कि यह एल्गोरिदम कैसे काम करता है लेकिन मुझे ऐसे उदाहरण नहीं मिले जो यह बताता हो कि इस एल्गोरिदम को व्यावहारिक रूप से कैसे लागू किया जा सकता है।

मुझे इस तरह के कुछ उदाहरण मिले, लेकिन मैं अभी भी इसके बारे में उलझन में हूं। मैंने सेल्समैन की समस्या को भी देखा और मैं इसे समझ नहीं पाया।

मुझे कुछ समस्याओं की आवश्यकता है और शाखा और बाध्य का उपयोग करके इन समस्याओं को कैसे हल किया जा सकता है।


1
क्या समझना मुश्किल था? क्या आपने पहले पीछे जाने की कोशिश की थी ?

हाँ, मैंने यह कोशिश की। B & B के साथ समस्या यह है कि अगर मुझे B & B से कोई समस्या हल हो जाए, तो मुझे नहीं पता कि मैं प्रत्येक नोड के लिए निम्न बाउंड कैसे प्राप्त कर सकता हूं और यह भी कि मैं ऑब्जेक्टिव फंक्शन कैसे प्राप्त कर सकता हूं। इसके अलावा, बेस्टसेफ़र का पहला मूल्य क्या है जिसकी मैं प्रत्येक निचली सीमा से तुलना करता हूं?
MR.NASS

2
@ MR.NASS मुझे यकीन नहीं है कि आप वास्तव में अपनी अंतिम टिप्पणी में क्या कह रहे हैं। मुझे समझाने का प्रयास करने दें। B & B सर्च-ट्री को प्रून करने की एक विधि है। इसे उन समस्याओं पर लागू किया जा सकता है जिन्हें एक उद्देश्य फ़ंक्शन का अनुकूलन करना है। यह आमतौर पर असतत या दहनशील अनुकूलन समस्याओं के लिए लागू किया जाता है। प्रत्येक चरण में आप शेष सभी संभावित समाधानों के लिए उद्देश्य फ़ंक्शन के निचले हिस्से को खोजने का प्रयास करते हैं। यदि निचला बाउंड वर्तमान सर्वश्रेष्ठ समाधान से अधिक है, तो आप खोज और बैकट्रैक (खोज ट्री को छांटना) को रोक सकते हैं, क्योंकि कम स्कोर के साथ कोई समाधान नहीं हो सकता है।
जॉर्ज

2
आमतौर पर एक समस्या का एक आराम से संस्करण एक कम बाध्य पाने के लिए हल करता है। मिक्स्ड इंटेगर प्रोग्राम्स के लिए, यह आमतौर पर रैखिक प्रोग्रामिंग विश्राम है।
ऑप्ट

2
@ MR.NASS यह उद्देश्य फ़ंक्शन पर निर्भर करता है। जैसा कि सिड ने कहा कि आप आमतौर पर दी गई समस्या का एक आराम से संस्करण हल करते हैं। आमतौर पर एक आराम से संस्करण का उपयोग करना चाहता है जो प्रारंभिक समस्या का एक अच्छा अनुमान देता है और कुशलता से हल किया जा सकता है। ध्यान दें कि रिलैक्सेड वर्जन को कम बाउंड देना होता है जो सही तरीके से काम करने के लिए कम बाउंड बाउंड के रूप में सबसे अधिक होता है। एक और उदाहरण: मान लीजिए कि आप MAXSAT को B & B विधि से हल करना चाहते हैं। दिए गए आंशिक सत्य असाइनमेंट के लिए आप आसानी से संतुष्ट क्लॉस की संख्या की गणना कर सकते हैं। एक ऊपरी बाध्य (चूंकि यह एक अधिकतम समस्या है) ...
जॉर्ज

जवाबों:


10

आइए शाखा और बाउंड टू नॅप्सैक लागू करें , उम्मीद है कि यह आपके लिए अवधारणा को स्पष्ट कर देगा।

हमारे पास है n आइटम, लेबल 1 के माध्यम से nvi का मान है iवें आइटम, और wiउसका वजन। हम उन्हें एक ऐसे अंतराल में फिट करने की कोशिश करते हैं जिसमें शामिल हो सकते हैंT कुल में वजन, और हम उस आइटम के मूल्यों को अधिकतम करने की कोशिश करते हैं जो हमने थप्पड़ में डाल दिया था।

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

यह बैकट्रैकिंग ब्रांच और बाउंड का 'ब्रांच' हिस्सा है। आप (नैकपैक के मामले में) दो मामलों पर शाखा करते हैं: 'आइटममैं समाधान का हिस्सा है 'और' आइटम मैंसमाधान का हिस्सा नहीं है '। आप इसे एक द्विआधारी वृक्ष के रूप में देख सकते हैं, जहां बायां बच्चा एक मामला है और दायां बच्चा दूसरा मामला है। यह वृक्ष खोज वृक्ष (या खोज स्थान ) है: इसकी गहराई हैn, और इसलिए यह है हे(2n)नोड्स। इसलिए एल्गोरिथ्म में आइटमों की संख्या में चल रहा समय घातांक है।

अब हम 'बाउंड' भाग में आते हैं: हम मानदंड खोजने की कोशिश करते हैं, जैसे कि हम कह सकते हैं कि 'यह कॉन्फ़िगरेशन कभी भी काम नहीं करता है, इसलिए हम इसे कंप्यूटिंग के लिए परेशान नहीं कर सकते'। इस तरह की कसौटी का एक उदाहरण है 'उन वस्तुओं का वजन जो हमने पहले ही नैकपैक में डाल दिया हैटी': अगर हमने जोड़ा है, तो पहले कहो n/2 नैकपैक के लिए आइटम और इसलिए यह पहले से ही भरा हुआ है, आइटम डालने की कोशिश करने का कोई मतलब नहीं है n/2+1 के माध्यम से n के रूप में अच्छी तरह से में, लेकिन वहाँ भी कोई सबसेट फिट करने की कोशिश में कोई मतलब नहीं है n/2+1 के माध्यम से n थैला में, जैसा कि यह पहले से ही भरा हुआ है, इसलिए हम इसके बारे में बचाते हैं 2n/2मामलों। एक अन्य उदाहरण है ' यहां तक ​​कि अगर मैं सभी शेष मदों में डाल देता हूं, तो मैंने जिन वस्तुओं को रखा है उनका मूल्य उस सर्वोत्तम कॉन्फ़िगरेशन से अधिक नहीं होगा जो मैंने अब तक पाया है ।'

ये मानदंड अनिवार्य रूप से खोज ट्री के कुछ हिस्सों को काट देते हैं: कुछ नोड पर, आप उदाहरण के लिए कहते हैं 'बाईं सबट्री मुझे बेहतर कॉन्फ़िगरेशन नहीं देगी, क्योंकि X', इसलिए आप उस सबट्री के बारे में भूल जाते हैं और आप इसे एक्सप्लोर नहीं करते हैं। गहराई का एक उपप्रकार आप इस तरह से काटते हैं कि आपको बचाता है हे(2) यदि आप भाग्यशाली हैं, तो नोड्स, जो गति में काफी वृद्धि कर सकते हैं।

ध्यान दें कि इसे ' बाउंडिंग ' कहा जाता है क्योंकि इसमें आमतौर पर किसी प्रकार की निचली या ऊपरी सीमा शामिल होती है: 'कसौटी के लिए' यहां तक ​​कि अगर मैं सभी शेष मदों में डाल देता हूं, तो मैंने जिन वस्तुओं को रखा है उनका मूल्य सर्वश्रेष्ठ कॉन्फ़िगरेशन से अधिक नहीं होगा मैंने अब तक पाया है ', आपके अब तक के सबसे अच्छे कॉन्फ़िगरेशन का मूल्य सबसे अच्छे कॉन्फ़िगरेशन पर एक कम बाध्य है, इसलिए ऐसा कुछ भी जो इसे कभी नहीं बनाएगा, यह निम्न सीमा विफल होने के लिए बर्बाद है।

आप can बाउंडिंग ’भाग को जितना चाहें उतना जटिल बना सकते हैं। उदाहरण के लिए, पूर्णांक प्रोग्रामिंग समस्याओं को अक्सर आराम का उपयोग करके हल किया जाता है: आप अपने कार्यक्रम को एक रैखिक कार्यक्रम में आराम देते हैं, जिसे आप बहुपद में हल कर सकते हैं, और फिर आप अपने बाइनरी चर के लिए बहुत सारे मामले फेंक सकते हैं जो कभी भी बाहर काम नहीं करेंगे। आप फिर शेष विकल्पों पर शाखा।

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


4

शेड्यूलिंग , मशीनों के लिए कुछ अवधि और समय सीमा के साथ काम सौंपने के कार्य पर विचार करें । हम असतत समय मानते हैं। ऐसी कई समस्याएं हैं एनपी (ओ) -हार्ड।

विशेष रूप से, इस उत्तर के बारे में बात करेंगे 1|आरमैं|एलअधिकतम, कि हम अनुसूची है

  • एक मशीन पर
  • रिलीज की तारीख और हम साथ समस्याएं
  • अधिकतम विलंबता कम करें , जो कि सभी नौकरियों पर समय सीमा और पूरा होने के बीच का अधिकतम अंतर है।एलअधिकतम

इस समस्या का निर्णय संस्करण एनपी-हार्ड है; इसे 3PARTITION से घटाकर देखा जा सकता है ।

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

अब, इस समस्या को शाखा और बाध्य करने के लिए हमें कुछ मापदंडों को ठीक करने की आवश्यकता है:

  • हम पूर्व संध्या की अनुमति देकर और EDD का उपयोग करके कम सीमा की गणना करते हैं।
  • हम अगले एक के रूप में हर अनिर्धारित नौकरियों को ठीक करके शाखा देते हैं।
  • हम पहले छोटे बाउंड्स वाले बच्चे के पास जाते हैं।

आपको B & B के प्रत्येक एप्लिकेशन के लिए यह करना होगा।


एक ठोस उदाहरण के लिए, इस उदाहरण पर विचार करें :1|आरमैं|एलअधिकतम

मैं1234पीमैं4265आरमैं0135मैं8121 110

साथ नौकरियों 'संसाधन समय, रिलीज की तारीख और नियत दिनांक।पीमैंआरमैंमैं

ऊपर उल्लिखित B & B के अनुसार, ऐसा होता है:

कलन विधि
यह GIF लूप नहीं करता है। शुरू से देखने के लिए इसे एक नए टैब में पुनः लोड करें
[ स्रोत ] [ स्थिर संस्करण ]

ध्यान दें कि 41 नोड्स में से, केवल चार का ठीक से दौरा किया जाता है और केवल दस के लिए कम सीमा की गणना की जाती है।

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