Thuật toán tìm đường đi ngắn nhất liên tiếp (Successive shortest Path)

Một phần của tài liệu Bài toán luồng cực đại với chi phí cực tiểu và ứng dụng trong vận chuyển hàng cứu trợ bão lũ (Trang 37 - 40)

6. Bố cục của đề tài

2.4.2.Thuật toán tìm đường đi ngắn nhất liên tiếp (Successive shortest Path)

2.4.2.1. Tư tưởng thuật toán

Thuật toán tìm đường đi ngắn nhất liên tiếp xuất phát từ một giả thiết tối ưu và duy trì điều kiện tối ưu của giả thiết đó.

2.4.2.2. Mô tả thuật toán

Để mô tả thuật toán này, trước hết chúng ta tìm hiểu khái niệm luồng giả. Một

luồng giả là một hàm x: A  R+ chỉ thỏa mãn các ràng buộc không âm và khả năng

thông qua, nó không cần thỏa mãn các ràng buộc cân bằng khối lượng. Với mọi luồng giả f, ta định nghĩa độ mất cân bằng của đỉnh i như sau:

( , ) ( , ) i i ji ij i j E j i E e b f f        Với  i V

Nếu ei > 0 với đỉnh i nào đó, ta nói ei là mức vượt quá của đỉnh i. Nếu ei <0, ta

gọi –ei là mức thiếu hụt của đỉnh. Chúng ta gọi một đỉnh i có ei = 0 là cân bằng. Gọi E

và D là các tập hợp các đỉnh vượt quá và thiếu hụt trong đồ thị. Chú ý rằng: 0 i i i V i V e b       Vì vậy: i i i V i D e e      

Do đó, nếu đồ thị chứa một đỉnh vượt quá thì nó cũng phải chứa một đỉnh thiếu hụt. Đồ thị thặng dư tương ứng với một luồng giả được định nghĩa giống như chúng ta

định nghĩa đồ thị thặng dư cho một luồng.

Bổ đề 2.2: Giả sử một luồng giả (hoặc một luồng) x thỏa mãn các điều kiện tối

ưu về chi phí rút gọn đối với các khả năng (của đỉnh)  nào đó. Gọi vector d là

khoảng cách đường đi ngắn nhất từ đỉnh s đến tất cả các đỉnh khác trong đồ thị thặng

dư G(f) với pij là độ dài của cung (i, j), ta có các tính chất sau:

(1) Luồng giả f cũng thỏa mãn các điều kiện tối ưu về chi phí rút gọn đối với

các khả năng của đỉnh rút gọn ' =  - d.

(2) Các chi phí rút gọn pij với tất cả các cung (i, j) trên đường đi ngắn nhất từ

đỉnh s đến mọi đỉnh khác.

Bổ đề 2.3: Giả sử một luồng giả (hoặc một luồng) x thỏa mãn các điều kiện tối ưu về chi phí rút gọn và ta đạt được f’ từ f bằng cách gửi luồng theo một đường đi ngắn nhất từ đỉnh s đến một số đỉnh k khác thì f’ cũng thỏa mãn các điều kiện tối ưu về chi phí rút gọn.

Trong thuật toán tìm đường đi ngắn nhất liên tiếp, khả năng của các đỉnh đóng vai trò rất quan trọng, chúng ta dùng chúng để giữ cho độ dài các cung không âm giúp giải quyết bài toán đường đi ngắn nhất một cách hiệu quả.

Thuật toán tìm đường đi ngắn nhất liên tiếp được mô tả như sau:

Xuất phát từ một luồng tối ưu giả f = 0 trên đồ thị, khi đó ta phải vi phạm ràng buộc cân bằng khối lượng tại các đỉnh, ở mỗi một bước lặp ta tìm một chu trình ngắn nhất từ nguồn đến đích và tăng đơn vị vận chuyển trên chu trình này, khi các điều kiện về cân bằng khối lượng thỏa mãn bài toán kết thúc với một luồng tối ưu tìm được.

2.4.2.3. Các bước thực hiện thuật toán

Giả code:

begin

f: = 0 và  : = 0;

ei:= bi với i V ;

Khởi tạo tập hợp E:= {i: ei>0} và D:= {i: ei<0);

while E  NULL do (adsbygoogle = window.adsbygoogle || []).push({});

Chọn một đỉnh k  E, l  D;

Xác định khoảng cách đường đi ngắn nhất dj từ đỉnh s đến tất cả

P biểu thị đường đi ngắn nhất từ đỉnh k đến đỉnh l;

Cập nhật : =  - d;  := min[ek, -el, min{rij:(i, j)  P}];

Tăng  đơn vị luồng theo đường đi P;

Cập nhật f, G(f), E, D và các chi phí rút gọn;

end; end;

Chứng minh tính đúng đắn của thuật toán: Để khởi tạo chúng ta đặt x = 0 là một

luồng khả thi. Với luồng giả f = 0, G(f) = G. Chú ý rằng lời giải này cùng với  = 0

thỏa mãn các điều kiện tối ưu về chi phí rút gọn vì pij = pij > 0 với mọi cung (i, j)

trong đồ thị G(f). thì chi phí của tất cả các cung là không âm.Ta quan sát thấy khi vẫn còn đỉnh có độ mất cân bằng khác 0 thì cả E và D phải khác NULL vì tổng các độ vượt quá bằng tổng các mức thiếu hụt. Vì vậy cho đến khi tất cả các đỉnh đều cân bằng thì thuật toán luồng có thể xác định một đỉnh vượt quá k và một đỉnh thiếu l. Giả thiết 4 chỉ ra rằng đồ thị thặng dư chứa một đường đi có hướng từ đỉnh k đến mọi đỉnh khác bao gồm cả đỉnh l. Do đó khoảng cách đường đi ngắn nhất d được định nghĩa tốt.

Ví dụ minh họa

pịj,cij

Hình 2.3. Minh họa thuật toán đường đi ngắn nhất liên tiếp 2.4.2.4. Độ phức tạp thuật toán

Mỗi vòng lặp của thuật toán giải một bài toán đường đi ngắn nhất với chiều dài cung không âm và giảm độ vượt quá của một số đỉnh (đồng thời cũng giảm mức thiếu hụt của một số đỉnh). Do đó, nếu C là cận trên của khả năng cung lớn nhất của các đỉnh, thuật toán sẽ kết thúc sau nhiều nhất nC vòng lặp. Nếu S(n, m, P) là thời gian cần thiết để giải bài toán đường đi ngắn nhất với độ dài cung không âm thì độ phức tạp tổng cộng của thuật toán này là O(nCS(n, m, nP)). Chú ý rằng chúng ta dùng nP thay vì P trong biểu thức này vì chi phí trong đồ thị thặng dư bị chặn bởi nP.

Một phần của tài liệu Bài toán luồng cực đại với chi phí cực tiểu và ứng dụng trong vận chuyển hàng cứu trợ bão lũ (Trang 37 - 40)