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

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ũ

88 85 1

Đ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 đề 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ũ
Tác giả Hoàng Văn Tám
Người hướng dẫn PGS. TSKH. Trần Quốc Chiến
Trường học Đại Học Đà Nẵng
Chuyên ngành Hệ Thống Thông Tin
Thể loại Luận Văn Thạc Sĩ
Năm xuất bản 2018
Thành phố Đà Nẵng
Định dạng
Số trang 88
Dung lượng 5,94 MB

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

Nội dung

Ý 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

Trang 1

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

Đà Nẵng - Năm 2018

Trang 2

TRƯỜNG ĐẠI HỌC SƯ PHẠM

Trang 4

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 toán luồng cực đại với chi phí cực tiểu 22

2.4.1 Thuật toán khử chu trình âm (Cycle canceling) 22

2.4.2 Thuật toá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

Trang 5

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 toán 37

3.3.2 Mô hình toán học 39

3.3.3 Thuật toán 40

3.4 Phân tích 42

3.4.1 Yê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)

Trang 8

DANH MỤC CÁC CHỮ VIẾT TẮT

Từ viết tắt Ý nghĩa

Trang 9

DANH MỤC CÁC BẢNG

Trang 10

DANH MỤC CÁC HÌNH

Trang 11

bài toá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 toàn và bài toá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 toán rất nhanh của máy tính đã giúp việc giải quyết bài toá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 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ũ” 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 toán luồng cực đại với chi phí cực tiểu

Trang 12

- 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

- 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

Trang 13

- 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 toán cho bài toá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 toán luồng cực đại với chi phí cực tiểu

Chương 3: Xây dựng ứng dụng

Trang 14

CHƯƠNG 1 BÀI TOÁN LUỒNG CỰC ĐẠI

1.1 Phát biểu bài toán

Đị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:

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 toán gọi là bài toá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 toán luồng cực đại có thể biểu diễn như bài toán quy hoạch tuyến tính

v(f) =

G i a ai

f

) , (

G a i ia

f

) , (

Trang 15

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

G k i ik

f

) , (

G j k kj

f

) , (

k  V \ {a; z}

G i a ai

c

) , (

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ố

*) , (

X u

X v

u v c X

X c

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ó:

1.2 Thuật toán Ford-Fulkerson

1.2.1 Đường đi tăng luồng

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)

gọi là đường đi tăng luồng

Trang 16

Giả sử

P = (a, u, , i, j, , v, z) là đường đi tăng luồng từ a đến z

1.2.2 Phương pháp FordFulkerson

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 toán tổng quát Thuật toán này có thể cải tiến để tăng hiệu năng

(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 = (f ij), (i,j)G

S : = { a }, S’ := 

2 Sinh nhãn

2.1 Chọn đỉnh sinh nhãn

chưa có nhãn và kề đỉnh sinh nhãn u

Qua bước 2.2

Trang 17

 Trường hợp S =  và S’  : Gán S := S’ và S’ :=  Quay lại bước 2.1

2.2 Gán nhãn cho đỉnh chưa có nhãn và kề đỉnh sinh nhãn

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

quay lại bước 2.2

3 Hiệu chỉnh tăng luồng

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ì xoá 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 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 đồ thị tăng luồng

Procedure Findpath(u:integer);{tìm đường tăng luồng trên G f }

Trang 19

until v = s;

End;

Trong đó:

luồng sẽ sử dụng là thuật toán tìm kiếm theo chiều sâu (DFS)

Trang 20

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:

- ΔP = min( 5,6,6) = 6

- Tăng luồng dọc theo P thu được luồng mới f = 5:

Trang 22

 Chọn đường tăng luồng P = (1,3,4,2,5,6), tăng luồng dọc theo đường này:

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}

Trang 23

Đị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 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 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

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)

* Dùng thuật toán Ford-Fulkersons:

Bước 1: Khởi tạo luồng f=0:

3

Trang 24

Bước 2: Tăng luồng:

Trang 26

+ Tăng luồng dọc theo P thu được luồng mới f = 14:

- Đồ 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

Lát cắt cực tiểu (X,Y) với X= {1,2,3,5}, Y={4,6}

Trang 27

CHƯƠNG 2 BÀI TOÁN LUỒNG CỰC ĐẠI VỚI CHI PHÍ CỰC TIỂU

2.1 Giới thiệu

2.1.1 Phát biểu bài toán

