860 likes | 1.56k Views
درس طراحی الگوریتم ها. فصل ششم. راهبرد شاخه و حد Branch & Bound approach. مدرس: سید محمد بیدکی. بهار 1392. مقدمه. الگوریتم شاخه و حد، شکل بهبود یافته ای از الگوریتم عقبگرد است. راهبرد طراحی در شاخه و حد از آن جهت به عقبگرد شباهت دارد که در آن برای حل مسئله از درخت فضای حالت استفاده می شود.
E N D
درس طراحی الگوریتم ها فصل ششم راهبرد شاخه و حد Branch & Bound approach مدرس: سید محمد بیدکی بهار 1392
مقدمه درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی الگوریتم شاخه و حد، شکل بهبود یافته ای از الگوریتم عقبگرد است. راهبرد طراحی در شاخه و حد از آن جهت به عقبگرد شباهت دارد که در آن برای حل مسئله از درخت فضای حالت استفاده می شود. مزایای راهبرد شاخه و حد نسبت به عقبگرد: ما را به پیمایش خاصی از درخت محدود نمی کند. فقط برای مسائل بهینه سازی به کار می رود. الگوریتم شاخه و حد در هر گره از درخت فضای حالت، عددی (حدی) را محاسبه می کند تا تعیین شود که آیا آن گره امیدبخش است یا خیر.
مقدمه ... درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی • اگر آن حد بهتر از مقدار بهترین حلی که تاکنون پیدا شده، نباشد، گره غیر امیدبخش است. • در غیر اینصورت، امیدبخش می باشد. • علاوه بر استفاده از حدی برای تعیین امیدبخشی یک گره، می توان حدود گره های امید بخش را مقایسه نمود و فرزندان گرهی با بهترین حد را زودتر ملاقات کرد. • به روش فوق بهترین جستجو با هرس کردن شاخه و حد گفته می شود. • پیاده سازی این روش، شکل اصلاح شده ای از روش موسوم به جستجوی عرضی با هرس کردن شاخه و حد است.
جستجوی عرضی (اول سطح) درخت درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی در جستجوی عرضی، ابتدا ریشه ملاقات می شود و سپس همه فرزندان آن به ترتیب از چپ به راست به صورت سطحی ملاقات خواهند شد.
حل یک مسئله با رویکرد شاخه و حد درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی یک مسئله را با دو راهکار می توان به روش شاخه و حد حل نمود: استفاده از جستجوی عرضی و در کنار آن هرس کردن درخت فضای حالت با شاخه و حد استفاده از بهترین جستجو و هرس کردن با شاخه و حد
جستجوی عرضی با هرس کردن شاخه و حد درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی • در این روش، کار از گره ریشه شروع شده و حد برای آن محاسبه می گردد. • تصمیم گیری درمورد اینکه آیا فرزندان یک گره ملاقات شوند، در هنگام ملاقات آن گره صورت می گیرد. • یعنی اگر گره جاری امیدبخش باشد، فرزندان آن باید بعداً به صورت اول سطح، ملاقات و بررسی شوند. • و اگر غیر امیدبخش باشد نیازی به ملاقات فرزندانش نیست. • تمام گره های داخل صف، ملاقات می شوند. • ملاقات گره ها تا جایی ادامه می یابد که دیگر گره امیدبخشی وجود نداشته باشد.
الگوریتم کلی جستجوی عرضی با هرس کردن شاخه و حد درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
بهترین جستجو با هرس کردن شاخه و حد درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی • در این روش، کار از گره ریشه شروع شده و حد برای آن محاسبه می گردد. • تصمیم گیری درمورد اینکه آیا فرزندان یک گره ملاقات شوند، در هنگام ملاقات آن گره صورت می گیرد. • یعنی اگر گره جاری امیدبخش باشد، فرزندان آن باید در صف اولویت قرار گیرند که بعداً، ملاقات و بررسی شوند. (اولویت بر اساس مقدار حد گره) • و اگر غیر امیدبخش باشد نیازی به ملاقات فرزندانش نیست. • تمام گره های داخل صف اولویت قبل از ملاقات، بررسی می شوند که آیا امیدبخش هستند یا خیر. در صورت امید بخش بودن، ملاقات می شوند. • ملاقات گره ها تا جایی ادامه می یابد که دیگر گره امیدبخشی وجود نداشته باشد.
الگوریتم کلی بهترین جستجو با هرس کردن شاخه و حد درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
مسئله کوله پشتی صفر و یک درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی هدف دزد تعیین مجموعه ای از اشیاء است که ارزش کل آنها بیشینه باشد به طوری که وزن کل آنها از W بیشتر نشود. ابتدا نسخه ساده ای از حل مسئله با استفاده از جستجوی عرضی با هرس کردن شاخه و حد ارائه می دهیم. سپس شکل بهبود یافته آن را با روش بهترین جستجو با هرس کردن شاخه و حد بیان خواهیم کرد.
بررسی امید بخشی درس طراحی الگوریتم ها - فصل پنجم: راهبرد عقبگرد - بیدکی • اگر weight مجموع اوزان قطعات گنجانده شده تا گره i باشد: • در صورتی که weight ≥ W گره جاری غیر امیدبخش است. • می توان از شرایط روش حریصانه در کوله پشتی کسری برای تعیین حد بالای ارزش قابل حصول از هر گره، استفاده نمود: • قطعات براساس مقدار pi/wi به ترتیب نزولی مرتب می شوند. • در هر گره که باشیم، نمی توانیم با انتخاب قطعات بعدی بهره بیشتری از حالت کوله پشتی کسری بدست آوریم (bound). • اگر profit حاصلجمع ارزش قطعاتی باشد که تاکنون انتخاب شده اند. • به متغیرهای bound و totweight مقادیر اولیه profit و weight را می دهیم. • سپس به روش حریصانه قطعات باقیمانده را برداشته و ارزش آن را به bound و وزن آن را به totweight اضافه می کنیم تا به قطعه ای برسیم که اگر وزن آن را اضافه کنیم از W بیشتر شود. • کسری از آن قطعه را که باقیمانده وزن اجازه می دهد، برداشته و ارزش مقدار آن کسر را به bound اضافه می کنیم.
بررسی امید بخشی ... درس طراحی الگوریتم ها - فصل پنجم: راهبرد عقبگرد - بیدکی اگر گره در سطح i قرار داشته باشد و گره واقع در سطح k، شئیی است که حاصلجمع اوزان را از W بیشتر می کند: اگر maxprofit مقدار بهره از بهترین حلی باشد که تاکنون پیدا شده است. در این صورت اگر bound ≤ maxprofit، گره iغیر امیدبخش است.
مثال مسئله کوله پشتی (جستجوی عرضی) درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درخت فضای حالت برای جستجوی عرضی هرس شده 1 2 3 5 7 4 6 10 11 8 9 12 13 15 16 14 17 درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
ساختمان داده هر گره در درخت فضای حالت درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی برای حل مسئله کوله پشتی به روش جستجوی عرضی با هرس کردن شاخه و حد، هر گره از درخت را با ساختار زیر نگه می داریم:
الگوریتم جستجوی عرضی با هرس کردن شاخه و حد برای مسئله کوله پشتی صفرویک درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
محاسبه حد برای هر گره در کوله پشتی صفرو یک درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
مثال کوله پشتی صفرویک (بهترین جستجو) درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی • در اینجا پس از ملاقات همه فرزندان یک گره مفروض، میتوانیم به همه گره های امید بخش و گسترش نیافته پرداخته و گره ای که بهترین حد را داراست گسترش دهیم.
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 1) گره (0,0) Profit = 0$ Weight = 0 Maxprofit = 0$ totweight = 0+2+5 = 7 Bound = 0 + 40 + 30 + (16-7)*5 = 115$ گره امید بخش است زیرا: (weight<16) and (bound > maxprofit)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 2) گره (1,1) Profit = 40$ Weight = 2 Maxprofit = 0$ 40$ Bound = 115$ گره امید بخش است زیرا: (weight<16) and (bound > maxprofit) گره (1,2) Profit = 0$ Weight = 0 Maxprofit = 40$ Bound = 0 + 30 + 50 + (16-15)*2 = 82$ گره امید بخش است زیرا: (weight<16) and (bound > maxprofit)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 3) گره (2,1) Profit = 70$ Weight = 7 Maxprofit = 40$ 70$ Bound = 115$ گره امید بخش است زیرا: (weight<16) and (bound > maxprofit) گره (2,2) Profit = 40$ Weight = 2 Maxprofit = 70$ Bound = 40 + 50 + (16-12)*2 = 98$ گره امید بخش است زیرا: (weight<16) and (bound > maxprofit)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 4) گره (3,1) Profit = 120$ Weight = 17 Maxprofit = 70$ Bound = 0$ گره امید بخش نیست زیرا: (weight ≥ 16) گره (3,2) Profit = 70$ Weight = 7 Maxprofit = 70$ Bound = 70 + 10 = 80$ گره امید بخش است زیرا: (weight<16) and (bound > maxprofit)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 5) گره (3,3) Profit = 90$ Weight = 12 Maxprofit = 70$ 90$ Bound = 90 + (16-12)*2 = 98$ گره امید بخش است زیرا: (weight<16) and (bound > maxprofit) • گره های (3,2) و (1,2) دیگر امیدبخش نیستند. گره (3,4) Profit = 40$ Weight = 2 Maxprofit = 90$ Bound = 40 + 10 = 50$ گره امید بخش نیست زیرا: (bound ≤ maxprofit)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 6) گره (4,1) Profit = 100$ Weight = 17 Maxprofit = 90$ Bound = 0$ گره امید بخش نیست زیرا: (weight ≥ 16) گره (4,2) Profit = 90$ Weight = 12 Maxprofit = 90$ Bound = 90$ گره امید بخش نیست زیرا: (bound ≤ maxprofit)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
ساختمان داده هر گره در درخت فضای حالت درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی برای حل مسئله کوله پشتی به روش بهترین جستجو با هرس کردن شاخه و حد، هر گره از درخت را با ساختار زیر نگه می داریم:
الگوریتم بهترین جستجو با هرس کردن شاخه و حد برای مسئله کوله پشتی صفرو یک درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
محاسبه حد برای هر گره در کوله پشتی صفرو یک درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
مسئله فروشنده دوره گرد درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی یک فروشنده دوره گرد قصد دارد محصولات خود را در چندین شهر به فروش برساند. لذا باید از شهر خود به تمام شهرها سفر نماید و در نهایت به شهر خود بازگردد. فروشنده باید کوتاهترین مسیر ممکن را طی کند و همچنین می تواند از هر شهر تنها یک بار بگذرد. می توان شهرها و راه های بین آنها را به صورت یک گراف جهتدار نمایش داد. هدف از این مسئله یافتن کوتاهترین تور در یک گراف جهتدار با شروع از یک رأس مفروض است مشروط بر آن که هر رأس فقط یک بار ملاقات شود. انتخاب رأس شروع دلخواه است پس می توان رأس اول را انتخاب نمود.
مثال درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی گرافی شامل 5 رأس، توسط ماتریس همجواری زیر بیان شده است. تور بهینه نیز در این گراف به صورت زیر است.
بخشی از درخت فضای حالت مسئله فروشنده دوره گرد درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی در هر گره از درخت فضای حالت، مسیر انتخاب شده تا آن گره گنجانده شده است. گرهی که برگ نباشد نشانگر تمام تورهاییست که با مسیر موجود در گره شروع می شوند. در هر برگ یک تور ممکن ذکر شده است.
بررسی امید بخشی یک گره درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی • برای بررسی امیدبخش بودن یک گره باید حد پایینی از طول توری که ممکن است از گسترش گره جاری بدست آید، پیدا کنیم. • اگر حد پایین طول تور در گره جاری، بزرگتر یا مساوی طول کمینه بهترین تور فعلی باشد، گره جاری غیرامیدبخش است. • در هر تور، یال انتخاب شده در هنگام خروج از رأس، در بهترین حالت باید کوتاهترین یال خارج شده از آن رأس (به رأسهای ویزیت نشده) باشد. • لذا حد پایینی طول تور، برابر با حاصل جمع مقادیر کمینه اندازه یالهای خروجی از رئوس ادامه مسیر خواهد بود.
مثال (محاسبه حد پایین طول تور) درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی فرض کنید ماتریس مجاورت گراف داده شده است. همچنین رأس مبدأ تور v1 باشد. حد پایینی طول تور با شروع از [1] به صورت زیر است. 4+7+4+2+4 = 21
مثال (محاسبه حد پایین طول تور)... درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی حد پایینی طول تور با شروع از [1,2] به صورت زیر است. 14+7+4+2+4 = 31
مثال (محاسبه حد پایین طول تور)... درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی حد پایینی طول تور با شروع از [1,2,3] به صورت زیر است. 14+7+7+2+4 = 34
روش حل مسئله فروشنده دوره گرد درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی • برای حل از روش بهترین جستجو با هرس کردن شاخه و حد استفاده می کنیم. • طول کوتاهترین تور در ابتدا برابر با بینهایت فرض می شود و با رسیدن به یک حل کاندید (برگ درخت) مقدار آن در صورت لزوم به روز می گردد. • کار گسترش گره ها از یک گره دلخواه مثل گره شماره 1 شروع می شود. • برای گره جاری ابتدا حد پایین طول تور محاسبه شده و در صورت امیدبخش بودن گره، فرزندان آن جهت ملاقات های بعدی در صف اولویت قرار میگیرند. • اولویت بر اساس کمترین حد پایین طول تور • سپس، گرهی که بهترین (کمترین) حد را دارد جهت گسترش از صف انتخاب می گردد. • کار تا جایی ادامه می یابد که دیگر هیچ گره امیدبخشی وجود نداشته باشد.
مثال (فروشنده دوره گرد) درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 1) گره [1] minlenght = ∞ Bound = 4+7+4+2+4 = 21 گره امید بخش است زیرا: (bound < minlenght)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 2) گره [1,2] minlenght = ∞ Bound = 14+7+4+2+4 = 31 گره امید بخش است زیرا: (bound < minlenght) گره [1,3] minlenght = ∞ Bound = 4+7+5+2+4 = 22 گره امید بخش است زیرا: (bound < minlenght) گره [1,4] minlenght = ∞ Bound = 10+7+4+2+7 = 30 گره امید بخش است زیرا: (bound < minlenght) گره [1,5] minlenght = ∞ Bound = 20+7+4+7+4 = 42 گره امید بخش است زیرا: (bound < minlenght)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 3) گره [1,3,2] minlenght = ∞ Bound = 4+7+5+2+4 = 22 گره امید بخش است زیرا: (bound < minlenght) گره [1,3,4] minlenght = ∞ Bound = 4+7+7+2+7 = 27 گره امید بخش است زیرا: (bound < minlenght) گره [1,3,5] minlenght = ∞ Bound = 4+8+16+7+4 = 39 گره امید بخش است زیرا: (bound < minlenght)
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی 4) گره [1,3,2,4] ==> تور حاصل [1,3,2,4,5,1] Bound = 4+8+5+2+18 = 37 حل کاندید (minlenght > bound) => minlenght = ∞ 37 • همچنین گره های [1,5] و [1,3,5] نیز دیگر امیدبخش نیستند. گره [1,3,2,5] ==> تور حاصل [1,3,2,5,4,1] Bound = 4+7+5+4+11 = 31 حل کاندید (minlenght > bound) => minlenght = 37 31 • همچنین گره [1,2] نیز دیگر امیدبخش نیست.
درس طراحی الگوریتم ها - فصل پنجم: راهبرد شاخه و حد - بیدکی