MẠNG VẬN TẢI
Chia sẻ bởi Nguyễn Việt Vương |
Ngày 02/05/2019 |
92
Chia sẻ tài liệu: MẠNG VẬN TẢI thuộc Bài giảng khác
Nội dung tài liệu:
CHƯƠNG 9
MẠNG VẬN TẢI
NỘI DUNG
Mạng vận tải
Luồng qua mạng
Bài toán luồng lớn nhất
Thuật toán Ford - Fulkerson
Một số ứng dụng của bài toán luồng lớn nhất
9.1. BÀI TOÁN LUỒNG LỚN NHẤT
Bài toán luồng lớn nhất là một trong những bài toán tối ưu của Lý thuyết Đồ thị, được đề xuất vào đầu những năm 1950 và trở nên nổi tiếng với thuật toán Ford - Fulkerson.
MẠNG VẬN TẢI
Định nghĩa 9.1. Mạng vận tải là một đồ thị có hướng G = (V, E) không có đỉnh nút, trong đó:
- Có duy nhất một đỉnh x0 không có cạnh đi vào,
F-1(x0) = (đỉnh phát)
- Có duy nhất một đỉnh z không có cạnh đi ra,
F(z) = (đỉnh thu)
- Mỗi cạnh e được gán một số nguyên không âm c(e) và gọi là khả năng thông qua của cạnh.
MẠNG VẬN TẢI (tiếp)
Ví dụ mạng vận tải:
LUỒNG QUA MẠNG
Với một mạng G = (V, E, c), ta ký hiệu:
W-(x) = { (a, x) E a V } - tập các cạnh đi vào
đỉnh x.
W+(x) = { (x, b) E b V } - tập các cạnh đi ra
khỏi đỉnh x.
LUỒNG QUA MẠNG (tiếp)
Định nghĩa 9.2. Hàm t : E N là một luồng đi qua mạng (G, c) nếu:
e E : t(e) c(e) - luồng trên mỗi cạnh không được vượt quá khả năng thông qua của cạnh đó.
x x0 và z : t(W-(x)) = t(W-(x)) - luồng trên các đỉnh phải cân bằng.
TÍNH CHẤT CỦA LUỒNG
Với tập B V, ký hiệu:
W-(B) = { (a, b) E a B, b B } - tập cạnh từ
ngoài B đi vào B.
W+(B) = { (a, b) E a B, b B } - tập cạnh từ
B đi ra khỏi B.
TÍNH CHẤT CỦA LUỒNG (tiếp)
Hình 9.1. Tập cạnh vào và ra của một tập đỉnh
TÍNH CHẤT CỦA LUỒNG (tiếp)
Khi đó nếu tập con các đỉnh B không chứa x0 và z
thì: t(W-(B)) = t(W+ (B)).
Theo tính chất b) của luồng:
t (W-(x)) = t (W+(x) )
Cạnh kề với đỉnh x nếu có đỉnh đầu và đỉnh cuối đều
nằm trong tập B thì nó sẽ có mặt ở cả hai vế của đẳng thức đúng một lần, do đó có thể giản ước.
TÍNH CHẤT CỦA LUỒNG (tiếp)
Sau khi giản ước, tổng ở vế trái chỉ còn lại các cạnh
mà đỉnh đầu ở ngoài B đỉnh cuối trong B, tức là tập
W-(B). Tương tự, tổng ở vế phải chỉ còn lại các cạnh mà
đỉnh đầu ở trong B đỉnh cuối ngoài B, tức là tập W+(B).
Hình 9.2. Các cạnh kề với một tập đỉnh
TÍNH CHẤT CỦA LUỒNG (tiếp)
Lấy B = V {x0 , z} thì:
- Khi G không có cạnh (x0 , z) ta có:
W+(x0) = W-(B) ; W-(z) = W+(B)
- Và khi G có cạnh (x0 , z) thì:
W+ (x0) = W-(B) (x0 ,z) ; W-(z) = W+(B) (x0 ,z)
Suy ra: t(W+(x0)) = t(W-(z)).
GIÁ TRỊ CỦA LUỒNG
Ký hiệu: tz = t(W+(x0)) (cộng thêm t(x0,z), nếu có) và gọi là giá trị của luồng qua mạng G.
9.1. BÀI TOÁN LUỒNG LỚN NHẤT (tiếp)
Bài toán: Cho mạng vận tải (G, c). Hãy tìm luồng t qua mạng sao cho tz đạt giá trị lớn nhất
Để giải quyết bài toán này, ta dùng thuật toán Ford - Fulkerson
9.2. THUẬT TOÁN FORD - FULKERSON
Ta đánh số đỉnh của mạng là: 0, 1, ... , n sao cho đỉnh 0 là x0 và đỉnh n là z.
Ban đầu cho luồng t = 0 trên các cạnh.
Thuật toán tiến hành hai bước:
Bước 1: Đánh dấu các đỉnh của mạng
Bước 2: Nâng giá trị của luồng
BƯỚC 1
Lần lượt đánh dấu cho các đỉnh của mạng như sau:
- Đỉnh x0 được đánh dấu bằng số 0.
- Nếu đỉnh x đã được đánh dấu, có cạnh (x, y) với đỉnh cuối y chưa được đánh dấu và t(x,y) < c(x,y) thì đánh dấu cho đỉnh y là +x.
- Nếu đỉnh y đã được đánh dấu, có cạnh (x, y) với đỉnh đầu x chưa được đánh dấu và t(x,y) > 0 thì đánh dấu đỉnh x là -y.
BƯỚC 1 (tiếp)
Nếu đỉnh thu z được đánh dấu là +k với k nào đó thì có nghĩa là có một đường đi vô hướng từ x0 đến z có dạng:
< x0 , i1 , i2 , ... , k , z >
trên đó mỗi đỉnh đã được đánh dấu +j hoặc -j .
BƯỚC 1 (tiếp)
Cụ thể là: d(x0) = 0
d(i1) = +0
d(i2) = i1
. . . . . . . . .
d(z) = +k
Việc đánh dấu các đỉnh sẽ giúp ta khôi phục đường đi
khi đã đến đỉnh z.
Hình 9.3. Một đường đi vô hướng từ đỉnh phát đến đỉnh thu
BƯỚC 2
Xây dựng luồng mới t` như sau:
- Nếu cạnh e không thuộc đường đi trên thì giữ nguyên luồng, t`(e) := t(e).
- Nếu cạnh e thuộc đường đi này và cùng chiều với chiều từ x0 tới z, thì tăng luồng: t`(e) := t(e) + 1.
- Nếu cạnh e thuộc đường đi này và ngược chiều với chiều từ x0 tới z thì giảm luồng: t`(e) := t(e) - 1.
BƯỚC 2 (tiếp)
Dễ thấy rằng t` vẫn là một luồng và: t`z = tz + 1, nghĩa là ta đã nâng luồng thêm 1.
Lặp lại hai bước trên đây chừng nào còn có thể để cải tiến luồng t.
Ta chứng minh rằng, khi thuật toán kết thúc thì luồng cuối cùng sẽ là luồng lớn nhất đi qua mạng.
9.2. THUẬT TOÁN FORD - FULKERSON
(tiếp)
Bổ đề 9.1: Nếu t là một luồng qua mạng thì:
tz min { c(W-(B))B chứa z nhưng không chứa x0}.
Chứng minh:
Giả sử B là một tập đỉnh chứa z nhưng không chứa x0.
Đặt: B1 = B {z}.
Vì tập B1 không chứa x0 và z nên theo nhận xét ở trên,
ta có:
t(W-(B1)) = t(W+ (B1)).
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Tập cạnh vào:
W-(B) = {(a, b) Ea B, b B } = W-(B1 ) W1,
trong đó: W1 = { (a, z) E a B }.
Hai tập W-(B1) và W1 rời nhau cho nên:
t(W-(B)) = t(W-(B1)) + t(W1).
Vậy thì: t(W-(B1)) = t(W-(B)) - t(W1) (1)
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Hình 9.4. Các tập cạnh vào và ra của B1
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Tập cạnh ra:
W+(B) = {(a, b) E a B, b B } = W+(B1) W2,
trong đó: W2 = {(a, z) Ea B1}.
Vì W2 W (B1) cho nên:
t(W+(B)) = t(W+(B1)) - t(W2).
Thế thì, t(W+(B1)) = t(W+(B)) + t(W2). (2)
Từ (1) và (2) suy ra:
t(W-(B)) - t(W1) = t(W-(B)) + t(W2).
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Vì W1 W2 = và W1 W2 = W-(z) nên:
t(W-(B)) - t(W+(B)) = t(W1) + t(W2) = tz.
Vậy với t là một luồng nào đó thì:
tz = t(W-(B)) - t(W+(B))
với mọi tập B chứa z và không chứa x0.
Do đó: tz t(W-(B)) c(W-(B)).
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Tập cạnh W-(B) được gọi là một thiết diện của mạng.
Theo Bổ đề 9.2 thì giá trị của mọi luồng qua mạng đều không vượt quá khả năng thông qua của mọi thiết diện của mạng.
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Định lý 9.1. Khi thuật toán Ford - Fulkerson dừng thì
luồng cuối cùng nhận được sẽ là luồng lớn nhất với giá trị
của luồng qua mạng là:
tz = min { c(W-(B))B chứa z và không chứa x0 }.
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Chứng minh: Khi thuật toán dừng có nghĩa là ta không đánh dấu được đến đỉnh z.
Ký hiệu B là tập các đỉnh không được đánh dấu.
Tập B không chứa đỉnh x0 nhưng chứa đỉnh z.
Theo Bổ đề 9.1 thì:
tz = t(W-(B)) - t(W+(B)).
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Nếu cạnh (a, b) W-(B) thì a được đánh dấu và b
không được đánh dấu . Thế thì: t((a,b)) = c((a,b)).
Nếu cạnh (a, b) W+(B) thì b được đánh dấu và a
không được đánh dấu. Do đó, t((a,b)) = 0. Vậy thì:
tz = c(W-(B)) - 0 = c(W-(B))
min { c(W-(B)) } tz.
MẠNG VẬN TẢI
NỘI DUNG
Mạng vận tải
Luồng qua mạng
Bài toán luồng lớn nhất
Thuật toán Ford - Fulkerson
Một số ứng dụng của bài toán luồng lớn nhất
9.1. BÀI TOÁN LUỒNG LỚN NHẤT
Bài toán luồng lớn nhất là một trong những bài toán tối ưu của Lý thuyết Đồ thị, được đề xuất vào đầu những năm 1950 và trở nên nổi tiếng với thuật toán Ford - Fulkerson.
MẠNG VẬN TẢI
Định nghĩa 9.1. Mạng vận tải là một đồ thị có hướng G = (V, E) không có đỉnh nút, trong đó:
- Có duy nhất một đỉnh x0 không có cạnh đi vào,
F-1(x0) = (đỉnh phát)
- Có duy nhất một đỉnh z không có cạnh đi ra,
F(z) = (đỉnh thu)
- Mỗi cạnh e được gán một số nguyên không âm c(e) và gọi là khả năng thông qua của cạnh.
MẠNG VẬN TẢI (tiếp)
Ví dụ mạng vận tải:
LUỒNG QUA MẠNG
Với một mạng G = (V, E, c), ta ký hiệu:
W-(x) = { (a, x) E a V } - tập các cạnh đi vào
đỉnh x.
W+(x) = { (x, b) E b V } - tập các cạnh đi ra
khỏi đỉnh x.
LUỒNG QUA MẠNG (tiếp)
Định nghĩa 9.2. Hàm t : E N là một luồng đi qua mạng (G, c) nếu:
e E : t(e) c(e) - luồng trên mỗi cạnh không được vượt quá khả năng thông qua của cạnh đó.
x x0 và z : t(W-(x)) = t(W-(x)) - luồng trên các đỉnh phải cân bằng.
TÍNH CHẤT CỦA LUỒNG
Với tập B V, ký hiệu:
W-(B) = { (a, b) E a B, b B } - tập cạnh từ
ngoài B đi vào B.
W+(B) = { (a, b) E a B, b B } - tập cạnh từ
B đi ra khỏi B.
TÍNH CHẤT CỦA LUỒNG (tiếp)
Hình 9.1. Tập cạnh vào và ra của một tập đỉnh
TÍNH CHẤT CỦA LUỒNG (tiếp)
Khi đó nếu tập con các đỉnh B không chứa x0 và z
thì: t(W-(B)) = t(W+ (B)).
Theo tính chất b) của luồng:
t (W-(x)) = t (W+(x) )
Cạnh kề với đỉnh x nếu có đỉnh đầu và đỉnh cuối đều
nằm trong tập B thì nó sẽ có mặt ở cả hai vế của đẳng thức đúng một lần, do đó có thể giản ước.
TÍNH CHẤT CỦA LUỒNG (tiếp)
Sau khi giản ước, tổng ở vế trái chỉ còn lại các cạnh
mà đỉnh đầu ở ngoài B đỉnh cuối trong B, tức là tập
W-(B). Tương tự, tổng ở vế phải chỉ còn lại các cạnh mà
đỉnh đầu ở trong B đỉnh cuối ngoài B, tức là tập W+(B).
Hình 9.2. Các cạnh kề với một tập đỉnh
TÍNH CHẤT CỦA LUỒNG (tiếp)
Lấy B = V {x0 , z} thì:
- Khi G không có cạnh (x0 , z) ta có:
W+(x0) = W-(B) ; W-(z) = W+(B)
- Và khi G có cạnh (x0 , z) thì:
W+ (x0) = W-(B) (x0 ,z) ; W-(z) = W+(B) (x0 ,z)
Suy ra: t(W+(x0)) = t(W-(z)).
GIÁ TRỊ CỦA LUỒNG
Ký hiệu: tz = t(W+(x0)) (cộng thêm t(x0,z), nếu có) và gọi là giá trị của luồng qua mạng G.
9.1. BÀI TOÁN LUỒNG LỚN NHẤT (tiếp)
Bài toán: Cho mạng vận tải (G, c). Hãy tìm luồng t qua mạng sao cho tz đạt giá trị lớn nhất
Để giải quyết bài toán này, ta dùng thuật toán Ford - Fulkerson
9.2. THUẬT TOÁN FORD - FULKERSON
Ta đánh số đỉnh của mạng là: 0, 1, ... , n sao cho đỉnh 0 là x0 và đỉnh n là z.
Ban đầu cho luồng t = 0 trên các cạnh.
Thuật toán tiến hành hai bước:
Bước 1: Đánh dấu các đỉnh của mạng
Bước 2: Nâng giá trị của luồng
BƯỚC 1
Lần lượt đánh dấu cho các đỉnh của mạng như sau:
- Đỉnh x0 được đánh dấu bằng số 0.
- Nếu đỉnh x đã được đánh dấu, có cạnh (x, y) với đỉnh cuối y chưa được đánh dấu và t(x,y) < c(x,y) thì đánh dấu cho đỉnh y là +x.
- Nếu đỉnh y đã được đánh dấu, có cạnh (x, y) với đỉnh đầu x chưa được đánh dấu và t(x,y) > 0 thì đánh dấu đỉnh x là -y.
BƯỚC 1 (tiếp)
Nếu đỉnh thu z được đánh dấu là +k với k nào đó thì có nghĩa là có một đường đi vô hướng từ x0 đến z có dạng:
< x0 , i1 , i2 , ... , k , z >
trên đó mỗi đỉnh đã được đánh dấu +j hoặc -j .
BƯỚC 1 (tiếp)
Cụ thể là: d(x0) = 0
d(i1) = +0
d(i2) = i1
. . . . . . . . .
d(z) = +k
Việc đánh dấu các đỉnh sẽ giúp ta khôi phục đường đi
khi đã đến đỉnh z.
Hình 9.3. Một đường đi vô hướng từ đỉnh phát đến đỉnh thu
BƯỚC 2
Xây dựng luồng mới t` như sau:
- Nếu cạnh e không thuộc đường đi trên thì giữ nguyên luồng, t`(e) := t(e).
- Nếu cạnh e thuộc đường đi này và cùng chiều với chiều từ x0 tới z, thì tăng luồng: t`(e) := t(e) + 1.
- Nếu cạnh e thuộc đường đi này và ngược chiều với chiều từ x0 tới z thì giảm luồng: t`(e) := t(e) - 1.
BƯỚC 2 (tiếp)
Dễ thấy rằng t` vẫn là một luồng và: t`z = tz + 1, nghĩa là ta đã nâng luồng thêm 1.
Lặp lại hai bước trên đây chừng nào còn có thể để cải tiến luồng t.
Ta chứng minh rằng, khi thuật toán kết thúc thì luồng cuối cùng sẽ là luồng lớn nhất đi qua mạng.
9.2. THUẬT TOÁN FORD - FULKERSON
(tiếp)
Bổ đề 9.1: Nếu t là một luồng qua mạng thì:
tz min { c(W-(B))B chứa z nhưng không chứa x0}.
Chứng minh:
Giả sử B là một tập đỉnh chứa z nhưng không chứa x0.
Đặt: B1 = B {z}.
Vì tập B1 không chứa x0 và z nên theo nhận xét ở trên,
ta có:
t(W-(B1)) = t(W+ (B1)).
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Tập cạnh vào:
W-(B) = {(a, b) Ea B, b B } = W-(B1 ) W1,
trong đó: W1 = { (a, z) E a B }.
Hai tập W-(B1) và W1 rời nhau cho nên:
t(W-(B)) = t(W-(B1)) + t(W1).
Vậy thì: t(W-(B1)) = t(W-(B)) - t(W1) (1)
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Hình 9.4. Các tập cạnh vào và ra của B1
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Tập cạnh ra:
W+(B) = {(a, b) E a B, b B } = W+(B1) W2,
trong đó: W2 = {(a, z) Ea B1}.
Vì W2 W (B1) cho nên:
t(W+(B)) = t(W+(B1)) - t(W2).
Thế thì, t(W+(B1)) = t(W+(B)) + t(W2). (2)
Từ (1) và (2) suy ra:
t(W-(B)) - t(W1) = t(W-(B)) + t(W2).
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Vì W1 W2 = và W1 W2 = W-(z) nên:
t(W-(B)) - t(W+(B)) = t(W1) + t(W2) = tz.
Vậy với t là một luồng nào đó thì:
tz = t(W-(B)) - t(W+(B))
với mọi tập B chứa z và không chứa x0.
Do đó: tz t(W-(B)) c(W-(B)).
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Tập cạnh W-(B) được gọi là một thiết diện của mạng.
Theo Bổ đề 9.2 thì giá trị của mọi luồng qua mạng đều không vượt quá khả năng thông qua của mọi thiết diện của mạng.
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Định lý 9.1. Khi thuật toán Ford - Fulkerson dừng thì
luồng cuối cùng nhận được sẽ là luồng lớn nhất với giá trị
của luồng qua mạng là:
tz = min { c(W-(B))B chứa z và không chứa x0 }.
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Chứng minh: Khi thuật toán dừng có nghĩa là ta không đánh dấu được đến đỉnh z.
Ký hiệu B là tập các đỉnh không được đánh dấu.
Tập B không chứa đỉnh x0 nhưng chứa đỉnh z.
Theo Bổ đề 9.1 thì:
tz = t(W-(B)) - t(W+(B)).
9.2. THUẬT TOÁN FORD - FULKERSON (tiếp)
Nếu cạnh (a, b) W-(B) thì a được đánh dấu và b
không được đánh dấu . Thế thì: t((a,b)) = c((a,b)).
Nếu cạnh (a, b) W+(B) thì b được đánh dấu và a
không được đánh dấu. Do đó, t((a,b)) = 0. Vậy thì:
tz = c(W-(B)) - 0 = c(W-(B))
min { c(W-(B)) } tz.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Nguyễn Việt Vương
Dung lượng: |
Lượt tài: 4
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)