Trong thực tế ta thường phải giải quyết bài toán: trong các luồng cực đại tìm luồng có chi phí nhỏ nhất, trong đó chi phí là tổng chi phí thực hiện luồng trên tất cả các cung

Định nghĩa Mạng chi phí cung G = (V,E,p,c) là mạng (V,E,c) với p ij là đơn giá chi phí luồng trên cung (i j), i,j  V

Chi phí luồng của luồng f ij trên cung (i,j) là tích fij.pij

Chi phí của luồng f trên mạng G là tổng chi phí luồng của tất cả các cung

E j i

ij

f

) , (

.

Giả thiết: Khả năng thông qua của các cung nguyên dương và không lớn hơn

hằng số M và đơn giá chi phí của các cung nguyên dương và không lớn hơn hằng số

C

Ví dụ:

Hình 2.1 Ví dụ mạng vận tải

pij, cịj

Trang 28

Bài toán luồng cực đại với chi phí cực tiểu có thể được phát biểu như sau:

Cực tiểu hóa

(f) ( )

( ) ( ) ( , )

chi phí cực tiểu có một giải pháp khả thi

4) Chúng ta giả sử rằng đồ thị G chứa một đường đi có hướng không có giới hạn (nghĩa là tất cả các cung trên đường đi có độ thông qua vô hạn) giữa mọi cặp đỉnh 5) Chi phí của tất cả các cung là không âm

2.1.3 Đồ thi thăng dư

Cho luồng f trên mạng chi phí cung G=(V,E,c,p) Ta định nghĩa mạng thặng dư,

giá chi phí pf 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à pf(v,u) = p(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) và pf(u,v) = p(u,v)

2.2 Điều kiện tối ưu của bài toán

2.2.1 Điều kiện tối ưu về chu trình âm

Định lý 2.1: Các điều kiện tối ưu về chu trình âm

Một giải pháp khả thi f* là một giải pháp tối ưu của bài toán luồng với chi phí cực tiểu khi và chỉ khi thỏa mãn các điều kiện tối ưu về chu trình âm: Đồ thị thặng dư

Trang 29

G(f*) không chứa chu trình (có hướng) có chi phí âm

Đây là định lý quan trọng giúp chúng ta tiếp cận bài toán luồng cực đại với chi phí cực tiểu bằng thuật toán khử chu trình âm

2.2.2 Điều kiện tối ưu về chi phí rút gọn

Chúng ta có thể viết điều kiện tối ưu về đường đi ngắn nhất theo chi phí dưới dạng tương đương như sau:

0

d

lưu ý một điều, với những nhãn khoảng cách tối ưu, mọi cung trong đồ thị có chi phí

nhất từ đỉnh nguồn s tới các đỉnh khác thì đường đi ngắn nhất chỉ sử dụng các cung có chi phí rút gọn bằng 0 Do đó, khi chúng ta biết các khoảng cách tối ưu, bài toán sẽ dễ dàng được giải quyết: Chúng ta chỉ cần tìm một đường đi từ đỉnh s đến mọi đỉnh khác

mà chỉ dùng các cung có chi phí rút gọn bằng 0

chi phí rút gọn của cung (i, j) là pij  pij    i j Các cung với chi phí rút gọn này thích hợp với đồ thị thặng dư cũng như đồ thị gốc Chúng ta định nghĩa chi phí rút gọn trong đồ thị thặng dư cũng giống như chúng ta định nghĩa chi phí nhưng sử dụng

ij

p thay vì pij

Từ phân tích trên chúng ta có tính chất như sau:

(1) Với bất kỳ đường đi có hướng Z nào từ đỉnh k tới đỉnh l thì

Trang 30

một giá trị không đổi k  l Tính chất này cũng cho thấy nếu W là một chu trình

chúng ta có thể thay thế các điều kiện tối ưu về chu trình âm bằng các điều kiện chi phí rút gọn cho các cung

Định lý 2.2: Các điều kiện tối ưu với chi phí rút gọn

Một lời giải khả thi f* là một lời giải tối ưu của bài toán luồng với chi phí cực

chi phí rút gọn sau:

ij

p > 0 với mọi cung (i, j) trong G(f*)

Trong định lý trên chúng ta đã mô tả một luồng tối ưu f là một luồng thỏa mãn

đó Cùng cách đó, chúng ta có thể định nghĩa “các khả năng tối ưu của đỉnh” là tập

