You are on page 1of 58

Chương 6

Một số Bài toán đặc biệt


có liên quan đến
Quy Hoạch Tuyến Tính

GVGD: ThS. Võ Thị Ngọc Trân

C6. Một số Bài toán đặc biệt


có liên quan đến QHTT
1. Bài toán vận tải
(Transportation Problem)
2. Bài toán phân công
(Assignment Problem)
3. Bài toán dòng chảy tối đa
(Maximum Flow Problem)
4. Bài toán đường đi ngắn nhất
(Shortest Path Problem)

1
1. Bài toán vận tải
(Transportation Problem)
1.1. Thiết lập Bài toán vận tải (Transportation Problem)
 Các điểm nguồn (Sources) (i) và Khả năng cung cấp của từng điểm nguồn (Supply) (si).
 Các điểm đích (Destinations) (j) và Nhu cầu của từng điểm đích (Demand) (dj).
 Chi phí vận chuyển cho 1 đơn vị hàng hóa từ Điểm nguồn đến Điểm đích (cij).
 Ký hiệu:
• m: Tổng số Điểm nguồn.
• n: Tổng số Điểm đích.
• si: Khả năng cung cấp của Điểm nguồn i (i = 1, 2, …, m).
• dj: Nhu cầu của Điểm đích j (j = 1, 2, …, n).
• xij: Lượng hàng chuyên chở từ Điểm nguồn i (i = 1, 2, …, m) đến Điểm đích j (j =
1, 2, …, n).
• cij: Chi phí vận chuyển một đơn vị hàng hóa từ Điểm nguồn i (i = 1, 2, …, m) đến
Điểm đích j (j = 1, 2, …, n).
3

1. Bài toán vận tải (tt1)


Điểm nguồn Điểm đích
(c11, x11)
s1 1 1 d1

s2 2 2 d2

si i j dj
(cij, xij)

sm m n dn
(cmn, xmn)

2
1. Bài toán vận tải (tt2)
 Dạng QHTT của Bài toán vận tải
m n
Min Z  c
i 1 j 1
ij x ij

n
Rb : x
j1
ij  si i  1,2,..., m

x
i 1
ij  dj j  1,2,..., n

x ij  0  i, j
m n
Điều kiện:
s  d
i 1
i
j 1
j

1. Bài toán vận tải (tt3)


 Dạng cân bằng (Balanced Model) của Bài toán vận tải
m n
Min Z  c
i 1 j 1
ij x ij

n
Rb : x
j1
ij  si i  1,2,..., m

x
i 1
ij  dj j  1,2,..., n

x ij  0  i, j
m n
Điều kiện:
s  d
i 1
i
j1
j

3
1. Bài toán vận tải (tt4)
VD 1:
Một doanh nghiệp nhỏ có 3 kho chứa hàng (10 loại hàng) trung chuyển với khả
năng cung cấp hàng ngày là 120, 140 và 100 sản phẩm. Giả sử hàng ngày
phải được vận chuyển đến 4 điểm bán lẻ với nhu cầu là 100, 60, 80, 120 sản
phẩm. Bài toán đặt ra là xác định PA vận chuyển để tốn ít chi phí nhất nếu
chi phí vận chuyển 1 đơn vị hàng hóa giữa các kho trung chuyển và điểm bán
lẻ được cho trong bảng sau:
Điểm bán lẻ
Kho
1 2 3 4
1 5 7 9 6
2 6 7 10 5
3 7 6 8 1
7

1. Bài toán vận tải (tt5)


Bài toán QHTT được thiết lập:
Min 5x11 + 7x12 + 9x13 + 6x14 + 6x21 + 7x22 + 10x23 + 5x24 +
7x31 + 6x32 + 8x33 + x34
Rb: x11 + x12 + x13 + x14 = 120
x21 + x22 + x23 + x24 = 140
x31 + x32 + x33 + x34 = 100
x11 + x21 + x31 = 100
x12 + x22 + x32 = 60
x13 + x23 + x33 = 80
x14 + x24 + x34 = 120
xij ≥ 0 i = 1, 2, 3; j = 1, 2, 3, 4
Lưu ý: Trong các ràng buộc trên, có một ràng buộc thừa có thể được loại bỏ.

4
1. Bài toán vận tải (tt6)
Chuyển BTVT Dạng không cân bằng về Dạng cân bằng
m n
1. Nếu s  d
i 1
i
j1
j

• Tạo 1 điểm đích giả (Dummy Demand Node) với Nhu cầu bằng
m n
d n 1  s
i 1
i  dj
j 1
• Gán chi phí vận chuyển đơn vị từ mọi điểm nguồn đến điểm đích giả bằng
0. Tức là ci, n+1 = 0;  i = 1, 2, …, m.
m n
2. Nếu s i  d j
i 1 j 1
• Tạo 1 điểm nguồn giả (Dummy Supply Node) với Khả năng cung cấp bằng
n m
s m 1  d
j 1
j   si
i 1
• Gán chi phí vận chuyển đơn vị từ điểm nguồn giả đến mọi điểm đích bằng
0. Tức là cm+1, j = 0; j = 1, 2, …, n.

1. Bài toán vận tải (tt7)


Dạng bảng của Bài toán vận tải (Transportation Tableau)
1. Thiết lập 1 ma trận, với các hàng -> các Điểm nguồn, các
cột -> các Điểm đích.
2. Lập 1 cột sau cùng của bảng -> Khả năng cung cấp của
từng Điểm nguồn và 1 hàng sau cùng -> Nhu cầu của
từng Điểm đích.
3. Giá trị của các ô -> Lượng hàng vận chuyển giữa Điểm
nguồn và Điểm đích tương ứng.
4. Góc trên của từng ô -> Chi phí vận chuyển đơn vị giữa
Điểm nguồn và Điểm đích tương ứng.
10

5
1. Bài toán vận tải (tt8)
VD: Xét VD 1, nghiệm ban đầu của VD 1 xác định theo pp góc Tây Bắc

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 x11 x12 x13 x14 120
6 7 10 5
2 x21 x22 x23 x24 140
7 6 8 1
3 x31 x32 x33 x34 100

Tổng cầu 100 60 80 120 360

Chi phí vận chuyển Lượng hàng vận chuyển 11

1. Bài toán vận tải (tt9)


1.2. Tìm lời giải ban đầu cho Bài toán vận tải
B1. Tìm lời giải ban đầu và kiểm tra xem nó tối ưu chưa. Nếu chưa,
chuyển sang B2.
B2. Cải thiện nghiệm ban đầu cho đến khi đạt được điều kiện tối ưu.
Cũng như BT QHTT, việc tìm ra 1 nghiệm khả dĩ ban đầu cho BTVT là
rất quan trọng. Để tìm lời giải ban đầu cho BTVT ở dạng bảng, một số
pp đã được đề nghị.
PP góc Tây Bắc (The Northwest Corner Method)
PP chi phí bé nhất (The Minimal Cost Method)
PP xấp xỉ Vogel (The Vogel’s Approximation Method – VAM)

12

6
1. Bài toán vận tải (tt10)
1.2.1. Phương pháp góc Tây Bắc (The Northwest Corner Method)
Khởi đầu từ ô nằm ở góc Tây Bắc của bảng (ô trên cùng bên phải) và
hàng đầu tiên:
1. Cung cấp tối đa từ khả năng của 1 điểm nguồn cho các điểm đích theo
thứ tự ưu tiên của các điểm đích từ trái qua phải cho đến khi điểm
nguồn đó đã hết khả năng trước khi chuyển sang 1 hàng mới (tức là 1
điểm nguồn mới sẽ được xem xét).
2. Đáp ứng tối đa nhu cầu của 1 điểm đích từ các điểm nguồn theo thứ tự
ưu tiên của các điểm nguồn từ trên xuống dưới cho đến khi nhu cầu của
điểm đích đang xét đã được thỏa mãn trước khi chuyển sang 1 cột mới
(tức là 1 điểm đích mới sẽ được xem xét).
13

1. Bài toán vận tải (tt11)


VD: Xét VD 1, nghiệm ban đầu của VD 1 xác định theo pp góc Tây Bắc

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 20 120
6 7 10 5
2 40 80 20 140
7 6 8 1
3 100 100

Tổng cầu 100 60 80 120 360

CTây Bắc = 100*5 + 20*7 + 40*7 + 80*10 + 20*5 + 100*1 = 1.920


14

7
1. Bài toán vận tải (tt12)
1.2.2. Phương pháp chi phí bé nhất (The Minimal Cost Method)
Nguyên nhân chủ yếu là do pp góc Tây Bắc không hề lưu ý đến Chi phí
vận chuyển giữa các điểm nguồn và các điểm đích (cij).
Để khắc phục nhược điểm trên, pp chi phí thấp nhất đã được đề nghị.
• Ô ứng với chi phí vận chuyển đơn vị nhỏ nhất trong bảng vận tải sẽ
được ưu tiên đáp ứng tối đa (đáp ứng toàn bộ nhu cầu nếu khả năng
cung cấp là đủ hoặc cung cấp toàn bộ khả năng nếu nhu cầu là lớn
hơn).
• Loại bỏ Điểm nguồn đã hết khả năng hoặc Điểm đích đã được cung
cấp đủ cùng các ô liên quan và xác định lại ô có chi phí nhỏ nhất.
• Thực hiện lặp lại 2 bước nêu trên cho đến khi toàn bộ nhu cầu đã
được thỏa mãn (toàn bộ khả năng cung cấp đã sử dụng hết).

15

1. Bài toán vận tải (tt13)


VD: Xét VD 1, nghiệm ban đầu của VD 1 xác định theo pp chi phí nhỏ nhất
Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 20 120
6 7 10 5
2 60 60 20 140
7 6 8 1
3 100 100

Tổng cầu 100 60 80 120 360

CChi phí bé nhất = 100*5 + 20*9 + 60*7 + 60*10 + 20*5 + 100*1 = 1.900

