Tải bản đầy đủ (.pdf) (88 trang)

Bài toán luồng cực đại với chi phí cực tiểu và ứng dụng trong vận chuyển hàng cứu trợ bão lũ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.91 MB, 88 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM
---------------------------------------

HOÀNG VĂN TÁM

BÀI TỐN LUỒNG CỰC ĐẠI VỚI CHI PHÍ CỰC TIỂU VÀ
ỨNG DỤNG TRONG VẬN CHUYỂN HÀNG
CỨU TRỢ BÃO LŨ

LUẬN VĂN THẠC SĨ
NGÀNH HỆ THỐNG THÔNG TIN

Đà Nẵng - Năm 2018


ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM
---------------------------------------

HOÀNG VĂN TÁM

BÀI TỐN LUỒNG CỰC ĐẠI VỚI CHI PHÍ CỰC TIỂU VÀ
ỨNG DỤNG TRONG VẬN CHUYỂN HÀNG
CỨU TRỢ BÃO LŨ

Chuyên ngành: Hệ thống thông tin
Mã số: 8480104

LUẬN VĂN THẠC SĨ


NGƯỜI HƯỚNG DẪN KHOA HỌC:
PGS. TSKH. Trần Quốc Chiến

Đà Nẵng - Năm 2018



ii

MỤC LỤC
LỜI CAM ĐOAN ...........................................................................................................i
TÓM TẮT ĐỀ TÀI TIẾNG VIỆT .............................................................................. iv
TÓM TẮT ĐỀ TÀI TIẾNG ANH ................................................................................ v
DANH MỤC CÁC TỪ VIẾT TẮT ............................................................................. vi
DANH MỤC CÁC BẢNG...........................................................................................vii
DANH MỤC CÁC HÌNH ......................................................................................... viii
MỞ ĐẦU ........................................................................................................................ 1
1. Lý do chọn đề tài ............................................................................................... 1
2. Mục tiêu và nhiệm vụ ........................................................................................ 1
3. Đối tượng và phạm vi nghiên cứu ..................................................................... 2
4. Phương pháp nghiên cứu ................................................................................... 2
5. Ý nghĩa của đề tài .............................................................................................. 3
6. Bố cục của đề tài ................................................................................................ 3
CHƯƠNG 1. BÀI TOÁN LUỒNG CỰC ĐẠI ........................................................... 4
1.1. Phát biểu bài toán .................................................................................................. 4
1.1.1. Mạng, Luồng trong mạng ............................................................................ 4
1.1.2. Bài toán luồng cực đại trong mạng ............................................................. 4
1.2. Thuật toán Ford-Fulkerson .................................................................................. 5
1.2.1. Đường đi tăng luồng ................................................................................... 5
1.2.2. Phương pháp FordFulkerson ..................................................................... 6

CHƯƠNG 2. BÀI TOÁN LUỒNG CỰC ĐẠI VỚI CHI PHÍ CỰC TIỂU ........... 17
2.1. Giới thiệu .............................................................................................................. 17
2.1.1. Phát biểu bài toán ....................................................................................... 17
2.1.2. Các giả thiết ............................................................................................... 18
2.1.3. Đồ thi thăng dư .......................................................................................... 18
2.2. Điều kiện tối ưu của bài toán .............................................................................. 18
2.2.1. Điều kiện tối ưu về chu trình âm ............................................................... 18
2.2.2. Điều kiện tối ưu về chi phí rút gọn ............................................................ 19
2.2.3. Điều kiện tối ưu bổ sung ............................................................................ 20
2.3. Mối quan hệ giữa luồng tối ưu và khả năng thông qua tại các đỉnh .............. 21
2.4. Một số thuật toán giải bài tốn luồng cực đại với chi phí cực tiểu ................. 22
2.4.1. Thuật tốn khử chu trình âm (Cycle canceling) ........................................ 22
2.4.2. Thuật tốn tìm đường đi ngắn nhất liên tiếp (Successive shortest Path) ... 27
2.4.3. Thuật toán Primal-Dual ............................................................................. 30


