版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章分支限界法1學(xué)習(xí)要點(diǎn)理解分支限界法的剪枝搜索策略。掌握分支限界法的算法框架(1)隊(duì)列式(FIFO)分支限界法(2)優(yōu)先隊(duì)列式分支限界法通過(guò)應(yīng)用范例學(xué)習(xí)分支限界法的設(shè)計(jì)策略。(1)單源最短路徑問(wèn)題(2)裝載問(wèn)題;(3)0-1背包問(wèn)題;(4)旅行售貨員問(wèn)題26.1 分支限界法的基本思想分支限界法與回溯法(1)求解目標(biāo):回溯法的求解目標(biāo)是找出解空間樹(shù)中滿(mǎn)足約束條件的所有解,而分支限界法的求解目標(biāo)則是找出滿(mǎn)足約束條件的一個(gè)解,或是在滿(mǎn)足約束條件的解中找出在某種意義下的最優(yōu)解。
(2)搜索方式的不同:回溯法以深度優(yōu)先的方式搜索解空間樹(shù),而分支限界法則以廣度優(yōu)先或以最小耗費(fèi)優(yōu)先的方式搜索解空間樹(shù)。
36.1 分支限界法的基本思想
分支限界法常以廣度優(yōu)先或以最小耗費(fèi)(最大效益)優(yōu)先的方式搜索問(wèn)題的解空間樹(shù)。
此后,從活結(jié)點(diǎn)表中取下一結(jié)點(diǎn)成為當(dāng)前擴(kuò)展結(jié)點(diǎn),并重復(fù)上述結(jié)點(diǎn)擴(kuò)展過(guò)程。這個(gè)過(guò)程一直持續(xù)到找到所需的解或活結(jié)點(diǎn)表為空時(shí)為止。
在分支限界法中,每一個(gè)活結(jié)點(diǎn)只有一次機(jī)會(huì)成為擴(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)表中。46.1 分支限界法的基本思想常見(jiàn)的兩種分支限界法(1)隊(duì)列式(FIFO)分支限界法按照隊(duì)列先進(jìn)先出(FIFO)原則選取下一個(gè)節(jié)點(diǎn)為擴(kuò)展節(jié)點(diǎn)。
(2)優(yōu)先隊(duì)列式分支限界法按照優(yōu)先隊(duì)列中規(guī)定的優(yōu)先級(jí)選取優(yōu)先級(jí)最高的節(jié)點(diǎn)成為當(dāng)前擴(kuò)展節(jié)點(diǎn)。5n=3時(shí)的0-1背包問(wèn)題,用完全二叉樹(shù)表示的解空間,實(shí)例如下:w=[16,15,15],p=[45,25,25],c=30。(1)隊(duì)列式(FIFO)分支限界法(2)優(yōu)先隊(duì)列式分支限界法極大堆來(lái)表示活結(jié)點(diǎn)表的優(yōu)先隊(duì)列。61243301045620四城市旅行售貨員問(wèn)題。(1)隊(duì)列式(FIFO)分支限界法(2)優(yōu)先隊(duì)列式分支限界法極小堆來(lái)存儲(chǔ)活結(jié)點(diǎn)表76.50-1背包問(wèn)題算法的思想
首先,要對(duì)輸入數(shù)據(jù)進(jìn)行預(yù)處理,將各物品依其單位重量?jī)r(jià)值從大到小進(jìn)行排列。
在下面描述的優(yōu)先隊(duì)列分支限界法中,節(jié)點(diǎn)的優(yōu)先級(jí)是剩下的最大單位重量?jī)r(jià)值的物品裝滿(mǎn)剩余容量的價(jià)值和。
算法首先檢查當(dāng)前擴(kuò)展結(jié)點(diǎn)的左兒子結(jié)點(diǎn)的可行性。如果該左兒子結(jié)點(diǎn)是可行結(jié)點(diǎn),則將它加入到子集樹(shù)和活結(jié)點(diǎn)優(yōu)先隊(duì)列中。當(dāng)前擴(kuò)展結(jié)點(diǎn)的右兒子結(jié)點(diǎn)一定是可行結(jié)點(diǎn),僅當(dāng)右兒子結(jié)點(diǎn)滿(mǎn)足上界約束時(shí)才將它加入子集樹(shù)和活結(jié)點(diǎn)優(yōu)先隊(duì)列。當(dāng)擴(kuò)展到葉節(jié)點(diǎn)時(shí)為問(wèn)題的最優(yōu)值。811×w=11無(wú)效解w=4,v=40ub=70
2w=4,v=40ub=76
3w=0,v=0ub=6045
6w=9,v=65ub=69
7w=4,v=40ub=64
8w=12無(wú)效解
9
w=9,v=65
ub=65×優(yōu)先隊(duì)列式分支限界法求解0/1背包問(wèn)題
4個(gè)物品的重量分別為(4,7,5,3),價(jià)值分別為(40,42,25,12),背包容量W=10。
1
w=0,v=0
ub=10096.50-1背包問(wèn)題上界函數(shù)Boundcleft=c-cw;b=cp;while(i<=n&&w[i]<=cleft)//n表示物品總數(shù),cleft為剩余容量{cleft-=w[i];//w[i]表示i號(hào)的物品重量b+=p[i];//p[i]表示i號(hào)的物品價(jià)值i++;}if(i<=n)b+=p[i]/w[i]*cleft;//裝填剩余容量裝滿(mǎn)背包returnb;
//b為上界函數(shù)返回值106.50-1背包問(wèn)題
while(i!=n+1){//非葉結(jié)點(diǎn)
//檢查當(dāng)前擴(kuò)展結(jié)點(diǎn)的左兒子結(jié)點(diǎn)
Typewwt=cw+w[i];if(wt<=c){//左兒子結(jié)點(diǎn)為可行結(jié)點(diǎn)
if(cp+p[i]>bestp)bestp=cp+p[i];//bestp為當(dāng)前最優(yōu)值
AddLiveNode(up,cp+p[i],cw+w[i],true,i+1);}//up為價(jià)值上界//將一個(gè)新的活結(jié)點(diǎn)插入到子集樹(shù)和最大堆中,true表示為左子樹(shù)up=Bound(i+1);//檢查當(dāng)前擴(kuò)展結(jié)點(diǎn)的右兒子結(jié)點(diǎn)
if(up>=bestp)//右子樹(shù)可能含最優(yōu)解
AddLiveNode(up,cp,cw,false,i+1);
//取下一個(gè)擴(kuò)展節(jié)點(diǎn)(略)}分支限界搜索過(guò)程1122
6.7TSP問(wèn)題
TSP問(wèn)題是指旅行家要旅行n個(gè)城市,要求各個(gè)城市經(jīng)歷且僅經(jīng)歷一次然后回到出發(fā)城市,并要求所走的路程最短。
526 31 13
27 498
34 5C=∞
3 1 5 8
3158∞679 6∞42 74∞3 923∞(a)一個(gè)無(wú)向圖(b)無(wú)向圖的代價(jià)矩陣圖示無(wú)向圖及其代價(jià)矩陣1223
采用貪心法求得近似解為1→3→5→4→2→1,其路徑長(zhǎng)度為1+2+3+7+3=16,這可以作為T(mén)SP問(wèn)題的上界。 把矩陣中每一行最小的元素相加,可以得到一個(gè)簡(jiǎn)單的下界,其路徑長(zhǎng)度為1+3+1+3+2=10,但是還有一個(gè)信息量更大的下界:考慮一個(gè)TSP問(wèn)題的完整解,在每條路徑上,每個(gè)城市都有兩條鄰接邊,一條是進(jìn)入這個(gè)城市的,另一條是離開(kāi)這個(gè)城市的,那么,如果把矩陣中每一行最小的兩個(gè)元素相加再除以2,如果圖中所有的代價(jià)都是整數(shù),再對(duì)這個(gè)結(jié)果向上取整,就得到了一個(gè)合理的下界。
lb=((1+3)+(3+6)+(1+2)+(3+4)+(2+3))/2=14
于是,得到了目標(biāo)函數(shù)的界[14,16]。需要強(qiáng)調(diào)的是,這個(gè)解并不是一個(gè)合法的選擇(可能沒(méi)有構(gòu)成哈密頓回路),它僅僅給出了一個(gè)參考下界。13∑2c[r][r∑∑r行最小的兩個(gè)元素)/224部分解的目標(biāo)函數(shù)值的計(jì)算方法例如,以下無(wú)向圖中,如果部分解包含邊(1,4),則該部分解的下界是lb=((1+5)+(3+6)+(1+2)+(3+5)+(2+3))/2=16。ri∈Urj?Ulb=(k?1
i=1ii+1]+ri行不在路徑上的最小元素+j
526 31 13
27 498
34 5C=∞
3 1 5 8
3158∞679 6∞42 74∞3 923∞(a)一個(gè)無(wú)向圖(b)無(wú)向圖的代價(jià)矩陣圖示無(wú)向圖及其代價(jià)矩陣1425
21→2lb=14×
31→3lb=14
41→4lb=16
51→5lb=19
62→3lb=16
72→4lb=16
82→5lb=19×
93→2lb=16
103→4lb=15
113→5lb=14lb=1912×135→25→4lb=16lb=14 14 4→2lb=18
164→5
15×4→2lb=15 17 5→2×分支限界法求解TSP問(wèn)題示例
1
start lb=141526具體的搜索過(guò)程如下(加黑表示該路徑上已經(jīng)確定的邊):(1)在根結(jié)點(diǎn)1,根據(jù)限界函數(shù)計(jì)算目標(biāo)函數(shù)的值為lb=((1+3)+(3+6)+(1+2)+(3+4)+(2+3))/2=14;(2)在結(jié)點(diǎn)2,從城市1到城市2,路徑長(zhǎng)度為3,目標(biāo)函數(shù)的值為((1+3)+(3+6)+(1+2)+(3+4)+(2+3))/2=14,將結(jié)點(diǎn)2加入待處理結(jié)點(diǎn)活結(jié)點(diǎn)表中;在結(jié)點(diǎn)3,從城市1到城市3,路徑長(zhǎng)度為1,目標(biāo)函數(shù)的值為((1+3)+(3+6)+(1+2)+(3+4)+(2+3))/2=14,將結(jié)點(diǎn)3加入活結(jié)點(diǎn)表中;在結(jié)點(diǎn)4,從城市1到城市4,路徑長(zhǎng)度為5,目標(biāo)函數(shù)的值為((1+5)+(3+6)+(1+2)+(3+5)+(2+3))/2=16,將結(jié)點(diǎn)4加入活結(jié)點(diǎn)表中;在結(jié)點(diǎn)5,從城市1到城市5,路徑長(zhǎng)度為8,目標(biāo)函數(shù)的值為((1+8)+(3+6)+(1+2)+(3+5)+(2+8))/2=19,超出目標(biāo)函數(shù)的界,將結(jié)點(diǎn)5丟棄;166.7旅行售貨員問(wèn)題算法描述template<classType>classTraveling{friendvoidmain(void);public:TypeBBTSP(intv[]);private:
intn;//圖G的頂點(diǎn)數(shù)
Type**a,//鄰接矩陣
NoEdge,//無(wú)邊標(biāo)志
cc,//當(dāng)前費(fèi)用
bestc;//當(dāng)前最小費(fèi)用};176.7旅行售貨員問(wèn)題算法描述template<classType>classMinHeapNode{friendTraveling<Type>;public:operatorType()const{returnlcost;}private:Typelcost,//子樹(shù)費(fèi)用的下界
cc,//當(dāng)前費(fèi)用
rcost;//x[s:n-1]中頂點(diǎn)最小出邊費(fèi)用和
ints,//根節(jié)點(diǎn)到當(dāng)前結(jié)點(diǎn)的路徑為x[0:s]*x;//需要進(jìn)一步搜索的結(jié)點(diǎn)為x[s+1:n-1]};186.7旅行售貨員問(wèn)題算法描述template<classType>TypeTraveling<Type>::BBTSP(intv[]){//解旅行售貨員的優(yōu)先隊(duì)列分支定界法,定義最小堆容量為1000
MinHeap<MinHeapNode<Type>>H(1000);Type*MinOut=newType[n+1];//計(jì)算MinOut[i]=頂點(diǎn)i的最小出邊費(fèi)用
TypeMinSum=0;//最小出邊的費(fèi)用和
int
i,j;
for(i=1;i<=n;i++){TypeMin=NoEdge;
for(j=1;j<=n;j++)
if(a[i][j]!=NoEdge&&(a[i][j]<Min||Min==NoEdge))Min=a[i][j];
if(Min==NoEdge)returnNoEdge;//無(wú)回路
MinOut[i]=Min;
MinSum+=Min;}196.7旅行售貨員問(wèn)題算法描述//初始化
MinHeapNode<Type>E;
E.x=newint[n];
for(i=0;i<n;i++)
E.x[i]=i+1;//需要進(jìn)一步搜索的結(jié)點(diǎn)為x[s+1:n-1]
E.s=0;//根節(jié)點(diǎn)到當(dāng)前結(jié)點(diǎn)的路徑為x[0:s]
E.cc=0;
E.rcost=MinSum;//x[s:n-1]中頂點(diǎn)最小出邊費(fèi)用和Typebestc=NoEdge;206.7旅行售貨員問(wèn)題算法描述//搜索排列空間樹(shù)
while(E.s<n-1){//非葉節(jié)點(diǎn)
if(E.s==n-2){//當(dāng)前擴(kuò)展結(jié)點(diǎn)是葉結(jié)點(diǎn)的父結(jié)點(diǎn)
//再加2條邊構(gòu)成回路
//判斷回路是否優(yōu)于當(dāng)前最優(yōu)解
if(a[E.x[n-2]][E.x[n-1]]!=NoEdge&&a[E.x[n-1]][1]!=NoEdge&&(E.cc+a[E.x[n-2]][E.x[n-1]]+a[E.x[n-1]][1]<bestc||bestc==NoEdge)){//是一條比之前找到的費(fèi)用更小的回路
bestc=E.cc+a[E.x[n-2]][E.x[n-1]]+a[E.x[n-1]][1];
E.cc=bestc;
E.lcost=bestc;
E.s++;
H.Insert(E);}//把滿(mǎn)足if條件的葉結(jié)點(diǎn)插入到優(yōu)先隊(duì)列elsedelete[]E.x;}//不滿(mǎn)足條件就舍棄該葉結(jié)點(diǎn)
21else{//非葉節(jié)點(diǎn)的父結(jié)點(diǎn)時(shí),產(chǎn)生當(dāng)前擴(kuò)展結(jié)點(diǎn)的所有兒子結(jié)點(diǎn)
for(i=E.s+1;i<n;i++){
if(a[E.x[E.s]][E.x[i]]!=NoEdge){//可行子結(jié)點(diǎn)
Typecc=E.cc+a[E.x[E.s]][E.x[i]];Typercost=E.rcost-MinOut[E.x[E.s]];Typeb=cc+rcost;//子節(jié)點(diǎn)的下界
if(b<bestc||bestc==NoEdge){//子樹(shù)可能含有最優(yōu)解,結(jié)點(diǎn)插入最小堆
MinHeapNode<Type>N;
N.x=newint[n];
for(j=0;j<n;j++)
N.x[j]=E.x[j];N.x[E.s+1]=E.x[i];//下一個(gè)擴(kuò)展結(jié)點(diǎn)
N.x[i]=E.x[E.s+1];//原先的擴(kuò)展結(jié)點(diǎn)被交換到后面
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工晉升、降級(jí)管理制度
- 蛋糕店食品安全規(guī)章制度范本
- 前端開(kāi)發(fā)常見(jiàn)錯(cuò)誤與修復(fù)
- 2026年大學(xué)英語(yǔ)六級(jí)模擬題及參考答案精講
- 2026年健身領(lǐng)域評(píng)估培訓(xùn)健康身體素質(zhì)測(cè)試及評(píng)估標(biāo)準(zhǔn)解析
- 2026年AI健康管理與診斷測(cè)試題
- 2026年物流信息系統(tǒng)操作與維護(hù)試題
- 2026年經(jīng)濟(jì)政策對(duì)金融市場(chǎng)的影響分析考試練習(xí)題
- 2026年環(huán)境保護(hù)與生態(tài)治理考試題
- 2026年?duì)I養(yǎng)師專(zhuān)業(yè)知識(shí)與營(yíng)養(yǎng)學(xué)基礎(chǔ)模擬試題庫(kù)
- 婦科醫(yī)師年終總結(jié)和新年計(jì)劃
- 2026海南安??毓捎邢挢?zé)任公司招聘11人筆試模擬試題及答案解析
- 裝飾裝修工程施工組織設(shè)計(jì)方案(二)
- 2026上海碧海金沙投資發(fā)展有限公司社會(huì)招聘參考題庫(kù)必考題
- 保險(xiǎn)業(yè)客戶(hù)服務(wù)手冊(cè)(標(biāo)準(zhǔn)版)
- 檢驗(yàn)科內(nèi)控制度
- DB44-T 2771-2025 全域土地綜合整治技術(shù)導(dǎo)則
- 智能水務(wù)管理基礎(chǔ)知識(shí)單選題100道及答案
- 《職業(yè)院校與本科高校對(duì)口貫通分段培養(yǎng)協(xié)議書(shū)》
- 危巖帶治理工程初步設(shè)計(jì)計(jì)算書(shū)
- 精神病學(xué)考試重點(diǎn)第七版
評(píng)論
0/150
提交評(píng)論