Thuật toán nhánh cận

Một phần của tài liệu Chương 3: Duyệt và Đệ qui potx (Trang 26 - 28)

Giả sử, chúng ta cần giải quyết bài toán tối u tổ hợp với mô hình tổng quát nh sau: {f(x):xD}

min

Trong đó, D là tập hữu hạn phần tử. Ta giả thiết D đợc mô tả nh sau:

D = { x =( x1, x2, . . ., xn) ∈ A1ì A2ì . . .ì An ; x thoả mãn tính chất P }, với A1ì A2

Nh vậy, các bài toán chúng ta vừa trình bày ở trên đều có thể đợc mô tả dới dạng trên.

Với giả thiết về tập D nh trên, chúng ta có thể sử dụng thuật toán quay lui để liệt kê các phơng án của bài toán. Trong quá trình liệt kê theo thuật toán quay lui, ta sẽ xây dựng dần các thành phần của phơng án. Một bộ phận gồm k thành phần (a1, a2, . . ., ak) xuất hiện trong quá trình thực hiện thuật toán sẽ đợc gọi là phơng án bộ phận cấp k.

Thuật toán nhánh cận có thể đợc áp dụng giải bài toán đặt ra, nếu nh có thể tìm đ- ợc một hàm g xác định trên tập tất cả các phơng án bộ phận của bài toán thoả mãn bất đẳng thức sau: { ( ): , , 1,2,..., } (*) min ) ,.., , (a1 a2 a f x x D x a i k g k ≤ ∈ i = i =

với mọi lời giải bộ phận (a1, a2, . ., ak), và với mọi k = 1, 2, . . .

Bất đẳng thức (*) có nghĩa là giá trị của hàm tại phơng án bộ phận (a1, a2, . ., ak) không vợt quá giá trị nhỏ nhất của hàm mục tiêu bài toán trên tập con các phơng án.

D(a1, a2, . ., ak) { x ∈ D: xi = ai, 1 = 1, 2, . ., k },

nói cách khác, g(a1, a2, .., ak) là cận dới của tập D(a1, a2, . ., ak). Do có thể đồng nhất tập D(a1, a2, . . ., ak) với phơng án bộ phận (a1, a2, . . , ak), nên ta cũng gọi giá trị g(a1, a2, . ., ak) là cận dới của phơng án bộ phận (a1, a2, . ., ak).

Giả sử, ta đã có đợc hàm g. Ta xét cách sử dụng hàm này để hạn chế khối lợng duyệt trong quá trình duyệt tất cả các phơng án theo thuật toán quay lui. Trong quá trình liệt kê các phơng án, có thể đã thu đợc một số phơng án của bài toán. Gọi x là giá trị hàm mục tiêu nhỏ nhất trong số các phơng án đã duyệt, ký hiệu f = f(x). Ta gọi x là phơng án tốt nhất hiện có, còn f là kỷ lục. Giả sử, ta có đợc f , khi đó nếu

g(a1, a2, .., ak) > f thì từ bất đẳng thức (*) ta suy ra

f < g(a1, a2, . . ., ak) ≤ min { f(x): x ∈ D, xi = ai, i=1, 2, . . ., k }, vì thế tập con các phơng án của bài toán D(a1, a2, . . ., ak) chắc chắn không chứa phơng án tối u. Trong trờng hợp này, ta không cần phải phát triển phơng án bộ phận (a1, a2, . . ., ak). Nói cách khác, ta có thể loại bỏ các phơng án trong tập D(a1, a2, . ., an) khỏi quá trình tìm kiếm.

Thuật toán quay lui liệt kê các phơng án cần sửa đổi lại nh sau: Procedure Try(k);

(*Phát triển phơng án bộ phận (a1, a2, . . ., ak-1

theo thuật toán quay lui có kiểm tra cận dới trớc khi tiếp tục phát triển phơng án*) begin for ak∈ Ak do begin if < chấp nhận ak > then begin xk := ak; if k = n then < cập nhật kỷ lục>

else if g(a1, a2, . . ., ak) ≤ f then Try (k+1); end;

end; end;

Khi đó, thuật toán nhánh cận đợc thực hiện nhờ thủ tục sau: Procedure Nhanh_Can;

Begin

f = +∞;

(* Nếu biết một phơng án x nào đó thì có thể đặt f = f(x) *)

Try(1);

if f ≤ +∞ then < f là giá trị tối u , x là phơng án tối u > else < bài toán không có phơng án>;

end;

Chú ý rằng, nếu trong thủ tục Try ta thay thế câu lệnh if k = n then < cập nhật kỷ lục >

else if g(a1, a2, . ., ak) ≤ f then Try(k+1); bởi

if k = n then < cập nhật kỷ lục > else Try(k+1);

thì thủ tục Try sẽ liệt kê toàn bộ các phơng án của bài toán, và ta lại thu đợc thuật toán duyệt toàn bộ. Việc xây dựng hàm g phụ thuộc vào từng bài toán tối u tổ hợp cụ thể. Nh- ng chúng ta cố gắng xây dựng sao cho việc tính giá trị của g phải đơn giản và giá trị của g(a1, a2, . ., ak) phải sát với giá trị của hàm mục tiêu.

Một phần của tài liệu Chương 3: Duyệt và Đệ qui potx (Trang 26 - 28)

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

(43 trang)
w