iii

2.4.4. Các thuật toán cải tiến ................................................................................ 33
CHƯƠNG 3. XÂY DỰNG ỨNG DỤNG .................................................................. 37
3.1. Yêu cầu thực tế và lí do xây dựng ứng dụng ..................................................... 37
3.2. Mục tiêu của ứng dụng ........................................................................................ 37
3.3. Tiếp cận bài toán ................................................................................................. 37
3.3.1. Phát biểu bài tốn ....................................................................................... 37
3.3.2. Mơ hình tốn học ....................................................................................... 39
3.3.3. Thuật tốn .................................................................................................. 40
3.4. Phân tích ............................................................................................................... 42
3.4.1. u cầu chức năng ..................................................................................... 42
3.4.2. Mơ hình Use – Case ................................................................................... 43
3.4.3. Biểu đồ tuần tự (Sequence Diagram) ......................................................... 50

3.4.4. Cơ sở dữ liệu (Database) ........................................................................... 55
3.5. Thiết kế và đặc tả giao diện ................................................................................ 56
3.5.1. Giao diện “Trang chủ” ............................................................................... 56
3.5.2. Giao diện “Menu trái” ............................................................................... 58
3.5.3. Giao diện “Danh sách địa điểm” ............................................................... 59
3.5.4. Giao diện “Thông tin địa điểm” ................................................................. 61
3.5.5. Giao diện “Cập nhật địa điểm” .................................................................. 62
3.5.6. Giao diện “Thêm địa điểm” ....................................................................... 64
3.5.7. Giao diện “Hiển thị kết quả” ..................................................................... 65
3.6. Đánh giá kết quả .................................................................................................. 67
KẾT LUẬN .................................................................................................................. 68
DANH MỤC TÀI LIỆU THAM KHẢO .................................................................. 69
QUYẾT ĐỊNH GIAO ĐỀ TÀI (Bản sao)




vi

DANH MỤC CÁC CHỮ VIẾT TẮT
Từ viết tắt

Ý nghĩa

USD

United States dollar

GDP


Gross Domestic Product

HTML

HyperText Markup Language

CSS

Cascading Style Sheets

SDK

Software Development Kit

API

Application Programming Interface

SQL

Structured Query Language

NNLT

Ngơn ngữ lập trình

DFS

Depth first search


ATNĐ

Áp thấp nhiệt đới

UBND

Ủy ban nhân dân


vii

DANH MỤC CÁC BẢNG
Số hiệu

Tên bảng

Trang

3.1.

Khoảng cách giữa các điểm thu - phát

41

3.2.

Khả năng thông qua giữa các điểm thu – phát

41


3.3.

Ma trận kết quả

42

3.4.

Yêu cầu chức năng

43

3.5.

Đặc tả Use – Case thêm địa điểm

44

3.6.

Luồng sự kiện chức năng thêm địa điểm

44

3.7.

Đặc tả Use – Case cập nhật địa điểm

44


3.8.

Luồng sự kiện chức năng cập nhật địa điểm

45

3.9.

Đặc tả Use – Case xóa địa điểm

45

3.10.

Luồng sự kiện chức năng xóa địa điểm

46

3.11.

Đặc tả Use – Case tìm đường đi tối ưu

46

3.12.

Luồng sự kiện chức năng tìm đường đi tối ưu

46


3.13.

Đặc tả Use – Case xem bản đồ

47

3.14.

Luồng sự kiện chức năng xem bản đồ

48

3.15.

Đặc tả Use – Case xem chi tiết đường đi

48

3.16.

Luồng sự kiện chức năng xem chi tiết đường đi

48

3.17.

Đặc tả Use – Case định vị vị trí

49


3.18.

Luồng sự kiện chức năng định vị vị trí

49

3.19.

Đặc tả cơ sở dữ liệu

55

3.20.

Ràng buộc cơ sở dữ liệu

56


viii

DANH MỤC CÁC HÌNH
Số hiệu

Tên hình

hình

Trang


