PHẦN I: PHẦN MỞ ĐẦUBà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ị 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ý th
Trang 1PHẦN I: PHẦN MỞ ĐẦU
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ị 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 toán luồng cực đại trong mạng có nhiều ứng 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 toá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…Ngoài ra, ứng dụng của bài toán còn để giải các bài toán như: Bài toán đám cưới vùng quê, bài toán về hệ thống đại diện chung, bài toán phân nhóm sinh hoạt, bài toán lập lịch cho hội nghị …Trong
phạm vi đề tài này tôi sẽ trình bày về “ luồng cực đại và một số bài toán ứng
dụng” và sử dụng thuật toán của Ford và Fulkerson để giải bài toán cụ thể
Trang 2PHẦN II: NỘI DUNG
I PHÁT BIỂU BÀI TOÁN
1.1 Mạng, Luồng trong mạng
Định nghĩa 1 Ta gọi mạng là đồ thị có hướng G = (V,E), trong đó có duy nhất một đỉnh s không có cung đi vào gọi là điểm phát, duy nhất một đỉnh t không có cung đi ra gọi là điểm thu và mỗi cung e = (v,w) E được gán với một số không âm c(e) = c(v,w) gọi là khả năng thông qua của cung e
Để thuận tiện cho việc trình bày ta sẽ quy ước rằng nếu không có cung (v,w) thì khả năng thông qua c(v,w) được gán bằng 0
Định nghĩa 2 Giả sử cho mạng G = (V,E) Ta gọi luồng f trong mạng G = (V,E)
là ánh xạ f: Eà R+ gán cho mỗi cung e =(v,w) E một số thực không âm f(e) = f(v,w), gọi là luông trên cung e, thoả mãn các điều kiện sau:
1 Luồng trên mỗi cung e E không vượt quá khả năng thông qua của nó:
0 ≤ f (e) ≤ c(e),
2 Điều kiện cân bằng luồng trên mỗi đỉnh của mạng : Tổng luồng trên các cung đi vào đỉnh v bằng tổng luồng trên các cung đi ra khỏi đỉnh v, nếu v ¹ s,t:
0 ) , ( )
( )
(
) ( )
∈
− Γ
, ( )
(
) ( )
∑
−
∈ +
∈
=
=
t w s
w
t w f w
s f f
val
1.2 Bài toán luồng cực đại trong mạng
Trang 3Cho 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.
Bài toán như vậy có thể xuất hiện trong rất nhiều ứng dụng thực tế chẳng hạn khi cần xác định cường độ lớn nhất của dòng vận tải giữa 2 nút của một bản đồ giao thông Trong ví dụ này của bài toán luồng cực đại xẽ chỉ cho ta các đoạn đường đông xe nhất và chúng tạo thành “chỗ hẹp” tương ứng với dòng giao thỗng xét theo hai nút được chọn Một ví dụ khác là nếu xét đồ thị tương ứng với một hệ thống dẫn dầu Trong đó các ống tương ứng với các cung , điểm phát
có thể có thể là tàu chở dầu, điểm thu là bể chứa, còn những điểm nối giữa các ống là các nút của đồ thị Khả năng thông qua của các cung tường ứng với tiết diện các ống.Cần phải tìn luộng dầu lớn nhất có thể bơm từ dầu vào bể chứa
1.3 Thuật toán Ford-Fulkerson
Việc chứng minh định lý luồng cực đại-lát cắt cực tiểu ngay lập tức cho chúng ta một thuật toán Tìm luồng cực đại- thuật toán Ford-Fulkerson:
• Khởi tạo một luồng bằng 0
• Trong khi đồ thị tăng luồng của f còn có đường đi cơ bản (đường tăng luồng), thì tìm một đường đi như thế, nâng luồng dọc theo đường đi này
• Khi không còn đường đi cơ bản nữa thì f là luồng cực đại
Đoạn chương trình sau minh họa thuật toán Ford-Fulekerson bằng NNLT Pascal, trong đó sử dụng tìm kiếm sâu DFS để tìm một đường tăng luồng trên
Trang 4Trong đó:
• C[1 n,1 n]: ma trận biểu diễn khả năng thông qua các cung trên mạng
Trang 5• F[1 n,1 n]: ma trận biểu diễn luồng trên các cung.
• Trace[1 n]: dùng để lưu vết đường tăng luồng, thuật toán tìm đường tăng luồng sẽ sử dụng là thuật toán tìm kiếm theo chiều sâu (DFS)
Ta có thể tìm kiếm (u,v) có phải là cung trên mạng thặng dư Gf không bằng đẳng thức: c[u,v]>f[u,v] Nếu (u,v) là cung trên Gf thì khả năng thông qua của nó là c[u,v] –f[u,v]
Ví dụ 1:
Xét mạng vận tải G =(V,E) được cho ở hình sau với 1 là đỉnh phát, 6 là đỉnh thu, luồng được đặt trong ngoặc, khả năng thông qua được ghi trên các cung :
Sử dụng thuật toán Ford-Fulkerson để tìm luồng cực đại và lát cắt nhỏ nhất
1 Bước 1: Khởi tạo luồng f =0
2 Bước 2:
• Đồ thị tăng luồng Gf của G:
Trang 6• Chọn đường tăng luồng P = (1,2,4,6), tăng luồng dọc theo đường này:
Trang 8Đến đây không còn đường đi cơ bản nào trên đồ thị tăng luồng nên thuật toán kết thúc.
Bước 3: Luồng cực đại
Luồng cực đại có giá trị là 9, lát cắt cực tiểu (X,Y) với X={1,3}, Y={2,4,5,6}
Định lý về tính nguyên: “Nếu tất cả các khả năng thông qua là số nguyên thì
thuật toán trên luôn tìm được luồng cực đại với luồng trên cung là các số nguyên
Goị e số cạnh của đồ thị, n là số đỉnh => e = E, n =V
Thuật toán Ford Fulkerson có độ phức tạp là O(e) ở mỗi lần thực hiện, nhưng
số lần lặp không chính xác, xấp xỉ giá trị luồng cực đại f, tức là thuật toán này
có độ phức tạp là một hàm đa thức, vì vậy, chúng ta cần đến một thuật toán mà thời gian thực hiện không phụ thuộc chút nào vào C Xét cho cùng, các thuật toán tìm đường đi ngắn nhất với khả năng thông qua của cung e là ce, nhưng thời gian thực hiện của các thuật toán này chỉ phụ thuộc các tham số e và n Một thuật toán như thế gọi là “phụ thuộc đa thức mạnh” (strongly polynomial)
Trang 9Ví dụ 2:
Xét mạng vận tải G được cho ở hình sau:
Trong đó: 1 là đỉnh phát, 6 là đỉnh thu, giá trị luồng được viết trong ngoặc và khả năng thông qua được cho trên mỗi cạnh Ta sẽ dùng thuật toán Ford-Fulkersons để tìm luồng cực đại và lát cắt cực tiểu trên G
a Dùng thuật toán Ford-Fulkersons:
Bước 1: Khởi tạo luồng f=0:
Bước 2: Tăng luồng:
Trang 10• Chọn đường tăng luồng P = (1,2,5,6), tăng luồng dọc theo đường này:
7
2 6
7
7 2
2
Trang 12• Đồ thị tăng luồng:
Đến đây không còn đường đi cơ bản nào trên đồ thị tăng luồng nên kết thúc bước 2
Bước 3: Luồng cực đại fmax =14
Lát cắt cực tiểu (X,Y) với X= {1,2,3,5}, Y={4,6}
Trang 13Sơ đồ thuật toán Ford-Fullkerson tổng quát
Trang 14II MỘT SỐ BÀI TOÁN TỐI ƯU TỔ HỢP ỨNG DỤNG TỪ BÀI TOÁN LUỒNG
Bài toán luồng cực đại có rất nhiều ứng dụng trong việc giải nhiều bài toán tổ hợp Khó khăn chính ở đây là phải xây dựng tương ứng sao cho việc tìm luồng cực đại trong nó sẽ tương đương với việc giải bài toán đặt ra Mục này sẽ giới thiệu một số bài toán như vậy
2.1 Bài toán đám cưới vùng quê
Có m chàng trai ở một làng quê nọ Đối với mỗi chàng trai ta biết các cô
gái mà anh ta vừa ý Hỏi khi nào thì có thể tổ chức các đám cưới trong đó chàng trai nào cũng sánh duyên với cô gái mà mình vừa ý.
Ta có thể xây dựng đồ thị với các đỉnh biểu thị các chàng trai và các cô gái, còn các cung biểu thị sự vừa ý của các chàng trai đối với các cô gái Khi đó
ta thu được một đồ thị hai phía
Thí dụ Có 4 chàng trai {T1,T2,T3,T4} và 5 cô gái {G1,G2,G3,G4,G5} Sự vừa ý cho trong bảng sau
Đồ thị tương ứng được cho trong hình sau
Chàng trai Các cô gái mà chàng trai ưng
Trang 15Mạng tương ứng với Bài toán đám cưới vùng quê
Đưa vào điểm phát s và điểm thu t Nối s với tất cả các đỉnh biểu thị các chàng trai, và nối t với tất cả các đỉnh biểu thị các cô gái Tất cả các cung của đồ
thị đều có khả năng tông qua bằng 1 Bắt đầu từ luồng 0, ta tìm luồng cực đại trong mạng xây dựng được theo thuật toán Ford- Fulkerson Từ định lý về tính nguyên, luồng trên các cung là các số 0 hoặc 1 Rõ ràng là nếu luồng cực đại
trong đồ thị có giá trị V max = m, thì bài toán có lời giải, và các cung với luồng
bằng 1 sẽ chỉ ra cách tổ chức đám cưới thoả mãn điều kiện đặt ra Ngược lại,
nếu bài toán có lời giải thì V max=m bài toán về các đám cưới vùng quê là một
trường hợp riêng của bài toán về cặp ghép trên đồ thị hai phía mà để giải nó có thể xây dựng thuật toán hiệu quả hơn
2.2 Bài toán về hệ thống đại diện chung
Cho tập m phần tử X = {z1,z2,…,zm} Giả sử <A1,A2,…,An> và <B1,B2,…,Bn>
là hai dãy tập con của X Dãy gồm n phần tử khác nhau của X:< a1,a2,…,an > được gọi là hệ thống các đại diện chung của hai dãy đã cho nếu như tìm được một hoán vị σ của tập {1,2,…,n} sao cho < a1,a2,…,an > là hệ thống các đại diện phân biệt của hai dãy <A1,A2,…,An> và <Bσ(1),Bσ(2),…,Bσ(n)> tức là điều kiện sau được thoả mãn: ai ∈ Ai ∩ Bσ (i), i =1,2,…,n
Xây dựng mạng G=(V,E) với tập đỉnh
{ , , , } { , , , },
, , , , ,
, ,
2 1 2
1
2 1 2
1
n m
m n
y y y v
v v
u u u x x x t s V
Trong đó đỉnh x i tương ứng với tập Ai đỉnh y i tương ứng với đỉnh Bi ,các phần tử
ui,vi tưong ứng với phần tử z j Tập các cung mạng của G được xác định như sau
{s,x i : 1 i n} {(x i,u j) :
E= ≤ ≤ ∪ với z j∈A i, 1 ≤i≤n, 1 ≤ j≤m}∪
{(u i,v j) : 1 ≤ j≤m} {∪ (v j,y i) :
∪ với z j ∈B i, 1 ≤i≤n, 1 ≤ j≤m} {∪ (y i,t) : 1 ≤i≤n}.
Khả năng thông qua của tất cả các cung được đặt bằng 1 Dễ dàng thấy
rằng hệ thống đại diện chung của hai dãy <A 1,A2,…,An> và <B1,B2,…,Bn> tồn tại khi và chỉ khi trong mạng G = (V,E) tìm được luồng với giá trị n Để xét sự
tồn tại của luồng như vậy có thể sử dụng thuật toán tìm luồng cực đại từ s đến t trong mạng G = (V,E).
2.3 Về một bài toán tối ưu rời rạc.
Trang 16Trong mục này ta sẽ trình bày thuật toán được xây dựng dựa trên thuật toán tìm luồng cực đại để giải một bài toán tối ưu rời rạc là mô hình toán học cho một số bài toán tối ưu tổ hợp.
Xét bài toán tối ưu rời rạc
x x x f
1 1
p x
a
1
, , , 2 , 1 , (2)
xij = 0 hoặc 1, j=1,2,…,n (3)
trong đó a ij ∈ {0,1}, i= 1,2,…,m; j= 1,2,…,n, pi - nguyên dương, i=1,2,…,m.
Bài toán (1)-(3) là mô hình toán học cho nhiều bài toán tối ưu tổ hợp thực
tế Dưới đây ta dẫn ra một vài ví dụ điển hình
2.3.1 Bài toán phân nhóm sinh hoạt
Có m sinh viên và n nhóm sinh hoạt chuyên đề Với mỗi sinh viên i, biết aij =1, nếu sinh viên có i nguyện vọng tham gia vào nhóm j,
aij =0, nếu ngược lại,
và pi là số lượng nhóm chuyên đề mà họ có nguyện vọng tham gia và đảm bảo mỗi sinh viên i phải tham gia đúng pi nhóm, hãy tìm cách phân phối với số người trong nhóm có nhiều sinh viên tham gia nhất là nhỏ nhất có thể được.
Đưa vào biến số
xij =1, nếu sinh viên i tham gia vào nhóm j,
xij =0, nếu ngược lại,
i=1,2,…,m, j= 1,2,…,n, khi đó dễ thấy mô hình toán học cho bài toán đặt ra
x x x f
1 1
p x
a
1
, , , 2 , 1 , (2)
xij = 0 hoặc 1, j=1,2,…,n (3)
trong đó a ij ∈ {0,1}, i= 1,2,…,m; j= 1,2,…,n, pi - nguyên dương, i=1,2,…,m.
2.3.2 Bài toán lập lịch cho hội nghị
Một hội nghị có m tiểu ban, mỗi tiểu ban cần sinh hoạt trong một ngày tại phòng họp phù hợp với nó Có n phòng họp dành cho việc sinh hoạt của các tiểu ban Biết
aij =1, nếu phòng họp i là thích hợp với tiểu ban j,
aij =0, nếu ngược lại,
Trang 17i=1,2,…,m; j=1,2,…,n Hãy bố trí các phòng họp sao cho hội nghị kết thúc sau
ít ngày làm việc nhất.
Đưa vào biến số
xij = 1, nếu bố trí tiểu ban i làm việc ở phòng j,
xij =0, nếu ngược lại,
i=1,2,…,m,j=1,2,…,n, khi đó dễ thấy mô hình toán học cho bài toán đặt ra chính
x x x f
1 1
p x
a
1
, , , 2 , 1 , (2)
xij = 0 hoặc 1, j=1,2,…,n (3)
trong đó a ij ∈ {0,1}, i= 1,2,…,m; j= 1,2,…,n, pi - nguyên dương, i=1,2,…,m.
Bổ đề: Bài toán (1)-(3) có phương án tối ưu khi và chỉ khi
p a
1
, , 2 , 1 , (4)
Trang 18Start:=i;
IncValue:=Min(IncValue,a[s,start]-x[s,start]);
Trang 21PHẦN III: KẾT LUẬN
Trong phạm vi nghiên cứu của đề tài, tôi đã trình bày bài toán luồng cực đại và thuật toán Ford – Fulkerson Đề tài cũng đưa ra được một số bài toán ứng dụng cụ thể của bài toán luồng cực đại Hy vọng chúng ta có thể hiểu thêm thuật toán tìm luồng cực đại và áp dụng để giải được các bài toán đã đặt ra
Đề tài có một số hạn chế như sau:
- Chưa trình bày được một thuật toán tìm luồng cực đại khác như Thuật toán Edmonds-Karp để so sánh và đối chiếu với thuật toán Ford – Fulkerson
- Chưa cài đặt được hết các bài toán ứng dụng đưa ra
Hy vọng những hạn chế này như là phần bỏ ngỏ của đề tài để chúng ta tiếp tục nghiên cứu và hoàn thiện đề tài này