Giáo trình Toán rời rạc Chương V: Một số bài toán tối ưu trên đồ thị39286

20 6 0
Giáo trình Toán rời rạc  Chương V: Một số bài toán tối ưu trên đồ thị39286

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHƯƠNG V MỘT SỐ BÀI TOÁN TỐI ƯU TRÊN ĐỒ THỊ 5.1 ĐỒ THỊ CĨ TRỌNG SỐ VÀ BÀI TỐN ĐƯỜNG ĐI NGẮN NHẤT 5.1.1 Mở đầu: Trong đời sống, thường gặp tình sau: để từ địa điểm A đến địa điểm B thành phố, có nhiều đường đi, nhiều cách đi; có lúc ta chọn đường ngắn (theo nghĩa cự ly), có lúc lại cần chọn đường nhanh (theo nghĩa thời gian) có lúc phải cân nhắc để chọn đường rẻ tiền (theo nghĩa chi phí), v.v Có thể coi sơ đồ đường từ A đến B thành phố đồ thị, với đỉnh giao lộ (A B coi giao lộ), cạnh đoạn đường nối hai giao lộ Trên cạnh đồ thị này, ta gán số dương, ứng với chiều dài đoạn đường, thời gian đoạn đường cước phí vận chuyển đoạn đường đó, Đồ thị có trọng số đồ thị G=(V,E) mà cạnh (hoặc cung) eE gán số thực m(e), gọi trọng số cạnh (hoặc cung) e Trong phần này, trọng số cạnh xét số dương gọi chiều dài cạnh Mỗi đường từ đỉnh u đến đỉnh v, có chiều dài m(u,v), tổng chiều dài cạnh mà qua Khoảng cách d(u,v) hai đỉnh u v chiều dài đường ngắn (theo nghĩa m(u,v) nhỏ nhất) đường từ u đến v Có thể xem đồ thị G đồ thị có trọng số mà cạnh có chiều dài Khi đó, khoảng cách d(u,v) hai đỉnh u v chiều dài đường từ u đến v ngắn nhất, tức đường qua cạnh 5.1.2 Bài tốn tìm đường ngắn nhất: Cho đơn đồ thị liên thơng, có trọng số G=(V,E) Tìm khoảng cách d(u0,v) từ đỉnh u0 cho trước đến đỉnh v G tìm đường ngắn từ u0 đến v Có số thuật tốn tìm đường ngắn nhất; đây, ta có thuật toán E Dijkstra, nhà toán học người Hà Lan, đề xuất năm 1959 Trong phiên mà ta trình bày, người ta giả sử đồ thị vơ hướng, trọng số dương Chỉ cần thay đổi đơi chút giải tốn tìm đường ngắn đồ thị có hướng Phương pháp thuật toán Dijkstra là: xác định đỉnh có khoảng cách đến u0 từ nhỏ đến lớn Trước tiên, đỉnh có khoảng cách đến a nhỏ a, với d(u0,u0)=0 Trong đỉnh v  u0, tìm đỉnh có khoảng cách k1 đến u0 nhỏ Đỉnh phải đỉnh kề với u0 Giả sử u1 Ta có: d(u0,u1) = k1 67 DeThiMau.vn Trong đỉnh v  u0 v  u1, tìm đỉnh có khoảng cách k2 đến u0 nhỏ Đỉnh phải đỉnh kề với u0 với u1 Giả sử u2 Ta có: d(u0,u2) = k2 Tiếp tục trên, tìm khoảng cách từ u0 đến đỉnh v G Nếu V={u0, u1, , un} thì: = d(u0,u0) < d(u0,u1) < d(u0,u2) < < d(u0,un) 5.1.3 Thuật toán Dijkstra: procedure Dijkstra (G=(V,E) đơn đồ thị liên thông, có trọng số với trọng số dương) {G có đỉnh a=u0, u1, , un=z trọng số m(ui,uj), với m(ui,uj) =  (ui,uj) không cạnh G} for i := to n L(ui) :=  L(a) := S := V \ {a} u := a while S   begin for tất đỉnh v thuộc S if L(u) +m(u,v) < L(v) then L(v) := L(u)+m(u,v) u := đỉnh thuộc S có nhãn L(u) nhỏ {L(u): độ dài đường ngắn từ a đến u} S := S \ {u} end Thí dụ 1: Tìm khoảng cách d(a,v) từ a đến đỉnh v tìm đường ngắn từ a đến v cho đồ thị G sau b 1 a 2 e n c d g m 68 DeThiMau.vn h k L(a) L(b) L(c) L(d) L(e) L(g) L(h) L(k) L(m) L(n)                                              10                             5.1.4 Định lý: Thuật tốn Dijkstra tìm đường ngắn từ đỉnh cho trước đến đỉnh tuỳ ý đơn đồ thị vô hướng liên thông có trọng số Chứng minh: Định lý chứng minh quy nạp Tại bước k ta có giả thiết quy nạp là: (i) Nhãn đỉnh v không thuộc S độ dài đường ngắn từ đỉnh a tới đỉnh này; (ii) Nhãn đỉnh v S độ dài đường ngắn từ đỉnh a tới đỉnh đường chứa đỉnh (ngồi đỉnh này) khơng thuộc S Khi k=0, tức chưa có bước lặp thực hiện, S=V \ {a}, độ dài đường ngắn từ a tới đỉnh khác a  độ dài đường ngắn từ a tới (ở đây, cho phép đường khơng có cạnh) Do bước sở Giả sử giả thiết quy nạp với bước k Gọi v đỉnh lấy khỏi S bước lặp k+1, v đỉnh thuộc S cuối bước k có nhãn nhỏ (nếu có nhiều đỉnh có nhãn nhỏ chọn đỉnh làm v) Từ giả thiết quy nạp ta thấy 69 DeThiMau.vn trước vào vòng lặp thứ k+1, đỉnh không thuộc S gán nhãn độ dài đường ngắn từ a Đỉnh v phải gán nhãn độ dài đường ngắn từ a Nếu điều khơng xảy cuối bước lặp thứ k có đường với độ dài nhỏ Lk(v) chứa đỉnh thuộc S (vì Lk(v) độ dài đường ngắn từ a tới v chứa đỉnh không thuộc S sau bước lặp thứ k) Gọi u đỉnh đường thuộc S Đó đường với độ dài nhỏ Lk(v) từ a tới u chứa đỉnh không thuộc S Điều trái với cách chọn v Do (i) cịn cuối bước lặp k+1 Gọi u đỉnh thuộc S sau bước k+1 Đường ngắn từ a tới u chứa đỉnh không thuộc S chứa v khơng Nếu khơng chứa v theo giả thiết quy nạp độ dài Lk(v) Nếu chứa v tạo thành đường từ a tới v với độ dài ngắn chứa đỉnh khơng thuộc S khác v, kết thúc cạnh từ v tới u Khi độ dài Lk(v)+m(v,u) Điều chứng tỏ (ii) Lk+1(u)=min(Lk(u), Lk(v)+m(v,u)) 5.1.5 Mệnh đề: Thuật tốn Dijkstra tìm đường ngắn từ đỉnh cho trước đến đỉnh tuỳ ý đơn đồ thị vô hướng liên thông có trọng số có độ phức tạp O(n2) Chứng minh: Thuật tốn dùng khơng q n1 bước lặp Trong bước lặp, dùng không 2(n1) phép cộng phép so sánh để sửa đổi nhãn đỉnh Ngồi ra, đỉnh thuộc Sk có nhãn nhỏ nhờ khơng q n1 phép so sánh Do thuật tốn có độ phức tạp O(n2) 5.1.6 Thuật tốn Floyd: Cho G=(V,E) đồ thị có hướng, có trọng số Để tìm đường ngắn cặp đỉnh G, ta áp dụng thuật tốn Dijkstra nhiều lần áp dụng thuật toán Floyd trình bày Giả sử V={v1, v2, , vn} có ma trận trọng số W  W0 Thuật tốn Floyd xây dựng dãy ma trận vng cấp n Wk (0  k  n) sau: procedure Xác định Wn for i := to n for j := to n W[i,j] := m(vi,vj) {W[i,j] phần tử dòng i cột j ma trận W0} for k := to n if W[i,k] +W[k,j] < W[i,j] then W[i,j] := W[i,k] +W[k,j] {W[i,j] phần tử dòng i cột j ma trận Wk} 5.1.7 Định lý: Thuật toán Floyd cho ta ma trận W*=Wn ma trận khoảng cách nhỏ đồ thị G 70 DeThiMau.vn Chứng minh: Ta chứng minh quy nạp theo k mệnh đề sau: Wk[i,j] chiều dài đường ngắn đường nối đỉnh vi với đỉnh vj qua đỉnh trung gian {v1, v2, , vk} Trước hết mệnh đề hiển nhiên với k=0 Giả sử mệnh đề với k-1 Xét Wk[i,j] Có hai trường hợp: 1) Trong đường chiều dài ngắn nối vi với vj qua đỉnh trung gian {v1, v2, , vk}, có đường  cho vk   Khi  đường ngắn nối vi với vj qua đỉnh trung gian {v1, v2, , vk-1}, nên theo giả thiết quy nạp, Wk-1[i,j] = chiều dài   Wk-1[i,k]+Wk-1[k,j] Do theo định nghĩa Wk Wk[i,j]=Wk-1[i,j] 2) Mọi đường chiều dài ngắn nối vi với vj qua đỉnh trung gian {v1, v2, , vk}, chứa vk Gọi  = vi vk vj đường ngắn v1 vk vk vj đường ngắn qua đỉnh trung gian {v1, v2, , vk-1} Wk-1[i,k]+Wk-1[k,j] = chiều dài(v1 vk) + chiều dài(vk vj) = chiều dài  < Wk-1[i,j] Do theo định nghĩa Wk ta có: Wk[i,j] = Wk-1[i,k]+Wk-1[k,j] Thí dụ 2: Xét đồ thị G sau: v1 v4 v3 2 v2 v5 v6 Áp dụng thuật tốn Floyd, ta tìm (các ô trống )        3  W = W0 =    2        71 DeThiMau.vn     W1 =   2       3  , W2 =            2       3   10       W3 =   2    11 14   7 3  , W4 = 11  10         2    10 13      11    9  3  W5 =  7 2  4  12   6 3  , W* = W6 = 10    11 9  3 7  7 2  4  4 7 9 5 12    3  10    Thuật tốn Floyd áp dụng cho đồ thị vô hướng đồ thị có hướng Ta cần thay cạnh vơ hướng (u,v) cặp cạnh có hướng (u,v) (v,u) với m(u,v)=m(v,u) Tuy nhiên, trường hợp này, phần tử đường chéo ma trận W cần đặt Đồ thị có hướng G liên thông mạnh phần tử nằm đường chéo ma trận trọng số ngắn W* hữu hạn 5.2 BÀI TOÁN LUỒNG CỰC ĐẠI 5.2.1 Luồng vận tải: 5.2.1.1 Định nghĩa: Mạng vận tải đồ thị có hướng, khơng có khun có trọng số G=(V,E) với V={v0, v1, , vn} thoả mãn: 1) Mỗi cung e  E có trọng số m(e) số nguyên không âm gọi khả thông qua cung e 2) Có đỉnh v0 khơng có cung vào, tức degt(v0)=0 Đỉnh v0 gọi lối vào hay đỉnh phát mạng 3) Có đỉnh khơng có cung ra, tức dego(vn)=0 Đỉnh gọi lối hay đỉnh thu mạng 72 DeThiMau.vn 5.2.1.2 Định nghĩa: Để định lượng khai thác, tức xác định lượng vật chất chuyển qua mạng vận tải G=(V,E), người ta đưa khái niệm luồng vận tải định nghĩa sau Hàm  xác định tập cung E nhận giá trị nguyên gọi luồng vận tải mạng vận tải G  thoả mãn: 1) (e)  0, e  E 2)   (e) =   (e) , v V, vv0, vvn Ở đây,   (v)={eE | e có đỉnh cuối v}, e  ( v ) e  ( v )   (v)={eE | e có đỉnh đầu v} 3) (e)  m(e), e  E Ta xem (e) lượng hàng chuyển cung e=(u,v) từ đỉnh u đến đỉnh v không vượt q khả thơng qua cung Ngồi ra, từ điều kiện 2) ta thấy v lối vào v0 hay lối vn, lượng hàng chuyển tới v lượng hàng chuyển khỏi v Từ quan hệ 2) suy ra: 4)   (e) =   (e) =:  e  ( v0 ) e  ( ) Đại lượng  (ta ký hiệu  n ) gọi luồng qua mạng, hay cường độ luồng điểm hay giá trị luồng  Bài tốn đặt tìm  để  đạt giá trị lớn nhất, tức tìm giá trị lớn luồng 5.2.1.3 Định nghĩa: Cho mạng vận tải G=(V,E) A  V Ký hiệu   (A)={(u,v)E | vA, uA},   (A)={(u,v)E | uA, vA} Đối với tập cung M tuỳ ý, đại lượng (M)=   (e) gọi luồng tập eM cung M Từ điều kiện 2) dễ dàng suy hệ sau 5.2.1.4 Hệ quả: Cho  luồng mạng vận tải G=(V,E) A  V \{v0,vn} Khi đó: (   (A))=(   (A)) 5.2.2 Bài toán luồng cực đại: Cho mạng vận tải G=(V,E) Hãy tìm luồng  để đạt  max mạng G Nguyên lý thuật tốn giải tốn tìm luồng cực đại sau 5.2.2.1 Định nghĩa: Cho A  V tập tuỳ ý không chứa lối vào v0 chứa lối Tập   (A) gọi thiết diện mạng vận tải G Đại lượng m(   (A))=  m (e) gọi khả thông qua thiết diện  e ( A)   (A) 73 DeThiMau.vn Từ định nghĩa thiết diện khả thơng qua ta nhận thấy rằng: đơn vị hàng hoá chuyển từ v0 đến phải lần qua cung thiết diện   (A) Vì vậy, dù luồng  thiết diện   (A) thoả mãn quan hệ: n  m(   (A)) Do đó, luồng  thiết diện W mà có: n = m(W) chắn luồng  đạt giá trị lớn thiết diện W có khả thông qua nhỏ 5.2.2.2 Định nghĩa: Cung e mạng vận tải G với luồng vận tải  goi cung bão hoà (e)=m(e) Luồng  mạng vận tải G gọi luồng đầy đường từ v0 đến chứa cung bão hồ Từ định nghĩa ta thấy rằng, luồng  mạng vận tải G chưa đầy định tìm đường  từ lối vào v0 đến lối khơng chứa cung bão hồ Khi ta nâng luồng  thành ’ sau:  (e)  e ,  ' (e)   e  (e) Khi ’ luồng, mà giá trị là: ’n = n +1 > n Như vậy, luồng không đầy ta nâng giá trị nâng nhận luồng đầy Tuy vậy, thực tế cho thấy có luồng đầy, chưa đạt tới giá trị cực đại Bởi vậy, cần phải dùng thuật tốn Ford-Fulkerson để tìm giá trị cực đại luồng 5.2.2.3 Thuật toán Ford-Fulkerson: Để tìm luồng cực đại mạng vận tải G, ta xuất phát từ luồng tuỳ ý  G, nâng luồng lên đầy, sau áp dụng thuật tốn Ford-Fulkerson ta áp dụng thuật tốn Ford-Fulkerson trực tiếp luồng  Thuật toán gồm bước: Bước (đánh dấu đỉnh mạng): Lối vào v0 đánh dấu 1) Nếu đỉnh vi đánh dấu ta dùng số +i để đánh dấu cho đỉnh y chưa đánh dấu mà (vi,y)E cung chưa bão hoà ((vi,y)0) 74 DeThiMau.vn Nếu với phương pháp ta đánh dấu tới lối G tồn v0 xích , đỉnh khác đánh dấu theo số đỉnh liền trước (chỉ sai khác dấu) Khi chắn ta nâng giá trị luồng Bước (nâng giá trị luồng): Để nâng giá trị luồng , ta đặt: ’(e) = (e), e, ’(e) = (e)+1, e định hướng theo chiều xích  từ vo đến vn, ’(e) = (e)1, e định hướng ngược với chiều xích  từ vo đến +i y vj -j e z vi v0 ’ thoả mãn điều kiện luồng, nên ’ luồng ta có: ’n = n+1 Như vậy, ta nâng luồng lên đơn vị Sau lặp lại vịng Vì khả thơng qua cung hữu hạn, nên trình phải dừng lại sau số hữu hạn bước Bước 3: Nếu với luồng 0 phương pháp ta nâng giá trị luồng lên nữa, nghĩa ta đánh dấu đỉnh vn, ta nói q trình nâng luồng kết thúc 0 đạt giá trị cực đại, đồng thời gọi 0 luồng kết thúc Khi mạng vận tải G=(V,E) đạt tới luồng 0, bước ta đánh dấu tới lối Trên sở trạng đánh dấu bước này, ta chứng minh luồng 0 đạt giá trị cực đại 5.2.2.4 Bổ đề: Cho luồng  mạng vận tải G=(V,E) A  V, chứa lối không chứa lối vào v0 Khi đó:    (  ( A))   (  ( A)) Chứng minh: Đặt A1=A \{vn} Theo Hệ 5.2.1.4, ta có:  (  ( A1 ))   (  ( A1 )) (1) Đặt C1={(a,vn)E | aA} Khi   ( A)    ( A1 )  C1   ( A1 )  C1 = , nên  (  ( A))   (  ( A1 ))   (C1) (2) Đặt C2={(b,vn)E | bA1} Khi C2={(b,vn)E | bA},   ( A1 )    ( A)  C2   ( A)  C2 = , nên  (  ( A))   (  ( A1 ))   (C2) (3) 75 DeThiMau.vn Ngoài ra,   (v n ) = C1C2 C1C2 = , nên  =  (  (v n )) =  (C1)+  (C2) (4) Từ (1), (2), (3) (4), ta có:    (  ( A))   (  ( A)) 5.2.2.5 Định lý (Ford-Fulkerson): Trong mạng vận tải G=(V,E), giá trị lớn luồng khả thông qua nhỏ thiết diện, nghĩa max    AV ,v0A,vnA m(  ( A)) Chứng minh: Giả sử mạng vận tải G, 0 luồng cuối cùng, mà sau phương pháp đánh dấu thuật tốn Ford-Fulkerson khơng đạt tới lối Trên sở trạng đánh dấu lần cuối này, ta dùng B để ký hiệu tập gồm đỉnh G không đánh dấu Khi v0B, vnB Do   (B) thiết diện mạng vận tải G theo Bổ đề 5.2.2.4, ta có:  v0   (  ( B))   (  ( B)) (1) n Đối với cung e=(u,v)   (B) uB vB, tức u đánh dấu v không đánh dấu, nên theo nguyên tắc đánh dấu thứ nhất, e cung bão hoà: 0(e) = m(e)  (  ( B))  Do đó,   (e)   m(e)  m(  ( B))  (2)  e ( B )  e ( B ) Đối với cung e=(s,t)  (B) sB tB, tức s không đánh dấu t đánh dấu, nên theo nguyên tắc đánh dấu thứ hai: 0(e) =  (  ( B))  Do đó,   (e)  (3)  e ( B ) Từ (1), (2) (3) ta suy ra:  v0  m(  ( B)) n Vì vậy,  v0 n giá trị lớn luồng đạt được, m(   (B)) giá trị nhỏ khả thông qua thiết diện thuộc mạng vận tải G Thí dụ 3: Cho mạng vận tải hình với khả thơng qua đặt khun trịn, luồng ghi cung Tìm luồng cực đại mạng Luồng  có đường (v0,v4), (v4,v6), (v6,v8) gồm cung chưa bão hồ nên chưa đầy Do nâng luồng cung lên đơn vị, để 1 Do đường xuất phát từ v0 đến v8 chứa cung bão hoà, nên luồng 1 luồng đầy Song chưa phải luồng cực đại Áp dụng thuật toán Ford-Fulkerson để nâng luồng 1 76 DeThiMau.vn v1 v0 6 v2 v5 12 v3 v8 4 11 v6 4 v4 v7  v1 v5 v0 5 5 6 v2 12 6 v3 v6 v8 +4 +7 4 12 v4 v7 +3 1 Xét xích =(v0, v4, v6, v3, v7, v8) Quá trình đánh dấu từ v0 đến v8 để nâng luồng 1 lên đơn vị cách biến đổi luồng cung thuộc xích  đánh dấu Sau ta có luồng 2 +0 +4 3+1 +0 v6 31 v4 v3 2+1 +3 v7 6+1 7+1 v0 6 xích  v8 +7 Xét xích =(v0, v1, v5, v2, v6, v3, v7, v8) Quá trình đánh dấu từ v0 đến v8 để nâng luồng 2 lên đơn vị cách biến đổi luồng cung thuộc xích  đánh dấu Sau ta có luồng 3 77 DeThiMau.vn +0 +1 v1 v5 v0 5 5 5 4 v2 +2 6 +7 3+1 4 v4 v7 2 5 31 v2 +1 v8 4 12 12 v6 v3 +0 +3 2+1 v6 +2 21 v5 6 v3 3+1 v1 v7 7+1 xích  v0 v0 v0 v8 +7 v5 v2 12 8 7+1 v1 +3 v3 v8 4 4 v4 12 v6 v7 3 Tiếp theo ta đánh dấu đỉnh v0 nên trình nâng luồng kết thúc ta giá trị luồng cực đại là:  v3 = 6+12+8 = 26  Mặt khác, thiết diện nhỏ  (B) với B={v1, v2, , v8}   (B)={(v0,v1), (v0,v2), (v0,v3), (v0,v4)} 78 DeThiMau.vn 5.3 BÀI TOÁN DU LỊCH 5.3.1 Giới thiệu toán: Một người xuất phát từ thành phố muốn tới thăm n1 thành phố khác, thành phố lần, quay thành phố ban đầu Hỏi nên theo trình tự để độ dài tổng cộng đoạn đường qua ngắn (khoảng cách hai thành phố hiểu cự ly thông thường thời gian cần chi phí hành trình, xem cho trước) Xét đồ thị đầy đủ G=(V,E), với V={1, 2, , n}, có trọng số với trọng số mij= m(i,j) khác mji = m(j,i) Như vậy, ta xem G đồ thị có hướng đầy đủ “mạnh” theo nghĩa với i, j=1, 2, , n, ij, ln có (i,j), (j,i)E Bài tốn trở thành tìm chu trình Hamilton có độ dài ngắn G Bài toán tiếng có lời giải cách sử dụng phương pháp “nhánh cận” 5.3.2 Phương pháp nhánh cận: Giả sử tập hữu hạn phương án toán, ta phải chọn phương án tối ưu theo tiêu chuẩn (thí dụ làm cho hàm mục tiêu đạt giá trị nhỏ nhất) Ta tìm cách phân chia tập phương án xét thành hai tập không giao Với tập này, ta tính “cận dưới” (chặn đủ tốt) giá trị hàm mục tiêu ứng với phương án Mang so sánh hai cận vừa tính được, ta phán đốn xem tập có nhiều triển vọng chứa phương án tối ưu tiếp tục phân chia tập thành hai tập khác khơng giao nhau, lại tính cận tương ứng Lặp lại trình sau số hữu hạn bước, cuối phương án tốt, nói chung tối ưu Nếu khơng lặp lại q trình phân chia để kiểm tra sau vài bước, ta phương án tối ưu Người ta thường mô tả q trình phân chia “cây có gốc” mà gốc tượng trưng cho tập toàn phương án, cịn đỉnh phía tượng trưng cho tập trình “phân nhánh nhị phân” Vì vậy, phương pháp mang tên nhánh cận 5.3.3 Cơ sở lý luận phép tốn: Nếu khơng xác định thành phố xuất phát có n! hành trình, hành trình ứng với hốn vị tập {1, 2, , n} Cịn cho trước thành phố xuất phát có tất (n1)! hành trình Giả sử h=((1), (2), , (n), (1)) ( hoán vị) hành trình qua thành phố (1), , (n) theo thứ tự quay (1) hàm mục tiêu f(h) = m (1) ( 2)    m ( n1) ( n)  m ( n) (1)   mij , (i , j )h biểu thị tổng độ dài theo hành trình h, (i,j) ký hiệu chặng đường hành trình, tức cặp thành phố kề theo hành trình h 79 DeThiMau.vn 5.3.4 Ma trận rút gọn: Q trình tính tốn thực ma trận suy từ ma trận trọng số M=(mij) ban đầu phép biến đổi rút gọn để số liệu đơn giản Phép trừ phần tử nhỏ dòng (t.ư cột) vào tất phần tử dịng (t.ư cột) gọi phép rút gọn dòng (t.ư cột) Phần tử nhỏ gọi số rút gọn dịng (t.ư cột) xét Ma trận với phần tử không âm có phần tử dòng cột gọi ma trận rút gọn ma trận ban đầu Thí dụ 4: 4 5 1   0 2       M = 6 7       M’ =   ,  10  4 0 3        0 tất nhiên rút gọn cách khác 4 5    M’’ = M = 6 7   10    0     2 5    5.3.5 Mệnh đề: Phương án tối ưu xét ma trận trọng số ban đầu phương án tối ưu toán xét ma trận rút gọn đảo lại Chứng minh: Có thể xem việc tìm chu trình Hamilton người du lịch toán vận tải đặc biệt dạng bảng Như bảng (ma trận trọng số ma trận rút gọn) ta phải có n chọn, chọn tượng trưng cho cặp thành phố hành trình cần tìm, dịng cột có chọn Mỗi hành trình h tương ứng mộtmột với tập n ô chọn xác định f(h) tổng trọng số ban đầu ghi n chọn xét Với hành trình h bất kỳ, ký hiệu f(h)=  m'ij giá trị hàm mục (i , j )h tiêu ứng với ma trận rút gọn M’ s tổng số rút gọn ta có: f(h) = f(h)+s Gọi X tập toàn phương án xét giai đoạn đó, h0 phương án tối ưu toán xét ma trận trọng số ban đầu M, ta có: f(h0)  f(h), hX hay f(h0)s  f(h)s, hX hay f(h0)  f(h), hX hay h0 phương án tối ưu toán xét ma trận rút gọn M’ 80 DeThiMau.vn 5.3.6 Phân nhánh: Sự phân hoạch tập hợp tất hành trình giai đoạn thành hai tập rời biểu diễn phân nhánh Trên cây, đỉnh biểu diễn thành vòng tròn tượng trưng cho mơt tập hành trình Đỉnh X tập tồn hành trình Đỉnh (i,j) biểu diễn tập hành trình có chứa cặp (i,j) kề Đỉnh (i, j ) biểu diễn tập hành trình khơng chứa cặp (i,j) kề Tại đỉnh (i,j) lại có phân nhánh: đỉnh (k,l) biểu diễn tập hành trình có chứa cặp (i,j) cặp (k,l), đỉnh (k , l ) biểu diễn tập hành trình có chứa cặp (i,j) khơng chứa cặp (k,l) Nếu trình diễn đủ lớn cuối có đỉnh biểu diễn hành trình Vấn đề đặt nên chọn cặp thành phố để tiến hành phân nhánh xuất phát từ đỉnh cho trước cây? Một cách tự nhiên ta nên chọn cặp thành phố gần để phân nhánh trước, ma trận rút gọn cặp thành phố (i,j) có m'ij =0 hành trình chứa cặp (i,j) có triển vọng tốt Trên ma trận rút gọn thường có nhiều cặp thành phố thoả mãn điều kiện ( m'ij =0) Để định ta phải tìm cách so sánh Vì thành phố i thiết phải nối liền với thành phố nên hành trình h khơng chứa (i,j) tức h (i, j ) phải ứng với độ dài hành trình có chứa phần tử nhỏ dịng i khơng kể m'ij =0 phần tử nhỏ cột j không kể m'ij =0 thành phố j thiết phải nối liền với thành phố trước hành trình Ký hiệu tổng hai phần tử nhỏ ij ta có f(h)  ij, h (i, j ) Vì lý trên, số ij dùng làm tiêu chuẩn so sánh cặp thành phố (i,j) có m'ij =0 Một cách tổng quát, giai đoạn ta chọn cặp thành phố (i,j) có m'ij =0 ma trận rút gọn có ij lớn để tiến hành phân nhánh từ đỉnh 5.3.7 Tính cận: Với đỉnh phân nhánh, ta phải tính cận giá trị hàm mục tiêu ứng với tập phương án mà đỉnh biểu diễn Cận tính ghi bên đỉnh xét Theo công thức f(h)=f(h)+s f(h)  nên f(h)  s, hX Vì tổng số rút gọn ma trận ban đầu lấy làm cận đỉnh X Mặt khác, ta lại có f(h)  ij, h (i, j ) , f(h)=f(h)+s  ij+s, h (i, j ) Vì tổng ij+s lấy làm cận cho đỉnh (i, j ) Sau chọn (i,j) để phân nhánh xuất phát từ đỉnh X bảng xố dịng i cột j chọn (i,j) Sau bỏ dịng i cột j ma trận M’ lại rút gọn thành ma trận M’’ với s’ tổng số rút gọn, f(h) giá trị hàm mục tiêu xét M’’ Khi ta có f(h)=f(h)+s’, h(i,j), f(h)=f(h)+s=f(h)+s+s’, h(i,j) Do f(h)  nên 81 DeThiMau.vn f(h)  s+s’, h(i,j), nghĩa tổng s+s’ lấy làm cận cho đỉnh (i,j) phân nhánh Nếu tiếp tục phân nhánh cận đỉnh tiếp sau tính tốn tương tự, trình lặp Ta cần xem đỉnh xuất phát nhánh giống đỉnh X ban đầu Để tiết kiệm khối lượng tính tốn, người ta thường chọn đỉnh có cận nhỏ để phân nhánh tiếp tục 5.3.8 Thủ tục ngăn chặn hành trình con: Một đường chu trình Hamilton khơng thể chứa chu trình với số cạnh tạo thành nhỏ n Vì ta đặt mii= (i=1, , n) để tránh khuyên Với ij (i,j) chọn phải đặt m’ji= ma trận rút gọn Nếu chọn (i,j) (j,k) n>3 phải đặt m’ji=m’kj=m’ki= Chú ý việc đặt m’ij= tương đương với việc xố (i,j) bảng xem (i,j) ô cấm, nghĩa hai thành phố i j không kề hành trình định kiến thiết Ở giai đoạn trình phải tiến hành thủ tục ngăn chặn trước tiếp tục rút gọn ma trận 5.3.9 Tính chất tối ưu: Q trình phân nhánh, tính cận, ngăn chặn hành trình con, rút gọn ma trận phải thực có đủ n chọn để kiến thiết hành trình Hamilton, nói cách khác phân nhánh xuất đỉnh biểu diễn hành trình xố hết dịng cột bảng Cận đỉnh cuối độ dài hành trình vừa kiến thiết a) Nếu cận đỉnh không lớn cận đỉnh treo phân nhánh hành trình tối ưu b) Nếu trái lại phải xuất phát từ đỉnh treo có cận nhỏ để phân nhánh tiếp tục kiểm tra xem điều kiện a) có thoả mãn khơng Thí dụ 5: Xét tốn với thành phố, số liệu cho theo bảng sau:   27 43 16 30 26  16     14 30 25   20 13  35   M=   21 16 25  18 18  16 12 46 27 48      23 5    0 0 Tổng số rút gọn bước đầu s=48 Trong ma trận rút gọn ta có: m’14=m’24=m’36=m’41=m’42=m’56=m’62=m’63=m’65=0 82 DeThiMau.vn 14=10, 24=1, 36=5, 41=1, 42=0, 56=2, 62=0, 63=9, 65=2 Sau so sánh ta thấy 14=10 lớn nên ta chọn ô (1,4) để phân nhánh Cận đỉnh (1,4) s+14=58 Xố dịng cột đặt m’41= M’ = 21  15   2  13  13 41 13  22   1 15  0 2  13  29 24    2      11  13 41 27 14 10   13 29 24   35    2 22 43       12  15 13    M’’ =     41 22  13 0 28 23    2       Tổng số rút gọn s’=1 Vậy cận đỉnh (1,4) s+s’=49 Vì 49

Ngày đăng: 31/03/2022, 00:29

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan