शाखा और बंधन: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Optimization by eliminating non optimal solutions to sub-problems}} ब्रांच और बाउंड (BB, B&B, या BnB) अनुकूलन...")
 
No edit summary
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Optimization by eliminating non optimal solutions to sub-problems}}
{{Short description|Optimization by eliminating non optimal solutions to sub-problems}}
ब्रांच और बाउंड (BB, B&B, या BnB) अनुकूलन समस्याओं को छोटी उप-समस्याओं में तोड़कर और उप-समस्याओं को खत्म करने के लिए एक बाउंडिंग फ़ंक्शन का उपयोग करके हल करने की एक विधि है जिसमें इष्टतम समाधान नहीं हो सकता है। यह [[असतत अनुकूलन]] और संयोजी अनुकूलन समस्याओं के साथ-साथ [[गणितीय अनुकूलन]] के लिए एक [[ कलन विधि ]] [[एल्गोरिथम प्रतिमान]] है। एक शाखा-और-बाध्य एल्गोरिथ्म में [[राज्य अंतरिक्ष खोज]] के माध्यम से उम्मीदवार समाधानों की एक व्यवस्थित गणना होती है: उम्मीदवार समाधानों के सेट को रूट पर पूर्ण सेट के साथ ट्री (ग्राफ़ सिद्धांत) बनाने के रूप में माना जाता है। एल्गोरिद्म इस पेड़ की ''शाखाओं'' की पड़ताल करता है, जो समाधान सेट के सबसेट का प्रतिनिधित्व करती है। एक शाखा के उम्मीदवार समाधानों की गणना करने से पहले, शाखा को इष्टतम समाधान पर ऊपरी और निचले अनुमानित ''सीमा'' के खिलाफ जांचा जाता है, और अगर यह एल्गोरिथम द्वारा अब तक मिले सबसे अच्छे समाधान से बेहतर समाधान नहीं दे पाता है तो उसे छोड़ दिया जाता है।
'''शाखा और बंधन''' (BB, B&B, या BnB) अनुकूलन समस्याओं को छोटी उप-समस्याओं में तोड़कर और उप-समस्याओं को पूर्ण रूप से खत्म करने के लिए बाउंडिंग फ़ंक्शन का उपयोग करके हल करने की उपयुक्त विधि है जिसमें इष्टतम समाधान नहीं हो सकते हैं। यह इस प्रकार [[असतत अनुकूलन]] और संयोजी अनुकूलन समस्याओं के साथ-साथ [[गणितीय अनुकूलन]] के लिए [[ कलन विधि ]] [[एल्गोरिथम प्रतिमान]] का उपयोग करती हैं। इस प्रकार शाखा और बंधन एल्गोरिथ्म में [[राज्य अंतरिक्ष खोज|स्थितियों के आधार पर अंतरिक्ष खोज]] के माध्यम से किसी उपयोगकर्ता के समाधानों की व्यवस्थित गणना करने में सहायक होता है: उपयोगकर्ता समाधानों के सेट को रूट पर पूर्ण सेट के साथ ट्री (ग्राफ़ सिद्धांत) बनाने के रूप में माना जाता है। इस प्रकार इस एल्गोरिद्म को किसी ट्री की ''शाखाओं'' की जाँच करने के लिए सहायता करता है, जो इस प्रकार समाधान सेट के सबसेट का प्रतिनिधित्व करती है। इन शाखाओं के उपयोगकर्ता समाधानों की गणना करने से पहले किसी शाखा को इष्टतम समाधान पर ऊपरी और निचले अनुमानित ''सीमा'' के विरुद्ध जाँच करते हैं, और यदि यह एल्गोरिथम द्वारा अब तक मिले सबसे अच्छे समाधान से उत्तम समाधान नहीं दे पाता है तो उसे छोड़ दिया जाता है।


एल्गोरिथ्म खोज स्थान के क्षेत्रों/शाखाओं की निचली और ऊपरी सीमा के कुशल आकलन पर निर्भर करता है। यदि कोई सीमा उपलब्ध नहीं है, तो एल्गोरिथम एक संपूर्ण खोज के लिए पतित हो जाता है।
एल्गोरिथ्म खोज स्थान के क्षेत्रों/शाखाओं की निचली और ऊपरी सीमा के कुशल आकलन पर निर्भर करता है। यदि कोई सीमा उपलब्ध नहीं है, तो एल्गोरिथम संपूर्ण खोज के लिए पतित हो जाता है।