16

8
1. Bài toán vận tải (tt14)
 Trước tiên ô (3,4) được xét do là ô có chi phí thấp nhất: giá trị vận chuyển
được gán trong ô này bằng với khả năng cung cấp tối đa của kho 3. Sau khi
gán giá trị cho ô (3,4), kho 3 hết khả năng cung cấp và do vậy các ô (3,1),
(3,2) và (3,3) sẽ không được xem xét tiếp.
 Ô có chi phí nhỏ nhất kế tiếp được xét là các ô (1,1) và (2,4): giá trị vận
chuyển tối đa gán được cho các ô này là 100 và 20. Sau khi gán, điểm bán lẻ
1 và 4 đã được cấp đủ nhu cầu và do vậy các ô (2,1) và (1,4) sẽ bị loại bỏ
trong bước xem xét tiếp theo.
 Trong các ô còn lại: (1,2), (1,3), (2,2), (2,3); hai ô (1,2) và (2,2) có cùng chi
phí vận chuyển đơn vị nhỏ nhất là 7. Tuy nhiên, lượng vận chuyển tối đa có
thể gán được cho ô (1,2) chỉ là 20, trong khi lượng vận chuyển tối đa có thể
gán được cho ô (2,2) là 60. Vì vậy, ô (2,2) được chọn để gán giá trị trong
bước này. Sau khi gán, điểm bán lẻ 2 đã được cấp đủ nhu cầu và do vậy ô
(1,2) bị loại bỏ.
 Trong hai ô còn lại là (1,3) và (2,3), các giá trị của lượng hàng vận chuyển
duy nhất có thể gán được phải là 20 và 60 theo thứ tự đó.
17

1. Bài toán vận tải (tt15)


 Nếu so sánh chi phí của nghiệm ban đầu trong 2 pp: pp
góc Tây Bắc và pp chi phí nhỏ nhất, thì pp chi phí nhỏ
nhất cho nghiệm ban đầu tốt hơn:

• CTây Bắc = 100*5 + 20*7 + 40*7 + 80*10 + 20*5 +


100*1 = 1.920

• CChi phí bé nhất = 100*5 + 20*9 + 60*7 + 60*10 + 20*5 +


100*1 = 1.900

18

9
1. Bài toán vận tải (tt16)
1.2.3. Phương pháp xấp xỉ Vogel (The Vogel’s
Approximation Method – VAM)

 PP xấp xỉ Vogel là pp xác định lời giải ban đầu tốt nhất
cho BTVT.
 Trong nhiều TH, nghiệm ban đầu xác định từ pp này cũng
chính là nghiệm tối ưu.

19

1. Bài toán vận tải (tt17)


PP xấp xỉ Vogel
Việc thực hiện pp VAM tuân theo các bước:
1. Ứng với mỗi hàng và cột của bảng VT, xác định độ chênh lệch giữa 2 chi phí
vận chuyển nhỏ nhất. Các giá trị xác định được biểu diễn chênh lệch về chi phí
VT giữa con đường VT tốt nhất và con đường VT tốt thứ 2 trên từng hàng/cột.
Đây cũng chính là chi phí cơ hội do không chọn con đường tốt nhất trên từng
hàng/cột.
2. Xác định hàng hoặc cột ứng với chi phí cơ hội lớn nhất.
3. Phân bổ tối đa lượng hàng có thể vận chuyển được trong ô có chi phí vận
chuyển nhỏ nhất ứng với hàng/cột đã chọn trong B2.
4. Loại bỏ hàng đã dùng hết khả năng cung cấp hoặc cột đã được thỏa mãn toàn
bộ nhu cầu sau sự phân bổ trong B3. Đánh dấu X vào các ô trống của hàng/cột
bị loại bỏ.
5. Tính toán lại các chi phí cơ hội trong B1 ứng với bảng VT đã loại bỏ các
hàng/cột đề cập đến trong B4.
6. Quay lại B2 và thực hiện lặp lại các B2 – 5 cho đến khi nhận được 1 lời giải
ban đầu.
20

10
1. Bài toán vận tải (tt18)
PP xấp xỉ Vogel
VD 5: Xét VD 1, nghiệm ban đầu xác định theo pp xấp xỉ Vogel được
thực hiện theo trình tự sau:
Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 120 1
6 7 10 5
2 140 1
7 6 8 1
3 X X X 100 100 5*

Tổng cầu 100 60 80 120 360


1 1 1 4
21

1. Bài toán vận tải (tt19)


PP xấp xỉ Vogel
VD 5: (tt1)

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 120 1*
6 7 10 5
2 X 140 1
7 6 8 1
3 X X X 100 100

Tổng cầu 100 60 80 120 360


1* 0 1 1
22

11
1. Bài toán vận tải (tt20)
PP xấp xỉ Vogel
VD 5: (tt2)

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 X 120 1
6 7 10 5
2 X 20 140 2*
7 6 8 1
3 X X X 100 100

Tổng cầu 100 60 80 120 360


0 1 1
23

1. Bài toán vận tải (tt21)


PP xấp xỉ Vogel
VD 5: (tt3)

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 X X 120 2
6 7 10 5
2 X 60 20 140 3*
7 6 8 1
3 X X X 100 100

Tổng cầu 100 60 80 120 360


0 1
24

12
1. Bài toán vận tải (tt22)
PP xấp xỉ Vogel
VD 5: (tt4)
Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 X 20 X 120 #
6 7 10 5
2 X 60 60 20 140 #
7 6 8 1
3 X X X 100 100

Tổng cầu 100 60 80 120 360


#
Tổng chi phí VT ứng với lời giải ban đầu này là:
CVAM = 100*5 + 20*9 + 60*7 + 60*10 + 20*5 + 100*1 = 1.900
25

1. Bài toán vận tải (tt23)


 Lưu ý:
• Do nghiệm ban đầu có được từ pp VAM, nếu không tối ưu,
cũng thường rất gần với nghiệm tối ưu nên trong nhiều
BTVT thực tế, người ta không tìm cách cải thiện để đạt lời
giải tối ưu nữa.
• Trong quá trình áp dụng pp VAM, đôi khi chi phí cơ hội lớn
nhất tồn tại trên nhiều hàng/cột của bảng VT. Trong trường
hợp đó, hàng/cột được chọn trong B2 là hàng/cột giúp phân
bổ lượng hàng vận chuyển nhiều nhất vào một ô nào đó
(điều này được minh họa trong bảng thứ 2 của VD 5).

26

13
1. Bài toán vận tải (tt24)
1.3. Phương pháp tìm nghiệm tối ưu

 Trong phần này, các pp tìm nghiệm tối ưu của BTVT trong TH
không suy biến (Non-Degenerate) sẽ được trình bày. Lưu ý
rằng 1 BTVT là không suy biến nếu như trong bảng VT, số ô
có gán giá trị bằng: m + n – 1.

1.3.1. Phương pháp duyệt tuần tự (The Stepping-Stone Method)

1.3.2. Phương pháp phân phối cải tiến – MODI (The Modified
Distribution Method)

27

1. Bài toán vận tải (tt25)


1.3.1. Phương pháp duyệt tuần tự (The Stepping-stone Method)
PP duyệt tuần tự được thực hiện như sau:
Trước tiên, xác định lời giải ban đầu cho BTVT bằng 1 trong các pp đã biết. Sau
khi có được lời giải ban đầu, thực hiện cải tiến lời giải này thông qua việc
tính lặp. Tại từng bước lặp, các bước sau đây được tiến hành: 3 bước
1. Tính Chỉ số cải tiến Iij cho tất cả các ô rỗng (i, j) trong bảng VT như sau
a. Ứng với 1 ô rỗng (i, j) nào đó, vẽ 1 đường đi kín nối ô này với các ô có
gán giá trị trong bảng VT bằng các đoạn nằm ngang hoặc thẳng đứng.
b. Gán dấu cho các đỉnh của đường đi vẽ trong phần trên sao cho 2 đỉnh
thuộc cùng 1 đoạn có dấu khác nhau, bắt đầu bằng dấu cộng cho ô rỗng
đang xét.
c. Tính Chỉ số cải tiến Iij cho ô đang xét. Chỉ số này bằng tổng đại số chi
phí vận chuyển của các ô liên quan đến đường đi tương ứng với dấu là
dấu được gán trong b.
28

14
1. Bài toán vận tải (tt26)
1.3.1. Phương pháp duyệt tuần tự (The Stepping-stone Method)
PP duyệt tuần tự được thực hiện như sau: (tt)
2. Nếu Chỉ số Iij của mọi ô rỗng đều có giá trị không âm, lời giải hiện
hành là tối ưu. Nếu tồn tại một số giá trị Iij âm, chọn ra ô có Iij nhỏ
nhất (tức là có giá trị tuyệt đối lớn nhất) và điều chỉnh lượng hàng vận
chuyển trên các ô liên quan như sau:
 Xác định giá trị nhỏ nhất x trong các ô được gán dấu trừ.
 Lượng hàng vận chuyển trên các ô được gán dấu trừ sẽ được trừ đi
một lượng x.
 Lượng hàng vận chuyển trên các ô được gán dấu cộng sẽ được
cộng thêm một lượng x.
3. Xác định lại bảng VT và quay trở lại B1.
29

1. Bài toán vận tải (tt27)


 Lưu ý:
• Đường đi ứng với 1 ô rỗng nào đó là duy nhất.
• So với pp đơn hình, các ô có gán giá trị trong bảng VT tại 1
bước lặp nào đó tương ứng với biến cơ sở, còn các ô rỗng
thì ứng với những biến không cơ sở. Các giá trị Chỉ số cải
tiến Iij của các ô rỗng chính là chi phí rút giảm ứng với các
biến không cơ sở.
• Sau 1 bước lặp, sẽ có 1 ô cơ sở chuyển thành ô không cơ sở
(ô rỗng).

