BÀI TOÁN LUỒNG CỰC ĐẠI Chương 2BÀI TỐN
LUỒNG CỰC ĐẠI VỚI KHẢ NĂNG THƠNG QUA CÁC CUNG – CÁC ĐỈNHBài tốn
luồng cực đại trong mạng là một trong số những
bài tốn tối ưu trên đồ thị tìm được những ứng dụng rộng rãi trong thực tế cũng như những ứng dụng thú vị trong lý thuyết tổ hợp.
Bài tốn được đề xuất vào đầu những năm 1950, và gắn liền với tên tuổi của hai nhà bác học Mỹ là Ford và Fulkerson.
Bài tốn
luồng cực đại trong mạng có nhiều ứng dụng trong thực tế như:
Bài tốn xác định cường độ dòng lớn nhất của dòng vận tải giữa hai nút của một bản đồ giao thơng,
bài tốn tìm
luồng dầu lớn nhất có thể bơm từ tàu chở dầu vào bể chứa của một hệ thống đường ống dẫn dầu…Ngồi ra, ứng dụng của
bài tốn còn để giải các
bài tốn như:
Bài tốn đám cưới vùng q,
bài tốn về hệ thống
đại diện chung,
bài tốn phân nhóm sinh hoạt,
bài tốn lập lịch cho hội nghị …Trong phạm vi đề tài này tơi sẽ trình bày “bài tốn
luồng cực đại trong mạng với khả năng thơng qua các cung các đỉnh” và phải nhờ thuật tốn của Ford và Fulkerson để giải
bài tốn đặt ra và nêu một số ứng dụng của
bài tốn.I. PHÁT BIỂU
BÀI TỐN1.Bài tốnGiả xử trong đồ thị G = (V,E), ngồi khả năng thơng qua của các cung c(u,v), ở mỗi đỉnh v ∈ V còn có khả năng thơng qua của đỉnh là d(v), và đòi hỏi tổng
luồng đi vào đỉnh v khơng còn vượt q d(v), tức là∑∈≤Vwvdvwf )(),(Cần phải tìm
luồng cực đại giữa s và t trong mạng như vậy.Xây dựng một mạng G’ sao cho: mỗi đỉnh v của G tương ứng với hai đỉnh v+, v- trong G’, mỗi cung (u,v) trong G ứng với cung (u,v+) trong G’, mỗi cung (v,w) trong G ứng với cung (v-,w+) trong G’. Ngồi ra, mỗi cung (v+,v-) trong G’ có khả năng thơng qua là d(v), tức là bằng khả năng thơng qua của đỉnh v trong G.2. Giải quyết
bài tốnTừ mạng G = (V,E) khả năng thơng qua các cung và các đỉnh. Ta sẽ giải quyết theo hai bước sau:10 Xác định mạng G’.20 Tìm
luồng cực đại trong mạng G’. Bắt đầu từ
luồng zero với khả năng thơng qua cung.1di ,nếu i = jc[i,j] ,nếu [i,j] ∈ E0 ,nếu [i,j] ∉ EA’ = ( a’ij ) = nếu i = jc[i,j] nếu [i,j] ∈ E’Thí dụ 1. Hình 1a cho ví dụ mạng G với khả năng thông qua ở cung và đỉnh. Hình 1b là mạng G’ tương ứng chỉ có khả năng thông qua ở các cung. Hình 1 Do
luồng đi vào đỉnh v+ phải đi qua cung (v+,v-) với khả năng thông qua d(v), nên
luồng cực đại trong G’ sẽ bằng
luồng cực đại trong G với khả năng thông qua của các cung và đỉnh.Hai bước trên ta có thể biểu diễn dưới dạng sơ đồ thuật
toán sau:2C[v,t]C[u,t]C[s,v]C[s,u]t-dtt+C[u,v]v-dvv+u-duu+s-dss+(b)C[u,v]C[v,t]C[s,v]C[u,t]C[s,u]t dtv dvu dusds(a)di ,nếu i = jc[i,j] ,nếu [i,j] ∈ E0 ,nếu [i,j] ∉ EA’ = ( a’ij ) = nếu i = jc[i,j] nếu [i,j] ∈ E’s u v t7 5 2 0 s0 6 1 4 u0 0 8 3 v0 0 0 6 ts+ s- u+ u- v+ v- t+ t-0 7 0 0 0 0 0 0 s+0 0 5 0 2 0 0 0 s-0 0 0 6 0 0 0 0 u+0 0 0 0 1 0 4 0 u-0 0 0 0 0 8 0 0 v+0 0 0 0 0 0 3 0 v-0 0 0 0 0 0 0 6 t+0 0 0 0 0 0 0 0 t-3. Ma trận biểu diễn đồ thị của
bài toán luồng cực đại.3.1 Biểu diễn mạng G với khả năng thông qua các cung - đỉnhGiả sử mạng G = (V,E), |V| = n. Ta có thể biểu diễn bởi ma trận trọng số A cấp n x n như sau: Trong đó: di là khả năng thông qua đỉnh i; C[i,j] khả năng thông qua cung [i,j].3.2 Biểu diễn mạng G’ tương ứng với mạng GMạng tương ứng với G = (V,E), |V | = n là mạng G’ = (V’,E’), |V’| = 2 |V |, |E’| = 2 |E | - 1. Được biểu diễn thông qua ma trận A’ cấp (2n x 2n) như sau:3di ,nếu i = jc[i,j] ,nếu [i,j] ∈ E0 ,nếu [i,j] ∉ EA = ( aij ) =A’ = ( a’ij ) = nếu i = jc[i,j] nếu [i,j] ∈ E’BeginMạng GMạng G’Luồng
cực đại trên G’Ends u v t7 5 2 0 s0 6 1 4 u0 0 8 3 v0 0 0 6 ts+ s- u+ u- v+ v- t+ t-0 7 0 0 0 0 0 0 s+0 0 5 0 2 0 0 0 s-0 0 0 6 0 0 0 0 u+0 0 0 0 1 0 4 0 u-0 0 0 0 0 8 0 0 v+0 0 0 0 0 0 3 0 v-0 0 0 0 0 0 0 6 t+0 0 0 0 0 0 0 0 t-s+ s- u+ u- v+ v- t+ t-0 6 0 0 0 0 0 0 s+0 0 4 0 2 0 0 0 s-0 0 0 4 0 0 0 0 u+0 0 0 0 0 0 4 0 u-0 0 0 0 0 2 0 0 v+0 0 0 0 0 0 2 0 v-0 0 0 0 0 0 0 6 t+0 0 0 0 0 0 0 0 t-Thí dụ 2. Như thí dụ trên có mạng G như sau:Ta có ma trận biểu diễn mạng G :Tương tự từ mạng G’:Ta có ma trận biểu diễn mạng G’ như sau:4s[7]13245t[6]v[8]u[6]t-6t+431v-8v+u-6u-5s-72s+A =s u v t7 5 2 0 s0 6 1 4 u0 0 8 3 v0 0 0 6 tA’ =s+ s- u+ u- v+ v- t+ t-0 7 0 0 0 0 0 0 s+0 0 5 0 2 0 0 0 s-0 0 0 6 0 0 0 0 u+0 0 0 0 1 0 4 0 u-0 0 0 0 0 8 0 0 v+0 0 0 0 0 0 3 0 v-0 0 0 0 0 0 0 6 t+0 0 0 0 0 0 0 0 t-s+ s- u+ u- v+ v- t+ t-0 6 0 0 0 0 0 0 s+0 0 4 0 2 0 0 0 s-0 0 0 4 0 0 0 0 u+0 0 0 0 0 0 4 0 u-0 0 0 0 0 2 0 0 v+0 0 0 0 0 0 2 0 v-0 0 0 0 0 0 0 6 t+0 0 0 0 0 0 0 0 t-Áp dụng T.T Ford-Fulkerson tìm
luồng cực đại cho mạng G’ ta được mạng
cực đại và ma trận biểu diễn nó như sau:Với Val(f*) = 64.
Bài toán luồng cực đại trong mạng Cho mạng G=(V,E). Hãy tìm
luồng f* trong mạng với giá trị
luồng val(f*) là lớn nhất .
Luồng như vậy ta sẽ gọi là
luồng cực đại trong mạng.4.1. Thuật
toán Ford – Fulkerson tìm
luồng cực đại trong mạngBắt đầu từ mạng với
luồng trên tất cả các cung bằng 0 ( ta sẽ gọi
luồng như vậy là
luồng không ), và lặp lại bước lặp sau đây cho đến khi thu được
luồng mà đối với nó không còn
luồng tăng:Thuật
toán 10 Xuất phát từ một
luồng chấp nhận được f.20 Tìm một đường đi tăng
luồng P. Nếu không có thì thuật
toán kết thúc. Nếu có, tiếp bước 3 dưới đây.30 Nếu δ(P) = +∞ thuật
toán kết thúc.Trong đó δ(P) -
Lượng luồng tăng thêm, hay nói khác là làm sự tăng
luồng (flow augmentation) dọc theo đường đi tăng
luồng P một
lượng thích hợp mà các ràng buộc của
bài toán vẫn thoả.Sơ đồ của thuật
toán Ford – Fulkerson có thể mô tả trong thủ tục sau đây:Procedure Max_Flow;(* Thuật
toán Ford – Fulkerson *)begin(* Khởi tạo: Bắt đầu từ
luồng với giá trị 0 *)for u ∈ V do5C =s+ s- u+ u- v+ v- t+ t-0 6 0 0 0 0 0 0 s+0 0 4 0 2 0 0 0 s-0 0 0 4 0 0 0 0 u+0 0 0 0 0 0 4 0 u-0 0 0 0 0 2 0 0 v+0 0 0 0 0 0 2 0 v-0 0 0 0 0 0 0 6 t+0 0 0 0 0 0 0 0 t-for v ∈ V do f(u,v):=0;Stop:=false;While not Stop doif< Tìm được đường tăng
luồng P> then <Tăng
luồng dọc theo P>else Stop:= true;end;Để tìm đường tăng
luồng trong Gf có thể sử dụng thuật
toán tìm kiếm theo chiều rộng ( hay thuật
toán tìm kiếm theo chiều sâu) bắt đầu từ đỉnh s, trong đó không cần xây dựng tường minh đồ thị Gf. Ford- Fulkerson đề nghị thuật
toán gán nhãn chi tiết sau đây để giải
bài toán luồng trong mạng. Thuật
toán bắt đầu từ
luồng chấp nhận được nào đó trong mạng ( có thể bắt đầu từ
luồng không) sau đó ta sẽ tăng
luồng bằng cách tìm các đường tăng luồng. Để tìm đường tăng
luồng ta sẽ áp dụng phương pháp gán nhãn cho các đỉnh. Mỗi đỉnh trong quá trình thực hiện thuật
toán sẽ ở một trong ba trạng thái: chưa có nhãn, có nhãn chưa xét, có nhãn đã xét. Nhãn của một đỉnh v gồm 2 phần và có một trong hai dạng sau: [+p(v), ε(v)] hoặc [-p(v), ε(v)]. Phần thứ nhất +p(v) (-p(v)) chỉ ra là cần tăng (giảm)
luồng theo cung (p(v),v) cung (v,p(v)) còn phần thứ hai ε(v) chỉ ra
lượng lớn nhất có thể tăng hoặc giảm theo cung này. Đầu tiên chỉ có đỉnh s được khởi tạo nhãn và nhãn của nó là chưa xét, còn tất cả các đỉnh còn lại đều chưa có nhãn . Từ s ta gán cho tất cả các đỉnh kề với nó và nhãn của đỉnh s sẽ trở thành nhãn đã xét. Tiếp theo, từ mỗi đỉnh v có nhãn chưa xét ta lại gán nhãn cho tất cả các nhãn chưa có nhãn kề với nó và nhãn của đỉnh v trở thành nhãn đã xét. Quá trình sẽ được lặp lại cho đến khi hoặc là đỉnh t trở thành có nhãn hoặc là nhãn của tất cả các đỉnh có nhãn đều là đã xét nhưng đỉnh t vẫn chưa có nhãn. Trong trường hợp thứ nhất ta tìm được đường tăng luồng, còn trong trường hợp thứ hai đối với
luồng đang xét không tồn tại đường tăng
luồng ( tức là
luồng đã là
cực đại ). Mỗi khi tìm được đường tăng luồng, ta lại tăng
luồng theo đường tìm được, sau đó xoá tất cả các nhãn và đối với
luồng mới thu được lại sử dụng phép gán nhãn các đỉnh để tìm đường tăng luồng. Thuật
toán sẽ kết thúc khi nào đối với
luồng đang có trong mạng không tìm được đường tăng luồng.Thuật
toán gán nhãn (The labeling algorithm)Gọi VT là tập mọi đỉnh đã gán nhãn nhưng chưa được thăm. Ta có thuật
toán để tìm đường đi tăng luồng.Xuất phát với VT = {s} và s là nút đã đánh dấu duy nhất.Một bước lặp sẽ có VT hiện hành và gồm ba bước như sau.10 Nếu t ∈ VT hoặc VT = ∅, thuật
toán kết thúc. Ngược lại thì chọn một đỉnh u ∈ VT để thăm và đưa nó ra khỏi VT. Xét tất cả các đỉnh cạnh u, tức là xét mọi cung có dạng (u,v) và (v,u).20 Nếu (u,v) ∈ E, F(u,v) < C(u,v) và v chưa gán nhãn thì gán nhãn nó và đưa v vào tập VT.630 Nếu (v,u) ∈ E, F(v,u) > 0 và v chưa gán nhãn thì gán nhãn nó và đưa vào tập VT.Bây giờ ta xét kết quả của thuật
toán gán nhãn. Nó có kết thúc hữu hạn hay không? Nhận xét rằng một đỉnh được vào tập VT chỉ khi chuyển từ chưa gán nhãn. Do đó một đỉnh chỉ được vào VT nhiều nhất là một lần. Mà mỗi bước lặp bỏ một đỉnh ra khỏi VT. Do đó, vì số đỉnh của mạng là hữu hạn, thuật
toán phải kết thúc hữu hạn.Thí dụ 3. Áp dụng thuật
toán Ford-Fullkerson tìm luồng cực đại bằng cách gán nhãn cho
luồng zero sau:+ Bước lặp 1: s → a → b → t, δ1 = 4+ Bước lặp 2: s → a → b → c → e → t, δ2 = 277,04,012,03,04,05,09,05,07,04,06,0cdetbsac(s+,4)7,04,012,03,04,05,09,05,07,04,06,0d(s+,7)e(d+,4)t(e+,2)b(a+,6)s(s,∞)a(s+,6)7,44,412,03,04,05,09,05,07,04,06,4cdetbsac(b+,2)7,44,412,03,04,05,09,05,07,04,06,4d(s+,7)e(c+,2)t(e+,2)b(a+,2)s(s,∞)a(s+,2)+ Bước lặp 3: s → c → e → t, δ3 = 1+ Bước lặp 4: s → d → e → t, δ4 = 78c7,64,412,23,24,25,09,05,07,04,06,6detbsac(s+,4)7,64,412,23,24,25,09,05,07,04,06,6d(s+,7)e(c+,1)t(e+,1)b(a+,1)s(s,∞)a(s+,0)c7,64,412,33,34,25,09,05,07,04,16,6detbsac(s+,3)7,64,412,33,34,25,09,05,07,04,16,6d(s+,7)e(d+,7)t(e+,7)b(a+,1)s(s,∞)a(s+,0)c7,64,412,103,34,25,09,75,07,74,16,6detbsa+ Bước lặp 5: s → c → d → e → t, δ5 = 2+ Bước lặp 6: Không còn đường tăng
luồng nữa, Val(fmax) = 6+3+7 = 16.9c(s+,3)7,64,412,103,34,25,09,75,07,74,16,6d(c+,3)e(d+,2)t(e+,2)b(a+,1)s(s,∞)a(s+,0)c7,64,412,123,34,25,09,95,27,74,36,6detbsaVT ≠ ∅P[v]:= u; ε[v]:=min{ε[u],C[u,v]-F[u,v]}VT:= VT ∪ {v}P[v]:= -u; ε[v]:= min{ε[u],F[v,u]}VT:= VT ∪ {v}Sơ đồ thuật
toán Ford-Fullkerson tổng quát10FalseTrueFalseTrueBeginMạng với
luồng zeroStop:= Falsenot StopFind_PathPath-FoundTăng luồngStop:= FalseMạng với
luồng cực đạiEndVT ≠ ∅P[v]:= u; ε[v]:=min{ε[u],C[u,v]-F[u,v]}VT:= VT ∪ {v}P[v]:= -u; ε[v]:= min{ε[u],F[v,u]}VT:= VT ∪ {v}[...]... T.T Ford-Fulkerson tìm
luồng cực đại cho mạng G’ ta được mạng
cực đại và ma trận biểu diễn nó như sau:Với Val(f*) = 64.
Bài tốn
luồng cực đại trong mạng Cho mạng G=(V,E). Hãy tìm
luồng f* trong mạng với giá trị
luồng val(f*) là lớn nhất .
Luồng như vậy ta sẽ gọi là
luồng cực đại trong mạng.4.1. Thuật tốn Ford – Fulkerson tìm
luồng cực đại trong mạngBắt đầu từ mạng với
luồng trên tất cả các... Chương 2BÀI TỐN
LUỒNG CỰC ĐẠI VỚI KHẢ NĂNG THƠNG QUA CÁC CUNG – CÁC ĐỈNH
Bài toán luồng cực đại trong mạng là một trong số những bài toán tối ưu trên đồ thị tìm được những ứng dụng rộng rãi trong thực tế cũng như những ứng dụng thú vị trong lý thuyết tổ hợp.
Bài toán được đề xuất vào đầu những năm 1950, và gắn liền với tên tuổi của hai nhà bác học Mỹ là Ford và Fulkerson.
Bài tốn
luồng cực đại trong... dụng trong thực tế như:
Bài toán xác định cường độ dòng lớn nhất của dòng vận tải giữa hai nút của một bản đồ giao thông,
bài tốn tìm
luồng dầu lớn nhất có thể bơm từ tàu chở dầu vào bể chứa của một hệ thống đường ống dẫn dầu…Ngồi ra, ứng dụng của
bài tốn cịn để giải các
bài tốn như:
Bài tốn đám cưới vùng quê,
bài toán về hệ thống
đại diện chung,
bài tốn phân nhóm sinh hoạt,
bài tốn lập lịch cho... tơi sẽ trình bày
bài tốn
luồng cực đại trong mạng với khả năng thông qua các cung các đỉnh” và phải nhờ thuật
toán của Ford và Fulkerson để giải
bài toán đặt ra và nêu một số ứng dụng của
bài tốn.I. PHÁT BIỂU
BÀI TỐN1 .Bài tốnGiả xử trong đồ thị G = (V,E), ngồi khả năng thơng qua của các cung c(u,v), ở mỗi đỉnh v ∈ V cịn có khả năng thơng qua của đỉnh là d(v), và đòi hỏi tổng
luồng đi vào đỉnh... gọi
luồng như vậy là luồng không ), và lặp lại bước lặp sau đây cho đến khi thu được
luồng mà đối với nó khơng cịn
luồng tăng:Thuật tốn 10 Xuất phát từ một
luồng chấp nhận được f.20 Tìm một đường đi tăng
luồng P. Nếu khơng có thì thuật tốn kết thúc. Nếu có, tiếp bước 3 dưới đây.30 Nếu δ(P) = +∞ thuật
toán kết thúc.Trong đó δ(P) -
Lượng luồng tăng thêm, hay nói khác là làm sự tăng luồng. .. 78c7,64,412,23,24,25,09,05,07,04,06,6detbsac(s+,4)7,64,412,23,24,25,09,05,07,04,06,6d(s+,7)e(c+,1)t(e+,1)b(a+,1)s(s,∞)a(s+,0)c7,64,412,33,34,25,09,05,07,04,16,6detbsac(s+,3)7,64,412,33,34,25,09,05,07,04,16,6d(s+,7)e(d+,7)t(e+,7)b(a+,1)s(s,∞)a(s+,0)c7,64,412,103,34,25,09,75,07,74,16,6detbsa Sơ đồ thuật
toán Ford-Fullkerson tổng quát10FalseTrueFalseTrueBeginMạng với
luồng zeroStop:= Falsenot StopFind_PathPath-FoundTăng luồng Stop:= FalseMạng với
luồng cực đại EndVT ≠ ∅P[v]:= u; ε[v]:=min{ε[u],C[u,v]-F[u,v]}VT:= VT ∪ {v}P[v]:= -u; ε[v]:= min{ε[u],F[v,u]}VT:=...
luồng cực đại trong mạng G’. Bắt đầu từ
luồng zero với khả năng thông qua cung.1di ,nếu i = jc[i,j] ,nếu [i,j] ∈ E0 ,nếu [i,j] ∉ EA’ = ( a’ij ) = nếu i = jc[i,j] nếu [i,j] ∈ E’ 2. Giao diện Input ma trận biểu diễn mạng G = (V,E) với khả năng thông qua các cung các đỉnh.3. Giao diện Output ma trận biểu diễn mạng G’ = (V’,E’) với khả năng thông qua các cung tương ứng, ma trận
luồng cực. .. tăng thêm, hay nói khác là làm sự tăng
luồng (flow augmentation) dọc theo đường đi tăng
luồng P một
lượng thích hợp mà các ràng buộc của
bài toán vẫn thoả.Sơ đồ của thuật tốn Ford – Fulkerson có thể mơ tả trong thủ tục sau đây:Procedure Max_Flow;(* Thuật
toán Ford – Fulkerson *)begin(* Khởi tạo: Bắt đầu từ
luồng với giá trị 0 *)for u ∈ V do5C =s+ s- u+ u- v+ v- t+ t-0 6 0... của thuật
toán gán nhãn. Nó có kết thúc hữu hạn hay khơng? Nhận xét rằng một đỉnh được vào tập VT chỉ khi chuyển từ chưa gán nhãn. Do đó một đỉnh chỉ được vào VT nhiều nhất là một lần. Mà mỗi bước lặp bỏ một đỉnh ra khỏi VT. Do đó, vì số đỉnh của mạng là hữu hạn, thuật tốn phải kết thúc hữu hạn.Thí dụ 3. Áp dụng thuật tốn Ford-Fullkerson tìm
luồng cực đại bằng cách gán nhãn cho
luồng zero... phải tìm
luồng cực đại giữa s và t trong mạng như vậy.Xây dựng một mạng G’ sao cho: mỗi đỉnh v của G tương ứng với hai đỉnh v+, v- trong G’, mỗi cung (u,v) trong G ứng với cung (u,v+) trong G’, mỗi cung (v,w) trong G ứng với cung (v-,w+) trong G’. Ngoài ra, mỗi cung (v+,v-) trong G’ có khả năng thơng qua là d(v), tức là bằng khả năng thông qua của đỉnh v trong G.2. Giải quyết
bài tốnTừ . Ford-Fulkerson tìm luồng cực đại cho mạng G’ ta được mạng cực đại và ma trận biểu diễn nó như sau:Với Val(f*) = 64. Bài toán luồng cực đại trong mạng Cho. Chương 2BÀI TỐN LUỒNG CỰC ĐẠI VỚI KHẢ NĂNG THƠNG QUA CÁC CUNG – CÁC ĐỈNHBài tốn luồng cực đại trong mạng là một trong số những bài tốn tối ưu trên