1960 में असतत अनुकूलन के लिए [[BP]] द्वारा प्रायोजित [[लंदन स्कूल ऑफ इकोनॉमिक्स]] में शोध करते समय पहली बार [[Ailsa Land]] और [[Alison Harcourt]] द्वारा विधि प्रस्तावित की गई थी।<ref name=land_doig>{{cite news |author = A. H. Land and A. G. Doig | year = 1960 | title = असतत प्रोग्रामिंग समस्याओं के हल के लिए एक स्वचालित विधि| journal = Econometrica | volume = 28 | issue = 3 | pages = 497–520 | doi=10.2307/1910129}}</ref><ref>{{Cite web|url=http://www.lse.ac.uk/newsletters/pressAndInformation/staffNews/2010/20100218.htm|title=स्टाफ न्यूज|website=www.lse.ac.uk|access-date=2018-10-08|archive-date=2021-02-24|archive-url=https://web.archive.org/web/20210224173541/https://www.lse.ac.uk/newsletters/pressAndInformation/staffNews/2010/20100218.htm|url-status=dead}}</ref> और [[ एनपी कठिन ]] अनुकूलन समस्याओं को हल करने के लिए सबसे अधिक इस्तेमाल किया जाने वाला उपकरण बन गया है।<ref name="clausen99"/>ब्रांच और बाउंड नाम सबसे पहले लिटिल एट अल के काम में आया। यात्रा विक्रेता समस्या पर।<ref name="little"/><ref>{{cite report |last1=Balas |first1=Egon |first2=Paolo |last2=Toth |year=1983 |title=ट्रैवलिंग सेल्समैन समस्या के लिए ब्रांच और बाउंड तरीके|issue=Management Science Research Report MSRR-488 |publisher=[[Carnegie Mellon University]] Graduate School of Industrial Administration |url=http://apps.dtic.mil/dtic/tr/fulltext/u2/a126957.pdf |url-status=live |archive-url=https://web.archive.org/web/20121020235044/http://www.dtic.mil/dtic/tr/fulltext/u2/a126957.pdf |archive-date=October 20, 2012}}</ref>
1960 में असतत अनुकूलन के लिए [[BP]] द्वारा प्रायोजित [[लंदन स्कूल ऑफ इकोनॉमिक्स]] में शोध करते समय पहली बार [[Ailsa Land|ऐल्सा प्रांत]] और [[Alison Harcourt|एलीसन हारर्कोट]] द्वारा विधि प्रस्तावित की गई थी।<ref name=land_doig>{{cite news |author = A. H. Land and A. G. Doig | year = 1960 | title = असतत प्रोग्रामिंग समस्याओं के हल के लिए एक स्वचालित विधि| journal = Econometrica | volume = 28 | issue = 3 | pages = 497–520 | doi=10.2307/1910129}}</ref><ref>{{Cite web|url=http://www.lse.ac.uk/newsletters/pressAndInformation/staffNews/2010/20100218.htm|title=स्टाफ न्यूज|website=www.lse.ac.uk|access-date=2018-10-08|archive-date=2021-02-24|archive-url=https://web.archive.org/web/20210224173541/https://www.lse.ac.uk/newsletters/pressAndInformation/staffNews/2010/20100218.htm|url-status=dead}}</ref> इस प्रकार इस कारण [[ एनपी कठिन ]]अनुकूलन समस्याओं को हल करने के लिए सबसे अधिक उपयोग किया जाने वाला उपकरण बन गया है।<ref name="clausen99"/> इस प्रकार इस शाखा और बंधन के नाम में सबसे पहले लिटिल एट अल के कार्य में आया हैं। जिसकी यात्रा विक्रेता की समस्याओं पर निर्भर होती हैं।<ref name="little"/><ref>{{cite report |last1=Balas |first1=Egon |first2=Paolo |last2=Toth |year=1983 |title=ट्रैवलिंग सेल्समैन समस्या के लिए ब्रांच और बाउंड तरीके|issue=Management Science Research Report MSRR-488 |publisher=[[Carnegie Mellon University]] Graduate School of Industrial Administration |url=http://apps.dtic.mil/dtic/tr/fulltext/u2/a126957.pdf |url-status=live |archive-url=https://web.archive.org/web/20121020235044/http://www.dtic.mil/dtic/tr/fulltext/u2/a126957.pdf |archive-date=October 20, 2012}}</ref>
== अवलोकन ==
ब्रांचिंग और बाउंडिंग एल्गोरिथम का लक्ष्य {{mvar|x}}  मान को खोजना है, जो वास्तविक मूल्यवान फ़ंक्शन {{math|''f''(''x'')}} के मान को अधिकतम या कम करता है, कुछ सेट के बीच {{mvar|S}} स्वीकार्य, या [[उम्मीदवार समाधान|उपयोगकर्ता समाधान]] को ऑब्जेक्टिव फ़ंक्शन कहा जाता है। इस प्रकार सेट {{mvar|S}} को खोजे गए स्थान या व्यवहार्य क्षेत्र कहा जाता है। इस प्रकार इस खंड के बचे हुए भागों के रूप में माना जाता है कि कम से कम {{math|''f''(''x'')}} वांछित है, इस प्रकार यह धारणा [[व्यापकता के नुकसान के बिना|व्यापकता के हानि के बिना]] आती है, क्योंकि कोई अधिकतम मूल्य {{math|''f''(''x'')}} का न्यूनतम ज्ञात करके {{math|''g''(''x'') {{=}} −''f''(''x'')}} पा सकता है, इस प्रकार बी एंड बी एल्गोरिदम दो सिद्धांतों के अनुसार कार्य करता है:


* यह पुनरावर्ती रूप से खोज स्थान को छोटे स्थानों में विभाजित करता है, फिर {{math|''f''(''x'')}} इन छोटे स्थानों पर छोटा करता है, इस प्रकार इसके विभाजन को ब्रांचिंग कहा जाता है।
* अकेले ब्रांचिंग [[ क्रूर-बल खोज ]] या ब्रूट-फोर्स एन्यूमरेशन ऑफ़ कैंडिडेट सॉल्यूशंस और उन सभी का परीक्षण करने की राशि के रूप में उपयोग होती हैं। इस प्रकार ब्रूट-फोर्स सर्च के प्रदर्शन में सुधार करने के लिए, B&B एल्गोरिद्म कम से कम सीमा का ट्रैक रखता है जिसे वह खोजने का प्रयास करता है, और इस प्रकार इन सीमाओं का उपयोग खोज स्थान का निर्णय ट्री के रूप में प्रदर्शित करने के लिए करता है, इस प्रकार उपयोगकर्ता समाधानों को समाप्त करता है जो यह साबित कर सकता है इष्टतम समाधान सम्मिलित नहीं रहता है।


== सिंहावलोकन ==
विशिष्ट अनुकूलन समस्या के लिए इन सिद्धांतों को ठोस एल्गोरिदम में परिवर्तित करने के लिए कुछ प्रकार की [[डेटा संरचना]] की आवश्यकता होती है जो उपयोगकर्ता समाधान के सेट का प्रतिनिधित्व करती है। इस प्रकार के प्रतिनिधित्व को समस्या का उदाहरण कहा जाता है। इस प्रकार उदाहरण के लिए उपयोगकर्ता समाधान के सेट को {{mvar|I}} द्वारा {{mvar|S<sub>I</sub>}} निरूपित करते हैं। इसके उदाहरण के लिए प्रतिनिधित्व को तीन परिचालनों के साथ प्रदर्शित कर सकते हैं:
ब्रांच-एंड-बाउंड एल्गोरिथम का लक्ष्य एक मान खोजना है {{mvar|x}} जो वास्तविक-मूल्यवान फ़ंक्शन के मान को अधिकतम या कम करता है {{math|''f''(''x'')}}, कुछ सेट के बीच एक ऑब्जेक्टिव फ़ंक्शन कहा जाता है {{mvar|S}} स्वीकार्य, या [[उम्मीदवार समाधान]]सेट {{mvar|S}} को खोज स्थान या व्यवहार्य क्षेत्र कहा जाता है। इस खंड के बाकी हिस्सों में माना जाता है कि कम से कम {{math|''f''(''x'')}} वांछित है; यह धारणा [[व्यापकता के नुकसान के बिना]] आती है, क्योंकि कोई अधिकतम मूल्य पा सकता है {{math|''f''(''x'')}} का न्यूनतम ज्ञात करके {{math|''g''(''x'') {{=}} −''f''(''x'')}}. एक बी एंड बी एल्गोरिदम दो सिद्धांतों के अनुसार काम करता है:


* यह पुनरावर्ती रूप से खोज स्थान को छोटे स्थानों में विभाजित करता है, फिर छोटा करता है {{math|''f''(''x'')}} इन छोटे स्थानों पर; विभाजन को ब्रांचिंग कहा जाता है।
* {{math|branch(''I'')}} - दो या दो से अधिक उदाहरण उत्पन्न करता है जिनमें से प्रत्येक सबसेट {{mvar|S<sub>I</sub>}} का प्रतिनिधित्व करता है। (सामान्यतः उपसमुच्चय असम्बद्ध सेट होते हैं जो एल्गोरिदम को ही उपयोगकर्ता समाधान पर दो बार जाने से रोकते हैं, लेकिन इसकी आवश्यकता नहीं है। चूंकि इस प्रकार बीच में इष्टतम समाधान {{mvar|S<sub>I</sub>}} कम से कम सबसेट में सम्मिलित होना चाहिए।<ref name="bader">{{cite encyclopedia |first1=David A. |last1=Bader |first2=William E. |last2=Hart |first3=Cynthia A. |last3=Phillips |author3-link=Cynthia A. Phillips |title=शाखा और बाउंड के लिए समानांतर एल्गोरिथम डिज़ाइन|editor-first=H. J. |editor-last=Greenberg |encyclopedia=Tutorials on Emerging Methodologies and Applications in Operations Research |publisher=Kluwer Academic Press |year=2004 |url=http://www.cc.gatech.edu/~bader/papers/ParallelBranchBound.pdf |access-date=2015-09-16 |archive-url=https://web.archive.org/web/20170813145917/http://www.cc.gatech.edu/~bader/papers/ParallelBranchBound.pdf |archive-date=2017-08-13 |url-status=dead }}</ref>)
* अकेले ब्रांचिंग [[ क्रूर-बल खोज ]] | ब्रूट-फोर्स एन्यूमरेशन ऑफ़ कैंडिडेट सॉल्यूशंस और उन सभी का परीक्षण करने की राशि होगी। ब्रूट-फोर्स सर्च के प्रदर्शन में सुधार करने के लिए, B&B एल्गोरिद्म कम से कम सीमा का ट्रैक रखता है जिसे वह खोजने की कोशिश कर रहा है, और इन सीमाओं का उपयोग खोज स्थान की छंटाई (निर्णय ट्री) करने के लिए करता है, उम्मीदवार समाधानों को समाप्त करता है जो यह साबित कर सकता है एक इष्टतम समाधान शामिल नहीं है।
* {{math|bound(''I'')}} द्वारा दर्शाए गए स्थान में किसी भी उपयोगकर्ता समाधान के मूल्य पर निचली सीमा {{mvar|I}} की गणना करता है, इस प्रकार इसका मान {{math|bound(''I'') ≤ ''f''(''x'')}} सभी के लिए {{mvar|x}} में {{mvar|S<sub>I</sub>}}. के समान हैं।
* {{math|solution(''I'')}} निर्धारित करता है कि क्या {{mvar|I}} एकल उपयोगकर्ता समाधान का प्रतिनिधित्व करता है। (इस प्रकार वैकल्पिक रूप से, यदि ऐसा नहीं होता है, तो  {{mvar|S<sub>I</sub>}} ऑपरेशन बीच में से कुछ व्यवहार्य समाधान वापस करने का विकल्प चुन सकता है.{{r|bader}}) यदि {{math|solution(''I'')}} तब फंक्शन {{math|''f''(solution(''I''))}} लौटाता है, इस प्रकार इसके व्यवहार्य समाधानों के पूरे स्थान पर इष्टतम उद्देश्य मान के लिए ऊपरी सीमा प्रदान करता है।


विशिष्ट अनुकूलन समस्या के लिए इन सिद्धांतों को एक ठोस एल्गोरिदम में बदलने के लिए कुछ प्रकार की [[डेटा संरचना]] की आवश्यकता होती है जो उम्मीदवार समाधान के सेट का प्रतिनिधित्व करती है। इस तरह के प्रतिनिधित्व को समस्या का उदाहरण कहा जाता है। एक उदाहरण के उम्मीदवार समाधान के सेट को निरूपित करें {{mvar|I}} द्वारा {{mvar|S<sub>I</sub>}}. उदाहरण के प्रतिनिधित्व को तीन परिचालनों के साथ आना है:
इन परिचालनों का उपयोग करते हुए, बी एंड बी एल्गोरिदम शाखा संचालन द्वारा गठित उदाहरणों के [[खोज पेड़|ट्री सर्चिंग]] के माध्यम से शीर्ष-नीचे पुनरावर्ती खोज करता है। उदाहरण पर जाने पर {{mvar|I}}, यह जांचता है कि क्या {{math|bound(''I'')}} वर्तमान ऊपरी सीमा के बराबर या उससे अधिक है; यदि ऐसा है तो, {{mvar|I}} को खोज से सुरक्षित रूप से हटाया जा सकता है और इस प्रकार पुनरावर्तन बंद हो जाता है। इस प्रकार यह सार्टिंग सामान्यतः वैश्विक वैरियेबल को बनाए रखने के द्वारा कार्यान्वित किया जाता है जो कि अब तक की जांच की गई सभी उदाहरणों में देखी गई न्यूनतम ऊपरी सीमा को रिकॉर्ड करता है।
 
* {{math|branch(''I'')}} दो या दो से अधिक उदाहरण उत्पन्न करता है जिनमें से प्रत्येक एक सबसेट का प्रतिनिधित्व करता है {{mvar|S<sub>I</sub>}}. (आमतौर पर, उपसमुच्चय असम्बद्ध सेट होते हैं जो एल्गोरिदम को एक ही उम्मीदवार समाधान पर दो बार जाने से रोकते हैं, लेकिन इसकी आवश्यकता नहीं है। हालांकि, बीच में एक इष्टतम समाधान {{mvar|S<sub>I</sub>}} कम से कम एक सबसेट में शामिल होना चाहिए।<ref name="bader">{{cite encyclopedia |first1=David A. |last1=Bader |first2=William E. |last2=Hart |first3=Cynthia A. |last3=Phillips |author3-link=Cynthia A. Phillips |title=शाखा और बाउंड के लिए समानांतर एल्गोरिथम डिज़ाइन|editor-first=H. J. |editor-last=Greenberg |encyclopedia=Tutorials on Emerging Methodologies and Applications in Operations Research |publisher=Kluwer Academic Press |year=2004 |url=http://www.cc.gatech.edu/~bader/papers/ParallelBranchBound.pdf |access-date=2015-09-16 |archive-url=https://web.archive.org/web/20170813145917/http://www.cc.gatech.edu/~bader/papers/ParallelBranchBound.pdf |archive-date=2017-08-13 |url-status=dead }}</ref>)
* {{math|bound(''I'')}} द्वारा दर्शाए गए स्थान में किसी भी उम्मीदवार समाधान के मूल्य पर निचली सीमा की गणना करता है {{mvar|I}}, वह है, {{math|bound(''I'') ≤ ''f''(''x'')}} सभी के लिए {{mvar|x}} में {{mvar|S<sub>I</sub>}}.
* {{math|solution(''I'')}} निर्धारित करता है कि क्या {{mvar|I}} एकल उम्मीदवार समाधान का प्रतिनिधित्व करता है। (वैकल्पिक रूप से, यदि ऐसा नहीं होता है, तो ऑपरेशन बीच में से कुछ व्यवहार्य समाधान वापस करने का विकल्प चुन सकता है {{mvar|S<sub>I</sub>}}.{{r|bader}}) अगर {{math|solution(''I'')}} तब एक समाधान लौटाता है {{math|''f''(solution(''I''))}} व्यवहार्य समाधानों के पूरे स्थान पर इष्टतम उद्देश्य मान के लिए ऊपरी सीमा प्रदान करता है।
<!--(For example, {{mvar|S}} could be the set of all possible trip schedules for a bus fleet, and {{math|''f''(''x'')}} could be the expected revenue for schedule {{mvar|x}}.)-->
इन परिचालनों का उपयोग करते हुए, एक बी एंड बी एल्गोरिदम शाखा संचालन द्वारा गठित उदाहरणों के [[खोज पेड़]] के माध्यम से एक शीर्ष-नीचे पुनरावर्ती खोज करता है। एक उदाहरण पर जाने पर {{mvar|I}}, यह जांचता है कि क्या {{math|bound(''I'')}} वर्तमान ऊपरी सीमा के बराबर या उससे अधिक है; यदि ऐसा है तो, {{mvar|I}} को खोज से सुरक्षित रूप से हटाया जा सकता है और पुनरावर्तन बंद हो जाता है। यह छंटाई कदम आमतौर पर एक वैश्विक चर को बनाए रखने के द्वारा कार्यान्वित किया जाता है जो कि अब तक की जांच की गई सभी उदाहरणों में देखी गई न्यूनतम ऊपरी सीमा को रिकॉर्ड करता है।


=== सामान्य संस्करण ===
=== सामान्य संस्करण ===
निम्नलिखित एक सामान्य शाखा का कंकाल है और मनमाने ढंग से उद्देश्य समारोह को कम करने के लिए बाध्य एल्गोरिदम है {{mvar|f}}.<ref name="clausen99">{{cite techreport |first=Jens |last=Clausen |title=Branch and Bound Algorithms—Principles and Examples |year=1999 |publisher=[[University of Copenhagen]] |url=http://www.diku.dk/OLD/undervisning/2003e/datV-optimer/JensClausenNoter.pdf |access-date=2014-08-13 |archive-url=https://web.archive.org/web/20150923214803/http://www.diku.dk/OLD/undervisning/2003e/datV-optimer/JensClausenNoter.pdf |archive-date=2015-09-23 |url-status=dead }}</ref> इससे एक वास्तविक एल्गोरिथम प्राप्त करने के लिए, एक बाउंडिंग फ़ंक्शन की आवश्यकता होती है {{math|bound}}, जो निम्न सीमा की गणना करता है {{mvar|f}} सर्च ट्री के नोड्स पर, साथ ही एक समस्या-विशिष्ट ब्रांचिंग नियम। जैसे, यहाँ प्रस्तुत सामान्य एल्गोरिथ्म एक उच्च-क्रम का कार्य है।
निम्नलिखित सामान्य शाखा का प्रारूप है और इस विधि से इस फंक्शन को कम करने के लिए bound एल्गोरिदम {{mvar|f}} है।<ref name="clausen99">{{cite techreport |first=Jens |last=Clausen |title=Branch and Bound Algorithms—Principles and Examples |year=1999 |publisher=[[University of Copenhagen]] |url=http://www.diku.dk/OLD/undervisning/2003e/datV-optimer/JensClausenNoter.pdf |access-date=2014-08-13 |archive-url=https://web.archive.org/web/20150923214803/http://www.diku.dk/OLD/undervisning/2003e/datV-optimer/JensClausenNoter.pdf |archive-date=2015-09-23 |url-status=dead }}</ref> इससे वास्तविक एल्गोरिथम प्राप्त करने के लिए, बाउंडिंग फ़ंक्शन की आवश्यकता होती है {{math|bound}}, जो निम्न सीमा की गणना करता है {{mvar|f}} सर्च ट्री के नोड्स पर, साथ ही समस्या-विशिष्ट ब्रांचिंग नियम का उपयोग किया जाता हैं जैसे, यहाँ इस प्रकार सामान्य एल्गोरिथ्म उच्च-क्रम का कार्य प्रस्तुत करती हैं।
 
# एक [[अनुमानी]] का उपयोग करके एक समाधान खोजें {{mvar|x<sub>h</sub>}} अनुकूलन समस्या के लिए। इसका मूल्य संग्रहीत करें, {{math|''B'' {{=}} ''f''(''x<sub>h</sub>'')}}. (यदि कोई अनुमानी उपलब्ध नहीं है, तो सेट करें {{mvar|B}} अनंत की ओर।) {{mvar|B}} अब तक मिले सर्वोत्तम समाधान को दर्शाएगा, और उम्मीदवार समाधानों पर ऊपरी सीमा के रूप में उपयोग किया जाएगा।
# असाइन की गई समस्या के किसी भी चर के साथ आंशिक समाधान रखने के लिए एक कतार आरंभ करें।
# कतार खाली होने तक लूप करें:
## एक नोड लें {{mvar|N}} कतार से बाहर।
## अगर {{mvar|N}} एकल उम्मीदवार समाधान का प्रतिनिधित्व करता है {{mvar|x}} और {{math|''f''(''x'') < ''B''}}, तब {{mvar|x}} अब तक का सबसे अच्छा समाधान है। इसे रिकॉर्ड करें और सेट करें {{math|''B'' ← ''f''(''x'')}}.
## वरना, आगे बढ़ो {{mvar|N}} नए नोड बनाने के लिए {{mvar|N<sub>i</sub>}}. इनमें से प्रत्येक के लिए:
### अगर {{math|bound(''N<sub>i</sub>'') > ''B''}}, कुछ भी नहीं है; चूंकि इस नोड पर निचली सीमा समस्या की ऊपरी सीमा से अधिक है, इसलिए यह कभी भी इष्टतम समाधान की ओर नहीं ले जाएगी, और इसे त्याग दिया जा सकता है।
### वरना, स्टोर करें {{mvar|N<sub>i</sub>}} कतार में।
 
कई अलग-अलग [[कतार (सार डेटा प्रकार)]] डेटा संरचनाओं का उपयोग किया जा सकता है। यह [[फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स)]] आधारित कार्यान्वयन एक चौड़ाई-पहली खोज देता है। एक [[ढेर (डेटा संरचना)]] (एलआईएफओ कतार) [[गहराई-पहली खोज]]|गहराई-पहला एल्गोरिदम उत्पन्न करेगा। एक श्रेष्ठ-प्रथम खोज|सर्वश्रेष्ठ-प्रथम शाखा और बाउंड एल्गोरिथम एक प्राथमिकता क्यू का उपयोग करके प्राप्त किया जा सकता है जो उनके निचले बाउंड पर नोड्स को सॉर्ट करता है।<ref name="clausen99"/>इस आधार के साथ सर्वश्रेष्ठ-प्रथम खोज एल्गोरिदम के उदाहरण दिज्क्स्ट्रा के एल्गोरिदम और इसके वंशज A* खोज हैं। डेप्थ-फर्स्ट वैरिएंट की सिफारिश तब की जाती है जब एक प्रारंभिक समाधान तैयार करने के लिए कोई अच्छा अनुमानी उपलब्ध नहीं होता है, क्योंकि यह जल्दी से पूर्ण समाधान तैयार करता है, और इसलिए ऊपरी सीमा।<ref>{{cite book |last1=Mehlhorn |first1=Kurt |author-link1=Kurt Mehlhorn |first2=Peter |last2=Sanders|author2-link=Peter Sanders (computer scientist) |title=Algorithms and Data Structures: The Basic Toolbox |publisher=Springer |year=2008 |page=249 |url=http://people.mpi-inf.mpg.de/~mehlhorn/ftp/Toolbox/GenericMethods.pdf}}</ref>


# इस प्रकार [[अनुमानी]] का उपयोग करके समाधान {{mvar|x<sub>h</sub>}} की अनुकूलन समस्या को सर्च करने के लिए किया जाता हैं। इसका मूल्य संग्रहीत करें, {{math|''B'' {{=}} ''f''(''x<sub>h</sub>'')}}. (यदि कोई अनुमानी मान उपलब्ध नहीं है, तो इस प्रकार {{mvar|B}} अनंत की ओर सेट करते हैं।) इस प्रकार {{mvar|B}} अब तक मिले सर्वोत्तम समाधान को दर्शाएगा, और उपयोगकर्ता समाधानों पर ऊपरी सीमा के रूप में उपयोग किया जाएगा।
# इस प्रकार असाइन की गई समस्या के किसी भी चर के साथ आंशिक समाधान रखने के लिए क्रम आरंभ करते हैं।
# यह क्रम रिक्त होने तक लूप चलता रहता हैं:
## इस प्रकार एक नोड लें {{mvar|N}} क्रम से बाहर रखते हैं।
## यदि {{mvar|N}} एकल उपयोगकर्ता समाधान का प्रतिनिधित्व करता है {{mvar|x}} और {{math|''f''(''x'') < ''B''}}, तब {{mvar|x}} अब तक का सबसे अच्छा समाधान है। इसे रिकॉर्ड करें और सेट करें {{math|''B'' ← ''f''(''x'')}}.
## इसके अतिरिक्त आगे बढ़ने पर {{mvar|N}} नए नोड बनाने के लिए {{mvar|N<sub>i</sub>}} इनमें से प्रत्येक के लिए:
### यदि {{math|bound(''N<sub>i</sub>'') > ''B''}}, कुछ भी नहीं है, चूंकि इस प्रकार इस नोड पर निचली सीमा समस्या की ऊपरी सीमा से अधिक है, इसलिए यह कभी भी इष्टतम समाधान की ओर नहीं ले जाएगी, और इसे त्याग दिया जा सकता है।
### इसके अतिरिक्त {{mvar|N<sub>i</sub>}} क्रम में स्टोर करें।


कई अलग-अलग [[कतार (सार डेटा प्रकार)|क्रम (सार डेटा प्रकार)]] डेटा संरचनाओं का उपयोग किया जा सकता है। इस प्रकार यह [[फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स)]] आधारित कार्यान्वयन चौड़ाई-पहली खोज देता है। [[ढेर (डेटा संरचना)]] (एलआईएफओ क्रम) [[गहराई-पहली खोज]]|गहराई-पहला एल्गोरिदम उत्पन्न करेगा। इस कारण श्रेष्ठ-प्रथम खोज या सर्वश्रेष्ठ-प्रथम शाखा और इस प्रकार बाउंड एल्गोरिथम प्राथमिकता क्यू का उपयोग करके प्राप्त किया जा सकता है जो उनके निचले बाउंड पर नोड्स को सॉर्ट करता है।<ref name="clausen99"/>इस आधार के साथ सर्वश्रेष्ठ-प्रथम खोज एल्गोरिदम के उदाहरण दिज्क्स्ट्रा के एल्गोरिदम और इसके वंशज A* खोज हैं। इस प्रकार डेप्थ-फर्स्ट वैरिएंट का प्रस्ताव तब उपयोग किया जाता है जब प्रारंभिक समाधान तैयार करने के लिए कोई अच्छा अनुमानी उपलब्ध नहीं होता है, क्योंकि यह शीघ्रता से पूर्ण समाधान तैयार करता है, और इसलिए ऊपरी सीमा में इसका मान उपयोग किया जाता हैं।<ref>{{cite book |last1=Mehlhorn |first1=Kurt |author-link1=Kurt Mehlhorn |first2=Peter |last2=Sanders|author2-link=Peter Sanders (computer scientist) |title=Algorithms and Data Structures: The Basic Toolbox |publisher=Springer |year=2008 |page=249 |url=http://people.mpi-inf.mpg.de/~mehlhorn/ftp/Toolbox/GenericMethods.pdf}}</ref>
==== {{Anchor|Code}स्यूडोकोड ====
==== {{Anchor|Code}स्यूडोकोड ====
एक [[सी ++]] - उपरोक्त के स्यूडोकोड कार्यान्वयन की तरह है:
एक [[सी ++]] - उपरोक्त के स्यूडोकोड कार्यान्वयन के समान है।
<वाक्यविन्यास प्रकाश लैंग = सी ++ लाइन = 1>
// C++-like implementation of branch and bound,  
// सी ++ - शाखा और बाध्य कार्यान्वयन की तरह,
// assuming the objective function f is to be minimized
// यह मानकर कि उद्देश्य फलन f को न्यूनतम किया जाना है
CombinatorialSolution branch_and_bound_solve(
कॉम्बिनेटरियल सॉल्यूशन ब्रांच_एंड_बाउंड_सॉल्व (
    CombinatorialProblem problem,  
    कॉम्बिनेटरियल प्रॉब्लम प्रॉब्लम,
    ObjectiveFunction objective_function /*f*/,
    ऑब्जेक्टिवफंक्शन ऑब्जेक्टिव_फंक्शन /*f*/,
    BoundingFunction lower_bound_function /*bound*/)  
    बाउंडिंगफंक्शन लोअर_बाउंड_फंक्शन / * बाउंड * /)
{
{
    // Step 1 above
    // चरण 1 ऊपर
    double problem_upper_bound = std::numeric_limits<double>::infinity; // = B
    डबल प्रॉब्लम_अपर_बाउंड = एसटीडी :: न्यूमेरिक_लिमिट्स <डबल> :: इन्फिनिटी; // = बी
    CombinatorialSolution heuristic_solution = heuristic_solve(problem); // x_h
    मिश्रित समाधान अनुमानी समाधान = अनुमानी समाधान (समस्या); // x_h
    problem_upper_bound = objective_function(heuristic_solution); // B = f(x_h)
    प्रॉब्लम_अपर_बाउंड = ऑब्जेक्टिव_फंक्शन (हेयुरिस्टिक_सोल्यूशन); // बी = एफ (x_h)
    CombinatorialSolution current_optimum = heuristic_solution;
    कॉम्बिनेटरियल सोल्यूशन करंट_ऑप्टिमम = ह्यूरिस्टिक_सोल्यूशन;
    // Step 2 above
    // चरण 2 ऊपर
    queue<CandidateSolutionTree> candidate_queue;
    कतार <कैंडिडेटसोल्यूशन ट्री> कैंडिडेट_क्यू;
    // problem-specific queue initialization
    // समस्या-विशिष्ट कतार आरंभीकरण
    candidate_queue = populate_candidates(problem);
    कैंडिडेट_क्यू = पॉप्युलेट_कैंडिडेट्स (समस्या);
    while (!candidate_queue.empty()) { // Step 3 above
    जबकि (!candidate_queue.empty()) { // चरण 3 ऊपर
        // Step 3.1
        // चरण 3.1
        CandidateSolutionTree node = candidate_queue.pop();
        कैंडिडेटसोल्यूशन ट्री नोड = कैंडिडेट_क्यू.पॉप ();
        // "node" represents N above
        // नोड ऊपर एन का प्रतिनिधित्व करता है
        if (node.represents_single_candidate()) { // Step 3.2
        if (node.represents_single_candidate()) { // चरण 3.2
            if (objective_function(node.candidate()) < problem_upper_bound) {
            अगर (उद्देश्य_फंक्शन (नोड.कैंडिडेट ()) <समस्या_अपर_बाउंड) {
                current_optimum = node.candidate();
                current_optimum = node.candidate ();
                problem_upper_bound = objective_function(current_optimum);
                प्रॉब्लम_अपर_बाउंड = ऑब्जेक्टिव_फंक्शन (current_optimum);
            }
            }
            // else, node is a single candidate which is not optimum
            // अन्यथा, नोड एक एकल उम्मीदवार है जो इष्टतम नहीं है
        }
        }
        else { // Step 3.3: node represents a branch of candidate solutions
        और { // चरण 3.3: नोड उम्मीदवार समाधान की एक शाखा का प्रतिनिधित्व करता है
            // "child_branch" represents N_i above
            // Child_branch उपरोक्त N_i का प्रतिनिधित्व करता है
            for (auto&& child_branch : node.candidate_nodes) {
            के लिए (ऑटो&& चाइल्ड_ब्रांच: नोड.कैंडिडेट_नोड्स) {
                if (lower_bound_function(child_branch) <= problem_upper_bound) {
                अगर (लोअर_बाउंड_फंक्शन (चाइल्ड_ब्रांच) <= प्रॉब्लम_अपर_बाउंड) {
                    candidate_queue.enqueue(child_branch); // Step 3.3.2
                    कैंडिडेट_क्यू.एनक्यू (चाइल्ड_ब्रांच); // चरण 3.3.2
                }
                }
                // otherwise, bound(N_i) > B so we prune the branch; step 3.3.1
                // अन्यथा, बाध्य (N_i)> बी इसलिए हम शाखा को चुभते हैं; चरण 3.3.1
            }
            }
        }
        }
    }
    }
    return current_optimum;
    वापसी वर्तमान_optimum;
}
</वाक्यविन्यास हाइलाइट>


उपरोक्त स्यूडोकोड में, functions <code>heuristic_solve</code> और <code>populate_candidates</code> समस्या के लिए उपयुक्त के रूप में सबरूटीन्स के रूप में बुलाया जाना चाहिए। कार्य {{mvar|''f''}} (<code>objective_function</code>) और {{math|bound}} (<code>lower_bound_function</code>) लिखित रूप में [[समारोह वस्तु]] के रूप में माना जाता है, और सी ++ प्रोग्रामिंग भाषा में अज्ञात फ़ंक्शंस, [[समारोह सूचक]] और अन्य प्रकार के कॉल करने योग्य ऑब्जेक्ट्स के अनुरूप हो सकता है।
}
उपरोक्त स्यूडोकोड में, functions <code>heuristic_solve</code> और <code>populate_candidates</code> समस्या के लिए उपयुक्त के रूप में सबरूटीन्स के रूप में काॅल किया जाना चाहिए। फंक्शन {{mvar|''f''}} (<code>objective_function</code>) और {{math|bound}} (<code>lower_bound_function</code>) लिखित रूप में [[समारोह वस्तु|फंक्शन एलिमेंट]] के रूप में माना जाता है, और इस प्रकार सी ++ प्रोग्रामिंग भाषा में अज्ञात फ़ंक्शंस, [[समारोह सूचक|फंक्शन प्वाइंट]] और अन्य प्रकार के कॉल करने योग्य ऑब्जेक्ट्स के अनुरूप हो सकता है।


=== सुधार ===
=== सुधार ===
कब <math>\mathbf{x}</math> का सदिश है <math>\mathbb{R}^n</math>, शाखा और बाउंड एल्गोरिदम को [[अंतराल अंकगणित]] के साथ जोड़ा जा सकता है<ref>{{cite book|last1=Moore|first1=R. E.|
इस प्रकार <math>\mathbf{x}</math> का सदिश <math>\mathbb{R}^n</math> है , इस प्रकार ब्रांचिंग और बाउंड एल्गोरिदम को [[अंतराल अंकगणित]] के साथ जोड़ा जा सकता है<ref>{{cite book|last1=Moore|first1=R. E.|
title=Interval Analysis|
title=Interval Analysis|
year=1966|publisher=Prentice-Hall|
year=1966|publisher=Prentice-Hall|
location=Englewood Cliff, New Jersey|isbn=0-13-476853-1}}
location=Englewood Cliff, New Jersey|isbn=0-13-476853-1}}
</ref> वैश्विक न्यूनतम के गारंटीकृत संलग्नक प्रदान करने के लिए [[अंतराल ठेकेदार]] तकनीकें।<ref>
</ref> इस प्रकार वैश्विक न्यूनतम को संलग्नक प्रदान करने के लिए [[अंतराल ठेकेदार|अंतराल काॅंट्रैक्टर]] विधियों का उपओग करते हैं।<ref>
{{cite book|last1=Jaulin|first1=L.|last2=Kieffer|first2=M.|last3=Didrit|first3=O.|last4=Walter|first4=E.|
{{cite book|last1=Jaulin|first1=L.|last2=Kieffer|first2=M.|last3=Didrit|first3=O.|last4=Walter|first4=E.|
title=Applied Interval Analysis|year=2001|publisher=Springer|location=Berlin|isbn=1-85233-219-0}}
title=Applied Interval Analysis|year=2001|publisher=Springer|location=Berlin|isbn=1-85233-219-0}}
Line 95: Line 89:
publisher=Marcel Dekker|location=New York}}
publisher=Marcel Dekker|location=New York}}
</ref>
</ref>
== अनुप्रयोग ==
== अनुप्रयोग ==
{{Prose|section|date=February 2023}}
इस दृष्टिकोण का उपयोग कई एनपी-हार्ड समस्याओं के लिए किया जाता है:
इस दृष्टिकोण का उपयोग कई एनपी-हार्ड समस्याओं के लिए किया जाता है:
* [[पूर्णांक प्रोग्रामिंग]]
* [[पूर्णांक प्रोग्रामिंग]]
Line 111: Line 102:
* [[उलटा सेट करें]]
* [[उलटा सेट करें]]
* [[अनुमान लगाएं]]
* [[अनुमान लगाएं]]
* 0/1 बस्ता समस्या
* 0/1 बैग समस्या
* [[कवर समस्या सेट करें]]
* [[कवर समस्या सेट करें]]
* [[ यंत्र अधिगम ]] में फ़ीचर चयन<ref>{{cite journal |title=सुविधा सबसेट चयन के लिए एक शाखा और बाध्य एल्गोरिथम|last1=Narendra |first1=Patrenahalli M. |last2=Fukunaga |first2=K. |journal=IEEE Transactions on Computers |volume=C-26 |issue=9 |year=1977 |pages=917–922 |doi=10.1109/TC.1977.1674939 |url=http://www.computer.org/csdl/trans/tc/1977/09/01674939.pdf}}</ref><ref>{{cite arXiv |last=Hazimeh |first=Hussein| last2=Mazumder |first2=Rahul |last3=Saab |first3=Ali |eprint=2004.06152 |title=Sparse Regression at Scale: Branch-and-Bound rooted in First-Order Optimization |date=2020}}</ref>
* [[ यंत्र अधिगम ]] में फ़ीचर चयन<ref>{{cite journal |title=सुविधा सबसेट चयन के लिए एक शाखा और बाध्य एल्गोरिथम|last1=Narendra |first1=Patrenahalli M. |last2=Fukunaga |first2=K. |journal=IEEE Transactions on Computers |volume=C-26 |issue=9 |year=1977 |pages=917–922 |doi=10.1109/TC.1977.1674939 |url=http://www.computer.org/csdl/trans/tc/1977/09/01674939.pdf}}</ref><ref>{{cite arXiv |last=Hazimeh |first=Hussein| last2=Mazumder |first2=Rahul |last3=Saab |first3=Ali |eprint=2004.06152 |title=Sparse Regression at Scale: Branch-and-Bound rooted in First-Order Optimization |date=2020}}</ref>
Line 118: Line 109:
* [[ प्रतिभा निर्धारण ]], सीन शूटिंग अरेंजमेंट प्रॉब्लम
* [[ प्रतिभा निर्धारण ]], सीन शूटिंग अरेंजमेंट प्रॉब्लम


ब्रांच-एंड-बाउंड भी विभिन्न अनुमानों का आधार हो सकता है। उदाहरण के लिए, जब ऊपरी और निचली सीमा के बीच का अंतर एक निश्चित सीमा से छोटा हो जाता है, तो शाखाकरण को रोकना चाह सकता है। इसका उपयोग तब किया जाता है जब समाधान व्यावहारिक उद्देश्यों के लिए पर्याप्त अच्छा होता है और आवश्यक संगणनाओं को बहुत कम कर सकता है। इस प्रकार का समाधान विशेष रूप से तब लागू होता है जब उपयोग किया जाने वाला लागत फ़ंक्शन शोर है या आंकड़ों का परिणाम है और इसलिए ठीक से ज्ञात नहीं है बल्कि केवल एक विशिष्ट [[संभावना]] वाले मूल्यों की सीमा के भीतर ही जाना जाता है।{{Citation needed|date=September 2015}}
शाखा और बंधन भी विभिन्न अनुमानों का आधार हो सकता है। इस प्रकार उदाहरण के लिए, जब ऊपरी और निचली सीमा के बीच का अंतर निश्चित सीमा से छोटा हो जाता है, तो शाखाकरण को रोकना चाह सकता है। इसका उपयोग तब किया जाता है जब समाधान व्यावहारिक उद्देश्यों के लिए पर्याप्त अच्छा होता है और आवश्यक संगणनाओं को बहुत कम कर सकता है। इस प्रकार का समाधान विशेष रूप से तब लागू होता है जब उपयोग किया जाने वाला लागत फ़ंक्शन ट्यून करता है या आंकड़ों का परिणाम देने में सहायक होता है और इसलिए ठीक से ज्ञात नहीं है, केवल विशिष्ट [[संभावना]] वाले मूल्यों की सीमा के भीतर ही जाना जाता है।


== अन्य एल्गोरिदम से संबंध ==
== अन्य एल्गोरिदम से संबंध ==
नौ एट अल। शाखा और बाउंड का एक सामान्यीकरण प्रस्तुत करता है जो A* खोज एल्गोरिद्म|A*, [[B*]] और Alpha–beta pruning|alpha-beta search एल्गोरिद्म को समाहित करता है।<ref>{{cite journal |last1=Nau |first1=Dana S. |first2=Vipin |last2=Kumar |first3=Laveen |last3=Kanal |title=General branch and bound, and its relation to A∗ and AO∗ |journal=Artificial Intelligence |volume=23 |issue=1 |year=1984 |pages=29–58 |url=https://www.cs.umd.edu/~nau/papers/nau1984general.pdf | doi = 10.1016/0004-3702(84)90004-3 }}</ref>
नौ एट अल शाखा और बाउंड का सामान्यीकरण प्रस्तुत करता है जो A* खोज एल्गोरिद्म या A*, [[B*]] और ऐल्फा–बीटा प्रूनिंग या ऐल्फा–बीटा सर्च एल्गोरिद्म को समाहित करता है।<ref>{{cite journal |last1=Nau |first1=Dana S. |first2=Vipin |last2=Kumar |first3=Laveen |last3=Kanal |title=General branch and bound, and its relation to A∗ and AO∗ |journal=Artificial Intelligence |volume=23 |issue=1 |year=1984 |pages=29–58 |url=https://www.cs.umd.edu/~nau/papers/nau1984general.pdf | doi = 10.1016/0004-3702(84)90004-3 }}</ref>
 


== अनुकूलन उदाहरण ==
== अनुकूलन उदाहरण ==
Line 137: Line 127:
<math>x_1</math> और <math>x_2</math> पूर्णांक हैं।
<math>x_1</math> और <math>x_2</math> पूर्णांक हैं।


पहला कदम पूर्णांक बाधा को आराम देना है। एक रेखा बनाने वाले पहले समीकरण के लिए हमारे पास दो चरम बिंदु हैं: <math>\begin{bmatrix} x_1  \\ x_2 \end{bmatrix}=\begin{bmatrix}50 \\0\end{bmatrix}</math> और <math>\begin{bmatrix}0 \\50\end{bmatrix}</math>. हम सदिश बिंदुओं के साथ दूसरी पंक्ति बना सकते हैं <math>\begin{bmatrix}0\\40\end{bmatrix}</math> और <math>\begin{bmatrix} 70\\0\end{bmatrix}</math>.
पहला चरण में पूर्णांक बाधा को उपयोग नहीं किया जाता है। इस प्रकार रेखा बनाने वाले पहले समीकरण के लिए हमारे पास दो चरम बिंदु हैं: <math>\begin{bmatrix} x_1  \\ x_2 \end{bmatrix}=\begin{bmatrix}50 \\0\end{bmatrix}</math> और <math>\begin{bmatrix}0 \\50\end{bmatrix}</math>, इस प्रकार हम सदिश बिंदुओं के साथ दूसरी पंक्ति <math>\begin{bmatrix}0\\40\end{bmatrix}</math> और <math>\begin{bmatrix} 70\\0\end{bmatrix}</math>बना सकते हैं।
  [[File:Branch and Bound optimization example with linear constraints in BricsCad Ultimate Academic Edition.png|thumb|दो पंक्तियाँ।]]तीसरा बिंदु है <math>\begin{bmatrix}0\\0\end{bmatrix}</math>. यह एक उत्तल पतवार है इसलिए समाधान क्षेत्र के किसी एक कोने पर स्थित है। हम पंक्ति में कमी का उपयोग करके चौराहे का पता लगा सकते हैं, जो कि है <math>\begin{bmatrix}70/3\\80/3\end{bmatrix}</math>, या <math>\begin{bmatrix} 23.333\\26.667\end{bmatrix}</math> 276.667 के मान के साथ। हम क्षेत्र के ऊपर रेखा को स्वीप करके अन्य समापन बिंदुओं का परीक्षण करते हैं और पाते हैं कि यह वास्तविक से अधिक अधिकतम है।
  [[File:Branch and Bound optimization example with linear constraints in BricsCad Ultimate Academic Edition.png|thumb|दो पंक्तियाँ।]]तीसरा बिंदु है <math>\begin{bmatrix}0\\0\end{bmatrix}</math> यह उत्तल है इसलिए समाधान क्षेत्र के किसी कोने पर स्थित है। इस प्रकार हम पंक्ति में कमी का उपयोग करके चौराहे का पता लगा सकते हैं, जो कि है <math>\begin{bmatrix}70/3\\80/3\end{bmatrix}</math>, या <math>\begin{bmatrix} 23.333\\26.667\end{bmatrix}</math> 276.667 के मान के साथ उपयोग किया जाता हैं। इस प्रकार हम क्षेत्र के ऊपर रेखा को स्वीप करके अन्य समापन बिंदुओं का परीक्षण करते हैं और पाते हैं कि यह वास्तविक से अधिक अधिकतम है।


इस मामले में, हम अधिकतम भिन्नात्मक भाग वाले चर को चुनते हैं <math>x_2</math> शाखा और बाउंड विधि के लिए पैरामीटर बन जाता है। हम शाखा करते हैं <math>x_2\leq26</math> और 276 @ प्राप्त करें <math>\langle 24,26\rangle</math>. हम एक पूर्णांक समाधान तक पहुँच चुके हैं इसलिए हम दूसरी शाखा में जाते हैं <math>x_2\geq27</math>. हम 275.75 @ प्राप्त करते हैं<math>\langle 22.75, 27\rangle</math>. हमारे पास एक दशमलव है इसलिए हम ब्रांच करते हैं <math>x_1</math> को <math>x_1\leq22</math> और हम पाते हैं 274.571 @<math>\langle 22,27.4286\rangle</math>. हम दूसरी शाखा की कोशिश करते हैं <math>x_1\geq23</math> और कोई व्यवहार्य समाधान नहीं हैं। इसलिए, अधिकतम 276 है <math>x_1\longmapsto 24</math> और <math>x_2\longmapsto 26</math>.
इस मामले में, हम अधिकतम भिन्नात्मक भाग वाले चर को चुनते हैं <math>x_2</math> शाखा और बाउंड विधि के लिए पैरामीटर बन जाता है। हम शाखा करते हैं <math>x_2\leq26</math> और 276 @ प्राप्त करें <math>\langle 24,26\rangle</math>. हम पूर्णांक समाधान तक पहुँच चुके हैं इसलिए हम दूसरी शाखा में <math>x_2\geq27</math> जाते हैं। इस प्रकार हम 275.75 @ प्राप्त करते हैं<math>\langle 22.75, 27\rangle</math>. हमारे पास दशमलव है इसलिए हम ब्रांच करते हैं, इस प्रकार  <math>x_1</math> को <math>x_1\leq22</math> और हम पाते हैं 274.571 @<math>\langle 22,27.4286\rangle</math>. हम दूसरी शाखा <math>x_1\geq23</math> का  प्रयास करते हैं और कोई व्यवहार्य समाधान नहीं हैं। इसलिए, अधिकतम 276 है <math>x_1\longmapsto 24</math> और <math>x_2\longmapsto 26</math> संभव हैं।


== यह भी देखें ==
== यह भी देखें ==
* पीछे हटना
* पीछे हटना
* [[शाखा और कट]] | ब्रांच-एंड-कट, ब्रांच-एंड-बाउंड और [[ काटने का विमान ]] विधियों के बीच एक संकर जो [[पूर्णांक रैखिक कार्यक्रम]]ों को हल करने के लिए बड़े पैमाने पर उपयोग किया जाता है।
* [[शाखा और कट]] या ब्रांच-एंड-कट, शाखा और बंधन और [[ काटने का विमान | कटिंग प्लेन]] विधियों के बीच संकर जो [[पूर्णांक रैखिक कार्यक्रम|पूर्णांक रैखिक फंक्शन]] को हल करने के लिए बड़े पैमाने पर उपयोग किया जाता है।
* [[विकासवादी एल्गोरिदम]]
* [[विकासवादी एल्गोरिदम]]
* [[अल्फा-बीटा प्रूनिंग]]
* [[अल्फा-बीटा प्रूनिंग]]
Line 158: Line 148:
{{Optimization algorithms|combinatorial|state=expanded}}
{{Optimization algorithms|combinatorial|state=expanded}}


{{DEFAULTSORT:Branch And Bound}}[[Category: अनुकूलन एल्गोरिदम और तरीके]] [[Category: संयुक्त अनुकूलन]]
{{DEFAULTSORT:Branch And Bound}}
 
 


[[Category: Machine Translated Page]]
[[Category:Collapse templates|Branch And Bound]]
[[Category:Created On 06/05/2023]]
[[Category:Created On 06/05/2023|Branch And Bound]]
[[Category:Lua-based templates|Branch And Bound]]
[[Category:Machine Translated Page|Branch And Bound]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Branch And Bound]]
[[Category:Pages using duplicate arguments in template calls|Branch And Bound]]
[[Category:Pages with script errors|Branch And Bound]]
[[Category:Sidebars with styles needing conversion|Branch And Bound]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Translated in Hindi|Branch And Bound]]
[[Category:Templates Vigyan Ready|Branch And Bound]]
[[Category:Templates generating microformats|Branch And Bound]]
[[Category:Templates that add a tracking category|Branch And Bound]]
[[Category:Templates that are not mobile friendly|Branch And Bound]]
[[Category:Templates that generate short descriptions|Branch And Bound]]
[[Category:Templates using TemplateData|Branch And Bound]]
[[Category:Wikipedia metatemplates|Branch And Bound]]
[[Category:अनुकूलन एल्गोरिदम और तरीके|Branch And Bound]]
[[Category:संयुक्त अनुकूलन|Branch And Bound]]

Latest revision as of 14:50, 24 May 2023

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

एल्गोरिथ्म खोज स्थान के क्षेत्रों/शाखाओं की निचली और ऊपरी सीमा के कुशल आकलन पर निर्भर करता है। यदि कोई सीमा उपलब्ध नहीं है, तो एल्गोरिथम संपूर्ण खोज के लिए पतित हो जाता है।

1960 में असतत अनुकूलन के लिए BP द्वारा प्रायोजित लंदन स्कूल ऑफ इकोनॉमिक्स में शोध करते समय पहली बार ऐल्सा प्रांत और एलीसन हारर्कोट द्वारा विधि प्रस्तावित की गई थी।[1][2] इस प्रकार इस कारण एनपी कठिन अनुकूलन समस्याओं को हल करने के लिए सबसे अधिक उपयोग किया जाने वाला उपकरण बन गया है।[3] इस प्रकार इस शाखा और बंधन के नाम में सबसे पहले लिटिल एट अल के कार्य में आया हैं। जिसकी यात्रा विक्रेता की समस्याओं पर निर्भर होती हैं।[4][5]

अवलोकन

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

  • यह पुनरावर्ती रूप से खोज स्थान को छोटे स्थानों में विभाजित करता है, फिर f(x) इन छोटे स्थानों पर छोटा करता है, इस प्रकार इसके विभाजन को ब्रांचिंग कहा जाता है।
  • अकेले ब्रांचिंग क्रूर-बल खोज या ब्रूट-फोर्स एन्यूमरेशन ऑफ़ कैंडिडेट सॉल्यूशंस और उन सभी का परीक्षण करने की राशि के रूप में उपयोग होती हैं। इस प्रकार ब्रूट-फोर्स सर्च के प्रदर्शन में सुधार करने के लिए, B&B एल्गोरिद्म कम से कम सीमा का ट्रैक रखता है जिसे वह खोजने का प्रयास करता है, और इस प्रकार इन सीमाओं का उपयोग खोज स्थान का निर्णय ट्री के रूप में प्रदर्शित करने के लिए करता है, इस प्रकार उपयोगकर्ता समाधानों को समाप्त करता है जो यह साबित कर सकता है इष्टतम समाधान सम्मिलित नहीं रहता है।

विशिष्ट अनुकूलन समस्या के लिए इन सिद्धांतों को ठोस एल्गोरिदम में परिवर्तित करने के लिए कुछ प्रकार की डेटा संरचना की आवश्यकता होती है जो उपयोगकर्ता समाधान के सेट का प्रतिनिधित्व करती है। इस प्रकार के प्रतिनिधित्व को समस्या का उदाहरण कहा जाता है। इस प्रकार उदाहरण के लिए उपयोगकर्ता समाधान के सेट को I द्वारा SI निरूपित करते हैं। इसके उदाहरण के लिए प्रतिनिधित्व को तीन परिचालनों के साथ प्रदर्शित कर सकते हैं:

  • branch(I) - दो या दो से अधिक उदाहरण उत्पन्न करता है जिनमें से प्रत्येक सबसेट SI का प्रतिनिधित्व करता है। (सामान्यतः उपसमुच्चय असम्बद्ध सेट होते हैं जो एल्गोरिदम को ही उपयोगकर्ता समाधान पर दो बार जाने से रोकते हैं, लेकिन इसकी आवश्यकता नहीं है। चूंकि इस प्रकार बीच में इष्टतम समाधान SI कम से कम सबसेट में सम्मिलित होना चाहिए।[6])
  • bound(I) द्वारा दर्शाए गए स्थान में किसी भी उपयोगकर्ता समाधान के मूल्य पर निचली सीमा I की गणना करता है, इस प्रकार इसका मान bound(I) ≤ f(x) सभी के लिए x में SI. के समान हैं।
  • solution(I) निर्धारित करता है कि क्या I एकल उपयोगकर्ता समाधान का प्रतिनिधित्व करता है। (इस प्रकार वैकल्पिक रूप से, यदि ऐसा नहीं होता है, तो SI ऑपरेशन बीच में से कुछ व्यवहार्य समाधान वापस करने का विकल्प चुन सकता है.[6]) यदि solution(I) तब फंक्शन f(solution(I)) लौटाता है, इस प्रकार इसके व्यवहार्य समाधानों के पूरे स्थान पर इष्टतम उद्देश्य मान के लिए ऊपरी सीमा प्रदान करता है।

इन परिचालनों का उपयोग करते हुए, बी एंड बी एल्गोरिदम शाखा संचालन द्वारा गठित उदाहरणों के ट्री सर्चिंग के माध्यम से शीर्ष-नीचे पुनरावर्ती खोज करता है। उदाहरण पर जाने पर I, यह जांचता है कि क्या bound(I) वर्तमान ऊपरी सीमा के बराबर या उससे अधिक है; यदि ऐसा है तो, I को खोज से सुरक्षित रूप से हटाया जा सकता है और इस प्रकार पुनरावर्तन बंद हो जाता है। इस प्रकार यह सार्टिंग सामान्यतः वैश्विक वैरियेबल को बनाए रखने के द्वारा कार्यान्वित किया जाता है जो कि अब तक की जांच की गई सभी उदाहरणों में देखी गई न्यूनतम ऊपरी सीमा को रिकॉर्ड करता है।

सामान्य संस्करण

निम्नलिखित सामान्य शाखा का प्रारूप है और इस विधि से इस फंक्शन को कम करने के लिए bound एल्गोरिदम f है।[3] इससे वास्तविक एल्गोरिथम प्राप्त करने के लिए, बाउंडिंग फ़ंक्शन की आवश्यकता होती है bound, जो निम्न सीमा की गणना करता है f सर्च ट्री के नोड्स पर, साथ ही समस्या-विशिष्ट ब्रांचिंग नियम का उपयोग किया जाता हैं जैसे, यहाँ इस प्रकार सामान्य एल्गोरिथ्म उच्च-क्रम का कार्य प्रस्तुत करती हैं।

  1. इस प्रकार अनुमानी का उपयोग करके समाधान xh की अनुकूलन समस्या को सर्च करने के लिए किया जाता हैं। इसका मूल्य संग्रहीत करें, B = f(xh). (यदि कोई अनुमानी मान उपलब्ध नहीं है, तो इस प्रकार B अनंत की ओर सेट करते हैं।) इस प्रकार B अब तक मिले सर्वोत्तम समाधान को दर्शाएगा, और उपयोगकर्ता समाधानों पर ऊपरी सीमा के रूप में उपयोग किया जाएगा।
  2. इस प्रकार असाइन की गई समस्या के किसी भी चर के साथ आंशिक समाधान रखने के लिए क्रम आरंभ करते हैं।
  3. यह क्रम रिक्त होने तक लूप चलता रहता हैं:
    1. इस प्रकार एक नोड लें N क्रम से बाहर रखते हैं।
    2. यदि N एकल उपयोगकर्ता समाधान का प्रतिनिधित्व करता है x और f(x) < B, तब x अब तक का सबसे अच्छा समाधान है। इसे रिकॉर्ड करें और सेट करें Bf(x).
    3. इसके अतिरिक्त आगे बढ़ने पर N नए नोड बनाने के लिए Ni इनमें से प्रत्येक के लिए:
      1. यदि bound(Ni) > B, कुछ भी नहीं है, चूंकि इस प्रकार इस नोड पर निचली सीमा समस्या की ऊपरी सीमा से अधिक है, इसलिए यह कभी भी इष्टतम समाधान की ओर नहीं ले जाएगी, और इसे त्याग दिया जा सकता है।
      2. इसके अतिरिक्त Ni क्रम में स्टोर करें।

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

{{Anchor|Code}स्यूडोकोड

एक सी ++ - उपरोक्त के स्यूडोकोड कार्यान्वयन के समान है।

// C++-like implementation of branch and bound, 
// assuming the objective function f is to be minimized
CombinatorialSolution branch_and_bound_solve(
    CombinatorialProblem problem, 
    ObjectiveFunction objective_function /*f*/,
    BoundingFunction lower_bound_function /*bound*/) 
{
    // Step 1 above
    double problem_upper_bound = std::numeric_limits<double>::infinity; // = B
    CombinatorialSolution heuristic_solution = heuristic_solve(problem); // x_h
    problem_upper_bound = objective_function(heuristic_solution); // B = f(x_h)
    CombinatorialSolution current_optimum = heuristic_solution;
    // Step 2 above
    queue<CandidateSolutionTree> candidate_queue;
    // problem-specific queue initialization
    candidate_queue = populate_candidates(problem);
    while (!candidate_queue.empty()) { // Step 3 above
        // Step 3.1
        CandidateSolutionTree node = candidate_queue.pop();
        // "node" represents N above
        if (node.represents_single_candidate()) { // Step 3.2
            if (objective_function(node.candidate()) < problem_upper_bound) {
                current_optimum = node.candidate();
                problem_upper_bound = objective_function(current_optimum);
            }
            // else, node is a single candidate which is not optimum
        }
        else { // Step 3.3: node represents a branch of candidate solutions
            // "child_branch" represents N_i above
            for (auto&& child_branch : node.candidate_nodes) {
                if (lower_bound_function(child_branch) <= problem_upper_bound) {
                    candidate_queue.enqueue(child_branch); // Step 3.3.2
                }
                // otherwise, bound(N_i) > B so we prune the branch; step 3.3.1
            }
        }
    }
    return current_optimum;
}

उपरोक्त स्यूडोकोड में, functions heuristic_solve और populate_candidates समस्या के लिए उपयुक्त के रूप में सबरूटीन्स के रूप में काॅल किया जाना चाहिए। फंक्शन f (objective_function) और bound (lower_bound_function) लिखित रूप में फंक्शन एलिमेंट के रूप में माना जाता है, और इस प्रकार सी ++ प्रोग्रामिंग भाषा में अज्ञात फ़ंक्शंस, फंक्शन प्वाइंट और अन्य प्रकार के कॉल करने योग्य ऑब्जेक्ट्स के अनुरूप हो सकता है।

सुधार

इस प्रकार का सदिश है , इस प्रकार ब्रांचिंग और बाउंड एल्गोरिदम को अंतराल अंकगणित के साथ जोड़ा जा सकता है[8] इस प्रकार वैश्विक न्यूनतम को संलग्नक प्रदान करने के लिए अंतराल काॅंट्रैक्टर विधियों का उपओग करते हैं।[9][10]

अनुप्रयोग

इस दृष्टिकोण का उपयोग कई एनपी-हार्ड समस्याओं के लिए किया जाता है:

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

अन्य एल्गोरिदम से संबंध

नौ एट अल शाखा और बाउंड का सामान्यीकरण प्रस्तुत करता है जो A* खोज एल्गोरिद्म या A*, B* और ऐल्फा–बीटा प्रूनिंग या ऐल्फा–बीटा सर्च एल्गोरिद्म को समाहित करता है।[16]

अनुकूलन उदाहरण

इस समस्या को हल करने के लिए शाखा और बाउंड का उपयोग किया जा सकता है

अधिकतम इन बाधाओं के साथ

और पूर्णांक हैं।

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

दो पंक्तियाँ।

तीसरा बिंदु है यह उत्तल है इसलिए समाधान क्षेत्र के किसी कोने पर स्थित है। इस प्रकार हम पंक्ति में कमी का उपयोग करके चौराहे का पता लगा सकते हैं, जो कि है , या 276.667 के मान के साथ उपयोग किया जाता हैं। इस प्रकार हम क्षेत्र के ऊपर रेखा को स्वीप करके अन्य समापन बिंदुओं का परीक्षण करते हैं और पाते हैं कि यह वास्तविक से अधिक अधिकतम है।

इस मामले में, हम अधिकतम भिन्नात्मक भाग वाले चर को चुनते हैं शाखा और बाउंड विधि के लिए पैरामीटर बन जाता है। हम शाखा करते हैं और 276 @ प्राप्त करें . हम पूर्णांक समाधान तक पहुँच चुके हैं इसलिए हम दूसरी शाखा में जाते हैं। इस प्रकार हम 275.75 @ प्राप्त करते हैं. हमारे पास दशमलव है इसलिए हम ब्रांच करते हैं, इस प्रकार को और हम पाते हैं 274.571 @. हम दूसरी शाखा का प्रयास करते हैं और कोई व्यवहार्य समाधान नहीं हैं। इसलिए, अधिकतम 276 है और संभव हैं।

यह भी देखें

संदर्भ

  1. A. H. Land and A. G. Doig (1960). "असतत प्रोग्रामिंग समस्याओं के हल के लिए एक स्वचालित विधि". Econometrica. Vol. 28, no. 3. pp. 497–520. doi:10.2307/1910129.
  2. "स्टाफ न्यूज". www.lse.ac.uk. Archived from the original on 2021-02-24. Retrieved 2018-10-08.
  3. 3.0 3.1 3.2 Clausen, Jens (1999). Branch and Bound Algorithms—Principles and Examples (PDF) (Technical report). University of Copenhagen. Archived from the original (PDF) on 2015-09-23. Retrieved 2014-08-13.
  4. 4.0 4.1 Little, John D. C.; Murty, Katta G.; Sweeney, Dura W.; Karel, Caroline (1963). "ट्रैवलिंग सेल्समैन समस्या के लिए एल्गोरिद्म" (PDF). Operations Research. 11 (6): 972–989. doi:10.1287/opre.11.6.972. hdl:1721.1/46828.
  5. Balas, Egon; Toth, Paolo (1983). ट्रैवलिंग सेल्समैन समस्या के लिए ब्रांच और बाउंड तरीके (PDF) (Report). Carnegie Mellon University Graduate School of Industrial Administration. Archived (PDF) from the original on October 20, 2012.
  6. 6.0 6.1 Bader, David A.; Hart, William E.; Phillips, Cynthia A. (2004). "शाखा और बाउंड के लिए समानांतर एल्गोरिथम डिज़ाइन" (PDF). In Greenberg, H. J. (ed.). Tutorials on Emerging Methodologies and Applications in Operations Research. Kluwer Academic Press. Archived from the original (PDF) on 2017-08-13. Retrieved 2015-09-16.
  7. Mehlhorn, Kurt; Sanders, Peter (2008). Algorithms and Data Structures: The Basic Toolbox (PDF). Springer. p. 249.
  8. Moore, R. E. (1966). Interval Analysis. Englewood Cliff, New Jersey: Prentice-Hall. ISBN 0-13-476853-1.
  9. Jaulin, L.; Kieffer, M.; Didrit, O.; Walter, E. (2001). Applied Interval Analysis. Berlin: Springer. ISBN 1-85233-219-0.
  10. Hansen, E.R. (1992). Global Optimization using Interval Analysis. New York: Marcel Dekker.
  11. Conway, Richard Walter; Maxwell, William L.; Miller, Louis W. (2003). शेड्यूलिंग का सिद्धांत. Courier Dover Publications. pp. 56–61.
  12. Fukunaga, Keinosuke; Narendra, Patrenahalli M. (1975). "A branch and bound algorithm for computing k-nearest neighbors". IEEE Transactions on Computers: 750–753. doi:10.1109/t-c.1975.224297.
  13. Narendra, Patrenahalli M.; Fukunaga, K. (1977). "सुविधा सबसेट चयन के लिए एक शाखा और बाध्य एल्गोरिथम" (PDF). IEEE Transactions on Computers. C-26 (9): 917–922. doi:10.1109/TC.1977.1674939.
  14. Hazimeh, Hussein; Mazumder, Rahul; Saab, Ali (2020). "Sparse Regression at Scale: Branch-and-Bound rooted in First-Order Optimization". arXiv:2004.06152.
  15. Nowozin, Sebastian; Lampert, Christoph H. (2011). "कंप्यूटर विजन में स्ट्रक्चर्ड लर्निंग एंड प्रेडिक्शन". Foundations and Trends in Computer Graphics and Vision. 6 (3–4): 185–365. CiteSeerX 10.1.1.636.2651. doi:10.1561/0600000033. ISBN 978-1-60198-457-9.
  16. Nau, Dana S.; Kumar, Vipin; Kanal, Laveen (1984). "General branch and bound, and its relation to A∗ and AO∗" (PDF). Artificial Intelligence. 23 (1): 29–58. doi:10.1016/0004-3702(84)90004-3.


बाहरी संबंध

  • LiPS – Free easy-to-use GUI program intended for solving linear, integer and goal programming problems.
  • Cbc – (Coin-or branch and cut) is an open-source mixed integer programming solver written in C++.

| group5 = Metaheuristics | abbr5 = heuristic | list5 =

| below =

}} | group5 =Metaheuuristic |abbr5 = heuristic | list5 =*विकासवादी एल्गोरिथ्म

| below =* सॉफ्टवेयर

}}