30

15
1. Bài toán vận tải (tt28)
PP duyệt tuần tự
VD 6: Xét VD 1 với nghiệm ban đầu xác định theo pp góc Tây Bắc

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 20 120
6 7 10 5
2 40 80 20 140
7 6 8 1
3 100 100

Tổng cầu 100 60 80 120 360


Các ô rỗng cần khảo sát là (1,3), (1,4), (2,1), (3,1), (3,2), (3,3)
31

1. Bài toán vận tải (tt29)


VD 6: (tt1)
Chỉ số cải tiến ứng với ô (1,3) là: I13 = +9 – 10 + 7 – 7 = – 1
=> Chưa thỏa điều kiện tối ưu.
Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 - 7 + 9 6
1 100 20 120
6 7 10 5
2 40 80 20 140
+ -
7 6 8 1
3 100 100

Tổng cầu 100 60 80 120 360

32

16
1. Bài toán vận tải (tt30)
 Chỉ số cải tiến ứng với ô (1,3) là
I13 = +9 – 10 + 7 – 7 = – 1 => Chưa thỏa điều kiện tối ưu
 Thực hiện tương tự, ta có:
I14 = 1, I21 = 1, I31 = 6, I32 = 3, I33 = 2
 Như vậy, ô (1,3) là ô rỗng duy nhất mà tại đó điều kiện tối
ưu bị vi phạm. Việc cải tiến nghiệm được thực hiện như sau:
min
 Ta có: x13  min(x12 , x 23 )  min(20,80)  20
 Do vậy, các giá trị gán mới tại các ô là:
x12 = 20 – 20 = 0 x13 = 0 + 20 = 20
x22 = 40 + 20 = 60 x23 = 80 – 20 = 60

33

1. Bài toán vận tải (tt31)


VD 6: (tt2) Bảng VT sau điều chỉnh có dạng sau:
Việc kiểm tra xem lời giải hiện hành có tối ưu chưa được tiến hành như:
Xét ô (1,4): I14 = +6 – 5 + 10 – 9 = 2 => Ô (1,4) thỏa điều kiện tối ưu.

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 - 9 + 6
1 100 20 120
6 7 10 5
2 60 60 20 140
+ -
7 6 8 1
3 100 100

Tổng cầu 100 60 80 120 360

34

17
1. Bài toán vận tải (tt32)
VD 6: (tt3)
Xét ô (2,1): I21 = + 6 – 5 + 9 – 10 = 0 (không âm) => Ô (2,1) thỏa điều kiện tối ưu.

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
- 5 7 + 9 6
1 100 20 120
6 7 10 5
2 60 60 20 140
+ -
7 6 8 1
3 100 100

Tổng cầu 100 60 80 120 360

35

1. Bài toán vận tải (tt33)


VD 6: (tt4)
Xét ô (3,1): I31 = +7 – 5 + 9 – 10 + 5 – 1 = 5 => Ô (3,1) thỏa điều kiện tối ưu

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
- 5 7 + 9 6
1 100 20 120
6 7 10 + 5
2 60 60 20 140
-
7 6 8 1
3 100 100
+ -

Tổng cầu 100 60 80 120 360

36

18
1. Bài toán vận tải (tt34)
VD 6: (tt5)
Xét ô (3,2): I32 = +6 – 7 + 5 – 1 = 3 => Ô (3,2) thỏa điều kiện tối ưu

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 20 120
6 - 7 10 + 5
2 60 60 20 140
7 6 8 1
3 100 100
+ -

Tổng cầu 100 60 80 120 360

37

1. Bài toán vận tải (tt35)


VD 6: (tt6)
Xét ô (3,3): I33 = + 8 – 10 + 5 – 1 = 2 => Ô (3,3) thỏa điều kiện tối ưu.

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
5 7 9 6
1 100 20 120
6 7 - 10 + 5
2 60 60 20 140
7 6 8 1
3 100 100
+ -

Tổng cầu 100 60 80 120 360

Tất cả các ô rỗng của bảng VT lúc này đều thỏa điều kiện tối ưu. Do vậy, lời giải
hiện thời chính là lời giải tối ưu. 38

19
1. Bài toán vận tải (tt36)
VD 7: Xét BTVT với lời giải ban đầu như sau:

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
10 0 20 11
1 5 10 15
12 7 9 20
2 25 15 35 75
0 14 16 18
3 20 20

Tổng cầu 5 35 15 55 110


Ta có: I13 = 18, I14 = – 2, I21 = – 5, I31 = –15, I32 = 9, I33 = 9 (Z = 1.420)
39

1. Bài toán vận tải (tt37)


VD 7: Bước lặp 1: Chọn ô (3,1)

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
10 0 20 11
1 15 15
12 7 9 20
2 20 15 40 75
0 14 16 18
3 5 15 20

Tổng cầu 5 35 15 55 110


I11 = 15, I13 = 18, I14 = – 2, I21 = 10, I32 = 9, I33 = 9 (Z = 1.345)
40

20
1. Bài toán vận tải (tt38)
VD 7: Bước lặp 2: Chọn ô (1,4)

Điểm bán lẻ
Kho Tổng cung
1 2 3 4
10 0 20 11
1 15 15
12 7 9 20
2 35 15 25 75
0 14 16 18
3 5 15 20

Tổng cầu 5 35 15 55 110


I11 = 17, I12 = 2, I13 = 20, I21 = 10, I32 = 9, I33 = 9
Bài toán đã đạt tối ưu với chi phí cực tiểu: Z* = 1.315. 41

1. Bài toán vận tải (tt39)


1.3.2. Phương pháp phân phối cải tiến – MODI (The Modified Distribution
Method)
 PP phân phối cải tiến (PP thế vị) là pp trong đó việc tính toán các chỉ số cải
tiến của bảng VT dựa trên BT đối ngẫu của BTVT.
 Nguyên lý: Nếu gọi ui (i = 1, 2, …, m), vj (j=1, 2, …, n) là các biến đối ngẫu
ứng với các điểm nguồn i và các điểm cấp j, thì
1. Iij = cij – (ui + vj) = 0 tại tất cả các ô (i,j) có gán giá trị.
2. Iij = cij – (ui + vj) ≠ 0 tại các ô rỗng.
Dựa trên hệ PT có được từ các ô có gán giá trị, ta có thể xác định được tất cả
các giá trị ui (i = 1, 2, …, m), vj (j = 1, 2, …, n) (trong đó sẽ có 1 giá trị cần
được định trước, thường là chọn u1 = 0). Do vậy, các chỉ số cải tiến tại các
ô rỗng có thể xác định được nhanh chóng.
Căn cứ chỉ số cải tiến, ô rỗng được chọn để thay đổi có thể xác định được và
trình tự giải tiếp theo được thực hiện tương tự như đối với pp duyệt tuần tự.

42

21
1. Bài toán vận tải (tt40)
VD 8: Xét bài toán vận tải VD7.

Điểm bán lẻ
Kho Tổng cung
1 (v1) 2 (v2) 3 (v3) 4 (v4)
10 0 20 11
1 (u1) 5 10 15
12 7 9 20
2 (u2) 25 15 35 75
0 14 16 18
3 (u3) 20 20

Tổng cầu 5 35 15 55 110

43

1. Bài toán vận tải (tt41)


Ta có:
u1 + v1 = 10 u1 = 0
u1 + v2 = 0 u2 = 7
u2 + v2 = 7 Chọn u1 = 0 u3 = 5
u2 + v3 = 9 ==> v1 = 10
u2 + v4 = 20 v2 = 0
u3 + v4 = 18 v3 = 2
v4 = 13
Do đó, I13 = 18, I14 = -2, I21 = -5, I31 = -15, I32 = 9, I33 = 9 (Z = 1.420)

44

22
1. Bài toán vận tải (tt42)
Bước lặp 1: Chọn ô (3,1)
Điểm bán lẻ
Kho Tổng cung
1 (v1) 2 (v2) 3 (v3) 4 (v4)
10 0 20 11
1 (u1) 15 15
12 7 9 20
2 (u2) 20 15 40 75
0 14 16 18
3 (u3) 5 15 20

Tổng cầu 5 35 15 55 110


Thực hiện xác định lại các giá trị ui và vj tương tự như trong bước lặp 1,
ta sẽ có nghiệm tối ưu sau bước lặp 2 như trong VD 7 (slide 40).
45

1. Bài toán vận tải (tt43)


1.4. TH suy biến (Degenerate) của BTVT

Một BTVT sẽ suy biến nếu như tổng số các ô có gán giá trị
trong bảng VT nhỏ hơn (m + n – 1).

Có 2 TH có thể xảy ra:

TH1: Sự suy biến xảy ra trong lời giải ban đầu. Trong TH
này, phải gán giá trị 0 vào 1 ô rỗng nào đó (và xem như
đây là ô có gán giá trị) sao cho từ bất kỳ 1 ô rỗng nào, ta
cũng xác định được 1 đường đi kín tương ứng với nó.
46

23
1. Bài toán vận tải (tt46)
VD 9: Xét BTVT với nghiệm ban đầu xác định bằng pp góc Tây Bắc sau
Điểm bán lẻ
Kho Tổng cung
1 2 3
8 2 6
1 100 0 100
10 9 9
2 100 20 120
7 10 7
3 80 80

Tổng cầu 100 100 100 300


Để có thể giải được, ta phải gán giá trị 0 vào ô (1,2) (hoặc bất kỳ ô nào khác
trừ ô (3,2)).
47

1. Bài toán vận tải (tt45)


 TH2: Sự suy biến xảy ra sau khi thực hiện 1 bước lặp nào
