Professional Documents
Culture Documents
Chapter6 Bài Toán QHTT Đặc Biệt
Chapter6 Bài Toán QHTT Đặc Biệt
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
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
j1
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
n
Rb : x
j1
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
j1
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
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
j1
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.
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
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
Đ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
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
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
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
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*
Đ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
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
Đ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
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
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.2. Phương pháp phân phối cải tiến – MODI (The Modified
Distribution Method)
27
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
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
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
Đ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
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
35
Đ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
+ -
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
+ -
37
Đ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ấ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
Đ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
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
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
43
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
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).
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
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
49
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
52
26
1. Bài toán vận tải (tt50)
1.6. Một số trường hợp đặc biệt:
- 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
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
• 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
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
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
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
63
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
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
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
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
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
73
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:
75
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
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 i1
Rb x - x
iä åi 0 neáu i 2, ..., m - 1
ä 1 å 1 - à neáu im
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
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
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
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
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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}
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
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).
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]
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]
Bước lặp 3:
Nút 1: [–, ∞] Nút 4: [1+, 10] Nút 5: [4+, 10]
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]
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 i1
Rb x iä x åi 0 neáu i 2,..., m 1
ä å 1 neáu im
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
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
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.
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 )
111
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