với luồng khả thi f nào đó

2.2.3 Điều kiện tối ưu bổ sung

Định lý 2.1 và định lý 2.2 giúp chúng ta phát hiện tính tối ưu của các lời giải của bài toán luồng với chi phí cực tiểu bằng cách công thức hóa các điều kiện trên các đồ thị thặng dư, bây giờ chúng ta sẽ phát biểu lại các điều kiện này trên các đồ thị gốc

Định lý 2.3: Các điều kiện tối ưu bổ sung

Một lời giải khả thi f* là một lời giải tối ưu cho bài toán luồng với chi phí cực

gọn và giá trị của luồng thỏa mãn các điều kiện tối ưu bổ sung sau đối với mọi cung (i, j)  E:

Nếu pij > 0 thì fij* = 0

Nếu 0 < fij* < cij thì pij = 0

Nếu pij< 0 thì fij* = cij

Chứng minh: Chúng ta sẽ chỉ ra rằng các điều kiện tối ưu về chi phí rút gọn

tương đương với các điều kiện trên Trước hết chúng ta chứng minh rằng nếu các khả

phải thỏa mãn các điều kiện trên

Trang 31

Xét 3 trường hợp cho mọi cung (i, j)  E:

Trường hợp 1: Nếu pij > 0, đồ thị thặng dư không thể chứa cung (i, j) vì

p   p < 0, mâu thuẫn với điều kiện thứ nhất, vì vậy fij* = 0

Trường hợp 2: Nếu 0 < fij* < cij, đồ thị thặng dư chứa cả cung (i, j) và cung (j, i)

p   pnên từ các bất đẳng thức trên suy ra pjipij  0

Trường hợp 3: Nếu pij < 0, đồ thị thặng dư không thể chứa cung (i, j) vì pij <

0, mâu thuẫn với điều kiện thứ 3, vì vậy fij*  cij

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

Xuất phát từ giả thiết từ luồng tối ưu, làm cách nào để có được các khả năng (của đỉnh) tối ưu và ngược lại, từ các khả năng tối ưu làm thế nào để có được một luồng tối

ưu Giải quyết bài toán trên bằng cách giải bài toán đường đi ngắn nhất hoặc bài toán luồng cực đại, các kết quả chỉ ra mối quan hệ đáng chú ý giữa bài toán luồng với chi phí cực tiểu và các bài toán luồng cực đại, đường đi ngắn nhất Chúng ta chứng minh 2 giả thiết sau:

(1) Nếu cho trước một luồng tối ưu f*, ta có thể đạt được các khả năng tối ưu bằng cách giải một bài toán đường đi ngắn nhất (với các cung có thể âm): Gọi G(f*) là

đồ thị thặng dư với luồng f* Rõ ràng G(f*) không chứa chu trình có chi phí âm nào, nếu ngược lại thì mâu thuẫn với tính tối ưu của lời giải f* Gọi d là đường đi ngắn nhất

cung Khoảng cách d được định nghĩa tốt bởi vì đồ thị thặng dư không chứa chu trình

âm Các điều kiện tối ưu về đường đi ngắn nhất cho ta:

dj < di +pij với mọi (i, j) trong G(f*)

Đặt  = -d, ta có:

0

đỉnh

một lời giải tối ưu f* bằng cách giải một bài toán luồng cực đại Trước tiên chúng ta

Trang 32

ta sẽ phân loại mỗi cung (i, j) theo một trong các cách sau và sử dụng các cách phân loại này để định nghĩa một bài toán luồng cực đại

Trường hợp 1: pij > 0

dàng buộc này bằng cách đặt fij* = 0 và xóa cung (i, j) khỏi đồ thị

Trường hợp 2: pij < 0

này bằng cách đặt fij*= cij và xóa cung (i, j) khỏi đồ thị Bởi vì chúng ta gửi fij đơn vị luồng trên cung (i, j), chúng ta phải giảm đi một lượng fij và tăng bj một lượng fij Trường hợp 3: pij= 0

Trong trường hợp này chúng ta cho phép luồng trên cung (i, j) nhận bất kỳ giá trị nào giữa 0 và cij

Gọi G’ = (V, E’) là đồ thị kết quả và b’ là khả năng cung/cầu được bổ sung của các đỉnh Bây giờ bài toán trở thành tìm một luồng khả thi trong đồ thị G’ thỏa mãn khả năng cung/cầu được bổ sung của các đỉnh Chúng ta có thể tìm một luồng như thế bằng cách giải bài toán luồng cực đại được định nghĩa như sau: Chúng ta đưa vào một

