**شاخه و کران** یا **شاخه و کرانه** یا **شاخه و حد** یا **تحدید و انشعاب**، یک الگوریتم عمومی برای پیدا کردن راه‌حل‌های بهینه مسائل مختلف است، به‌خصوص در بهینه‌سازی گسسته و ترکیبی.

این الگوریتم تمام راه‌حل‌های یک مسئله را شمارش می‌کند که در این بین راه‌حل‌های بی‌ثمر بسیاری هستند که می‌توان با حذف آن‌ها با تخمین مرزهای بالایی و پایینی، بهینه شود.

این روش اولین بار توسط *ای جیی دواگ و ای اچ لند* برای برنامه‌نویسی گسسته در سال ۱۹۶۰ هنگام پژوهش در مدرسه اقتصاد لندن با حمایت بریتیش پترولیوم پیشنهاد شد.

توصیف کلی
---------

برای قطعیت، ما فرض می‌کنیم که هدف پیدا کردن حداقل مقدار یک تابع (f(x است، که در آن x در دامنه مجموعه S که از راه‌حل‌های مجاز و پیشنهادی است، می‌باشد (فضای جستجو یا منطقه مجاز).
توجه داشته باشید که با پیدا کردن حداکثر مقدار (g(x) = -f(x، می‌توان حداقل مقدار (f(x را پیدا کرد. (برای مثال اگر S مجموعه‌ای از برنامه‌های ممکن برای ناوگان اتوبوس باشد، (x)f را می‌توان انتظار از درآمد برنامه‌های x دانست).
روش شاخه و کران به دو ابزار نیاز دارد: اول روش تقسیم کردن مجموعه پیشنهاد شده S است که داده شده، که دو یا چند مجموعه کوچکتر را بازمی‌گرداند، که درمجموع S را پوشش می‌دهند. توجه داشته باشید که مقدار کمینه (f(x برروی {... , S ,min{V1 , V2 است، که هر Vi حداقل (f(x به همراه Si است. این مرحله شاخه شدن نامیده می‌شود. از وقتی که برنامه‌های بازگشتی، یک درخت تعریف شدند (درخت جستجو) گره‌ها همان زیرمجموعه‌های S هستند.
ابزار دیگر روش محاسبه مرزهای بالایی و پایینی برای محاسبه مقدار حداقل (f(x با زیرمجموعه داده شده از S. این مرحله کران‌بندی نامیده می‌شود.
ایده کلیدی الگوریتم شاخه و کران این است: درصورتی که کران پایین برای بعضی گره‌های درخت (مجموعه‌ای از راه‌حل‌های پیشنهادی) A بزرگتر از دیگر گره‌ها B است، در آن صورت با اطمینان می‌تواند A از جستجو دور انداخته شود. این مرحله هرس کردن نام دارد و معمولاً با متغیر جهانی m (مشترک در میان تمام گره‌ها از درخت) پیاده‌سازی می‌شود، که حداقل کران بالایی که تاکنون دیده شده در میان تمام حاشیه‌ها را ثبت می‌کند. هر گره کران پایین که بزرگتر از m است می‌تواند دور انداخته شود.

تابع بازگشتی زمانی متوقف می‌شود که مجموعه راه‌حل پیشنهادی جاری S به یک عنصر کاهش یابد، و همچنین زمانی که کران بالای مجموعه S منطبق بر کران پایین شود. در هر صورت، هر عنصر از S حداقل تابع را در درون Sخواهد بود.

کاربرد
------

این رویکرد برای حل تعدادی از مسائل NP سخت استفاده می‌شود. از قبیل:

* مسئله کوله پشتی
* برنامه‌ریزی عددصحیح
* برنامه‌ریزی غیر خطی
* مسئله فروشنده دوره‌گرد
* مشکل تخصیص درجه دوم
* مسئله بیشینه صدق‌پذیری
* جستجو نزدیکترین همسایه
* مسئله برش موجودی
* تجزیه و تحلیل نویزهای اشتباه

می‌توان در شاخه و کران ابتکارات مختلفی بکار برد. برای مثال، ممکن است کسی بخواهد مرحله شاخه کردن را زمانی که شکاف بین کران پایین و بالا به کوچکتر از یک آستانه شد، پایان دهد. این هنگامی استفاده می‌شود که راه‌حل به اندازه کافی برای اهداف کاربردی خوب باشد و می‌تواند محاسبات لازم را تا کران زیادی کاهش دهد. این نوع راه‌حل قابل اجرا است بخصوص زمانیکه تابع هزینه به کار رفته شلوغ یا حاصل برآورد آماری باشد، و همچنین دقیقاً شناخته نشده باشد، بلکه در طیف وسیعی از ارزش‌ها با احتمال خاص شناخته شده‌اند. نمونه‌ای از کاربرد آن در زیست‌شناسی است. هنگام انجام تجزیه و تحلیل برای ارزیابی روابط تکاملی بین موجودات، که اغلب در آن مجموعه داده‌های غیرعملی بزرگی هستند.
به همین دلیل روش شاخه و کران اغلب در الگوریتم درخت جستجو در بازی استفاده می‌شود که مهم‌ترین آن‌ها در هرس آلفا-بتا استفاده می‌شود.

منابع
-----

1. ↑  A. H. Land and A. G. Doig (1960). "An automatic method of solving discrete programming problems". Econometrica 28 (3): pp. 497-520

| * ن
* ب
* و
بهینه‌سازی: تئوری، روش‌ها، و ابتکارها |
| --- |
| 

| برنامه‌سازی نامقید غیرخطی: روش‌ها با استفاده از |
| --- |
| 

|  |  |
| --- | --- |
| … تابع‌ها | 
* Golden section search
* Interpolation methods
* Line search
* روش نلدر - مید
* Successive parabolic interpolation

 |
| … و گرادیان‌ها | 

|  |  |
| --- | --- |
| Convergence | 
* Trust region
* Wolfe conditions

 |
| Quasi–Newton | 
* روش بی‌اف‌جی‌اس and L-BFGS
* DFP
* Symmetric rank-one (SR1)

 |
| Other methods | 
* Gauss–Newton
* Gradient
* الگوریتم لونبرگ-مارکارد
* Conjugate gradient

 |

 |
| … و هشین‌ها | 
* Newton's method

 |

 |

 | The graph of a strictly concave quadratic function is shown in blue, with its unique maximum shown as a red dot. Below the graph appears the contours of the function: The level sets are nested ellipses.Optimization computes maxima and minima. |
| 

| برنامه‌سازی مقید غیرخطی |
| --- |
| 

|  |  |
| --- | --- |
| کلی | 
* Barrier methods
* روش پنالتی

 |
| مشتق‌پذیر | 
* Augmented Lagrangian methods
* Sequential quadratic programming
* Successive linear programming

 |

 |

 |
| 

| بهینه‌سازی محدب |
| --- |
| 

|  |  |
| --- | --- |
| بهینه‌سازی محدب | 
* Cutting-plane method
* Reduced gradient (Frank–Wolfe)
* Subgradient method

 |
| برنامه‌ریزی خطی ودرجه دو | 

|  |  |
| --- | --- |
| برنامه‌ریزی خطی | 
* Ellipsoid algorithm of Khachiyan
* الگوریتم کارمارکار

 |
| Basis-الگوریتم حریصانه | 
* الگوریتم غیر مرکب
* Revised simplex algorithm
* Criss-cross algorithm
* Principal pivoting algorithm of Lemke

 |

 |

 |

 |
| 

| بهینه‌سازی ترکیبیاتی |
| --- |
| 

|  |  |
| --- | --- |
| الگو‌ها | 
* الگوریتم تقریبی
* برنامه‌ریزی پویا
* الگوریتم حریصانه
* بهینه‌سازی خطی عدد صحیح
	+ شاخه و حد یا شاخه و برش

 |
| الگوریتم‌هایگراف | 

|  |  |
| --- | --- |
| درخت پوشای کمینه | 
* الگوریتم بلمن–فورد
* الگوریتم بروکا
* الگوریتم دیکسترا
* الگوریتم فلوید-وارشال
* الگوریتم جانسون
* الگوریتم کراسکال

 |

 |
| شبکه شاره | 
* الگوریتم دینیک
* الگوریتم ادموندز کارپ
* الگوریتم فورد–فالکرسون
* الگوریتم ارسال-برچسب

 |

 |

 |
| 

| الگوریتم‌های فراابتکاری |
| --- |
| 
* الگوریتم تکاملی
* الگوریتم تپه‌نوردی
* الگوریتم جستجوی محلی (بهینه‌سازی)
* الگوریتم تبرید شبیه‌سازی شده
* الگوریتم جستجوی ممنوعه

 |

 |
| 
* **رده‌ها**
	+ روش‌ها
	+ ابتکارها
* **نرم‌افزارها**

 |