Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
228,59 KB
Nội dung
Ph ng pháp nhánh c n (brand and bound) GVGD: Tr ng Ph cH i Ph ng pháp nhánh c n K thu t quay lui t t t c kh n ng theo mô hình phân c p đ tìm c u hình Ph S ng pháp nhánh c n d ng quay lui đ tìm c u hình t i u ánh giá t t c c u hình đ tìm c u hình t i d n đ n s bùng n t h p u: u N u vi c ch n thành ph n xi không d n đ n c u hình t i u s gây lãng phí tài nguyên đ tìm thành ph n ti p theo xi+1, xi+2, C n t n d ng thông tin bi t đ ch c ch n không th t i u s m lo i b c u hình Ph ng pháp nhánh c n K thu t nhánh c n (g i t t nhánh c n) m t d ng c i ti n c a k thu t quay lui áp d ng cho toán t i u ánh giá l i giá tr t i m i l n quay lui u c c b (c n) c a nhánh sau S d ng c n đ lo i b nh ng nhánh d ki m nh m gi m chi phí: t a nhánh th a c a tìm ánh giá c n v n đ khó kh n nh t vi c áp d ng ph ng pháp nhánh c n Ph ng pháp nhánh c n Ýt ng Kh i t o m t c u hình BEST cho toán: kh i t o c n Tính chi phí c a c u hình trình xây d ng N u t t h n BEST: c p nh t c u hình t i Ng c l i quay lui đ tìm ph ng án khác u ti p t c Ph ng pháp nhánh c n Mô hình t ng quát c a k thu t nhánh c n đ ti n t mô hình đ quy nh sau Try(i) For (j t If (ch Ch If cc i p kh n ng c a X[i]) p nh n j) Then n kh n ng j cho X[i] (X[i] cu i c u hình) Then Else If (v n t t h n BEST) Then Try(i + 1) Cu i If Cu i If Cu i for Cu i Try Ph ng pháp nhánh c n Khi gi i thu t nhánh c n đ b c sau c th c hi n theo NhanhVaCan() BEST = +; //N u bi t X’ ph ng án t i //BEST = f(X’); Try(0); If (BEST < +) Then Else Cu i If Cu i NhanhVaCan u hi n t i Ph ng pháp nhánh c n Bài toán ng Problem) i du l ch (TSP - Travelling Salesman M t b n đ g m N thành ph đ c đánh s t đ n N-1 M t du khách xu t phát t i thành ph mu n tham quan t t c thành ph , m i n i đ n l n r i tr v thành ph xu t phát Bi t r ng gi a thành ph có th l u thông tr c ti p s t n m t chi phí nh t đ nh Yêu c u xác đ nh hành trình du l ch v i chi phí nh nh t Ph T ng pháp nhánh c n ch c d S d ng m ng chi u g m N dòng, N c t đ phí l i gi a thành ph : ma tr n chi phí li u C[i][j] = v: cho bi t vi c t thành ph j t n chi phí v thành ph C[i][j] = +: cho bi t đ thành ph i đ n thành ph j bi u di n chi i đ n tr c ti p ng tr c ti p t S d ng m ng chi u X[0], X[1], …, X[N] đ l u tr m t nghi m toán (th t thành ph th m hành trình) Ph ng pháp nhánh c n Ví d đ th bi u di n ma tr n chi phí t nh sau ng 0 1 2 4 1 10 ng Ph ng pháp nhánh c n Nh n xét x0 = thành ph xu t phát Hành trình c n (x0 = 0, x1, x2, , xN-1, xN = 0) tìm có d ng M t hành trình (x1, x2, , xN-1) m t hoán v c a thành ph {1, 2, …, N-1} 11 Ph ng pháp nhánh c n Cây tìm ki m TSP theo k thu t quay lui 1 4 3 2 2 2 1 1 0 0 0 11 11 12 Ph ng pháp nhánh c n Duy t quay lui Ch n x1 m t TP có th đ n tr c ti p t x0 Ch n x2 m t TP ch a tham quan có th đ n tr c ti p t x3 … Ch n xi m t TP ch a tham quan có th tr c ti p t xi-1 (1 ≤ i ≤ N-1) 13 đ n Ph ng pháp nhánh c n Nhánh c n Kh i t o c u hình BEST v i chi phí MAX = +∞ Ki m tra chi phí tính cho t i đ n xi < chi phí c a BEST N u ch n xi thành ph th m ti p theo Ng c l i th thành ph khác (c t nhánh) Khi đ n xN, ki m tra n u có đ ng tr c ti p v x1 mà t ng chi phí < chi phí c a BEST c p nh t l i BEST Sau quay lui mà chi phí c a BEST v n MAX toán l i gi i, ng c l i BEST hành trình t t nh t 14 Ph ng pháp nhánh c n Cây tìm ki m TSP theo k thu t nhánh c n 1 4 3 2 2 2 1 1 0 0 0 11 11 15 Ph B ng pháp nhánh c n c 1: kh i t o cho hành trình void Init() { for (int i = 0; i < N; i++) Free[i] = true; X[0] = 0; //xu t phát t i thành ph Free[0] = false; //đã th m thành ph Cost = 0; //chi phí xu t phát Best = +; //kh i t o chi phí t t nh t } 16 Ph B ng pháp nhánh c n c 2: th t c Try tìm thành ph th m ti p theo Try(i) For (thành ph j {2, , n}) If (ch a tham quan thành ph j) Then Tham quan thành ph j, tính chi phí ánh đ u th m thành ph j If (i = n) Then C p nh t hành trình Else If (chi phí hi n t i < BEST) Then Try(i + 1); Cu i If B đánh đ u th m thành ph Cu i If Cu i For Cu i Try 17 j Ph B ng pháp nhánh c n c 2: tìm đ ng ti p theo cho hành trình void Try(int i) { for (int j = 1; j < N; j++) { if (Free[j]) { X[i] = j; Free[j] = false; Cost = Cost + C[X[i-1]][X[i]]; if (i == N - 1) UpDate(); else if (Cost < Best) Try(X, N, C, i + 1); Cost = Cost - C[X[i-1]][X[i]]; Free[j] = true; } } } 18 Ph ng pháp nhánh c n C p nh t hành trình t i u void Update() { //n u chi phí tr v < chi phí t i if (Cost + C[X[N-1]][X[0]] < Best) { //c p nh t l i chi phí t i u Best = Cost + C[X[N-1]][X[0]]; Print(X, N); } } 19 u [...]... l i BEST là hành trình t t nh t 14 Ph ng pháp nhánh và c n Cây tìm ki m TSP theo k thu t nhánh c n 0 3 1 1 2 3 4 1 4 3 2 3 2 2 3 4 1 2 2 1 2 2 3 4 1 2 1 1 1 2 1 1 2 1 3 2 0 0 0 0 0 0 9 11 6 11 6 9 15 3 Ph B ng pháp nhánh và c n c 1: kh i t o cho hành trình void Init() { for (int i = 0; i < N; i++) Free[i] = true; X[0] = 0; //xu t phát t i thành ph 0 Free[0] = false; //đã th m thành ph 0 Cost = 0; ... 14 Ph ng pháp nhánh c n Cây tìm ki m TSP theo k thu t nhánh c n 1 4 3 2 2 2 1 1 0 0 0 11 11 15 Ph B ng pháp nhánh c n c 1: kh i t o cho hành trình void Init() { for (int i = 0; i < N; i++)