3 MỘT SỐ HƯỚNG MỞ RỘNG BÀI TOÁN (P)
3.3.1 Bài toán với hàm mục tiêu mở rộng
Bài toán (P) đã xét trước đây có thể diễn đạt lại dưới dạng:
f = max 16j6nyj →min, (3.13) n X j=1 xij = pi, i = 1,2, ..., m, (3.14) m X i=1 xij = yj, j = 1,2, ..., n, (3.15) xij ∈ {0,1}xij 6 aij, ∀i = 1,2, ..., m; ∀j = 1,2, ..., n, (3.16) với aij ∈ {0,1}, pi ∈ {1,2, ..., n} là những hằng số nguyên cho trước.
Ta có thể xét bài toán mở rộng của (P) bằng cách thay hàm mục tiêu (3.13) bởi hàm mục tiêu có dạng tổng quát hơn như sau:
g = max
16j6ngj(yj) →min, (3.17) trong đó gj(.) là các hàm tùy ý của một biến số.
Dưới đây sẽ chỉ ra rằng, thuật toán A nêu ở chương 2 có thể áp dụng để giải bài toán mở rộng (3.14) – (3.17) với các giả thiết:
gj(y1) < gj(y2) với y1, y2 nguyên thỏa mãn
Điều kiện (3.18) sẽ được thỏa mãn nếu chẳng hạn mọi gj (.) là hàm đơn điệu tăng trên đoạn [0, m].
Do mỗi biến yj xác định theo (3.15) chỉ nhận một trong các giá trị
0,1,2, ..., m, nên các hàm gj (yj) chỉ lấy một số hữu hạn giá trị sau:
g1(0), g1(1), ..., g1(m), g2(0), g2(1), ..., g2(m), ..., gn(0), gn(1), ..., gn(m)
(3.19) Giả sử trong dãy (3.19) có tất cả s giá trị khác biệt và các giá trị này xếp theo thứ tự tăng dần có dạng:
g1 < g2 < g3 < ... < gs. (3.20) Như vậy, có thể thấy giá trị tối ưu của hàm mục tiêu (3.20) chỉ nhận một trong s giá trị của dãy (3.15). Để có thể áp dụng thuật toán đa thức ở mục 1.3, chương 1 trong việc tìmg∗ ta tiến hành như sau: Với mỗi j, k(1 6 j 6 n,1 6 k 6 s) ta đặt:
djk = max{i :gj(i) 6 gk, i = 0,1,2, ..., m}. (3.21)
Do có giả thiết (3.18) nên djk là giá trị lớn nhất của đối số để sao cho giá trị hàm gj(djk) không vượt quá giá trị gk cho trước.
Với mỗi k(16 k 6 s) ta xây dựng mạng G(k) = (V, E) với tập đỉnh V = {s} ∪ {ui : i = 1,2, ..., m} ∪ {wj : j = 1,2, ..., n} ∪ {t}
trong đó s là điểm phát, t là điểm thu với tập cung:
E = {(s, ui) : i = 1,2, ..., m} ∪ {(ui, wj : i = 1,2, ..., m, j = 1,2, ..., n} ∪{(wj, t) : j = 1,2, ..., n}.
Mỗi cung e ∈ E được gắn với khả năng thông qua q(e) theo nguyên tắc sau:
q(ui, wj) =aij, i = 1,2, ..., m;j = 1,2, ..., n, q(wj, t) =k, j = 1,2, ..., n.
Tuy nhiên, điều khác là khả năng thông qua trên các cung (wj, t), j = 1,2, ..., n bây giờ được cho như sau:
q(wj, t) = djk, j = 1,2, ..., n (3.22) với djk được xác định theo (3.2.1). Ta đi đến thuật toán sau đây giải bài toán (3.14) – (3.17) với giả thiết (3.18):
Thuật toán B: Bước 1: Tính p = m P i=1 pi và tính các giá trị g1, g2, ..., gs theo (3.19), (3.20). Đặt k = 1, k = s. Ký hiệu g(k) là giá trị của luồng cực đại trong mạng G(k).
Bước 2: Nếu k −k 6 1, chuyển sang bước 5. Trái lại, đặt: k = k + k −k/2.
Bước 3: Xây dựng mạng G(k) như vừa mô tả ở trên và tìm luồng cực đại trên G(k).
Bước 4: Nếu q(k) < p thì ta đặt k = k+ 1, còn nếu q(k) =p thì ta đặt k = k. Trở lại bước 2.
Bước 5: Tìm luồng cực đại trong mạng G(k) với k = k. Nếu q(k) = p thì g∗ = gk, còn nếu q(k) < p thì g∗ = gk. Dừng thuật toán.
Có thể dễ dàng thấy rằng, sau một số hữu hạn bước, thuật toán B sẽ cho ta phương án tối ưu của bài toán (3.14) – (3.17).