có độ thông qua bi, với mỗi đỉnh i có b’i < 0 chúng ta thêm một cung (i, t) có độ thông

biến đổi để đạt được một luồng cực đại f* Lời giải fij* cho  ( , ) i jE là một luồng tối ưu cho bài toán luồng với chi phí cực tiểu trong G

2.4 Một số thuật toán giải bài toán luồng cực đại với chi phí cực tiểu

2.4.1 Thuật toán khử chu trình âm (Cycle canceling)

2.4.1.1 Tư tưởng thuật toán

Điều kiện tối ưu về chu trình âm cho ta tiếp cận bài toán luồng với chi phí cực tiểu theo hướng đơn giản bằng cách tìm và khử chu trình âm trên đồ thị thặng dư cho tới khi đạt được điều kiện tối ưu là đồ thị không còn chu trình âm, gọi là thuật toán khử chu trình âm

Tư tưởng của thuật toán: Thuật toán khử chu trình âm xuất phát từ một phương

án khả thi và cải thiện hàm tối ưu của phương án đó

Trang 33

2.4.1.2 Mô tả thuật toán

Xuất phát từ một luồng khả thi f trên đồ thị, ở mỗi một bước lặp ta tìm một chu trình có chi phí âm và tăng luồng trên chu trình này, khi đồ thị không còn chu trình âm thì bài toán kết thúc với một luồng tối ưu tìm được Thuật toán khử chu trình âm có một kết quả phụ là định lý sau đây:

Định lý 2.4: Tính chất nguyên

Nếu tất cả các độ thông qua của cung và khả năng cung/cầu của các đỉnh là số nguyên thì bài toàn luồng với chi phí cực tiểu luôn có một luồng với chi phí nhỏ nhất

là số nguyên

2.4.1.3 Các bước thực hiện thuật toán

1 Tìm luồng cực đại ban đầu

2 Điều kiện dừng: Nếu không có chu trình chi phí âm trong mạng thặng dư thì dừng Luồng cực đại có chi phí cực tiểu

3 Chọn chu trình chi phí âm trong mạng thặng dư Tăng tối đa luồng trên chu trình âm

Quay lại bước 2

Giả code:

begin

Tìm một luồng khả thi x trong đồ thị;

while (đồ thị thặng dư G(f) chứa một chu trình âm) do

Để tìm luồng cực đại ban đầu ta có thể sử dụng thuật toán bất kỳ thuộc nhóm đường đi tăng luồng Để tìm chu trình chi phí âm ta có thể sử dụng thuật toán sau:

Trang 34

*Thuật toán Floyd-Warshall tìm chu trình âm

Đây là thuật giải tìm đường đi ngắn nhất giữa mọi cặp đỉnh trong đồ thị có hướng có trọng số Tuy nhiên ta cũng có thể sử dụng thuật giải này tìm chu trình âm

cung (i,j)

+ Đầu ra Ma trận D=[d(i,j)]

Nếu trên đường chéo có trị âm d(k,k) < 0, thì tồn tại chu trình âm qua đỉnh k Nếu trên đường chéo không có trị âm, thì d(i,j) là chiều dài đường đi ngắn nhất

từ i đến j với mọi cặp (i,j)

Ma trận P=[p(i,j)] dùng để xác định chu trình âm hoặc đường đi ngắn nhất

+ Phương pháp

D0 = [d0(i,j)]

trong đó d0(i,j) = w(i,j) nếu tồn tại cung (i,j) và d0(i,j) = + nếu không tồn tại

cung (i,j) (đặc biệt nếu không có khuyên tại i thì d0(i,i) = +)

Ngược lại tăng k lên 1 đơn vị (k:=k+1) và sang (3)

(3) Tính ma trận Dk và Pk theo Dk 1 và Pk 1:

Với mọi cặp (i,j), i=1, , n, j=1, , n, thực hiện:

Nếu dk 1(i,j) > dk 1(i,k) + dk 1(k,j) thì đặt

dk(i,j) := dk 1(i,k) + dk 1(k,j)

pk(i,j) := pk 1(i,k), ngược lại đặt

dk(i,j) := dk 1(i,j)

Trang 35

pk(i,j) := pk -1(i,j) Quay lại bước (2)

