Thuật toán thu hẹp chính tắc

Một phần của tài liệu (LUẬN văn THẠC sĩ) bài toán luồng lớn nhất và luồng chi phí nhỏ nhất trên mạng (Trang 42 - 47)

Dựa theo Định lý 3.3.2, có một phương pháp đơn giản (có khi gọi là “phương pháp sơ đồ”) là xuất phát từ một luồng bất kỳ X ={x(u)}rồi kiểm tra từng chu trình, xem có thỏa mãn tiêu chuẩn ở Định lý 3.3.2 không: nếu có chu trình chưa thỏa mãn thì điều chỉnhX trên chu trình ấy. Bao giờ mọi chu trình đều thỏa mãn tiêu chuẩn, thì ta có luồng tối ưu. Phương pháp này có thể dùng khi đồ thị có ít chu trình, nhưng trong trường hợp tổng quát nó không tiện lắm. Dưới đây sẽ trình bày phương pháp thu hẹp chính tắc, dựa vào Định lý 3.2.4.

Phương pháp này trực tiếp dựa vào lý thuyết mạng đã đề cập tới ở chương trước và có nhiều phương diện bổ ích về lý thuyết đồ thị.

Đại ý của phương pháp là xuất phát từ một mạngG1, thu hẹp của mạngGđã cho, rồi mở rộng dầnG1, một cách có lợi nhất, cho đến khi khả năng củaG1 bằng tổng số hàng hóa cần vận chuyển thì luồng tương thích lớn nhất trênG1 lúc đó cho ta lời giải (luồng tối ưu).

Một thu hẹp chính tắc của mạng G= (A,U) là một mạng G1 = (A,U1) với U1⊂U và sao cho có thể tìm được những sốλi (i=1, ...,n) thỏa mãn điều kiện

  

λj−λi≤ci j với mọi cungu= (i,j)∈U,

NếuX ={x(u),u∈U1}là luồng tương thích lớn nhất trong thu hẹp chính tắcG1 thì khi bổ sung thêm x(u) =0với mọi u∈U\U1 ta sẽ được một luồng trong G (để đơn giản ta cũng chỉ luồng này bằng X và gọi nó là luồng tương thích lớn nhất trongG1). Rõ ràng cácλitrong định nghĩa thu hẹp chính tắc là một hệ thế vị choX, cho nên nếuX thỏa mãn mọi đỉnh thì nó sẽ là một lời giải của bài toán. Tuy nhiên, nói chung X chưa thỏa mãn hết mọi đỉnh, tức là khả năng của G1 còn quá nhỏ. Muốn tăng khả năng ấy, ta có thể dựa vào Bổ đề 2.3.1 và Định lý 2.3.2 (Chương 2) để mở rộngG1 bằng cách thêm vàoU1 một cung thích hợpu0 ∈U\U1.

Như đã thấy ở Chương 2, đối với luồng tương thích lớn nhất X trong G1 các đỉnh chia làm ba loại: thừa, thiếu, đủ. Theo Bổ đề 2.3.1 vừa nhắc tới, ở đây mọi cung đều cód(u) = +∞nên không thể có cung u∈U1nối một đỉnh với một đỉnh yếu hơn. Vả lại, trên mỗi cungu∈U1 nối một đỉnh với một đỉnh mạnh hơn ta phải có x(u) =0 cho nên cung ấy có thể loại ra khỏiU1 mà vẫn không hại gì, lúc đó trongG1 sẽ không còn cung nối hai đỉnh khác loại.

Ta gọi cung bắc cầu là một cung u∈U\U1, nối một đỉnh thừa hay đủ với một đỉnh thiếu. Theo Định lý 2.3.2 (Chương 2), nếu thêm một cung như thế vào G1 thì có thể tăng khả năng của nó, hay ít ra cũng tăng số đỉnh yếu (mỗi cung u∈U\U1 có thể xem như cód(u) =0trongG1. Thêm cung đó vàoG1 thì tức là chod(u) = +∞). Đương nhiên, cần chọn cung ấy thế nào để mạng mới vẫn là một thu hẹp chính tắc, nhờ đó quá trình trên có thể lặp lại nếu cần.

