LỜI CAM ĐOAN Tôi xin cam đoan luận văn “Nghiên cứu bài toán luồng cực đại trong mạng và thuật toán Ford - Fulkerson” là công trình nghiên cứu của tôi với sự hướng dẫn khoa học của TS P
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH
NGUYỄN HOÀNG VŨ
NGHIÊN CỨU BÀI TOÁN LUỒNG CỰC ĐẠI
TRONG MẠNG VÀ THUẬT TOÁN FORD - FULKERSON
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGHỆ AN, 2017
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH
NGUYỄN HOÀNG VŨ
NGHIÊN CỨU BÀI TOÁN LUỒNG CỰC ĐẠI
Chuyên ngành: Công nghệ thông tin
Mã ngành: 8.48.02.01
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Người hướng dẫn khoa học: TS PHAN LÊ NA
NGHỆ AN, 2017
Trang 4LỜI CAM ĐOAN
Tôi xin cam đoan luận văn “Nghiên cứu bài toán luồng cực đại trong mạng
và thuật toán Ford - Fulkerson” là công trình nghiên cứu của tôi với sự
hướng dẫn khoa học của TS Phan Lê Na, những tham chiếu tài liệu được ghi
rõ ở phần tài liệu tham khảo Các số liệu thực nghiệm được nghiên cứu thực
tế trên cùng một môi trường thí nghiệm, các con số thống kê được ghi nhận một cách khách quan, trung thực và chưa được công bố dưới bất kỳ hình thức nào trước đây
Tác giả
Nguyễn Hoàng Vũ
Trang 5LỜI CẢM ƠN
Em xin chân thành cảm ơn cô giáo, TS Phan Lê Na đã tận tình hướng
dẫn, giúp đỡ để tôi hoàn thành tốt luận văn này
Em xin cảm ơn sự giúp đỡ của các thầy giáo, cô giáo Khoa công nghệ thông tin - Trường đại học Vinh đã tận tình giảng dạy những kiến thức chuyên đề CNTT cho tôi trong quá trình học tập
Ngoài ra tôi chân thành cảm ơn các bạn học viên cao học K24 tại Vĩnh Long đã giúp tôi trong việc cung cấp tài liệu, trau đổi các vấn đề thuộc lĩnh vực mà tôi nghiên cứu, cảm ơn các cán bộ lãnh đạo nơi tôi công tác đã hỗ trợ cho tôi trong thời gian làm luận văn
Vĩnh Long, tháng 5 năm 2018
Học viên
Nguyễn Hoàng Vũ
Trang 6MỤC LỤC
LỜI CAM ĐOAN 1
LỜI CẢM ƠN 2
MỤC LỤC 3
DANH MỤC CÁC BẢNG 5
DANH MỤC CÁC HÌNH VẼ 6
MỞ ĐẦU 8
1 Sự cần thiết của vấn đề nghiên cứu 8
2 Mục tiêu nghiên cứu 9
2.1 Mục tiêu tổng quát 9
2.2 Mục tiêu cụ thể 9
3 Đối tượng và phạm vi nghiên cứu 10
3.1 Đối tượng nghiên cứu 10
3.2 Phạm vi nghiên cứu 10
4 Nội dung nghiên cứu 11
5 Cấu trúc của luận văn 11
Chương 1: TỔNG QUAN LUỒNG CỰC ĐẠI 12
1.1 Tổng quan về đồ thị 12
1.1.1 Định nghĩa đồ thị (graph) 12
1.1.2 Các loại đồ thị 13
1.1.3 Các khái niệm liên quan 16
1.2 Tổng quan về luồng cực đại 18
1.2.1.Mạng (network) 18
1.2.2 Luồng (flow) (Luồng trong mạng) 18
1.2.3.Tính chất cơ bản về Luồng 20
1 3 Kết luận chương 1 22
Chương 2: BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG VÀ THUẬT TOÁN FORD-FULKERSON 23
2.1 Bài toán luồng cực đại trong mạng 23
Trang 72.1.1 Phát biểu bài toán luồng cực đại 23
2.1.2 Lát cắt, định lý Ford – Fulkerson 24
2.2 Thuật toán Ford – Fulkerson 25
2.3 Giới thiệu các ứng dụng luồng cực đại 31
2.3.1 Bài toán tìm công suất bơm dầu 31
2.3.2 Bài toán đám cưới vùng quê 32
2.3.3 Bài toán xét ứng cử viên vô địch 33
2.3.4 Bài toán về hệ thống đại diện chung 34
2.3.5 Bài toán tối ưu rời rạc 35
2.3.5.1 Phát biểu bài toán 35
2.3.5.2 Bài toán phân nhóm sinh hoạt 36
2.3.5.3 Bài toán lập lịch cho hội nghị 36
2.4 Kết luận chương 2 36
Chương 3: ỨNG DỤNG THUẬT TOÁN FORD-FULKERSON THIẾT KẾ HỆ THỐNG TÍNH SỐ LƯỢT KHÁCH THĂM ĐÌNH THẦN BÌNH THỦY37 3.1 Đặt vấn đề: 37
3.2 Bài toán tính số lượt khách về thăm Đình thần Bình Thủy 38
3.3 Thiết kế mô hình hệ thống tính số lượt khách về thăm Đình thần Bình Thủy 39
3.4 Thiết kế chương trình 50
3.4.1 Môi trường cài đặt 50
3.4.2 Giao diện và chức năng 51
3.5 Dữ liệu thử nghiệm 52
3.5.1 Thử nghiệm 1: Tính toán trong ngày thứ nhất (14/04 âm lịch) 52
3.5.2 Thử nghiệm 2: Tính toán trong ngày thứ hai (15/04 âm lịch) 58
3.6 So sánh hiệu quả của các hệ thống 64
3.7 Một số nhận xét và đề xuất 64
3.8 Kết luận chương 3 64
KẾT LUẬN 65
TÀI LIỆU THAM KHẢO 67
PHỤ LỤC 69
Trang 8DANH MỤC CÁC BẢNG CHƯƠNG 1
CHƯƠNG 2
Bảng 2.1: Bảng dữ liệu phân bổ các chàng trai và cô gái 32
CHƯƠNG 3 Bảng 3.1: Bảng chỉ số các quận/huyện trên bản đồ 41
Bảng 3.2: Bảng dữ liệu giả định 1 về nhu cầu 41
Bảng 3.3: Bảng dữ liệu giả định 1 về khả năng thông qua 42
Bảng 3.4: Bảng dữ liệu giả định 1 trên file 50
Bảng 3.5: Bảng dữ liệu giả định 1 về nhu cầu 53
Bảng 3.6: Bảng dữ liệu giả định 1 về khả năng thông qua 53
Bảng 3.7: Dữ liệu file kết quả khi chạy chương trình thử nghiệm 1 56
Bảng 3.8: Bảng dữ liệu giả định 2 về nhu cầu 58
Bảng 3.9: Bảng dữ liệu giả định 1 về khả năng thông qua 59
Bảng 3.10:: Dữ liệu file kết quả khi chạy chương trình thử nghiệm 2 61
Bảng 3.11 So sánh kết quả tính toán và dữ liệu thực tế 64
Trang 9DANH MỤC CÁC HÌNH VẼ CHƯƠNG 1
Hình 1.1: Ví dụ về mô hình đồ thị 12
Hình 1.2: Sơ đồ máy tính là đơn đồ thị vô hướng 13
Hình 1.3: Đơn đồ thị có hướng 14
Hình 1.4: Sơ đồ mạng máy tính với đa kênh thoại (đa đồ thị vô hướng) 14
Hình 1 5: Mạng máy với các kênh thoại một chiều (đa đồ thị có hướng) 15
Hình 1.6: Các loại đồ thị đặc biệt 16
Hình 1.7: Minh họa các khái niệm liên quan đến đồ thị 16
Hình 1.8: Mạng và luồng trên mạng 19
CHƯƠNG 2 Hình 2.1: Luồng cực đại trên mạng 24
Hình 2.2: Lát cắt trên mạng 24
Hình 2.3: Lát cắt hẹp nhất mạng 25
Hình 2.4: Mạng ban đầu 27
Hình 2.5: Khởi tạo luồng bằng 0 28
Hình 2.6: Xây dựng mạng thặng dư 28
Hình 2.7: Tăng luồng theo đường P f1 29
Hình 2.8: Tăng luồng theo đường P f2 29
Hình 2.9: Tăng luồng theo đường P f3 30
Hình 2.10: Mạng đã tăng luồng cực đại 30
Hình 2.11: Bài toán tìm công suất bơm dầu 32
Hình 2.12: Mạng tương ứng với bài toán đám cưới vùng quê 33
Hình 2.13: Bài toán loại bỏ ứng cử viên vô địch 34
CHƯƠNG 3 Hình 3.1: Bài toán tính số lượt khách tới thăm 40
Hình 3.2: Mạng của bộ dữ liệu 1 43
Trang 10Hình 3.3: Khởi tạo luồng bằng 0 của bộ dữ liệu 1 43
Hình 3.4: Xây dựng mạng thặng dư của bộ dữ liệu 1 44
Hình 3.5: Tìm luồng theo P f 1 của bộ dữ liệu 1 44
Hình 3.6: Tìm luồng theo P f 2 của bộ dữ liệu 1 45
Hình 3.7: Tìm luồng theo P f 3 của bộ dữ liệu 1 46
Hình 3.8: Tìm luồng theo P f 4 của bộ dữ liệu 1 46
Hình 3.9: Tìm luồng theo P f 5 của bộ dữ liệu 1 47
Hình 3.10: Tìm luồng theo P f 6 của bộ dữ liệu 1 47
Hình 3.11: Tìm luồng theo P f 7 của bộ dữ liệu 1 48
Hình 3.12: Tìm luồng theo P f 8 của bộ dữ liệu 1 48
Hình 3.13: Tìm luồng theo P f 9 của bộ dữ liệu 1 49
Hình 3 14: Luồng cực đại của bộ dữ liệu 1 49
Hình 3 15: Giao diện của chương trình 51
Hình 3 16: Mô phỏng với bộ dữ liệu 1 về chỉ số và khả năng 55
Hình 3 17: Mô phỏng với bộ dữ liệu 1 về nhu cầu và luồng 58
Hình 3 18: Mô phỏng với bộ dữ liệu 2 về chỉ số và khả năng 61
Hình 3 19: Mô phỏng với bộ dữ liệu 2 về nhu cầu và luồng 63
Trang 11MỞ ĐẦU
1 Sự cần thiết của vấn đề nghiên cứu
Trong thời đại công nghiệp hoá – hiện đại hoá, việc áp dụng công nghệ thông tin (CNTT) vào các lĩnh vực của đời sống xã hội chúng ta đã trở nên mạnh mẽ hơn bao giờ hết, từ những lĩnh vực công nghệ cao đến những vấn
đề thuộc về phục vụ con người hằng ngày, từ những tiện ích xã hội đến những vấn đề giáo dục
Lý thuyết đồ thị là ngành khoa học xuất hiện từ lâu nhưng đã mang lại rất có nhiều ứng dụng hiện đại Những ý tưởng cơ bản đã được đưa ra từ thế
kỷ 18 do nhà toán học Thụy Sĩ Leonhard Euler Ông dùng đồ thị để giải quyết bài toán cây cầu Konigsberg rất nổi tiếng Từ đó lý thuyết đồ thị ngày càng khẳng định được vị trí quan trọng trong việc áp dụng để giải quyết các bài toán thực tế nhờ vào việc tìm ra ngày càng nhiều của các định lý, công thức và thuật toán
Có một bộ phận quan trọng của lý thuyết đồ thị là dạng bài toán luồng trên mạng, đã xuất hiện từ những nghiên cứu của Gustav Kirchhoff, và được những nhà nghiên cứu tiên phong như Lester Randolph Ford và Delbert Ray Fulkerson phát triển thành một lĩnh vực khoa học độc lập
Bài toán luồng cực đại trong mạng cũ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 năm 1950, và gắn liền với tên tuổi của hai nhà bác học người Mỹ là Lester Randolph Ford và Delbert Ray 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 độ 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, hay là 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
Trang 12hệ thống ống dẫn dầu, …Ngoài ra, ứng dụng còn để giải các bài toán như: bài toán lập lịch cho hội nghị, bài toán đám cưới vùng quê, bài toán phân nhóm sinh hoạt, bài toán về hệ thống đại diện chung, … Bài toán luồng trên mạng ngày càng khẳng định được tính quan trọng của nó trong các ngành khoa học hiện đại Sự phát triển mạnh mẽ của công nghệ thông tin cùng với khả năng tính toán siêu nhanh của các máy tính đã giúp việc giải quyết các bài toán luồng trên mạng hiệu quả hơn và đem lại nhiều ứng dụng thực tiễn hơn Trên
cơ sở các nghiên cứu về bài toán luồng cực đại
Với nhận thức như trên, tôi chọn đề tài: “Nghiên cứu bài toán luồng cực đại trong mạng và thuật toán Ford - Fulkerson” làm luận văn tốt
Đề tài tập trung vào các mục tiêu cụ thể sau:
(i) Nghiên cứu tổng quan về bài toán luồng cực đại trong mạng
(ii) Nghiên cứu thuật toán Ford – Fulkerson
(iii) Nghiên cứu các bài toán ứng dụng của luồng cực đại
(iv) Cài đặt thử nghiệm thuật toán Ford – Fulkerson
(v) Đánh giá hiệu quả của thuật toán
Trang 133 Đối tượng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu
(a) Nghiên cứu lý thuyết
- Nghiên cứu cơ bản về lý thuyết đồ thị;
- Nghiên cứu thuật toán Ford – Fulkerson để giải quyết các bài toán luồng cực đại trong mạng;
- Nghiên cứu tài liệu về ngôn ngữ lập trình C# để cài đặt các thuật toán thử nghiệm
(b) Nghiên cứu thực nghiệm
- Cài đặt thử nghiệm hệ thống tính số lượt khách về thăm đình thần Bình Thuỷ Đánh giá hiệu quả của thuật toán luồng cực đại trong mạng
3.2 Phạm vi nghiên cứu
Luồng trong mạng là một bài toán có lịch sử khá dài và được nghiên cứu dưới góc độ khoa học máy tính từ năm 1956 với thuật toán Ford-Fulkerson [9] Sau đó, rất nhiều giải thuật từ các nhà nghiên cứu khác nhau: Ahuja, Magnanti và Orlin, Edmonds and Karp, Dinic, and Karzano và đã đạt được nhiều thành tựu lớn Trong phạm vi luận văn này, tôi thử nghiệm giải quyết một số bài toán luồng cực đại trong mạng dựa trên tập dữ liệu đã được cho trước Hướng tiếp cận được thử nghiệm để nhận ra đối tượng được đưa vào
từ bài toán là:
Giải quyết bài toán dựa trên thuật toán Ford – Fulkerson
Trang 144 Nội dung nghiên cứu
- Nghiên cứu tổng quan lý thuyết đồ thị, luồng và các bài toán luồng cực đại
- Nghiên cứu thuật toán Ford – Fulkerson
- Nghiên cứu ngôn ngữ lập trình C# để cài đặt thử nghiệm thuật toán luồng cực đại
- Lập trình thử nghiệm thuật toán Ford – Fulkerson về bài toán tính số lượt khách về thăm đình thần Bình Thuỷ
- Thử nghiệm và đánh giá thuật toán
- Viết báo cáo luận văn
5 Cấu trúc của luận văn
Ngoài phần mở đầu và phần kết luận, luận văn được sắp xếp theo bố cục sau đây:
Chương 1: Tổng quan luồng cực đại
Chương 2: Bài toán luồng cực đại trong mạng và thuật toán Fulkerson
Ford-Chương 3: Ứng dụng thuật toán Ford-Fulkerson thiết kế hệ thống tính
số lượt khách thăm đình thần Bình Thủy
Trang 15Chương 1: TỔNG QUAN LUỒNG CỰC ĐẠI
Chương 1 trình bày định nghĩa cơ bản về lý thuyết đồ thị và một số các khái niệm có liên quan Ngoài ra còn giới thiệu các khái niệm về mạng, luồng
và tính chất cơ bản trên luồng là cơ sở để giải quyết bài toán (xem [1,4,5,6,9])
1.1 Tổng quan về đồ thị
1.1.1 Định nghĩa đồ thị (Graph)
Đồ thị là một cấu trúc rời rạc bao gồm các đỉnh và các cạnh nối các đỉnh
đó Người ta ký hiệu đồ thị G = (V, E), trong đó V gọi là tập các đỉnh (Vertices) và E gọi là tập các cạnh (Edges) [6]
Trang 16- Nếu cạnh e = (x,x) thì e là cạnh có hai đỉnh trùng nhau gọi đó là một
khuyên
- Nếu cặp đỉnh (x,y) có nhiều hơn một cạnh thì những cạnh có cùng cặp
đỉnh là những cạnh song song hay là cạnh bội
Xét mạng máy tính, và thể biểu diễn mạng này bằng một mô hình đồ thị,
mà trong đó mỗi một máy tính là một đỉnh, giữa các máy được nối với nhau bằng đường truyền mạng, chúng tương ứng là các cạnh của đồ thị
Hình 1.2: Sơ đồ máy tính là đơn đồ thị vô hướng
Một mô hình mạng máy tính như hình 1.2 trong đó a, b, c, d, e, g, h, i, k,
l là các máy tính tương ứng các đỉnh, giữa hai máy được nối trực tiếp với
nhau thì tương ứng với một cặp đỉnh kề nhau
- Các cạnh e E được gọi là có hướng nếu như trên đồ thị G = (V, E) quan tâm đến thứ tự hai đỉnh của một cạnh: có sự phân biệt giữa hai cạnh e 1
= (i, j) và e 2 = (j, i)
Trang 17Hình 1.4: Sơ đồ mạng máy tính với đa kênh thoại (đa đồ thị vô hướng)
- Ngoài ra trong mạng máy tính có thể chỉ cho phép truyền dữ liệu theo
một chiều Chẳng hạn trong hình 1.5 máy a, b, l chỉ có thể nhận dữ liệu từ
các máy khác, còn các kênh thoại cho phép truyền tin theo cả hai chiều được thay thế bởi hai cạnh có hướng ngược chiều nhau
Trang 18Hình 1.5: Mạng máy với các kênh thoại một chiều (đa đồ thị có hướng)
Một số dạng đơn đồ thị đặc biệt: [5]
Đồ thị vòng C n (cycle graph): Đồ thị vòng Cn, n≥3 gồm n đỉnh v1 , v 2 ,
…, v n và các cạnh (v 1 ,v 2 ), (v 2 ,v 3 ), …, (v n-1 ,v n ), (v n ,v 1 )
Đồ thị bánh xe W n (wheel graph): là đơn đồ thị vô hướng thu được từ
đồ thị C n bằng cách thêm một đỉnh mới nối với tất cả các đỉnh của C n
Đồ thị hai phía K m,n (bipartite graph): Đơn đồ thị G = (V, E) sao cho
V=V 1 V 2 , V 1 V 2 = , V 1 ≠, V 2 ≠ và mỗi cạnh của G được nối một
đỉnh trong V 1 và một đỉnh trong V 2 gọi là đồ thị hai phía
Đồ thị đầy đủ K n (compelte graph): Là đơn đồ thị vô hướng mà giữa hai đỉnh bất kỳ luôn tồn tại cạnh nối
Đồ thị đầy đủ Kn có tất cả n(n-1)/2 cạnh, nó là đơn đồ thị có nhiều cạnh nhất
Trang 19Hình 1.6: Các loại đồ thị đặc biệt
1.1.3 Các khái niệm liên quan
Ta xét các khái niệm được trình bày dưới đây có thể dùng cho cả đồ thị
có hướng và vô hướng hoặc từng dạng đồ thị cụ thể
Hình 1.7: Minh họa các khái niệm liên quan đến đồ thị
Trang 20Cạnh (edge)
Nếu (x, y) là một cặp đỉnh thuộc E thì nó có một cạnh nối x và y Lúc đó
x, y là hai đỉnh kề nhau Xét G1 trong hình 1.7 ta có đỉnh 1 và, đỉnh 2 là kề
nhau và có cạnh là e = (1, 2) hoặc trên G2 có đỉnh b và đỉnh e là kề nhau và cạnh là e = (b, e)
Cạnh liên thuộc
Xét một cạnh e ∈ E trên đồ thị vô hướng G = (V, E), nếu e = (x, y) thì
cạnh e này liên thuộc (incident) với đỉnh x và đỉnh y
Bậc của đỉnh
Bậc (degree) của đỉnh trong đồ thị vô hướng là số cạnh liên thuộc với nó
và kí hiệu là deg(v), xét bậc của đỉnh e trên G2 trong hình 1.7 ta có:
deg(e)=3
Bán bậc của đỉnh
Bán bậc vào (ra) của đỉnh trong đồ thị có hướng là số cạnh của đồ thị đi
vào (ra) đỉnh đó và kí hiệu là deg + (v) hay deg - (v) Ví dụ trong hình 1.7 đỉnh 3
của G 1 có bán bậc vào là 1: hay deg - (3) = 1 và bán bậc ra là 2: deg+(3) = 2
Đường đi (path)
Xét đồ thị G = (V, E) khi đó một đường đi từ đỉnh u đến đỉnh v là một dãy đỉnh u 1 , u 2 , …, u i , v mà các cạnh (u , u 1 ), (u 1, u 2 ), …, (u i , v) E
Xét đồ thị G2 trên hình 1.7 ta có đường đi: abcfeb
Đường đi đơn
Xét đồ thị G = (V, E), một đường đi đơn là đường đi mà các đỉnh trên
đó khác nhau từng đôi một Xét đồ thị G2 trên hình 1.7 ta có đường đi đơn:
abcfed
Trang 21Hai đỉnh liên thông
Nếu hai đỉnh u và v được gọi là liên thông với nhau trên đồ thị G = (V,
E) thì có một đường đi từ u đến v trên đồ thị đó
Đồ thị liên thông
Nếu tất cả cặp đỉnh của đồ thị đều liên thông thì đồ thị đó được gọi là liên thông
Chu trình (cycle)
Một chu trình trên đồ thị G = (V, E) là một đường đi đơn có đỉnh đầu và
đỉnh cuối trùng nhau Xét trong hình 1.7 trên G 2 ta có chu trình: abcda
1.2 Tổng quan về luồng cực đại
1.2.1 Mạng (network)
[4][7][9] Mạng (network) là một đồ thị có hướng G = (V, E) trong đó:
- Tồn tại duy nhất một đỉnh không có cung đi vào mà chỉ có cung đi ra, gọi là đỉnh phát (source)
- Có duy nhất một đỉnh không có cung đi ra mà chỉ có cung đi vào, được gọi là đỉnh thu (sink)
- Mỗi cạnh e=(i, j)E được gán một số nguyên không âm c(e)= c(i, j)
gọi là khả năng thông qua (capacity) của cung đó
1.2.2 Luồng (flow) (Luồng trong mạng)
[4][7][8][9] Cho một mạng có dạng một đồ thị có hướng G = (V, E) Ta
gọi luồng f trong mạng là ánh xạ f:ER + gán cho mỗi cung e=(i, j) E một
số thực không âm f(e) thoả mãn các điều kiện:
Trang 22- Điều kiện 1: Ràng buộc khả năng thông qua (Capacity Constraint): 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)
- Điều kiện 2: Cân bằng luồng (Flow Conversion): Với i s, t, tổng
luồng trên các cung vào đỉnh i bằng tổng luồng trên các cung đi ra khỏi đỉnh
, (
) , ( )
, (
k i i
k i f i
j
Giá trị của luồng được tính bằng tổng luồng trên các cung đi ra từ đỉnh
phát s bằng tổng luồng trên các cung đi vào đỉnh thu t
) } { , ( )
, }
Hình 1.8: Mạng và luồng trên mạng
Chúng ta có hình 1.11 minh họa mạng G = (V, E) và luồng f trên mạng
đó Mỗi cạnh của đồ thị có 2 trọng số kí hiệu là f/c Xét mạng G:
- Có đỉnh phát là 1
- Có đỉnh thu là 6
- Mỗi cạnh của mạng được gán trọng số là khả năng thông qua của cạnh
đó
Trang 23Xét luồng f với các điều kiện ràng buộc:
- Xét điều kiện ràng buộc khả năng thông qua của luồng: f(v) c(v), v
Trang 24Mỗi hạng tử của tổng: f({u}, V) chính là tổng luồng trên các cung đi ra
khỏi đỉnh u, theo tính bảo tồn luồng và u không phải đỉnh phát cũng không
phải đỉnh thu, hạng tử này phải bằng 0, suy ra f(X, V) = 0 Theo chứng minh
ở phần b), ta còn suy ra f(V, X) = 0
Tính chất 2:
Giá trị luồng trên mạng bằng tổng luồng trên các cung đi vào đỉnh thu
Trang 26Chương 2: BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG VÀ
THUẬT TOÁN FORD-FULKERSON
Chương này trình bày bài toán luồng cực đại trên mạng, Lát cắt, định lý Ford–Fulkers, và các cách tiếp cận hiện có để giải quyết bài toán Cuối cùng
là áp dụng thuật toán Ford-Fulkerson dựa trên khái niệm về đường tăng luồng
và một số ứng dụng thực tế của bài toán luồng trên mạng như: bài toán tìm công suất bơm dầu và bài toán xét ứng cử viên vô địch, bài toán tối ưu rời rạc (xem [2,6,7,8,9,11])
2.1 Bài toán luồng cực đại trong mạng
2.1.1 Phát biểu bài toán luồng cực đại
Trong thực tế ta thường gặp bài toán gọi là bài toán tìm luồng cực đại
như sau: Cho mạng G= (V,E) với đỉnh phát s, đỉnh thu t và khả năng thông
qua cuv, với (u,v)G Trong số các luồng trên mạng G= (V,E), hãy tìm luồng
có giá trị cực đại
Ý tưởng xây dựng luồng cực đại: Với mạng G= (V, E), ta tìm đường đi (không định hướng) từ đỉnh phát s đến đỉnh thu t cho phép hiệu chỉnh giá trị
luồng trên đường đi đó sao cho luồng mới có giá trị lớn hơn Luồng trong
mạng được gọi là luồng cực đại khi tất cả các luồng trong mạng G= (V, E) là luồng có giá trị lớn nhất Bài toán tìm luồng cực đại trong mạng G = (V, E)
được gọi là bài toán luồng cực đại
Ta có Hình 2.1 minh họa luồng cực đại trên mạng Giá trị của luồng cực
đại này là
Trang 27Hình 2.1: Luồng cực đại trên mạng
2.1.2 Lát cắt, định lý Ford – Fulkerson
Lát cắt (cut)
Lát cắt (X, Y) trên mạng G = (V, E) là một phép chia tập đỉnh V thành hai tập rời nhau X và Y trong đó đỉnh phát s X và đỉnh thu t Y Khả năng
thông qua của lát cắt là:
u v c Y
Trong mạng G = (V, E) bất kỳ, giá trị của luồng cực đại luôn bằng khả
năng thông qua của lát cắt nhỏ nhất
Trang 28Xét ví dụ Hình 2.1 trên, ta có lát cắt hẹp nhất sẽ là ({1,3}, {2,4,5,6}) minh họa bởi đường nét đứt trong Hình 2.3 Khả năng thông qua của lát cắt
là: c({1,3},{2, 4,5,6}) c(1, 2) c(3, 4) c(3,5) 5 3 1 9 , đúng bằng giá trị luồng cực đại f(1, )u f(1, 2) f(1, 3) 5 4 9
Hình 2.3: Lát cắt hẹp nhất mạng
2.2 Thuật toán Ford–Fulkerson
Thuật toán Ford-Fulkerson được L.R Ford and D.R Fulkerson giới thiệu năm 1956 dựa trên khái niệm về đường tăng luồng [8] Ta có các khái niệm liên quan sau:
Mạng thặng dư (residual network): Cho luồng f trên mạng G = (V, E)
Mạng thặng dư G f = (V, E f ) là mạng có khả năng thông qua c f (u,v) = c(u,v) – f(u,v) và c f (v,u) = f(u,v)
Đường tăng luồng (augment path): Cho mạng G = (V, E) và mạng
thặng dư G f = (V, E f ) Đường tăng luồng P f là một đường đi từ đỉnh phát s đến đỉnh thu t trên mạng thặng dư G f
Khả năng tăng luồng: Cho mạng G = (V, E) và mạng thặng dư
G f =(V,E f ) Khả năng tăng luồng dọc theo đường tăng luồng P f của mạng
thặng dư G f thực hiện như sau:
- Tìm Δp là cạnh có trọng số nhỏ nhất trên P f: của các trọng số
Trang 29Δp = min(c(e)), e P f
- Với mỗi cạnh: e = (i,j) P f
• c(i,j) = c(i,j) - Δp
• c(j,i) = c(j,i) + Δp
- Nếu cạnh nào đó có trọng số bằng 0 thì sẽ bị loại khỏi G f
Ta có ý tưởng thuật toán như sau:
- Trước tiên khởi tạo luồng f bằng 0 trên tất cả các cạnh của mạng G =
(V, E)
- Tại mỗi thời điểm, luồng trên cạnh luôn luôn nhỏ hơn hoặc bằng khả
năng thông qua của cạnh đó (f(e)<=c(e)) Giá trị của luồng tăng được hay
không phụ thuộc vào sự tồn tại đường tăng luồng
Mô tả thuật toán Ford-Fulkerson như sau:
Input: Cho mạng G = (V, E) với khả năng thông qua c ij cho mỗi cạnh (i,j)
Output: Luồng f có giá trị cực đại trên mạng G = (V, E)
Thuật toán:
1 Khởi tạo luồng bằng 0: f(u,v) = 0, u,v
2 Xây dựng mạng thặng dư G f = (V,E f )
3 Tăng luồng tối đa trên mạng thặng dư G f = (V,E f )bằng cách:
While (điều kiện dừng chưa đạt)
{
if(có đường đi u 1 , u 2 , …, u k với u 1 =s đến u k =t trên G f)
{Tìm delta= min (c f (u i , u i+1 )}; i = 1,k-1
Trang 30for(i = 1; i<=k-1;i++)
{cf(u i , u i+1 ) = cf(u i , u i+1 ) – delta
cf(u i+1 , u i ) = cf(u i+1 , u i ) + delta }
} else Dừng vòng lặp }
4 Từ mạng G = (V, E) ban đầu và mạng thặng dư G f =(V,E f ) sau khi
tăng luồng tối đa tính giá trị luồng cực đại
Luồng cực đại tính được: duyệt mạng thặng dư sau khi tăng luồng tối đa
bằng thuật toán tìm kiếm theo chiều sâu (DFS), bắt đầu từ đỉnh s
Vận dụng thuật toán Ford-Fulkerson tìm luồng cực đại của mạng trong
Hình 2.4 với khả năng thông qua là trọng số của cạnh Đường đi từ đỉnh phát s=1 đến đỉnh thu t=6 trên đồ thị, tăng luồng được tìm bằng thuật toán tìm
kiếm theo chiều sâu (DFS)
Hình 2.4: Mạng ban đầu
- Bước 1: Khởi tạo luồng bằng 0 như Hình 2.5 Trong đó trọng số các
cạnh có dạng f/c (trong đó f là luồng và c là khả năng thông qua)
Trang 31Hình 2.5: Khởi tạo luồng bằng 0
- Bước 2: Xây dựng mạng thặng dư như Hình 2.6 Khả năng thông qua
là trọng số của các cạnh trên mạng thặng dư G f
Hình 2.6: Xây dựng mạng thặng dư
- Bước 3: Tìm đường tăng luồng P f1 và thực hiện khả năng tăng luồng
dọc theo đường này như Hình 2.7
Pf1 = 1 2 4 6
Δp = min(5, 6, 6) = 5
Trang 32Hình 2.7: Tăng luồng theo đường P f1
- Bước 4: Tìm đường tăng luồng P f2 và thực hiện khả năng tăng luồng
như Hình 2.8
Pf1 = 1 3 4 2 5 6
Δp = min(5, 3, 5, 3, 6) = 3
Hình 2.8: Tăng luồng theo đường P f2
- Bước 5: Tìm đường tăng luồng P f3 và thực hiện khả năng tăng luồng
dọc theo đường tăng luồng này như Hình 2.9
Pf1 = 1 3 5 2 4 6
Δp = min(2, 1, 3, 4, 1) = 1
Trang 33Ta thấy không tồn tại đường đi từ đỉnh 1 đến đỉnh 6 thuật toán dừng và mạng thặng dư đã đạt luồng cực đại
Hình 2.9: Tăng luồng theo đường P f3
- Bước 6: Tính được giá trị luồng cực đại từ mạng thặng dư đã tăng
luồng cực đại như Hình 2.10 và giá trị luồng là: c(f) = f( 1,2 ) + = f( 1,3 ) = 5 + 4 =
9
Hình 2.10: Mạng đã tăng luồng cực đại
Tính đúng của thuật toán
Thuật toán Ford-Fulkerson trả về một luồng, nghĩa là kết quả mà thuật toán trả về phải thỏa mãn các tính chất của luồng Để chứng minh luồng đó là cực đại được xây dựng một định lý quan trọng về mối quan hệ giữa luồng cực đại và lát cắt hẹp nhất
Trang 34Khả năng thông qua từ X đến Y (c(X, Y)) và luồng từ X đến Y (f(X, Y))
được gọi là lưu lượng và luồng thông qua lát cắt
Với f là một luồng trên mạng G = (V, E,) Khi đó luồng thông qua một lát cắt s − t bất kỳ bằng | f |
Chứng minh:
Với V = X ∪ Y là một lát cắt s − t bất kỳ, theo tính chất 1
f(X, Y) = f(X, V) − f(X, V-Y) = f(X, V) − f(X, X) = f(X, V)
Cũng theo tính chất 1 ta có:
Tính dừng của thuật toán
Thuật toán Ford-Fulkerson có thời gian thực hiện phụ thuộc vào thuật toán tìm đường tăng luồng tại mỗi bước
2.3 Giới thiệu các ứng dụng luồng cực đại
2.3 1 Bài toán tìm công suất bơm dầu
Ta đi xét mạng là mô hình hóa hệ thống ống dẫn dầu: điểm phát là tàu chở dầu, các điểm thu là các bể chứa, các ống tương ứng với các cung, những điểm nối giữa các ống là các nút của mạng Khả năng thông qua là khả năng truyền tải dầu của ống trong một đơn vị thời gian Cần tìm lượng dầu lớn
nhất có thể bơm từ tàu chở dầu vào bể chứa trong một đơn vị thời gian Hình
2.11 minh họa bài toán tìm công suất bơm dầu
Trang 35Hình 2.11: Bài toán tìm công suất bơm dầu
2.3.2 Bài toán đám cưới vùng quê
Trong một làng quê kia có n chàng trai, mà mỗi chàng trai sẽ vừa ý đến
các cô gái trong làng Câu hỏi được đặt ra là 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 phải lòng Từ đó có thể xây dựng đồ thị với các đỉnh thể hiện các chàng trai và các
cô gái, còn các cung thể hiện sự vừa ý của các chàng trai đối với các cô gái Xét một trường hợp cụ thể có 4 chàng trai ký hiệu là {T1, T2, T3, T4} và
5 cô gái ký hiệu là {G1, G2, G3, G4, G5} Sự vừa ý của các chàng cho trong bảng sau:
Bảng 2.1: Bảng dữ liệu phân bổ các chàng trai và cô gái
Chàng trai Các cô gái mà chàng trai ưng ý
Trang 36Đồ thị tương ứng với bảng dữ liệu phân bổ các chàng trai và cô gái được cho trong hình 2.12 như sau
Hình 2.12: Mạng tương ứng với bài toán đám cưới vùng quê
Trong đó ta đưa vào đỉnh phát s và đỉnh thu t Ta nối đỉnh phát s với tất
cả các đỉnh thể hiện các chàng trai, và nối đỉnh thu t với mọi đỉnh thể hiện các cô gái Tất cả các cung trên đồ thị đều có khả năng thông qua bằng 1 Bắt đầu từ luồng bằng 0, tìm luồng cực đại trong mạng theo thuật toán Ford- Fulkerson Khi đó nếu như luồng cực đại trong đồ thị có giá trị V max = n, 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
2.3.3 Bài toán xét ứng cử viên vô địch
Trong một mùa giải có n đội thi đấu, mỗi trận thắng được 1 điểm Tại một thời điểm cụ thể của mùa giải, với đội i: có w i là số trận thắng, r i là số
trận còn lại của mùa giải và r ij là số trận còn lại phải đấu với đội j Theo Schwartz đề xuất phương pháp áp dụng luồng cực đại xét xem đội k có còn
cơ hội vô địch hay không như Hình 2.12 Xét mạng G k = (V,E) với đỉnh phát
s và đỉnh thu t Cho P ={i|i≠k} là tập các đội, Q = {(i,j)|i P, j P} là tập
các cặp được chọn ra từ P, m là tổng số trận đấu còn lại của các đội trong P
Trang 37Cứ mỗi phần tử thuộc Q, bổ sung thêm đỉnh (i, j) vào V và cạnh nối từ
s tới đỉnh đó với khả năng thông qua r ij Mỗi phần tử thuộc P, bổ sung thêm
một đỉnh "đội" (i) vào V Tại mỗi đỉnh (i,j) bổ sung 2 cạnh nối đến 2 đỉnh
"đội" i và j với khả năng thông qua bằng rij Mỗi đỉnh "đội" (i), bổ sung cạnh nối từ đỉnh đó đến đỉnh thu t với khả năng thông qua là w k + r k – w i Khi đó,
đội k còn khả năng vô địch khi và chỉ khi luồng cực đại của G k lớn hơn m:
f(G k )>m
Hình 2.13: Bài toán loại bỏ ứng cử viên vô địch
2.3.4 Bài toán về hệ thống đại diện chung
[5, 6] Cho một tập m phần tử X = {z 1 ,z 2 ,…,z m } Giả sử <A 1 ,A 2,…, A n > và
<B 1 ,B 2 ,…,B n > là hai dãy tập con của X Một dãy gồm n phần tử khác nhau
của X:< a 1 ,a 2, …,a n > được gọi là hệ thống các đại diện chung của hai dãy đã
cho nếu mà tìm được một hoán vị của tập {1,2,…,n} sao cho < a1 ,a 2, …,a n >
là hệ thống các đại diện phân biệt của hai dãy <A 1 ,A 2,…, A n > và
<B(1) ,B(2) ,…,B(n) > tức là điều kiện sau được thoả mãn: a i A i B(i) , i
=1,2,…,n
Xây dựng mạng G = (V, E) với tập đỉnh