- Phương pháp xác định chu trình âm qua đỉnh i : Giả sử d(i,i) < 0 Chu trình âm

qua đỉnh i gồm dãy các đỉnh

i , i1 , i2 , i3 , , ik , ik+1 , , im , i thỏa mãn

i1 = p(i,i) , i2 = p(i1,i) , , ik+1 = p(ik,i) , , p(im,i) = i

thuật toán Belmann-Ford tìm chu trình âm có độ phức tạp O(|V|.|E|)

*Thuật toán Bellman-Ford tìm chu trình âm

Thuật toán Bellman-Ford tìm đường đi ngắn nhất trong trọng đồ có trọng số âm, nếu không có chu trình âm Nếu đồ thị có chu trình âm thì có thể xác định chu trình âm bằng thuật toán này

+ Đầu vào Đồ thị có hướng G=(V,E), V= {1, 2, , n}, có trọng số với mọi

<xuất phát từ đỉnh u thực hiện thuật toán tìm cây phủ

TK, trong đó mỗi đỉnh v thuộc cây TK được gán tplt[v]:=K>

Trang 36

Hình 2.2 Minh họa thuật toán khử chu trình âm

Chúng ta dùng ví dụ trên hình vẽ 2-6(a) để minh họa thuật toán khử chu trình âm (Chúng ta vi phạm giả thiết 4) để dễ khảo sát đồ thị hơn) Hình vẽ 2-6(a) mô tả một luồng khả thi trong đồ thị và hình vẽ 2-6(b) là đồ thị thặng dư tương ứng Giả sử thuật toán chọn chu trình 4-2-3-4 có chi phí là -1 trước tiên Khả năng thông qua thặng dư của chu trình này là 2 Thuật toán tăng 2 đơn vị luồng theo chu trình này Hình vẽ 2-

a Đồ thị có luồng khả thi f b Đồ thị thặng dư G(f)

c Đồ thị thặng dư sau khi tăng 2 đơn

vị luồng theo chu trình 4-2-3-4

d Đồ thị thặng dư sau khi tăng 1 đơn

vị luồng theo chu trình 4-2-1-3-4

pij,cij pij,rij

fịj

p ij ,r ij

Trang 37

6(c) vẽ đồ thị thặng dư bổ sung Trong vòng lặp kế tiếp, giả sử thuật toán chọn chu trình 4-2-1-3-4 có chi phí -2 Thuật toán gửi 1 đơn vị luồng theo chu trình này Hình

vẽ 2-6(d) mô tả đồ thị thặng dư cập nhật Vì đồ thị thặng dư không chứa chu trình âm nào nữa nên thuật toán kết thúc

2.4.1.4 Độ phức tạp thuật toán

Trong bài toán luồng với chi phí cực tiểu, mPC là cận trên của chi phí luồng ban đầu (vì pij < P và fij < C với  ( , ) i jE ) và -mPC là cận dưới của chi phí luồng tối

ưu (do pij> -P và fij < C với  ( , ) i jE) Mỗi vòng lặp của thuật toán khử chu trình

âm thay đổi giá trị hàm mục tiêu một lượng s là một giá trị âm

Chúng ta giả sử tất cả dữ liệu của bài toán là số nguyên, thuật toán sẽ kết thúc

2.4.2 Thuật toán tìm đường đi ngắn nhất liên tiếp (Successive shortest Path)

2.4.2.1 Tư tưởng thuật toán

Thuật toán tìm đường đi ngắn nhất liên tiếp xuất phát từ một giả thiết tối ưu và duy trì điều kiện tối ưu của giả thiết đó

2.4.2.2 Mô tả thuật toán

Để mô tả thuật toán này, trước hết chúng ta tìm hiểu khái niệm luồng giả Một

thông qua, nó không cần thỏa mãn các ràng buộc cân bằng khối lượng Với mọi luồng giả f, ta định nghĩa độ mất cân bằng của đỉnh i như sau:

Nếu ei > 0 với đỉnh i nào đó, ta nói ei là mức vượt quá của đỉnh i Nếu ei <0, ta

và D là các tập hợp các đỉnh vượt quá và thiếu hụt trong đồ thị

Trang 38

định nghĩa đồ thị thặng dư cho một luồng

Bổ đề 2.2: Giả sử một luồng giả (hoặc một luồng) x thỏa mãn các điều kiện tối