Ta chọn cung ấy như sau: với mỗi cung bắc cầu u= (i,j) ta tính δi j =ci j−

(λj−λi)≥0, rồi lấy cungu0= (i0, j0)đạt cực tiểu củaδ(u) =δi j.

Bổ đề 3.3.1. Mạng G2 thu từ G1 bằng cách thêmu0 vàoU1 (và loại khỏiU1 mọi

cung nối một đỉnh với một đỉnh mạnh hơn) vẫn sẽ là một thu hẹp chính tắc củaG.

Chứng minh. Ta hãy đặtλi0=λi+δ(u0)cho mỗi đỉnh thiếui,λi0=λicho mọi đỉnh khác, và chứng minh rằng các λi0 là một hệ thế vị cho G2. Cho u= (i, j)là một cung bất kỳ. Nếui, j đều không phải là đỉnh thiếu, hoặc cả hai đều là đỉnh thiếu,

là một thu hẹp chính tắc.

Thuật toán. Do các kết quả trên ta đi tới thuật toán sau đây:

(1) Xuất phát từ một thu hẹp chính tắc ban đầu bất kỳ G1 = (A,U1). Chẳng hạn, đơn giản nhất là lấyU1 = /0, hệ thế vị cho G1 sẽ là λi(1)=0 với mọi i=1,2, ...,n, và luồng tương thích lớn nhất là

X1 ={x1(u) =0cho mọiu∈U}.

(2) Sau bước thứ k ta có một thu hẹp chính tắc Gk = (A,Uk) với các thế vị

{λi(k)}và luồng tương thích lớn nhấtXk. Nếu tất cả các đỉnh đều thỏa mãn rồi thìXk là lời giải (luồng tối ưu). Nếu không thì chuyển sang bước sau: Xác định các đỉnh thừa, thiếu, đủ, và cungu(0k)= (i(0k),j0(k))sao choδ(u(0k))

đạt cực tiểu của δ(u) =c(u)−(λj−λi) trong tập hợp các cung bắc cầu.

Thêmu(0k) vàoGk, đồng thời loại khỏi Gk tất cả các cung nối một đỉnh với

một đỉnh mạnh hơn. Cộng δ(u(0k)) vào thế vị của mỗi đỉnh thiếu, và cuối cùng xác định luồngXk+1 tương thích lớn nhất trong mạng mớiGk+1 (Nếu gốc của cungu(0k)là đỉnh đủ thì khả năng của mạng không tăng, cho nên có thể lấyXk làm Xk+1 mà không cần sửa). Tiếp tục như thế cho đến bao giờ được luồng tối ưu.

Định lí 3.3.2. Thuật toán trên đưa tới luồng tối ưu sau không quáσ×nbước, với

σ =∑p

i>0pi.

Chứng minh. Cho sk là số đỉnh thiếu ở bước thứ k, σk là khả năng của mạngGk (tức là trị số của luồngX ). Theo Định lý 2.3.2 (Chương 2), tổng +s tăng theo

k, và mặt khác σk+sk ≤ σ+n, cho nên số bước cần thiết không thể vượt qua σ×n.

Chú ý 3.3.3. Nếu ta xuất phát từ thu hẹp chính tắcG1= (A,/0), thì có thể nghiệm lại dễ dàng rằng sau một số bước sẽ tới một thu hẹp Gk = (A,Uk), trong đó Uk là tập hợp các cung u0 có c(u0) =δ, δ là cực tiểu của giá cước c(u) trên tất cả các cung nối một trạm phát bất kỳ với một trạm thu bất kỳ: các thế vị trongGk là λi(k)=0 với mọi trạm phát i, λi(k)=δ với mọi trạm thu. Phải chăng cũng có thể trực tiếp kiểm tra lại rằngGk là một thu hẹp chính tắc. Vậy muốn cho nhanh, ngay từ đầu ta có thể xuất phát từ thu hẹp chính tắc này.

