資源描述:
《《分支限界法》ppt課件》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第六章分支限界法1第六章分支限界法本章主要知識點(diǎn)6.1分支限界法的基本思想6.2單源最短路徑問題6.3裝載問題6.4布線問題6.50-1背包問題6.6最大團(tuán)問題6.7旅行售貨員問題6.8電路板排列問題6.9批處理作業(yè)調(diào)度26.1分支限界法的基本思想1.分支限界法與回溯法的不同(1)求解目標(biāo):回溯法的求解目標(biāo)是找出解空間樹中滿足約束條件的所有解,而分支限界法的求解目標(biāo)則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出在某種意義下的最優(yōu)解。(2)搜索方式的不同:回溯法以深度優(yōu)先的方式搜索解空間
2、樹,而分支限界法則以廣度優(yōu)先或以最小耗費(fèi)優(yōu)先的方式搜索解空間樹。36.1分支限界法的基本思想2.分支限界法基本思想分支限界法常以廣度優(yōu)先或以最小耗費(fèi)(最大效益)優(yōu)先的方式搜索問題的解空間樹。在分支限界法中,每一個活結(jié)點(diǎn)只有一次機(jī)會成為擴(kuò)展結(jié)點(diǎn)?;罱Y(jié)點(diǎn)一旦成為擴(kuò)展結(jié)點(diǎn),就一次性產(chǎn)生其所有兒子結(jié)點(diǎn)。在這些兒子結(jié)點(diǎn)中,導(dǎo)致不可行解或?qū)е路亲顑?yōu)解的兒子結(jié)點(diǎn)被舍棄,其余兒子結(jié)點(diǎn)被加入活結(jié)點(diǎn)表中。此后,從活結(jié)點(diǎn)表中取下一結(jié)點(diǎn)成為當(dāng)前擴(kuò)展結(jié)點(diǎn),并重復(fù)上述結(jié)點(diǎn)擴(kuò)展過程。這個過程一直持續(xù)到找到所需的解或活結(jié)點(diǎn)表為空
3、時為止。46.1分支限界法的基本思想3.常見的兩種分支限界法(1)隊(duì)列式(FIFO)分支限界法按照隊(duì)列先進(jìn)先出(FIFO)原則選取下一個節(jié)點(diǎn)為擴(kuò)展節(jié)點(diǎn)。(2)優(yōu)先隊(duì)列式分支限界法按照優(yōu)先隊(duì)列中規(guī)定的優(yōu)先級選取優(yōu)先級最高的節(jié)點(diǎn)成為當(dāng)前擴(kuò)展節(jié)點(diǎn)。56.2單源最短路徑問題1.問題描述下面以一個例子來說明單源最短路徑問題:在下圖所給的有向圖G中,每一邊都有一個非負(fù)邊權(quán)。要求圖G的從源頂點(diǎn)s到目標(biāo)頂點(diǎn)t之間的最短路徑。66.2單源最短路徑問題下圖是用優(yōu)先隊(duì)列式分支限界法解有向圖G的單源最短路徑問題產(chǎn)生的解空
4、間樹。其中,每一個結(jié)點(diǎn)旁邊的數(shù)字表示該結(jié)點(diǎn)所對應(yīng)的當(dāng)前路長。76.2單源最短路徑問題2.算法思想解單源最短路徑問題的優(yōu)先隊(duì)列式分支限界法用一極小堆來存儲活結(jié)點(diǎn)表。其優(yōu)先級是結(jié)點(diǎn)所對應(yīng)的當(dāng)前路長。算法從圖G的源頂點(diǎn)s和空優(yōu)先隊(duì)列開始。結(jié)點(diǎn)s被擴(kuò)展后,它的兒子結(jié)點(diǎn)被依次插入堆中。此后,算法從堆中取出具有最小當(dāng)前路長的結(jié)點(diǎn)作為當(dāng)前擴(kuò)展結(jié)點(diǎn),并依次檢查與當(dāng)前擴(kuò)展結(jié)點(diǎn)相鄰的所有頂點(diǎn)。如果從當(dāng)前擴(kuò)展結(jié)點(diǎn)i到頂點(diǎn)j有邊可達(dá),且從源出發(fā),途經(jīng)頂點(diǎn)i再到頂點(diǎn)j的所相應(yīng)的路徑的長度小于當(dāng)前最優(yōu)路徑長度,則將該頂點(diǎn)作為
5、活結(jié)點(diǎn)插入到活結(jié)點(diǎn)優(yōu)先隊(duì)列中。這個結(jié)點(diǎn)的擴(kuò)展過程一直繼續(xù)到活結(jié)點(diǎn)優(yōu)先隊(duì)列為空時為止。86.2單源最短路徑問題3.剪枝策略在算法擴(kuò)展結(jié)點(diǎn)的過程中,一旦發(fā)現(xiàn)一個結(jié)點(diǎn)的下界不小于當(dāng)前找到的最短路長,則算法剪去以該結(jié)點(diǎn)為根的子樹。在算法中,利用結(jié)點(diǎn)間的控制關(guān)系進(jìn)行剪枝。從源頂點(diǎn)s出發(fā),2條不同路徑到達(dá)圖G的同一頂點(diǎn)。由于兩條路徑的路長不同,因此可以將路長長的路徑所對應(yīng)的樹中的結(jié)點(diǎn)為根的子樹剪去。96.2單源最短路徑問題while(true){//搜索問題的解空間for(intj=1;j<=n;j++)if
6、(a[enode.i][j]7、veMin();}頂點(diǎn)I和j間有邊,且此路徑長小于原先從原點(diǎn)到j(luò)的路徑長106.3裝載問題1.問題描述有一批共個集裝箱要裝上2艘載重量分別為C1和C2的輪船,其中集裝箱i的重量為Wi,且裝載問題要求確定是否有一個合理的裝載方案可將這個集裝箱裝上這2艘輪船。如果有,找出一種裝載方案。容易證明:如果一個給定裝載問題有解,則采用下面的策略可得到最優(yōu)裝載方案。(1)首先將第一艘輪船盡可能裝滿;(2)將剩余的集裝箱裝上第二艘輪船。116.3裝載問題2.隊(duì)列式分支限界法在算法的while循環(huán)中,首先檢測當(dāng)前擴(kuò)
8、展結(jié)點(diǎn)的左兒子結(jié)點(diǎn)是否為可行結(jié)點(diǎn)。如果是則將其加入到活結(jié)點(diǎn)隊(duì)列中。然后將其右兒子結(jié)點(diǎn)加入到活結(jié)點(diǎn)隊(duì)列中(右兒子結(jié)點(diǎn)一定是可行結(jié)點(diǎn))。2個兒子結(jié)點(diǎn)都產(chǎn)生后,當(dāng)前擴(kuò)展結(jié)點(diǎn)被舍棄?;罱Y(jié)點(diǎn)隊(duì)列中的隊(duì)首元素被取出作為當(dāng)前擴(kuò)展結(jié)點(diǎn),由于隊(duì)列中每一層結(jié)點(diǎn)之后都有一個尾部標(biāo)記-1,故在取隊(duì)首元素時,活結(jié)點(diǎn)隊(duì)列一定不空。當(dāng)取出的元素是-1時,再判斷當(dāng)前隊(duì)列是否為空。如果隊(duì)列非空,則將尾部標(biāo)記-1加入活結(jié)點(diǎn)隊(duì)列,算法開始處理下一層的活結(jié)點(diǎn)。126.3裝載問題2.隊(duì)列式分支限界法while(true){