1.1.

Bài tốn 1

9

1.2.

Bài tốn 2

13

2.1.

Ví dụ mạng vận tải

17

2.2.

Minh họa thuật tốn khử chu trình âm

26

2.3.

Minh họa thuật toán đường đi ngắn nhất liên tiếp

30


2.4.

Minh họa thuật tốn Primal-dual

33

3.1.

Mơ hình bài tốn

38

3.2.

Sơ đồ bài tốn sau khi thêm đỉnh ảo

41

3.3.

Biểu đồ Use – Case tổng quát

43

3.4.

Biểu đồ Use – Case “Quản lí danh sách địa điểm”

43


3.5.

Biểu đồ Use – Case “Tìm đường đi tối ưu”

46

3.6.

Biểu đồ Use – Case “Xem bản đồ”

47

3.7.

Biểu đồ Use – Case “Xem chi tiết lộ trình đi”

48

3.8.

Biểu đồ Use – Case “Định vị vị trí”

49

3.9.

Biểu đồ tuần tự “Thêm địa điểm”

50


3.10.

Biểu đồ tuần tự “Cập nhật địa điểm”

51

3.11.

Biểu đổ tuần tự “Xóa địa điểm”

52

3.12.

Biểu đồ tuần tự “Tìm đường đi tối ưu”

53

3.13.

Biểu đồ tuần tự “Xem bản đồ”

53

3.14.

Biểu đồ tuần tự “Chi tiết đường đi”

54


3.15.

Biểu đồ tuần tự “Định vị vị trí”

54

3.16.

Giao diện ứng dụng

56

3.17.

Giao diện menu

58

3.18.

Giao diện danh sách địa điểm

59

3.19.

Giao diện thông tin địa điểm

61


3.20.

Giao diện cập nhật thông tin địa điểm

62

3.21.

Giao diện thêm địa điểm

64

3.22.

Giao diện hiển thị kết quả

65


1

MỞ ĐẦU
1. Lý do chọn đề tài
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 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…Ngoài ra, ứng dụng của bài tốn cịn để giải các bài tố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 tốn phân nhóm sinh hoạt,
bài tốn lập lịch cho hội nghị …
Với sự xuất hiện ngày càng nhiều của các hệ thống mạng như: hệ thống mạng
điện, mạng sản xuất và phân phối hàng hóa, mạng giao thông và phổ biến nhất hiện
nay là mạng internet đã làm nảy sinh ra nhu cầu vận chuyển các chất liệu trên các
mạng này sao cho đạt hiệu quả cao nhất; chất liệu ở đây có thể là dịng điện, dữ liệu,
hàng hóa..hiệu quả ở đây có thể xét theo tiêu chuẩn về thời gian, độ dài quãng đường,
chi phí tiền bạc, mức độ an tồn... và bài tốn luồng cực đại 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 ngành công nghệ thông tin cùng với khả năng tính tốn rất nhanh
của máy tính đã giúp việc giải quyết bài tốn luồng cực đại trên mạng hiệu quả hơn và
đem lại nhiều ứng dụng thực tiễn hơn.
Việt Nam là một những nước chịu ảnh hưởng lớn nhất của hiện tượng biến đổi
khí hậu trong hai thập kỷ trở lại đây. Ở nước ta, mỗi năm thiên tai cướp đi mạng sống
của 466 người, thiệt hại trên 1.5 tỷ USD tương đương 1.5% GDP. Trong đó tần suất
xuất hiện cao nhất phải nói đến là bão lũ, ngập úng (Nguồn: Báo cáo cùa Ban chỉ đạo
Phòng chống lụt bão Trung ương). Một vài trận bão lụt lớn trong thời gian gần đây có
thể kể đến như trận lụt ơ Quảng Ninh (30/7/2015), bão Nari (15/10/2013), bão Wutip
(30/9/2013), trận lụt lớn ở miền Trung (10/2011)... Nhằm giảm nhẹ thiệt hại về người
và của do bão lũ gây ra thì cơng tác phịng chống và cứu hộ được đặc biệt chú trọng.
Trong đó, vận chuyển hàng cứu trợ cho người dân là một trong những công việc phải
được thực hiện một cách nhanh chóng và hiệu quả. Chính vì vậy, tơi quyết định chọn
đề tài “Bài tốn luồng cực đại với chi phí cực tiểu và ứng dụng trong vận chuyển hàng
cứu trợ bão lũ” làm đề tài tốt nghiệp luận văn cao học.
2. Mục tiêu và nhiệm vụ
2.1. Mục tiêu
- Nắm được các thuật toán giải bài tốn luồng cực đại với chi phí cực tiểu.



