شاخه و کران

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

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

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

## توصیف کلی
برای قطعیت، ما فرض می‌کنیم که هدف پیدا کردن حداقل مقدار یک تابع (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 سخت استفاده می‌شود. از قبیل:
* مسئله کوله پشتی
* برنامه‌ریزی عددصحیح
* برنامه‌ریزی غیر خطی
* مسئله فروشنده دوره‌گرد
* مشکل تخصیص درجه دوم
* مسئله بیشینه صدق‌پذیری
* جستجو نزدیکترین همسایه
* مسئله برش موجودی
* تجزیه و تحلیل نویزهای اشتباه

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

## منابع

رده:الگوریتم‌های بهینه‌سازی
رده:بهینه‌سازی ترکیبیاتی
رده:روش‌های بهینه‌سازی
رده:نظریه گراف