Chương 1. Bài toán vận tải
1.3. Thuật toán phân phối giải bài toán vận tải
1.3.1. Định nghĩa
Xét bài toán vận tải:
F(x) =
m
X
i=1 n
X
j=1
cijxij → min (1.12)
Với hệ ràng buộc:
n
X
j=1
xij = ai, i = 1,2, ..., m; (1.13)
m
X
i=1
xij = bj, j = 1,2, ..., n; (1.14)
xij ≥ 0 (1.15)
Ma trận X = (xij) (i = 1,2, ..., m, j = 1,2, ..., n) được gọi là một phương án của bài toán vận tải nếu các giá trị của nó thoả mãn đồng thời các điều kiện ràng buộc (1.13), (1.14), (1.15). Một phương án được gọi là phương án tối ưu (hay là nghiệm) và ký hiệu là Xopt nếu nó làm hàm mục tiêu (1.12) đạt cực tiểu.
Ô (i, j) ứng với xij > 0 được gọi là ô chọn của phương án X.
Một phương án mà các ô chọn không lập thành một chu trình gọi là một phương án cơ sở (hay phương án cực biên).
Ký hiệu H là tập hợp các ô chọn của phương án cơ sở X, khi đó số ô chọn không vượt quá m + n− 1. Trong trường hợp số ô đúng bằng m+n−1 thì phương án cơ sở gọi là không suy biến, nếu số ô nhỏ thua m+n−1 thì phương án cơ sở gọi là suy biến.
Nếu phương án cơ sở là suy biến thì ta có thể bổ sung vào tập H thêm một số ô suy biến với giá trị xij = 0 sao cho tập H có đúng m+n−1 ô và không chứa chu trình. Ô chọn loại này gọi là ô chọn 0.
Do vậy ta luôn có thể giả thiết phương án cơ sở X ứng với tập H luôn có đúng m+ n−1 ô chọn và không chứa chu trình.
1.3.2. Cơ sở lý luận của thuật toán
Định lý 1.2. Gọi C = (cij) là ma trận cước phí của bài toán vận tải (i = 1,2, ..., m;j = 1,2, ..., n). Nếu ta cộng vào mỗi phần tử của hàng i một số ri và cộng vào mỗi phần tử của cột j một số sj tùy ý, ta sẽ được một bài toán vận tải mới, tương đương với bài toán vận tải ban đầu có cùng phương án tối ưu
Chứng minh. Nếu thay C = (cij) bởi ma trận C0 = (cij+ri+sj) ta được bài toán vận tải mới chỉ khác bài toán ở hàm mục tiêu, còn tất cả các ràng buộc đều giống nhau. Ta có:
F0 =
m
X
i=1 n
X
j=1
c0ijxij =
m
X
i=1 n
X
j=1
(cij +ri+sj)xij
=
m
X
i=1 n
X
j=1
cijxij +
m
X
i=1 n
X
j=1
rixij +
m
X
i=1 n
X
j=1
sjxij
= F +
m
X
i=1 n
X
j=1
xij
! ri +
n
X
j=1 m
X
i=1
xij
! sj
= F +
m
X
i=1
riai+
n
X
j=1
sjbj
= F +A
Suy ra hàm mục tiêu của hai bài toán chỉ khác nhau đúng một hằng số. Do đó nếu X là nghiệm của bài toán ban đầu thì X cũng là nghiệm của bài toán mới và ngược lại.
Trên cơ sở của Định lý 1.2 ta có thể tìm phương án tối ưu bằng cách quy 0 ô chọn, tức là biến cước phí của các ô chọn trong một phương án cơ sở thành 0 mà vẫn có được một bài toán tương đương. Cụ thể như sau:
Giả sử X là một phương án cơ sở, H là tập hợp các ô chọn tương ứng gồm m+ n−1 ô chọn không chứa chu trình. Với mỗi ô (i, j) ∈ H ta chọn cặp số ri, sj sao cho:
c0ij = cij + ri +sj = 0,
tức là ta phải giải hệ phương trình m+n ẩn ri, sj dạng:
cij +ri +sj = 0, (i, j) ∈ H, i = 1,2, ..., m, j = 1,2, ..., n. (1.16)
Hệ phương trình (1.16) có m+n ẩn, nhưng chỉ có m+n−1 phương trình độc lập với nhau, nên hệ nghiệm phụ thuộc đúng một tham số và luôn luôn có vô số nghiệm. Do đó ta sẽ chọn tham số đó bằng 0 để tính nhanh các ẩn còn lại. Việc giải hệ phương trình (1.16) gọi là quy 0 ô chọn.
Định lý 1.3. Giả sử X = (xij) là một phương án cơ sở với tập hợp các ô chọn H và cij = 0 với (i, j) ∈ H.
1. Nếu cij > 0 với mọi ô (i, j) ∈/ H thì X là phương án tối ưu;
2. Nếu có ít nhất một số cij < 0 với ô (i, j) ∈/ H thì X không là phương án tối ưu. Khi đó ta có thể xây dựng được một phương án cơ sở mới X0 tốt hơn phương án X.
Chứng minh. 1. Đặt z = F(c). Vì các cij = 0 với (i, j) ∈ H, nên:
z =
m
X
i=1 n
X
j=1
cijxij = 0.
Suy ra, mọi phương án X0 6= X, ta đều có z0 ≥ 0 = z vì cij > 0 với mọi ô (i, j) ∈/ H.
2. Giả sử tồn tại ciojo < 0 với ô (io, jo) ∈/ H. Khi đó tập hợp H ∪ {(io, jo)} sẽ chứa đúng một chu trình duy nhất V và số ô của chu trình là chẵn.
Bắt đầu từ ô (io, jo) ta đánh số thứ tự từ số 1 cho chu trình V. Khi đó số các ô trên V chia thành hai lớp. Ký hiệu Vc là tập hợp các ô chẵn, Vl là tập hợp các ô lẻ.
Tiếp theo, đặt θo = min{xij,(i, j) ∈ Vc} là lượng hàng nhỏ nhất trong những ô chẵn của V.
Ta xây dựng phương án mới X0 như sau:
x0ij =
xij −θo nếu (i, j) ∈ Vc xij +θo nếu (i, j) ∈ Vl xij nếu (i, j) ∈/ V
Trong chu trìnhV sẽ có một ô chọn tương ứng với giá trịθo = min{xij, (i, j) ∈ Vc} bị loại ra và thêm vào một ô (io, jo) ∈/ H ứng với ciojo < 0.
Ta sẽ được một phương án mới X0 có đúng m+n−1 ô chọn và không chứa chu trình. Vậy nên, X’ là một phương án cơ sở.
Vì ciojo < 0, nên z0 = ciojoθo < 0 = z, nên phương án X0 tốt hơn X. Điều phải chứng minh
Chú ý 1.3. Nếu phương án cơ sở X là không suy biến thì θo > 0, do đó X0 thực sự tốt hơn X. Nếu X suy biến thì θo có thể bằng 0, trong trường hợp này X0 tốt bằng X. Cả hai trường hợp X0 là phương án chấp nhận được.
Định lý 1.3 xác định một dấu hiệu tối ưu của các phương án cơ sở và đề ra một phương pháp, thuật toán để điều chỉnh phương án cơ sở cho gần đến phương án tối ưu hơn.
1.3.3. Thuật toán phân phối
Thuật toán phân phối tìm phương án tối ưu của bài toán vận tải gồm các bước sau:
Bước 1. Xây dựng phương án cơ sở ban đầu X với tập hợp H có m+n−1 ô chọn;
Bước 2. Quy 0 các ô chọn, xác định được các giá trị ri, sj; tính giá trị của cước phí giả c0ij = cij +ri+sj ở các ô loại, kiểm tra dấu cước phí giả ở các ô loại.
Nếu c0ij ≥ 0,(i, j) ∈/ H, thì X là phương án tối ưu;
Nếu tồn tại ít nhất một số c0ij < 0,(i, j) ∈/ H, thì ta thực hiện điều chỉnh để xác định một phương án cơ sở mới X0 không xấu hơn X, trong đó ô (io, jo) là một ô chọn trong phương án cơ sở mới X0;
Bước 3. Xác định ô đưa vào trong số các ô loại mà cước phí giả âm có giá trị nhỏ nhất, giả sử đó là ô (i∗, j∗). Tìm ô đưa ra trong số các ô chọn thuộcH. Xác định chu trình V gồm các ô chọn thuộcH và đi qua ô (i∗, j∗), ô (i∗, j∗) chia V thành tập đỉnh chẵn Vc và tập đỉnh lẻ Vl, trong đó (i∗, j∗) ∈ Vl. Ô đưa ra là ô (io, jo) mà có θo = min{xij,(i, j) ∈ Vc};
Bước 4. Xây dựng phương án mới X0 = (x0ij) như sau:
x0ij =
xij −θo, (i, j) ∈ Vc xij + θo, (i, j) ∈ Vl xij, (i, j) ∈/ V
Quay trở lại bước 2 để kiểm tra xem phương án X0 có phải là phương án tối ưu hay không. Quá trình sẽ dừng lại khi xác định được phương án tối ưu Xopt.
1.3.4. Vấn đề chọn phương án ban đầu
Có nhiều phương án tìm phương án cơ sở ban đầu. Trong mục này ta chỉ tìm hiểu phương án ưu tiên theo tiêu chuẩn có lợi nhất hay phương án ưu tiên ô có cước phí nhỏ nhất. Nội dung được mô tả dưới đây.
Giả sử crk là có giá trị bé nhất trong ma trận cước phí C = (cij). Ta sẽ ưu tiên phân phối vào ô này luợng hàng tối đa có thể được, tức là:
xrk =
( ar, nếu ar < bk, xrj = 0, j 6= k;
bk, nếu ar ≥bk, xik = 0, i6= r.
Trong trường hợp thứ nhất, ar < bk, toàn bộ lượng hàng ar ở trạm phát r được phân phối cho trạm thu thứ k. Do đó trạm phát r không còn khả năng phân phối hàng cho các trạm thu j 6= k. Việc phân phối hàng vào các trạm ở hàng r đã hoàn thành. Trên cột thứ k còn nhu cầu là bk −ar. Ta lại tiếp tục thực hiện phân phối theo nguyên tắc trên đối với phần còn lại cho đến hết.
Trường hợp thứ hai được thực hiện tương tự. Cột thứ k đã nhận đủ số hàng theo nhu cầu, khả năng cung cấp hàng ở trạm phát r là ar−bk. Phương án được xây dựng như trên là không chứa chu trình, do đó nó là một phương án cơ sở. Trong trường hợp chưa đủ m+n−1 ô chọn thì ta có thể thêm một số ô chọn 0 để được một phương án không suy biến.
Ví dụ 1.5. a = b = 130
ai\bj 40 70 20 ri
20 60 +
80 0
10 9 2
10 20
30 6
4 3 1
20
20 8
2 6 2
sj -10 -9 -7
Ta có C130 = −5, f(x) = 830 chưa phải là giá trị tối ưu. Ô (1,3) là ô duy nhất có cước phí giả âm, nên ta chọn ô (1,3) để đưa vào chu trình xây dựng phương án mới trong bảng sau:
ai\bj 40 70 20 ri
20 40 20
80 0
10 9 2
30
30 6
4 3 1
20
20 8
2 6 2
sj -10 -9 -2
Vì c0ij ≥ 0,∀(i, j) nên fmin = 730.