đó. Điều này là do khi chọn 1 ô rỗng để đưa vào tập các ô
cơ sở, có ít nhất 2 ô có gán dấu trừ trên đường đi ứng với
ô rỗng đang xét có cùng giá trị nhỏ nhất (và như vậy các ô
này sẽ cùng chuyển thành ô rỗng sau khi thực hiện phép
lặp). Trong TH này, phải gán giá trị 0 vào 1 trong các ô đó
sau khi thực hiện phép lặp, thường là chọn ô có chi phí
vận chuyển nhỏ nhất.

48

24
1. Bài toán vận tải (tt46)
VD 10: Xét BTVT với nghiệm ban đầu xác định bằng
pp góc Tây Bắc sau
Điểm đích
Điểm nguồn Tổng cung
1 2 3
8 5 16
1 70 70
15 10 7
2 80 50 130
3 9 10
3 30 50 80

Tổng cầu 150 80 50 280

49

1. Bài toán vận tải (tt47)


Sau bước lặp 1 (xét ô (3,1)), bảng VT có dạng sau:
Điểm đích
Điểm nguồn Tổng cung
1 2 3
8 5 16
1 70 70
15 10 7
2 50 80 130
3 9 10
3 30 50 80

Tổng cầu 150 80 50 280

50

25
1. Bài toán vận tải (tt48)
Sau bước lặp 2 (xét ô (2,3)):
Điểm đích
Điểm nguồn Tổng cung
1 2 3
8 5 16
1 70 70
15 10 7
2 *** 80 50 130
3 9 10
3 80 *** 80

Tổng cầu 150 80 50 280


Ta có thể thấy: có đến 2 ô (2,1) và (3,3) trở thành ô rỗng => BT bị suy biến.
Do đó, giá trị 0 phải được gán vào 1 ô. Trong TH này, ô được chọn để gán giá trị
0 là ô (3,3) do có chi phí vận chuyển nhỏ nhất.
51

1. Bài toán vận tải (tt49)


1.5. Bài toán vận tải đa nghiệm
Cũng như BT QHTT, 1 BTVT sẽ có nhiều hơn 1
nghiệm tối ưu nếu trong bảng VT tối ưu sau cùng,
có tồn tại ít nhất 1 chỉ số cải tiến ứng với các ô rỗng
bằng 0. Tại ô rỗng có chỉ số cải tiến bằng 0, nếu ta
thực hiện điều chỉnh lượng hàng vận tải theo đường
đi tương ứng thì 1 kế hoạch vận tải mới sẽ được
thực hiện mà không làm thay đổi tổng chi phí.

52

26
1. Bài toán vận tải (tt50)
1.6. Một số trường hợp đặc biệt:

a) BTVT với hàm mục tiêu là cực đại

Có thể chuyển bài toán Max về bài toán Min.


- Các giá trị lợi nhuận vận chuyển đơn vị sẽ được biểu diễn
bằng những giá trị âm trên bảng VT ở dạng chi phí.

- Các pp giải được thực hiện theo trình tự như đã trình bày
trong các phần trên.

53

1. Bài toán vận tải (tt51)


b) BTVT với ràng buộc về đường đi
Trên thực tế, ta có thể gặp phải TH việc vận chuyển giữa 1 cặp
điểm nguồn – điểm đích nào đó là không thể (đường bị cấm,
đường không tồn tại, đường không an toàn…).
Để giải quyết TH như vậy, chi phí vận chuyển đơn vị giữa cặp
điểm nguồn – điểm đích đó sẽ được gán cho 1 giá trị dương cực
cao (TH lợi nhuận: giá trị âm cực thấp) và tiến hành giải như
không có tồn tại những ràng buộc về đường đi. Với cách thức
thực hiện như vậy, trong bảng VT tối ưu sau cùng, ô tương ứng
với cặp điểm nguồn – đích không khả dĩ sẽ không được gán giá
trị (tức là có giá trị bằng 0).
54

27
2. Bài toán phân công
(Assignment Problem)
 Bài toán phân công là TH đặc biệt của BTVT
1. Các công việc phải thực hiện tương ứng với các điểm đích
có nhu cầu bằng 1.
2. Các bộ phận thực hiện công việc (công nhân, máy…) tương
ứng với các điểm nguồn có khả năng cung cấp bằng 1.
3. Chi phí thực hiện công việc tương ứng với chi phí vận tải.
Tương tự BTVT, chỉ xét BT phân công ở dạng cân bằng. Các
BTPC không cân bằng (số công việc ít hơn số bộ phận thực
hiện, hay số công việc lớn hơn số bộ phận thực hiện) luôn
có thể được chuyển thành BTPC ở dạng cân bằng.
55

2. Bài toán phân công (tt1)


 Những nguyên tắc chuyển BTPC về dạng cân bằng

• Nếu số bộ phận thực hiện công việc lớn hơn số công việc:
tạo ra các công việc giả với thời gian (hoặc chi phí) thực
hiện công việc bằng 0 cho tất cả mọi bộ phận thực hiện
công việc.

• Nếu số bộ phận thực hiện công việc nhỏ hơn số công việc:
tạo ra các bộ phận thực hiện công việc giả với thời gian
(hoặc chi phí) thực hiện 1 công việc bất kỳ có 1 giá trị cực
lớn.

56

28
2. Bài toán phân công (tt2)
2.1. Dạng QHTT của Bài toán phân công
Bài toán phân công n công việc cho n công nhân.
Trong đó, cij: Chi phí để công nhân thứ i (i = 1, 2, …, n) thực hiện
công việc thứ j (j = 1, 2, …, n).
 Đặt các biến QĐ
1 neáu coâná vieäc ä ñ| ôuc pâaân câo coâná nâaân i
x ij  
0 neáu coâná vieäc ä åâoâná ñ| ôuc pâaân câo coâná nâaân i
 BTPC có dạng n n
Min c x
i 1 ä 1
iä iä

n
Rb : x
i 1
iä  1 ä (1 coâná vieäc câl ñ| ôuc pâaân câo 1 coâná nâaân)
n

x
ä 1
iä  1 i (1 coâná nâaân câl ñ| ôuc pâaân 1 coâná vieäc)

x iä  0 âoaqc 1 i, ä
57

2. Bài toán phân công (tt3)


2.2. Phương pháp Hungarian (The Hungarian Method)
 Bài toán phân công biểu diễn dạng bảng/ma trận chi phí
1. Các hàng biểu diễn các bộ phận thực hiện công việc (công nhân, máy).
2. Các cột biểu diễn các công việc cần phải được thực hiện.
3. Các ô biểu diễn chi phí tương ứng với việc phân công.

 Phương pháp Hungarian giải bài toán phân công ở dạng bảng được
đề nghị dựa trên tính chất của ma trận chi phí:
• Nếu trừ đi một hằng số cho tất cả các chi phí trên cùng 1 hàng (hoặc 1 cột)
của ma trận chi phí thì nghiệm tối ưu của bài toán phân công không thay
đổi (tính chất này cũng có trong bài toán vận tải).

58

29
2. Bài toán phân công (tt4)
 Phương pháp Hungarian được thực hiện qua các bước:
• Bước 0: Xác định ma trận rút giảm của BT
1. Trừ các chi phí trên mỗi hàng cho chi phí nhỏ nhất trên hàng đó.
2. Trừ các chi phí trên mỗi cột cho chi phí nhỏ nhất trên cột đó.
• Bước 1:
1. Vẽ các đường thẳng qua các hàng và cột của ma trận rút giảm sao cho các
đường thẳng này cắt ngang tất cả các giá trị 0 của ma trận và số đường
phải vẽ là ít nhất.
2. Nếu tổng số đường thẳng phải vẽ bằng n, nghiệm tối ưu có thể rút ra được
từ ma trận rút giảm hiện thời. Nếu không, thực hiện Bước 2.
• Bước 2:
1. Chọn phần tử nhỏ nhất không bị cắt ngang bởi các đường thẳng. Trừ phần
tử này cho tất cả các phần tử khác không bị các đường thẳng cắt ngang và
cộng phần tử này cho các phần tử nằm trên giao điểm của 2 đường thẳng.
2. Quay lại Bước 1.
 Lưu ý: Nghiệm tối ưu của BTPC lấy từ ma trận rút giảm sau cùng dựa trên 1 tập
gồm n giá trị 0 độc lập. Tập giá trị 0 độc lập là tập sao cho ta không thể vẽ được
bất kỳ 1 đường thẳng nào (ngang hoặc dọc) đi qua 2 giá trị 0 thuộc tập đó.
59

2. Bài toán phân công (tt5)


VD 11:
Xét bài toán phân công 5 công việc cho 5 công nhân với chi phí hoàn thành
(đơn vị: trăm ngàn đồng) được cho trong bảng bên dưới. Tìm kế hoạch phân
công tối ưu sao cho tổng chi phí hoàn thành là nhỏ nhất.
Công việc
Công nhân
1 2 3 4 5
1 2 3 5 1 4
2 -1 1 3 6 2
3 -2 4 3 5 0
4 1 3 4 1 4
5 7 1 2 1 2

60

30
2. Bài toán phân công (tt)
 Xác định ma trận rút giảm:
Công việc u i  Min c ij
Công nhân
1 2 3 4 5
1 2 3 5 1 4 1
2 -1 1 3 6 2 -1
3 -2 4 3 5 0 -2
4 1 3 4 1 4 1
5 7 1 2 1 2 1

61

2. Bài toán phân công (tt)

Công việc
Công nhân
1 2 3 4 5
1 1 2 4 0 3
2 0 2 4 7 3
3 0 6 5 7 2
4 0 2 3 0 3
5 6 0 1 0 1

u j  Min cij ui  0 0 1 0 1

62

31
2. Bài toán phân công (tt)
Công việc
Công nhân
1 2 3 4 5
1 1 2 3 0 2
2 0 2 3 7 2
3 0 6 4 7 1
4 0 2 2 0 2
5 6 0 0 0 0

Trong bảng trên, số đường thẳng tối thiểu phải vẽ là 3 < 5.


=> Tiến hành Bước 2: Phần tử nhỏ nhất không bị các đường thẳng cắt
ngang là 1.

