Giới thiệu thuật toán nhánh cận

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin song song hoá bài toán jsp trên một số môi trường tính toán song song và phân tán (Trang 85 - 88)

6. Phương pháp nghiên cứu

3.2.1. Giới thiệu thuật toán nhánh cận

Thuật toán nhánh cận là phương pháp chủ yếu để giải các bài toán tối ưu tổ hợp. Ta sẽ thực hiện việc đánh giá theo từng bước, nếu không có khả năng tìm thấy kết quả tốt hơn thì sẽ cắt nhánh đó, không thực hiện tìm tiếp mà chuyển ngay sang nhánh khác. Khi đó, chỉ ghi nhận các kết quả tốt hơn lúc ban đầu. Nghiệm của bài

toán sẽ tốt dần lên do khi tìm ra kết quả tốt hơn ta sẽ cập nhật lại giá trị hiện thời của bài toán. [2]

Để áp dụng phương pháp nhánh cận đối với 1 tập các bài toán tối ưu chúng ta cần làm theo các bước sau:

- Bước 1 ( khởi tạo): L:={П0}, Q: ={П0},bs:= -∞ và T:= ∅ (tập hợp rỗng).

- Bước 2 ( tìm kiếm): đi tới Bước 9 nếu L = ∅

đi đến Bước 3 sau khi lựa chọn Пi:= s(Ls) để kiểm tra.

- Bước 3 (cập nhật ): Nếu lower_bound(Пi)> bs, thì bs:= lower_bound(Пi) và

T:={σ } với σ là lời giải khả thi của Пi sao cho f(x,σ )= lower_bound(Пi). Đi tới bước 4.

- Bước 4 : đi tới Bước 8 nếu Пi  G (tập hợp các bài toán bộ phận Пi được

giải trong tiến trình tính toán cận trên của Пi). ngược lại thì đi đến Bước 5. - Bước 5: ( kiểm tra cận trên): đi đến bước 8 nếu cận trên nhỏ hơn bs:

upper_bound(Пi) ≤ bs. Ngược lại đi tới bước 6.

- Bước 6: đi tới bước 8 nếu tồn tại một Пk (≠ Пi) Q mà f(Пk) ≥ f(Пi). Ngược

lại đi tới bước 7.

- Bước7: (phân nhánh): Phân π into π , π , … , π và cập nhật

L=L∪{π , π , … , π } − {π }, Q=Q ∪{π , π , … , π }, quay trở lại bước

2.

- Bước 8 ( kết thúc bài toán con): gán L:= L - Пi sau đó quay trở lại bước 2.

- Bước 9 ( kết thúc toàn bộ ) : Dừng. bs = f(П0) và T lưu trữ một lời giải tối ưu

của П0, nếu bs = - ∞ , П0 không có lời giải

Một số bài toán áp dụng thuật toán nhánh cận để giải quyết bài toán:

Bài toán người du lịch( TSP)

Phát biểu bài toán : Một người du lịch muốn đi thăm quan n thành phố T1 , T2 , ….., Tn .Xuất phát từ một thành phố nào đó người du lịch muốn đi qua tất cả các thành phố còn lại, mối thành phố đúng một lần, rồi quay trở lại thành phố xuất phát. Biết ci,j là chi phí từ thành phố Ti đến thành phố Tj . Hãy tìm hành trình với tổng chi phí nhỏ nhất

- Xây dựng công thức :

Phương án :  = (1, 2, … n) là hoán vị của 1, 2, …, n Hành trình : T 1  T 2  ……  T n

Chi phí : f() = c 1, 2 + c 2, 3 + …. + c n, 1  : tập tất cả các hoán vị

=> min {f() :   }

- Tư tưởng của thuật toán nhánh cận: o Cố định thành phố 1

o Tìm cực tiểu của hàm :

f(x2, x3, . . , xn) = c[1,x2] + c[x2,x3] + ... + c[xn,1] => min x2, x3, . . , xn là hoán vị của các số 2, 3, …, n

o Ký hiệu : cmin = min{c[i,j]; i, j = 1,2,…,n, i≠j} o Giả sử có phương án bộ phận (u1,u2, …, uk)

– Chi phí phải trả là :  = c[1,u2] + c[u2,u3] + ... + c[uk-1, uk] – Cận dưới là : g (u1,u2, …, uk) =  + (n-k+1)*cmin

Phương pháp phân nhánh:

+ Nếu bài toán con có g() > f -(Kỉ lục tạm thời) thì cắt luôn nhánh của bài toán này

+ Nếu không thì phân nhánh tiếp bài toán con cho đến khi tính được kỉ lục của bài toán con này. Nếu kỉ lục của bài toán con nhỏ hơn f() thì cập nhật lại kỉ lục tạm thời f()

Phương pháp tính cận: tính cận trên của bài toán con dựa vào

công thức= c[1,u2] + c[u2,u3] + ... + c[uk-1, uk] g (u1,u2, …, uk) =  + (n-k+1)*cmin

Phát biểu bài toán : Một nhà thám hiểm cần đem theo một cái túi có trọng lượng không quá b. Có n đồ vật có thể đem theo. Đồ vật thứ j có trọng lượng a và giá trị sử dụng là c . Hỏi rằng nhà thám hiểm cần đem theo các đồ vật nào để cho tổng giá trị sử dụng của các đồ vật đem theo là lớn nhất.

- Xây dựng công thức :

Phương án x = {x1,x2, …, xn} Giá trị đồ vật đem theo ( ) = ∑

Tổng trọng lượng đồ vật ( ) = ∑  min{f(x) : g(x) ≤ b}

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin song song hoá bài toán jsp trên một số môi trường tính toán song song và phân tán (Trang 85 - 88)

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

(115 trang)