Chú ý 3.3.4. Muốn xác định các đỉnh thừa, thiếu, đủ, trong mạng Gk = (A,Uk)

thì tiến hành theo phương pháp đánh dấu đã nêu trong “Quy tắc thực hành” ở cuối tiểu mục 2.3.1 (Chương 2).

Chú ý 3.3.5. Muốn xác định luồng tương thích lớn nhất Xk trong Gk ta có thể

nhận xét rằng nếuGk−1 không có chu trình thìGk cũng không có chu trình, vì khi chuyển từ Gk−1 sang Gk ta thêm một cung mới nối hai đỉnh khác loại (một đỉnh thừa hay đủ với một đỉnh thiếu), nhưng đồng thời bỏ đi mọi cung cũ nối hai đỉnh khác loại. Do đó nếu mạng xuất phát G1 không có chu trình (điều này bao giờ cũng làm được) thì mọi mạng về sau cũng đều không có chu trình và ta có thể áp dụng phương pháp đơn giản đã nêu cho trường hợp mạng hình cây ở cuối Mục 2.2 (Chương 2) để tìm luồng tương thích lớn nhấtXk trong mỗi mạngGk.

Ví dụ 3.3.6. Giải bài toán tìm luồng chi phí nhỏ nhất với dữ kiện ghi ở Hình 3.1

(đồ thị đối xứng: mỗi cạnh đi được trong cả hai chiều, với cùng giá cước): Số ghi ở mỗi đỉnh là yêu cầu của đỉnh, số ghi ở mỗi cung là cước phí. Ở đây đồ thị có những “đường nhánh” (cạnh treo) tạo thành bởi các cạnh không thuộc chu trình nào cả: ta giải quyết trước các “đường nhánh” để qui về đồ thị ở Hình 3.2.

Trạm phát(−): pi<0, trạm thu[+]: pi≥0.

Hình 3.1: Ví dụ 3.3.6: yêu cầu các trạm, cước phí các cung

Hình 3.2: Rút gọn đường nhánh Hình 3.3: Luồng tối ưu:x(u)ghi ở cungu đó cột thứ nhất ghi cường độ của các cung thuộcUk, cột thứ hai ghi loại các đỉnh (hàng trên: dấu + là các đỉnh thừa, dấu −là các đỉnh thiếu), và các thế vị (hàng dưới). Để ý rằng ở bước thứ ba, vì có hai cung đạt cực tiểu củaδ(u): cung (1,6)

và (1,4)nên ta chọn cả hai cung ấy cùng một lúc (như vậy cũng như gộp lại hai bước liên tiếp). Lời giải (luồng tối ưu) được ghi lại trên đồ thị vẽ ở Hình 3.3.

Uk,Xk 1 2 3 4 5 6 7 u(0k) δ0(k) x25=6 + − + − − − − (3,7) 2 0 0 0 1 1 1 1 x25=6 + − + − − − + (3,6) 1 x37=7 0 0 0 1 1 1 1 x25=6,x37=7 + − − − − − − (1,6) 1 x36=1 0 3 0 4 4 4 3 (1,4) x25=6,x37=7 + − + + − + + (4,5) 2 x36=1,x16=4 0 4 1 5 5 5 4 x14=6 x25=6,x37=7 x36=1 0 6 1 5 7 3 4 x16=4,x14=6 x45=2

Một phần của tài liệu (LUẬN văn THẠC sĩ) bài toán luồng lớn nhất và luồng chi phí nhỏ nhất trên mạng (Trang 42 - 47)

Tải bản đầy đủ (PDF)

(50 trang)