63

2. Bài toán phân công (tt)


Ma trận rút giảm được biến đổi thành
Công việc
Công nhân
1 2 3 4 5
1 1 1 2 0 1
2 0 1 2 7 1
3 0 5 3 7 0
4 0 1 1 0 1
5 7 0 0 1 0
Quay lại Bước 1: Số đường thẳng tối thiểu phải vẽ là 4 < 5.
=> Tiến hành Bước 2: Phần tử nhỏ nhất không bị các đường thẳng cắt
ngang là 1.

64

32
2. Bài toán phân công (tt)
Ma trận rút giảm được biến đổi thành
Công việc
Công nhân
1 2 3 4 5
1 1 0 1 0 0
2 0 0 1 7 0
3 1 5 3 8 0
4 0 0 0 0 0
5 8 0 0 2 0
Số đường thẳng tối thiểu phải vẽ trong bảng hiện tại là 5. BT đã đạt tối ưu
với các nghiệm là:
1. x12 = x21 = x35 = x44 = x53 = 1; các giá trị xij khác = 0 hay
2. x14 = x22 = x35 = x41 = x53 = 1; các giá trị xij khác = 0 hay
3. x14 = x21 = x35 = x42 = x53 = 1; các giá trị xij khác = 0 hay
4. x14 = x21 = x35 = x43 = x52 = 1; các giá trị xij khác = 0 65

2. Bài toán phân công (tt)


 Theo tính chất của các biến trong mô hình BTPC, giải pháp phân
công đầu tiên biểu diễn ở trên (x12 = x21 = x35 = x44 = x53 = 1; các giá
trị xij khác = 0) có ý nghĩa như sau:

Công nhân Công việc


1 2
2 1
3 5
4 4
5 3
Các giải pháp phân công còn lại có ý nghĩa tương tự. Chi phí tối thiểu
cho các kế hoạch phân công tối ưu nêu trên là 5 (trăm ngàn đồng).
66

33
2. Bài toán phân công (tt)
 TH hàm mục tiêu là Max
Áp dụng cho Lợi nhuận, Hiệu suất, …
Để giải BT này, thực hiện 1 trong 2 cách:
1. Chuyển bài toán về dạng Min (chi phí): Đổi dấu các hệ số lợi
nhuận để chuyển ma trận phân công về ma trận ở dạng chi phí.
2. Xác định ma trận chi phí cơ hội, bằng cách thay 1 phần tử bất kỳ
của ma trận bằng hiệu số của phần tử lớn nhất trong ma trận với
phần tử đang xét.
Lưu ý: Cả 2 cách này sẽ cho cùng 1 ma trận rút giảm sau bước 0.

67

2. Bài toán phân công (tt)


VD 12:
Xét BT điều động 4 đội tàu vận chuyển chuyên chở hàng đến 4 vùng A, B, C, D
với lợi nhuận tương ứng (đv: triệu đồng) cho từng cặp tàu – điểm đến được
cho như trong bảng. Mục tiêu ban đầu của bài toán là cực đại lợi nhuận thu
được.
BT được chuyển về dạng cực tiểu chi phí cơ hội (pp 2) và tìm lời giải tối ưu:
Vùng
Đội tàu
A B C D
1 20 60 50 55
2 60 30 80 75
3 80 100 90 80
4 65 80 75 70

68

34
2. Bài toán phân công (tt)
Ma trận chi phí cơ hội Vùng
Đội tàu
A B C D
1 80 40 50 45 40
2 40 70 20 25 20
3 20 0 10 20 0
4 35 20 25 30 20
Vùng
Đội tàu
A B C D
1 40 0 10 5
2 20 50 0 5
3 20 0 10 20
4 15 0 5 10
15 0 0 5 69

2. Bài toán phân công (tt)


VD 12: (tt)
Ma trận chi phí rút giảm:
Vùng
Đội tàu
A B C D
1 25 0 10 0
2 5 50 0 0
3 5 0 10 15
4 0 0 5 5
Sau khi thực hiện vẽ các đường thẳng cắt qua những giá trị 0, BT đã đạt tối ưu.
Nghiệm tối ưu
x1D = x2C = x3B = x4A = 1; các xij khác = 0.
=> Lợi nhuận tối ưu: 300 (triệu đồng).
70

35
2. Bài toán phân công (tt)
2.3. BTPC có xét đến tính công bằng
 BTPC công việc với hàm mục tiêu là tối thiểu hóa tổng
thời gian.
 Nghiệm tối ưu là 1 giải pháp khó được chấp nhận, do
• Có những bộ phận phải làm việc trong 1 khoảng thời
gian rất dài để hoàn thành công việc.
• Một vài bộ phận khác lại có thời gian thực hiện công
việc rất ngắn.
 Khi gặp những tình huống như vậy, BTPC có xét đến tính
công bằng được đặt ra đối với người RQĐ.
71

2. Bài toán phân công (tt)


 Việc phân công có xét đến tính công bằng được thực hiện như:
• B1: Thực hiện phân công như bình thường và xác định bộ
phận có thời gian thực hiện công việc lớn nhất Tmax.
• B2: Loại bỏ tất cả các ô trong ma trận phân công có thời
gian lớn hơn hoặc bằng Tmax và quay lại thực hiện B1.
 Quy trình trên được thực hiện cho đến khi:
• Sự công bằng tương đối đã đạt được: khi không có chênh
lệch lớn về thời gian thực hiện công việc giữa các bộ phận.
• Không thể làm cho giải pháp công bằng hơn được nữa:
khi BTPC tại thời điểm đó vô nghiệm.
72

36
2. Bài toán phân công (tt)
VD 13:
Xét BTPC 4 công việc cho 4 công nhân với ma trận thời gian thực
hiện công việc (đơn vị: giờ) như sau

Công Công việc


nhân A B C D
1 21 24 26 23
2 29 27 30 29
3 24 25 34 27
4 28 26 28 25

73

2. Bài toán phân công (tt)


Ma trận rút giảm Công Công việc
nhân A B C D
1 0 3 2 2
2 2 0 0 2
3 0 1 7 3
4 3 1 0 0
=> Công Công việc
nhân A B C D
1 0 2 1 1
2 3 0 0 2
BT đạt tối ưu như 3 0 0 6 2
x1A = x2C = x3B = x4D. 4 4 1 0 0
74

37
2. Bài toán phân công (tt)
BT đạt tối ưu với cách phân công tối ưu như x1A = x2C = x3B = x4D = 1.
Tổng thời gian nhỏ nhất để hoàn thành các công việc là: 101 giờ.
Tại nghiệm tối ưu này, ta có: Tmax = 30. BTPC có xét đến tính công bằng
(Tij ≥ Tmax = 30 --> X) được thiết lập như sau:

Công Công việc


nhân A B C D
1 21 24 26 23
2 29 27 X 29
3 24 25 X 27
4 28 26 28 25

75

2. Bài toán phân công (tt)


Ma trận rút giảm Công Công việc
nhân A B C D
1 0 3 2 2
2 2 0 X 2
3 0 1 X 3
4 3 1 0 0
=> Công Công việc
nhân A B C D
1 0 3 0 0
BT đạt tối ưu theo 2 2 0 X 0
x1C = x2B = x3A = x4D
x1D = x2B = x3A = x4C
3 0 1 X 1
4 5 3 0 0
76

38
2. Bài toán phân công (tt)
Công Công việc
nhân A B C D
1 21 24 26 23
2 29 27 X 29
3 24 25 X 27
4 28 26 28 25
BT đạt tối ưu theo 2 cách phân công như x1C = x2B = x3A = x4D
x1D = x2B = x3A = x4C
Tổng thời gian nhỏ nhất để hoàn thành các công việc là: 102 giờ.
(TGPPC1 = 26+27+24+25 = 102 giờ, TGPPC2 = 23+27+24+28 = 102 giờ)
Lưu ý: Giải pháp phân công 1 (GPPC1) có ưu điểm so với giải pháp 2, do có
thời gian Tmax = 27 nhỏ hơn, nên được lựa chọn làm giải pháp phân công sau
cùng tại bước này.
77

2. Bài toán phân công (tt)


 Tại nghiệm tối ưu này, có thể thấy rằng không thể làm cho
lời giải công bằng hơn được nữa, vì nếu loại bỏ tất cả các ô
có giá trị thời gian ≥ 27 trong ma trận ban đầu, thì Người
công nhân thứ 2 (tương ứng với Hàng 2) sẽ không thể nhận 1
công việc nào cả. BTPC lúc đó không tìm được nghiệm.

 Nhận xét: Tính công bằng trong phân công sẽ được cải
thiện kèm theo sự hy sinh Giá trị tối ưu của hàm mục tiêu.

78

39
3. Bài toán dòng chảy tối đa
(Maximum Flow Problem)
3.1. BT với các cung có định hướng
a) Dạng QHTT của bài toán
 Xét 1 mạng gồm m nút (i = 1, 2, …, m) với n cung (i, j) định hướng có Dung
lượng vận chuyển tối đa cij. Trong đó, f: Lượng hàng hóa vận chuyển từ Nút 1
(nguồn: Source Node) đến Nút m (đích: Sink Node).
 Lưu lượng vận chuyển tối đa giữa Nút 1 và Nút m có thể tìm được, thông
qua giải BT QHTT sau Max f

m m
à neáu i1

Rb  x - x
iä åi  0 neáu i  2, ..., m - 1
ä 1 å 1 - à neáu im

x iä  c iä  cuná (i, ä)
x iä  0  cuná (i, ä)
Troná ñoù :
m

x
å 1
åi : Toåná l| u l| ôuná vaø
o nuùt i.
m

x
ä 1
iä : Toåná l| u l| ôuná ra åâoûi nuùt i. 79

3. Bài toán dòng chảy tối đa (tt1)