2

- Xây dựng thành cơng chương trình hỗ trợ cơng tác vận chuyển hàng cứu trợ cho
người dân các vùng lũ lụt.
2.2. Nhiệm vụ
Về lý thuyết:
- Tìm hiểu lý thuyết bài toán luồng cực đại và một số bài toán ứng dụng của bài
toán luồng cực đại.
- Nghiên cứu kỹ các thuật toán trên bài toán luồng cực đại với chi phí cực tiểu.
- Nắm được quy trình cài đặt thuật toán, xây dựng ứng dụng cho smartphone.
Về thực tiễn:
- Tìm ra được phương án vận chuyển hàng cứu trợ cho người dân các vùng lũ lụt
hiệu quả và tốn ít chi phí nhất.
- Xây dựng chương trình máy tính thực hiện được chức năng trên.
3. Đối tượng và phạm vi nghiên cứu
3.1. Đối tượng nghiên cứu
- Bài toán luồng cực đại với chi phí cực tiểu.
- Các ngơn ngữ lập trình: Html, Css, JavaScript, C#, Google Maps SDK, Google
Maps API…
- Hệ quản trị cơ sở dữ liệu: SQL.
3.2. Phạm vi nghiên cứu
- Bài toán luồng cực đại, các thuật toán cơ bản giải bài toán luồng cực đại với chi
phí cực tiểu.
- Chỉ nghiên cứu và phát triển ứng dụng tại tỉnh Quảng Bình.
4. Phương pháp nghiên cứu
Về phương pháp nghiên cứu, tơi sử dụng hai phương pháp chính là nghiên cứu lý
thuyết và nghiên cứu thực nghiệm.
4.1. Phương pháp nghiên cứu lý thuyết
- Nghiên cứu các tài liệu về cơ sở lý thuyết: Bài toán luồng cực đại với chi phí
cực tiểu.

- Các tài liệu cài đặt một số dạng bài toán luồng cực đại.
- Các tài liệu liên quan đến một số nghiên cứu.
- Các tài liệu về quy trình xây dựng, phát triển phần mềm ứng dụng.


3

- Các tài liệu về thực trạng công tác cứu trợ người dân các vùng lũ lụt.

4.2. Phương pháp nghiên cứu thực nghiệm
Sử dụng phương pháp nghiên cứu lý thuyết kết hợp với nghiên cứu thực nghiệm:
- Cài đặt các thuật tốn cho bài tốn.
- Viết chương trình cho bài toán ứng dụng cụ thể.
- Chạy thử nghiệm, lưu trữ kết quả đạt được và đánh giá lại kết quả.
5. Ý nghĩa của đề tài
Về mặt khoa học, trên cơ sở nghiên cứu lý thuyết bài toán luồng cực đại và các
phương pháp giải bài toán luồng cực đại với chi phí cực tiểu, luận văn xây dựng được
chương trình hỗ trợ công tác vận chuyển hàng cứu trợ cho người dân các vùng lũ lụt.
Về mặt thực tiễn: Với việc xây dựng thành cơng chương trình, cơng tác vận
chuyển hàng cứu trợ khi có bão lũ xẩy ra sẽ được tiến hành một cách nhanh chóng,
nâng cao hiệu quả và tiết kiệm được chi phí vận chuyển cho từng chuyến hàng.
6. Bố cục của đề tài
Ngoài phần mở đầu và kết luận. Toàn bộ nội dung của luận văn được chia làm 3
chương sau:
Chương 1: Bài toán luồng cực đại
Chương 2: Bài tốn luồng cực đại với chi phí cực tiểu
Chương 3: Xây dựng ứng dụng


