1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu bài toán luồng cực đại trong mạng và thuật toán ford fulkerson

74 20 0

Đ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

Thông tin cơ bản

Tiêu đề Nghiên Cứu Bài Toán Luồng Cực Đại Trong Mạng Và Thuật Toán Ford - Fulkerson
Tác giả Nguyễn Hoàng Vũ
Người hướng dẫn TS. Phan Lê Na
Trường học Trường Đại Học Vinh
Chuyên ngành Công Nghệ Thông Tin
Thể loại Luận Văn Thạc Sĩ
Năm xuất bản 2017
Thành phố Nghệ An
Định dạng
Số trang 74
Dung lượng 1,93 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

BỘ 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 2

BỘ 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 4

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 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 5

LỜ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 6

MỤ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 7

2.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 8

DANH 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 9

DANH 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 10

Hì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 11

MỞ ĐẦ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 12

hệ 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 13

3 Đố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 14

4 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 15

Chươ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 17

Hì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 18

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)

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 19

Hì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 20

Cạ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: abcfeb

Đườ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 21

Hai đỉ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: abcda

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:ER + 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 23

Xé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 24

Mỗ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 26

Chươ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 27

Hì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 28

Xé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, )uf(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 30

for(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 31

Hì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 32

Hì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 33

Ta 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 34

Khả 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 35

Hì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 37

Cứ 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

Ngày đăng: 01/08/2021, 11:42

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Trần Quốc Chiến (2007),“Thuật toán đích hướng nguồn tìm luồng cực đại”, Tạp chí Khoa học &amp; Công nghệ, Đại học Đà Nẵng, 4(21)/2007, 1- 6 Sách, tạp chí
Tiêu đề: Thuật toán đích hướng nguồn tìm luồng cực đại
Tác giả: Trần Quốc Chiến
Năm: 2007
[2] Trần Quốc Chiến (2005), Bài toán tìm luồng cực đại trên mạng, Đề tài NCKH cấp Bộ, mã số B2005-16-34 Sách, tạp chí
Tiêu đề: Bài toán tìm luồng cực đại trên mạng
Tác giả: Trần Quốc Chiến
Năm: 2005
[3] Trần Quốc Chiến (2006),“Thuật toán hoán chuyển nguồn đích tìm luồng cực đại (1)”, Tạp chí Khoa học &amp; Công nghệ, Đại học Đà Nẵng, 1(13)/2006, 53-58 Sách, tạp chí
Tiêu đề: T"huật toán hoán chuyển nguồn đích tìm luồng cực đại" (1)
Tác giả: Trần Quốc Chiến
Năm: 2006
[4] Nguyễn Thanh Hùng (2007), Nguyễn Đức Nghĩa, Giáo Trình Lý Thuyết Đồ Thị, NXB Đại học Quốc Gia TPHCM Sách, tạp chí
Tiêu đề: Giáo Trình Lý Thuyết Đồ Thị
Tác giả: Nguyễn Thanh Hùng
Nhà XB: NXB Đại học Quốc Gia TPHCM
Năm: 2007
[5] Phạm Thế Long (chủ biên) (2005), Toán rời rạc, NXB Đại học Sư phạm Sách, tạp chí
Tiêu đề: Toán rời rạc
Tác giả: Phạm Thế Long (chủ biên)
Nhà XB: NXB Đại học Sư phạm
Năm: 2005
[6] Nguyễn Đức Nghĩa, Nguyễn Tô Thành (2009), Toán rời rạc, Nxb Đại học Quốc gia Hà Nội.Tài liệu tiếng Anh Sách, tạp chí
Tiêu đề: Toán rời rạc
Tác giả: Nguyễn Đức Nghĩa, Nguyễn Tô Thành
Nhà XB: Nxb Đại học Quốc gia Hà Nội. Tài liệu tiếng Anh
Năm: 2009
[7] Karzanov A. V. (1974) Determining the maximal flow in a network by the method of preflows Khác
[8] L.R. Ford and D.R. Fulkerson (1956). Maximal Flow Through a Network Khác
[9] L.R.Ford and D.R.Fulkerson (1962), Flows and Networks, Princeton University Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w