cij =?
VD 14:
4, x24
2 4 5, x46
9, x12
4, x25
2, x32 6
1 2, x36
8, x13 6, x56
3 5
5, x35

Xét BT cực đại dòng lưu chuyển giữa Nút 1 và Nút 6 trong mạng
định hướng cho trong hình trên (các con số -> Dung lượng vận
chuyển tối đa của cung tương ứng, cij).

80

40
3. Bài toán dòng chảy tối đa (tt2)
VD 14: (tt)
Dạng QHTT của BT này

Max f c32
Rb x 12  x 13  f x 12  9; x 13  8; x 32  2
x 24  x 25  x12  x 32  0 x 24  4; x 25  4; x 35  5
x 32  x 35  x 36  x13  0 x 36  2; x 46  5; x 56  6
x 46  x 24  0
x 56  x 25  x 35  0
 x 36  x 46  x 56   f
x 12 , x 13 , x 32 , x 24 , x 25 , x 35 , x 36 , x 46 , x 56  0

81

3. Bài toán dòng chảy tối đa (tt3)


b) Giải thuật gán nhãn Ford-Fulkerson (Ford-Fulkerson’s Labeling
Algorithm): 4 bước
 1 nút chưa gán nhãn j sẽ được gán nhãn căn cứ trên 1 nút đã được gán
nhãn i có cung nối trực tiếp đến j. Nhãn của j có thể có dạng [i±, vj],
trong đó:
1. vj: Độ thay đổi lưu lượng giữa i và j.
2. i+: Sự tăng lưu lượng từ i đến j.
3. i–: Sự giảm lưu lượng từ i đến j.
Bước 1:
1. Tìm 1 nghiệm khả dĩ cho mạng (VD chọn nghiệm mà ở đó xij = 0,
 cung (i, j)).
2. Gán cho Nút 1 nhãn [–, ∞]: nghĩa là Nút nguồn và có khả năng cung
cấp vô hạn.
82

41
3. Bài toán dòng chảy tối đa (tt4)
Bước 2: Gán nhãn lần lượt (có chọn lọc) cho các nút chưa gán nhãn.
1. Chọn 1 nút đã gán nhãn i nào đó – Ban đầu chỉ có Nút 1 có nhãn.
2. Xét 1 nút chưa gán nhãn j có cung nối trực tiếp với i:
a. Nếu xij < cij: Gán nhãn [i+, vj] cho Nút j, trong đó vj = min{vi, cij – xij}.
Nhãn được gán mang ý nghĩa giới hạn sự gia tăng lưu lượng từ i đến j –
Lưu lượng gia tăng sẽ có giá trị bằng với giá trị nhỏ hơn trong 2 giá trị:
Lưu lượng đã được chuyển đến i và dung lượng tải còn lại của cung (i, j).
b. Nếu xij > 0: Gán nhãn [i–, vj] cho Nút j, trong đó vj = min{vi, xji}. Nhãn
được gán mang ý nghĩa cho phép điều chỉnh giảm lại 1 phần dòng chảy
đã vào i và đưa phần này trở lại j.
Bước này được lặp lại cho đến khi:
 Nút sau cùng m được gán nhãn. Khi đó, ta tìm được 1 đường dẫn giữa
Nút nguồn và Nút đích. Tiến hành thực hiện Bước 3.
 Không tìm được 1 đường dẫn để gán nhãn cho Nút sau cùng m. Thực
hiện Bước 4.
83

3. Bài toán dòng chảy tối đa (tt5)


Bước 3:
Đường dẫn tìm được trong Bước 2 là đường tăng dòng. Việc gán nhãn
dọc theo đường này đã gán [i+, vm] cho Nút m. Tiến hành điều chỉnh
nghiệm khả dĩ ban đầu ứng với các cung trên đường dẫn và tìm ra 1
nghiệm khả dĩ mới như sau
x’ij = xij + vm nếu cung (i, j) thuộc về đường dẫn và j được gán nhãn [i+,
vj].
x’ji = xji – vm nếu cung (j, i) thuộc về đường dẫn và j được gán nhãn [i–,
vj].
Xóa bỏ các nhãn và tiến hành thực hiện lại Bước 2 với nghiệm khả dĩ
mới.
Bước 4:
Nghiệm tối ưu đã đạt được và dòng chảy tối đa bằng tổng các giá trị vm
trong Bước 3 (nếu nghiệm khả dĩ được chọn ban đầu là xij = 0, cung
(i, j)).
84

42
3. Bài toán dòng chảy tối đa (tt)
Lưu ý:
1. Mục tiêu của Bước 2 là tìm ra 1 đường dẫn giữa Nút nguồn và Nút
đích, do đó không nhất thiết phải gán nhãn cho mọi nút mà vấn đề là
tìm ra 1 đường dẫn sao cho lương tăng dòng trên đường dẫn đó là lớn
nhất. Nhìn chung, không có quy tắc giúp xác định 1 đường dẫn như
vậy. Tuy nhiên, có 1 quy luật thực nghiệm là bắt đầu tứ 1 nút đã được
gán nhãn, ta sẽ ưu tiên gán nhãn cho nút có cung nối trực tiếp với nút
đó, sao cho lượng thay đổi dòng là lớn nhất (tức là nhãn được gán cò
giá trị v lớn nhất).
2. Trong cùng 1 bước lặp (Bước 2), 1 nút chỉ có thể có 1 nhãn. Do đó,
nếu 1 nút đã gán nhãn cần được gán lại thì giá trị nhãn cũ (và các
nhãn liên quan) không còn hiệu lực nữa.
85

3. Bài toán dòng chảy tối đa (tt)


Lưu ý: (tt)
3. Có nhiều cách để xác định Dòng chảy tối đa tại nghiệm tối ưu.
a. Tổng đại số dòng chảy tại Nút nguồn.
b. Tổng đại số dòng chảy tại Nút đích.
c. Khi không xác định được đường dẫn tăng dòng nữa, tập các nút
mạng sẽ chia làm 2 tập con: Tập X có chứa nút nguồn và Tập X
có chứa nút đích. Tổng dung lượng vận chuyển giữa 2 tập này,
ký hiệu c( X , X ) chính là Tổng dòng chảy tối đa.
4. Các cung nối tập X và X tạo thành 1 tập cắt. Tổng dung lượng vận
chuyển của tập cắt chính là c( X , X ) . Tập cắt là tập các cung mà
nếu dung lượng vận chuyển của các cung trong tập đó bằng 0, thì sẽ
không có dòng chảy từ Nút nguồn đến Nút đích.
86

43
3. Bài toán dòng chảy tối đa (tt)
 VD 15: Xét BT trong VD 14.

4
2 4
9
5
4
1 2
2 6
8 6
3 5
5

87

VD 15: (tt)
Bước lặp 1: Nghiệm khả dĩ chọn bằng 0 cho mọi cung.
Nút 1: [–, ∞] – Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 2: [1+, 9] – Nút 2 có thể nhận được lưu lượng tối đa là 9 từ Nút 1.
Nút 4: [2+, 4] – Nút 4 có thể nhận được lưu lượng tối đa là 4 từ Nút 2.
Nút 6: [4+, 4] – Nút 6 có thể nhận lưu lượng tối đa là 4 từ Nút 4.

Đường dẫn: 1-2-4-6.


Nghiệm khả dĩ: x12 = x24 = x46 = 4, các biến khác = 0.
4
2 4 4,4
2 4
9
5 9,4
4 5,4
1 2 4
2 6 1 2
2 6
8 6 8 6
3 5
5 3 5
5

44
VD 15: (tt2)
Bước lặp 2:
Nút 1: [–, ∞] – Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 3: [1+, 8] – Nút 3 có thể nhận được lưu lượng tối đa là 8 từ Nút 1.
Nút 5: [3+, 5] – Nút 5 có thể nhận được lưu lượng tối đa là 5 từ Nút 3.
Nút 6: [5+, 5] – Nút 6 có thể nhận lưu lượng tối đa là 5 từ Nút 5.

Đường dẫn: 1-3-5-6.


Nghiệm khả dĩ: x12 = x24 = x46 = 4, x13 = x35 = x56 = 5, các biến khác = 0.

4,4 4,4
2 4 2 4
9,4 9,4
5,4 5,4
4 4
1 2 1 2
2 6 6
2
8 6 8,5 6,5
3 5 3 5
5 5,5

VD 15: (tt3)
Bước lặp 3:
Nút 1: [–, ∞] – Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 2: [1+, 5] – Nút 2 có thể nhận được lưu lượng tối đa là 5 từ Nút 1.
Nút 5: [2+, 4] – Nút 5 có thể nhận được lưu lượng tối đa là 4 từ Nút 2.
Nút 6: [5+, 1] – Nút 6 có thể nhận lưu lượng tối đa là 1 từ Nút 5.

Đường dẫn: 1-2-5-6.


Nghiệm khả dĩ: x12 = 5, x24 = x46 = 4, x13 = x35 = 5, x56 = 6, x25 = 1,
các biến khác = 0.
4,4 4,4
2 4 2 4
9,4 9,4+1
5,4 5,4
4 4,1
1 2 1 2
2 6 6
2
8,5 6,5 8,5 6,5+1
3 5 3 5
5,5 5,5

45
VD 15: (tt4)
Bước lặp 4:
Nút 1: [–, ∞] – Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 3: [1+, 3] – Nút 3 có thể nhận được lưu lượng tối đa là 3 từ Nút 1.
Nút 6: [3+, 2] – Nút 6 có thể nhận lưu lượng tối đa là 2 từ Nút 3.

Đường dẫn: 1-3-6.


Nghiệm khả dĩ: x12 = 5, x24 = x46 = 4, x13 = 7, x35 = 5, x56 = 6, x36 = 2,
x25 = 1 và x32 = 0.

4,4 4,4
2 4 2 4
9,4+1 9,4+1
5,4 5,4
4,1 4,1
1 2 1 2
2 6 2,2 6