4


CHƯƠNG 1
BÀI TỐN LUỒNG CỰC ĐẠI
1.1. Phát biểu bài tốn
1.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 q 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:



f (e) 






f (e)



eE ( v )

eE ( v )

Trong đó E-(v) và E+(v) tương ứng là tập các cung đi vào và đi ra khỏi đỉnh v.
3. Giá trị của luồng f là số

1.1.2. Bài toán luồng cực đại trong mạng
1.1.2.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 tốn gọi là bài tốn tìm luồng cực đại như sau:
Cho mạng G với nguồn a, đích z và khả năng thông qua cij, (i,j)G. Trong số các
luồng trên mạng G tìm luồng có giá trị lớn nhất.
Bài tốn luồng cực đại có thể biểu diễn như bài tốn quy hoạch tuyến tính
v(f) =

f

( a ,i )G

với điều kiện

ai



f


( i , a )G

ia



max


5

0  fij  cij (i,j)G

f

( i , k )G

Vì giá trị luồng v(f) 

ik

c

( a , i )G

=

ai


f

( k , j )G

k  V \ {a; z}

kj

và tồn tại luồng {fij = 0, (i,j)G}, nên, theo lý

thuyết quy hoạch tuyến tính, tồn tại luồng cực đại.
1.1.2.2. Luồng cực đại và lát cắt cực tiểu
Định nghĩa: Ta gọi lát cắt (X, X*) là một cách phân hoạch tập đỉnh V của mạng
ra thành 2 tập X và X* = V\X, trong đó s X và t X*. Khả năng thơng qua của lát
cắt (X, X*) là số

c( X , X *) 

 c ( v, u )

vX
uX *

Lát cắt mà khả năng thông qua nhỏ nhất gọi là lát cắt hẹp nhất.
Giá trị của mọi luồng f trong mạng luôn nhỏ hơn hoặc bằng khả năng thông qua
của lát cắt (X, X*) bất kỳ trong nó:
val(f) ≤ c(X, X*)
Từ đó suy ra: Giá trị luồng cực đại trong mạng không vượt quá khả năng thông
qua của lát cắt hẹp nhất trong mạng.
Định lý: Giá trị luồng cực đại trong mạng bằng khả năng thông qua của lát cắt

hẹp nhất.
1.2. Thuật toán Ford-Fulkerson
1.2.1. Đường đi tăng luồng
*Mạng thặng dư (residual network) Gf
Cho luồng f trên mạng G=(V,E,c). Ta định nghĩa mạng thặng dư, ký hiệu Gf, là
mạng có tập đỉnh V và tập cung Ef cùng khả năng thông qua cf như sau:
Với mọi cung (u,v)  E, nếu f(u,v) > 0 thì (v,u)  Ef với khả năng thơng qua
cf(v,u) = f(u,v).
Với mọi cung (u,v)  E, nếu c(u,v)  f(u,v) > 0 thì (u,v)  Ef với khả năng thơng
qua cf(u,v) = c(u,v)  f(u,v).
Mỗi đường đi có hướng từ đỉnh nguồn a đến đỉnh đích z trong mạng thặng dư G f
gọi là đường đi tăng luồng.


6

Giả sử
P = (a, u, ... , i, j, ... , v, z) là đường đi tăng luồng từ a đến z.
Xét cung (i,j)  Gf là cung trên P. Nếu (i,j)  E thì cung đó cùng hướng với P.
Ngược lại nếu (j,i)  E thì cung đó ngược hướng với P.
Tập các cung cùng hướng với P ký hiệu là P+ .
Tập các cung ngược hướng với P ký hiệu là P .
1.2.2. Phương pháp FordFulkerson
Phương pháp này được Ford và Fulkerson đưa ra năm 1962. Ý tưởng xây dựng
luồng cực đại như sau: xuất phát từ luồng nào đó, ta tìm đường đi tăng luồng từ a đến z
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. Nếu khơng tìm được đường đi như vậy thì ta có luồng cực đại.
Sau đây là mơ tả thuật tốn tổng qt. Thuật tốn này có thể cải tiến để tăng hiệu
năng.
 Đầu vào. Mạng G = (V, E) với nguồn a, đích z, khả năng thơng qua C = (cij),