ưu về chi phí rút gọn đối với các khả năng (của đỉnh)  nào đó Gọi vector d là

khoảng cách đường đi ngắn nhất từ đỉnh s đến tất cả các đỉnh khác trong đồ thị thặng

dư G(f) với pij là độ dài của cung (i, j), ta có các tính chất sau:

(1) Luồng giả f cũng thỏa mãn các điều kiện tối ưu về chi phí rút gọn đối với các khả năng của đỉnh rút gọn ' =  - d

đỉnh s đến mọi đỉnh khác

Bổ đề 2.3: Giả sử một luồng giả (hoặc một luồng) x thỏa mãn các điều kiện tối

ưu về chi phí rút gọn và ta đạt được f’ từ f bằng cách gửi luồng theo một đường đi ngắn nhất từ đỉnh s đến một số đỉnh k khác thì f’ cũng thỏa mãn các điều kiện tối ưu về chi phí rút gọn

Trong thuật toán tìm đường đi ngắn nhất liên tiếp, khả năng của các đỉnh đóng vai trò rất quan trọng, chúng ta dùng chúng để giữ cho độ dài các cung không âm giúp giải quyết bài toán đường đi ngắn nhất một cách hiệu quả

Thuật toán tìm đường đi ngắn nhất liên tiếp được mô tả như sau:

Xuất phát từ một luồng tối ưu giả f = 0 trên đồ thị, khi đó ta phải vi phạm ràng buộc cân bằng khối lượng tại các đỉnh, ở mỗi một bước lặp ta tìm một chu trình ngắn nhất từ nguồn đến đích và tăng đơn vị vận chuyển trên chu trình này, khi các điều kiện

về cân bằng khối lượng thỏa mãn bài toán kết thúc với một luồng tối ưu tìm được

2.4.2.3 Các bước thực hiện thuật toán

Trang 39

P biểu thị đường đi ngắn nhất từ đỉnh k đến đỉnh l;

Cập nhật : =  - d;  := min[ek, -el, min{rij:(i, j)  P}];

Cập nhật f, G(f), E, D và các chi phí rút gọn;

end;

end;

Chứng minh tính đúng đắn của thuật toán: Để khởi tạo chúng ta đặt x = 0 là một

thỏa mãn các điều kiện tối ưu về chi phí rút gọn vì pij = pij > 0 với mọi cung (i, j) trong đồ thị G(f) thì chi phí của tất cả các cung là không âm.Ta quan sát thấy khi vẫn còn đỉnh có độ mất cân bằng khác 0 thì cả E và D phải khác NULL vì tổng các độ vượt quá bằng tổng các mức thiếu hụt Vì vậy cho đến khi tất cả các đỉnh đều cân bằng thì thuật toán luồng có thể xác định một đỉnh vượt quá k và một đỉnh thiếu l Giả thiết 4 chỉ ra rằng đồ thị thặng dư chứa một đường đi có hướng từ đỉnh k đến mọi đỉnh khác bao gồm cả đỉnh l Do đó khoảng cách đường đi ngắn nhất d được định nghĩa tốt

Ví dụ minh họa

pịj,cij

a Đồ thị thặng dư ban đầu với x = 0 và 𝜋 = 0

Trang 40

Hình 2.3 Minh họa thuật toán đường đi ngắn nhất liên tiếp 2.4.2.4 Độ phức tạp thuật toán

Mỗi vòng lặp của thuật toán giải một bài toán đường đi ngắn nhất với chiều dài cung không âm và giảm độ vượt quá của một số đỉnh (đồng thời cũng giảm mức thiếu hụt của một số đỉnh) Do đó, nếu C là cận trên của khả năng cung lớn nhất của các đỉnh, thuật toán sẽ kết thúc sau nhiều nhất nC vòng lặp Nếu S(n, m, P) là thời gian cần thiết để giải bài toán đường đi ngắn nhất với độ dài cung không âm thì độ phức tạp tổng cộng của thuật toán này là O(nCS(n, m, nP)) Chú ý rằng chúng ta dùng nP thay

vì P trong biểu thức này vì chi phí trong đồ thị thặng dư bị chặn bởi nP

2.4.3 Thuật toán Primal-Dual

2.4.3.1 Tư tưởng thuật toán

Tư tưởng thuật toán: Thuật toán Primal-Dual cho bài toán luồng với chi phí cực

Ngày đăng: 08/05/2021, 14:08

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