8,5 6,5+1 8,5+2 6,5+1


3 5 3 5
5,5 5,5

4,4
2 4
VD 15: (tt5) 9,4+1
5,4
4,1
1 2
2,2 6
Bước lặp 5: 8,5+2 6,5+1
Nút 1: [–, ∞] – Nút 1 cấp lưu lượng vô hạn. 3 5
5,5
Nút 2: [1+, 4] – Nút 2 nhận được lưu lượng tối đa là 4 từ Nút 1.
Nút 5: [2+, 3] – Nút 5 nhận được lưu lượng tối đa là 3 từ Nút 2.
Nút 3: [1+, 1] – Nút 3 nhận lưu lượng tối đa là 1 từ Nút 1.
Tại bước lặp này có thể thấy rằng không thể tìm được đường dẫn đến Nút
6, do vậy nghiệm hiện thời là tối ưu. Các tập cắt là: X = {1, 2, 3, 5},
X  {4,6}
Dòng chảy tối đa có thể xác định được từ 1 trong các cách sau:
 vm  4  5  1  2  12 hay x12 + x13 = 5 + 7 = 12 hay
x46 + x36 + x56 = 4 + 2 + 6 = 12 hay c( X , X )  c24  c36  c56  4  2  6  12
Lưu ý: Nếu nghiệm khả dĩ ban đầu có thể chọn khác 0 thì BT hội tụ
nhanh hơn. Tuy nhiên, khi đó dòng chảy tối đa không thể xác định bằng
tổng của các nhãn gán cho nút sau cùng trong từng bước lặp.

46
3. Bài toán dòng chảy tối đa (tt)
 VD 16: Xét BT sau.

5
2 4
7
9
1
1 9
6 6
10 5
3 5
3

93

VD 16: (tt)
Bước lặp 1: Nghiệm khả dĩ chọn bằng 0 cho mọi cung.
Nút 1: [–, ∞] - Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 3: [1+, 10] - Nút 3 có thể nhận được lưu lượng tối đa là 10 từ Nút 1.
Nút 2: [3+, 9] - Nút 2 có thể nhận được lưu lượng tối đa là 9 từ Nút 3.
Nút 4: [2+, 5] - Nút 4 có thể nhận được lưu lượng tối đa là 5 từ Nút 2.
Nút 6: [4+, 5] - Nút 6 có thể nhận được lưu lượng tối đa là 5 từ Nút 4.

Đường dẫn: 1-3-2-4-6.


Nghiệm khả dĩ: x13 = x32 = x24 = x46 = 5, các biến khác = 0.
5
2 4 5,5
2 4
7
9 7
1 9,5
1 9 1
6 6 1 9,5
6 6
10 5 10,5 5
3 5
3 3 5
3

47
VD 16: (tt2)
Bước lặp 2:
Nút 1: [–, ∞] - Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 2: [1+, 7] - Nút 2 có thể nhận được lưu lượng tối đa là 7 từ Nút 1.
Nút 5: [2+, 1] - Nút 5 có thể nhận được lưu lượng tối đa là 1 từ Nút 2.
Nút 6: [5+, 1] - Nút 6 có thể nhận được lưu lượng tối đa là 1 từ Nút 5.

Đường dẫn: 1-2-5-6.


Nghiệm khả dĩ: x13 = x32 = x24 = x46 = 5, x12 = x25 = x56 = 1,
các biến khác = 0.
5,5 5,5
2 4 2 4
7 7,1
9,5 9,5
1 1,1
1 9,5 1 9,5
6 6 6
6
10,5 5 10,5 5,1
3 5 3 5
3 3

VD 16: (tt3)
Bước lặp 3:
Nút 1: [–, ∞] - Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 3: [1+, 5] - Nút 3 có thể nhận được lưu lượng tối đa là 5 từ Nút 1.
Nút 6: [3+, 5] - Nút 6 có thể nhận được lưu lượng tối đa là 5 từ Nút 3.

Đường dẫn: 1-3-6.


Nghiệm khả dĩ: x13 = 10, x32 = x24 = x46 = 5, x12 = x25 = x56 = 1, x36 = 5,
các biến khác = 0.
5,5
2 4 5,5
2 4
7,1
9,5 7,1
1,1 9,5
1 9,5 1,1
6 6 1 9,5
6,5 6
10,5 5,1 10,5+5 5,1
3 5
3 3 5
3

48
VD 16: (tt4)
Bước lặp 4:
Nút 1: [–, ∞] - Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 2: [1+, 6] - Nút 2 có thể nhận được lưu lượng tối đa là 6 từ Nút 1.
Nút 3: [2–, 5] - Nút 3 có thể rút bớt lưu lượng tối đa là 5 từ Nút 2 (*).
Nút 5: [3+, 3] - Nút 5 có thể nhận được lưu lượng tối đa là 3 từ Nút 3.
Nút 6: [5+, 3] - Nút 6 có thể nhận được lưu lượng tối đa là 3 từ Nút 5.

Đường dẫn: 1-2-3-5-6.


Nghiệm khả dĩ: x13 = 10, x32 = 2, x24 = x46 = 5, x12 = 4, x25 = 1, x56 = 4,
x36 = 5 và x35 = 3.
5,5 5,5
2 4 2 4
7,1 7,1+3
9,5 9,5
1,1 1,1
1 9,5 1 9,5–3
6,5 6 6
6,5
10,5+5 5,1 10,5+5 5,1+3
3 5 3 5
3 3,3

VD 16: (tt5)
Bước lặp 5:
Nút 1: [–, ∞] - Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 2: [1+, 3] - Nút 2 có thể nhận được lưu lượng tối đa là 3 từ Nút 1.
Nút 3: [2–, 2] - Nút 3 có thể rút bớt lưu lượng tối đa là 2 từ Nút 2 (*).
Nút 6: [3+, 1] - Nút 6 có thể nhận được lưu lượng tối đa là 1 từ Nút 3.

Đường dẫn: 1-2-3-6.


Nghiệm khả dĩ: x13 = 10, x32 = 1, x24 = x46 = 5, x12 = 5, x25 = 1, x56 = 4,
x36 = 6 và x35 = 3.
5,5 5,5
2 4 2 4
7,1+3 7,1+3+1
9,5 9,5
1,1 1,1
1 9,5–3 1
6,5 6 6,5+1 6
9,5–3–1
10,5+5 5,1+3 10,5+5 5,1+3
3 5 3 5
3,3 3,3

49
5,5
2 4
VD 16: (tt6) 7,1+3+1
9,5
1,1
1
6,5+1 6
9,5–3–1
10,5+5 5,1+3
3 5
Bước lặp 6: 3,3
Nút 1: [–, ∞] - Nút 1 có khả năng cấp lưu lượng vô hạn.
Nút 2: [1+, 2] - Nút 2 có thể nhận được lưu lượng tối đa là 2 từ Nút 1.
Nút 3: [2–, 1] - Nút 3 có thể rút bớt lưu lượng tối đa là 1 từ Nút 2 (*).

Tại bước lặp này không thể tìm được đường dẫn đến Nút 6. Do vậy,
nghiệm hiện thời là tối ưu. Các tập cắt là: X  {1, 2, 3}, X  {4, 5, 6}

Dòng chảy tối đa là:

v m  5153115 hay x46  x36  x56  5 6  4 15 hay


x12  x13  51015 hay c(X,X)  c24  c25  c35 c36  513 6 15

3. Bài toán dòng chảy tối đa (tt)


c) TH có nhiều nút nguồn và nút đích

 Trong thực tế, chúng ta có thể gặp phải BT cực đại dòng chảy
qua mạng với nhiều nút nguồn có khả năng cung cấp giới hạn
và nhiều nút đích có khả năng tiếp nhận giới hạn (BT này có
thể được xem như là BTVT, với hàm mục tiêu là cực đại lượng
hàng vận chuyển, trong đó có xét đến giới hạn vận chuyển trên
từng cung đường. Lưu ý: BTVT nguyên thủy không xét đến
giới hạn này). Trong TH đó, 1 nút nguồn giả và 1 nút đích giả
sẽ được sử dụng.
100

50
3. Bài toán dòng chảy tối đa (tt)
c) TH có nhiều Nút nguồn và Nút đích (tt)
Trong TH đó, 1 Nút nguồn giả và 1 Nút đích giả sẽ được sử dụng.
1. Nút nguồn giả sẽ được nối với Nút nguồn thực, bằng 1 cung có
dung lượng vận chuyển bằng khả năng cung cấp của nút nguồn
thực đang xét. Khả năng cung cấp của nút nguồn giả là vô hạn.
2. Mỗi Nút đích thực sẽ được nối với Nút đích giả, bằng 1 cung có
dung lượng vận chuyển bằng khả năng tiếp nhận của nút đích thực
đang xét. Khả năng tiếp nhận của nút đích giả là vô hạn.
BT sau khi biến đổi thành BT chuẩn với 1 nút nguồn và 1 nút đích.
Có thể áp dụng Giải thuật Ford – Fulkerson, để tìm lời giải
tối ưu.

101

3. Bài toán dòng chảy tối đa (tt)


3.2. BT với các cung không định hướng

 Trong thực tế nhiều lúc chúng ta phải giải quyết BTDCTĐ trong
mạng mà ở đó có các cung không định hướng, tức là tại cung đó
hàng hóa có thể lưu thông 2 chiều. VD về loại BT này là mạng giao
thông trong đó có những đường lưu thông 2 chiều (cung không định
hướng) và những đường lưu thông 1 chiều (cung định hướng).

 Trong những TH như vậy, Giải thuật Ford-Fulkerson vẫn được áp


dụng để tìm lời giải tối ưu. Tuy nhiên, việc gán nhãn cho 1 nút trong
mạng có thể sẽ diễn ra theo 2 chiều và có đến 2 biến QĐ xij, xji cho 1
cung không định hướng (i, j).
102