(i,j)G.
Các đỉnh trong G được sắp xếp theo thứ tự nào đó.
 Đầu ra. Luồng cực đại F = (fij), (i,j)G
 Các bước.
1. Khởi tạo
Luồng xuất phát: fij := 0 (i,j)G
Đặt nhãn cho đỉnh nguồn
a( , )
Tạo lập tập S gồm các đỉnh đã có nhãn nhưng chưa được dùng để
sinh nhãn, S’ là tập đỉnh được gán nhãn nhờ các đỉnh của tập S
S : = { a }, S’ := 
2. Sinh nhãn
2.1. Chọn đỉnh sinh nhãn
 Trường hợp S  : Chọn đỉnh u  S nhỏ nhất (theo thứ tự). Loại u
khỏi S, S:= S \ { u }. Ký hiệu nhãn của u là (p, ) và A là tập các đỉnh
chưa có nhãn và kề đỉnh sinh nhãn u.
Qua bước 2.2.


7

 Trường hợp S =  và S’  : Gán S := S’ và S’ := . Quay lại
bước 2.1.
 Trường hợp S =  và S’ = , thì kết thúc, luồng F là cực đại.
2.2. Gán nhãn cho đỉnh chưa có nhãn và kề đỉnh sinh nhãn
 Trường hợp A = : Quay lại bước 2.1.
 Trường hợp A  : Chọn t  A nhỏ nhất (theo thứ tự). Loại t khỏi
A, A:= A \ { t }. Gán nhãn cho t như sau:
Nếu (u,t)E và fu,t < cu,t , đặt nhãn đỉnh t là ( u, min{, cu,t  fu,t}).
Nếu (t, u)E và ft,u > 0, đặt nhãn đỉnh t là (u, min{, ft,u}).

Nếu t khơng được gán nhãn thì quay lại bước 2.2.
Nếu t được gán nhãn và t = z thì sang bước 3.
Nếu t được gán nhãn và t  z thì bổ sung t vào S’, S’ := S’ {t}, và
quay lại bước 2.2.
3. Hiệu chỉnh tăng luồng
Giả sử z có nhãn (q, ). Ta hiệu chỉnh luồng f như sau.

3.1. Khởi tạo
j := z, i := q
3.2. Hiệu chỉnh
Nếu cung (i, j)  G, thì hiệu chỉnh fij = fij + .
Nếu cung (j, i)  G, thì hiệu chỉnh fji = fji  .
3.3. Tịnh tiến
Nếu i = a thì xố tất cả nhãn của các đỉnh trên mạng, trừ đỉnh
nguồn a, và quay lại bước 2.
Nếu i  a, thì đặt j := i và i := p, với p là thành phần thứ nhất của
nhãn đỉnh j. Sau đó quay lại bước 3.2.
Đoạn chương trình sau minh họa thuật tố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 đồ thị tăng
luồng.
Procedure Findpath(u:integer);{tìm đường tăng luồng trên Gf }


8

Var
v:integer;
Front, rear: integer;
Begin
Trace [s]:= n+1;


{Trace[v] = 0 nghĩa là v chưa được thăm}

For v:=1 to n do
Begin
If (trace[v] = 0) and (c[u,v]>f[u,v]) then
trên Gf}