51
3. Bài toán dòng chảy tối đa (tt)
 VD 17:
4 4
10 20 10 20
1 10 10
5 5 1 5
30 30 30,20 30 5
20 20 20 20,20
2 3 2 3
40 40
Bước lặp 1:
Nút 1: [–, ∞] Nút 3: [1+, 30] Nút 5: [3+, 20]

Đường dẫn: 1-3-5.


Nghiệm khả dĩ: x13 = x35 = 20, các biến khác = 0.

103

4
VD 17: (tt) 10 20 4
10,10 20,10+10
1 10
5 5 1 10,10
30,20 30 5 5
30,20 30
20 20,20 20,10 20,20
2 3
40 2 3
40,10
Bước lặp 2:
Nút 1: [–, ∞] Nút 2: [1+, 20] Nút 3: [2+, 20]
Nút 4: [3+, 10] Nút 5: [4+, 10]

Đường dẫn: 1-2-3-4-5.


Nghiệm khả dĩ: x12 = x23 = x34 = x45 = 10, x13 = x35 = 20, các biến khác = 0.

Bước lặp 3:
Nút 1: [–, ∞] Nút 4: [1+, 10] Nút 5: [4+, 10]

Đường dẫn: 1-4-5.


Nghiệm khả dĩ: x14 = 10, x12 = x23 = x34 = 10, x45 = 20, x13 = x35 = 20,
các biến khác = 0.

52
VD 17: (tt2) 4
10,10 20,10+10 4
10,10 20,10+10
1 10,10
5 5 1 5 10,10
30,20 30 5
30,20+10
20,10 20,20
2 3 20,10+10 20,20
40,10 2 3
Bước lặp 4:
40,10–10
Nút 1: [–, ∞] Nút 2: [1+, 10] Nút 5: [2+, 10]

Đường dẫn: 1-2-5.


Nghiệm khả dĩ: x14 = 10, x12 = 20, x23 = x34 = 10, x45 = 20, x13 = x35 = 20,
x25 = 10 và x43 = 0.
Bước lặp 5:
Nút 1: [–, ∞] Nút 3: [1+, 10] Nút 2: [3–, 10]
Nút 5: [2+, 10]

Đường dẫn: 1-3-2-5.


Nghiệm khả dĩ: x14 = 10, x12 = 20, x23 = 0, x34 = 10, x45 = 20, x13 = 30,
x35 = 20, x25 = 20 và x43 = 0.

3. Bài toán dòng chảy tối đa (tt)


VD 17: (tt3)
4
10,10 20,10+10 4
10,10 20,20
1 5 10,10
5 1 10,10
30,20+10 5 5
30,30 30,20
20,10+10 20,20 20,20
2 3 20,20
2 3
40,10–10 40
Bước lặp 6:
Nút 1: [–, ∞]

Không tìm được đường dẫn. X  {1}, X  {2,3,4,5}


Nghiệm hiện thời là tối ưu. Dòng chảy tối đa là:
c(X, X )  c 12  c 13  c 14  20  30  10  60
106

53
4. Bài toán đường đi ngắn nhất
(Shortest Path Problem)
4.1. Dạng QHTT của bài toán
 Xét 1 mạng gồm m nút (i = 1, 2, …, m) với n cung (i, j) định hướng, có “chi
phí” vận chuyển cij. Đường đi với chi phí nhỏ nhất giữa nút 1 và nút m có
thể tìm được, thông qua giải BT QHTT
m n
Min c
i 1 j 1
ij x ij

1 neáu i1

Rb x iä   x åi  0 neáu i  2,..., m  1
ä å  1 neáu im

x iä  0 âoaqc 1  cuná (i, ä)
 Trong đó, xij = 0: cung (i, j) sẽ không nằm trên đường đi được chọn.
xij = 1: cung (i, j) sẽ nằm trên đường đi được chọn.
 Giải BT ĐĐNN, bằng Quy hoạch động (C7) hoặc Giải thuật gán nhãn.
107

4. Bài toán đường đi ngắn nhất (tt)


4.2. Giải thuật gán nhãn tổng quát
BT ĐĐNN có thể được giải bằng giải thuật gán nhãn sau:
 B1: Gán các nhãn L(i) = [-, vi] cho các nút, trong đó v1 = 0, v2 =
v3 = … = vm = ∞.
 B2:
1. Nếu với mọi cung (i, j), ta có vj ≤ vi +cij, thì bài toán đã đạt
đến tối ưu.
2. Nếu tồn tại 1 cung (p, q) sao cho vq > vp + cpq, thì gán lại
nhãn cho nút q như sau: L(q) = [p, vq = vp + cpq], sau đó
quay lại bước kiểm tra 2.1.

108

54
VD 18: Xét BT đường đi có “chi phí” nhỏ nhất từ nút 1 đến nút 4.
2
2 4

1 –4 4

–1 –6
3

Bước lặp 1: v1 = 0, v2 = v3 = v4 = ∞ => L(1) = [–, 0]


Bước lặp 2: ∞ = v3 > v1 + c13 = –1 => v3 = –1, L(3) = [1, –1]
Bước lặp 3: ∞ = v2 > v1 + c12 = 2 => v2 = 2, L(2) = [1, 2]
Bước lặp 4: –1 = v3 > v2 + c23 = –2 => v3 = –2, L(3) = [2, –2]
Bước lặp 5: ∞ = v4 > v2 + c24 = 6 => v4 = 6, L(4) = [2, 6]
Bước lặp 6: 6 = v4 > v3 + c34 = –8 => v4 = –8, L(4) = [3, –8]

BT đã đạt tối ưu, vì vj ≤ vi + cij với mọi cung (i, j). Đường đi tối ưu
là 1-2-3-4 với chi phí nhỏ nhất bằng v4 = –8.

4. Bài toán đường đi ngắn nhất (tt)


Trong quá trình thực hiện gán nhãn nêu trên, cần lưu ý:

1. Số bước lặp tối đa cần thực hiện, để tìm nghiệm tối ưu bằng
với số cung có trong mạng.

2. Các giá trị nhãn sau cùng của từng nút mạng cũng chính là “chi
phí” của đường đi tối ưu nhất, tính từ nút khởi đầu của mạng
đến nút đang xét. Như vậy, thông qua Giải thuật gán nhãn tổng
quát nêu trên, có thể xác định đường đi với “chi phí” nhỏ nhất
từ điểm khởi đầu của mạng đến bất kỳ 1 nút nào trên mạng.

110

55
4. Bài toán đường đi ngắn nhất (tt)
4.3. Giải thuật gán nhãn trong TH có chi phí không âm

Troná TH " câi pâí" treân caùc cuná mauná åâoâná aâm, 1 áiaûi tâuaät áaùn nâa{n
åâaùc coùtâeåñ| ôuc í| û duuná nâ| íau :
ÑaqtN  {1,2,3,... , m} laøtaäp caùc nuùt mauná.
Böôùc 1 : Gaùn nâa{n v1  0 vaøtaäp X  {1}.
Böôùc 2 : Ñaqt X  N - X, (X, X)  {cuná (i, ä) | i  X, ä  X}.
Câoun cuná (p, q)  (X, X) íao câo : v p  c pq  min {v i  ciä}.
( i , j )( X , X )

Gaùn v q  v p  c pq vaøñieàu câlnâ taäp X  X  {q}.


Tâ| uc âieän b| ôùc naø
y (m -1) laàn vaøná| ná : Náâieäm toái| u ña{ñautñ| ôuc.

111

4. Bài toán đường đi ngắn nhất (tt)


VD 19: Xét bài toán đường đi có “chi phí” ngắn nhất từ nút 1 đến nút 5.

1 2
2
2 4
3 3 5

1 3
0
4 5

Bước lặp 1:
v1  0, X  {1},X  {2,3,4,5}
 (X, X)  {(1,2),(1,3),(1,4)}: v1  c12  2, v1  c13  2, v1  c14  3
Câoun(p, q)  (1,2).
112

56
VD 19: (tt) 1 2
2
2 4
3 3 5

1 3
0
4 5
Bước lặp 2:
v 2  2, X  {1,2}, X  {3,4,5}
 (X, X)  {(1,3), (1,4), (2,5)} : v1  c13  2, v1  c14  3, v 2  c25  7
Câoun (p, q)  (1,3).

Bước lặp 3:
v3  2, X  {1,2,3}, X  {4,5}
 (X, X)  {(1,4), (2,5), (3,5)} : v1  c14  3, v 2  c25  7, v3  c35  7
Câoun (p, q)  (1,4).

VD 19: (tt2) 1 2
2
2 4
3 3 5

1 3
0
4 5
Bước lặp 4:
v 4  3, X  {1,2,3,4}, X  {5}
 (X, X)  {(2,5), (3,5), (4,5)} : v 2  c25  7, v3  c35  7, v 4  c45  3
Câoun (p, q)  (4,5).

Bước lặp 5:
v5  3, X  {1,2,3,4,5}, X  {}
Đường đi có chi phí ngắn nhất là 1-4-5. Giá trị tối ưu của chi phí
(nhỏ nhất) bằng v5 = 3.

57
4. Bài toán đường đi ngắn nhất (tt)
Tương tự như trong Giải thuật gán nhãn tổng quát, các giá trị nhãn
gán cho từng nút mạng tại mỗi bước lặp của Giải thuật gán
nhãn ở đây cũng chính là “chi phí” của đường đi tối ưu nhất
tính từ nút khởi đầu của mạng đến nút đang xét.

Lưu ý:

 Trong TH cần phải tìm nghiệm cho BT đường đi dài nhất (TH
“lợi nhuận”), ta có thể chuyển BT về dạng đường đi ngắn nhất
bằng cách đổi dấu tất cả các giá trị “lợi nhuận” trên các cung
và áp dụng các Giải thuật gán nhãn như đã trình bày ở trên.

115

58

You might also like