{xét v kề u chưa thăm

Begin
Trace[v]:=u;
if v=t then {đến được t thì dừng thuật tốn }
Begin
path := True; exit;
End;
findpath(v);
End;
if path =true then exit;
End;
End;
Procedure IncFlow; {tăng luồng dọc đường tăng luồng: f :=(f+ff)}
Var
Delta, u, v: Integer;
Begin
{Tính Delta = Δf}
Delta:= Maxint;
V:=t;
Repeat
U:= trace[v];

If c[u,v] - f[u,v] < Delta then Delta := c[u,v] – f[u,v] ;


9

V := u;
Until v = s;
f := (f+ff)
V :=t;
Repeat
u := trace[v];
f[u,v] :=f[u,v] + Delta ;
f[u,v] :=f[u,v] - Delta ;
v:=u ;
until v = s;
End;
Trong đó:


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.



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 tốn tìm đường tăng
luồng sẽ sử dụng là thuật tố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 :

Hình 1.1. Bài tốn 1


10

Sử dụng thuật tố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:



Chọn đường tăng luồng P = (1,2,4,6), tăng luồng dọc theo đường này:
- ΔP = min( 5,6,6) = 6.
- Tăng luồng dọc theo P thu được luồng mới f = 5:


11

-




Đồ thị tăng luồng:

Chọn đường tăng luồng P = (1,3,5,6), tăng luồng dọc theo đường này:
- ΔP = min(5,1,6) = 1.
- Tăng luồng dọc theo P thu được luồng mới f = 6:

- Đồ thị tăng luồng:


12

 Chọn đường tăng luồng P = (1,3,4,2,5,6), tăng luồng dọc theo đường này:
- ΔP = min(4,3,5,3,5) = 3.
- Tăng luồng dọc theo P thu được luồng mới f = 9:

- Đồ 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 thuật tố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}


13

Định lý về tính nguyên: “Nếu tất cả các khả năng thơng qua là số ngun thì
thuật tốn trên ln tìm được luồng cực đại với luồng trên cung là các số nguyên.
Gọi 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 tố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 tố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 tố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).
Ví dụ 2:
Xét mạng vận tải G được cho ở hình sau:
7(2)

2
5(2)
8(0)

5
5(4)

7(4)

1

3

3

9(6)

5(3)
7(3)


4

6

Hình 1.2. Bài tốn 2
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 tốn Ford-Fulkersons để tìm
luồng cực đại và lát cắt cực tiểu trên G.
* Dùng thuật toán Ford-Fulkersons:
Bước 1: Khởi tạo luồng f=0:
2
5(0)

7(0)

8(0)

5
5(0)

7(0)

1

3

5(0)
4

9(0)


7(0)

6


14

Bước 2: Tăng luồng:
- Đồ thị tăng luồng:
7

2
5

5

8
7

1

5
3

9

5

7


4

6

- Chọn đường tăng luồng P = (1,2,5,6), tăng luồng dọc theo đường này:
ΔP = min(5,7,9) = 5.
- Tăng luồng dọc theo P thu được luồng mới f = 5:
- Đồ thị tăng luồng:
5

2
2
5

5

8
5
7

1

3
4

5

5
4


7

6

- Chọn đường tăng luồng P = (1,3,2,5,6), tăng luồng dọc theo đường này:
+ ΔP = min(7,8,2,4) = 2.
+ Tăng luồng dọc theo P thu được luồng mới f = 7:
2
5(5)

7(7)

8(2)

5
5(0)

7(2)

1

3

5(0)
4

9(7)

7(0)


6


15

- Đồ thị tăng luồng:
7
2
5

2

6

5
5

2
1

2

3

2

5

7


5

7

4

6

- Chọn đường tăng luồng P = (1,3,5,6), tăng luồng dọc theo đường này:
+ ΔP = min(5,5,2) = 2.
+ Tăng luồng dọc theo P thu được luồng mới f = 9:
7(7)

2
5(5)

8(2)

5
5(2)

7(4)

1

3

9(9)


5(0)

7(0)

4

6

- Đồ thị tăng luồng:
2
2 5

5

6 2
4

1

3

5
2

3

9

3


5
4

7

6

- Chọn đường tăng luồng P = (1,4,6), tăng luồng dọc theo đường này:
+ ΔP = min(5,7) = 5.


×