Thuật toán PSO kết hợp với tìm kiếm lân cận

Một phần của tài liệu Luận án Tiến sĩ Toán học: Một số phương pháp gần đúng giải bài toán lập lịch với tài nguyên giới hạn (Trang 39 - 43)

Phương pháp Tìm kiếm lân cận [16] (hay còn gọi là Tìm kiếm cục bộ, Local Search) là phương pháp heuristic thường được áp dụng để tìm phương án tối ưu hoặc cận tối ưu trong một không gian tìm kiếm mà khoảng cách giữa hai phương án bất kỳ đã được định nghĩa, tức là đã có một phép đo khoảng cách giữa hai phương án. Dựa trên đại lượng khoảng cách đó, khái niệm vùng lân cận sẽ được xác định. Ý tưởng chung của phương pháp Tìm kiếm lân cận là thực hiện vòng lặp gồm các bước sau:

1. Khởi tạo phương án ban đầu (theo kiểu ngẫu nhiên hoặc bằng một kỹ thuật nào đó).

2. Áp dụng một phép biến đổi cho phương án hiện có để thu được một tập phương án lân cận, đây là những phương án có khoảng cách (được xác định theo một độ đo xác định trước) tới phương án ban đầu nhỏ hơn hoặc bằng một ngưỡng quy định.

3. Lựa chọn phương án tốt nhất trong tập phương án lân cận, gán giá trị này cho phương án hiện có rồi quay trở lại đầu vòng lặp (bước 2).

Vòng lặp trên được thực hiện cho tới khi tìm được phương án đủ tốt để thỏa mãn điều kiện dừng.

Phương pháp Tìm kiếm lân cận đã được các nhóm nghiên cứu tích hợp vào PSO để cải thiện chất lượng của cá thể tại mỗi vòng đời [3],[19]. Trong không gian tìm kiếm, các phương án không hoàn toàn độc lập mà thường có mối quan hệ, mối quan hệ đó chi phối nhiều đặc tính của chúng. Chẳng hạn như trong bài toán Scheduling thì hai lịch biểu càng có nhiều thành phần trùng nhau thì giá trị makespan của chúng càng có khả năng gần nhau. Dựa vào quy luật tự nhiên này, các nhà nghiên cứu đã đề xuất nhiều kiểu lân cận (topology) khác nhau

như kiểu Ring, kiểu Von Neuman. Mỗi topology đó mô tả một cách xác định thứ tự giữa các phương án trong tập lân cận. Hình sau là một số kiểu lân cận được mô tả trong [3].

Hình 1.7. Kiểu lân cận Ring (a) và Von Neumann (b)

Sau khi đã xác định được thứ tự giữa các phương án lân cận, phương án

xik+1 ở vòng đời tiếp theo sẽ được xác định là:

xik+1 = xik + vik (1.12)

với vector dịch chuyển được định nghĩa bằng công thức:

vik+1 = ×vik + c1 rand1× (pbesti - xik) + c2rand2× (lbesti - xik)

Công thức này tương tự như công thức gốc của PSO được xây dựng bởi Kennedy và Eberhart, chỉ thay phương án tốt nhất của quần thể gbesti bằng

phương án tốt nhất lbesti trong tập lân cận của phương án đang xét xik.

Trong bài báo [CT2] đã xây dựng thuật toán L-PSO áp dụng phương pháp Tìm kiếm lân cận, tuy nhiên bài toán đặt ra trong [CT2] không phải là đối tượng nghiên cứu của luận án này, vì vậy phần phát biểu bài toán và phần thực nghiệm không được giới thiệu ở đây, mà chỉ trình bày việc tích hợp phương pháp lân

N k k-1 k+1 1 ... 3 2 4 k k+1 k-1 m m+1 m-1 k k+1 k-1 n n+1 n-1 (a) (b)

cận tích hợp trong thuật toán PSO. Trong [CT2], áp dụng phương pháp lân cận Ring với vùng lân cận có phạm vi k = 2, nghĩa là phương án đang xét xi sẽ có

tập lân cận bao gồm 2 phần tử là left (xi) và right (xi). Thuật toán đề xuất L-

PSO được mô tả trong [CT2] như sau:

Algorithm LPSO()

Input: T,S,dữ liệu công việc W[1×M],P[1×N],B[N×N],D[M×M],

hằng số K, độ lệch , số lượng cá thể của quần thể NoP

Output: phương án gần đúng tốt nhất gbest

Begin

1. For i=1 to NoP do

2. xi= random vectors; vi= random vectors; // Khởi tạo

giá trị ngẫu nhiên cho vector vị trí và vector dịch

chuyển của cá thể i

3. end for

4. t= 0; // Khởi tạo bước lặp

5. While (the deviation of gbest > ) Do

6. for i=1 to NoP do

7. Compute new position xi // Tính vector vị trí xi

theo công thức (1.12) 8. end for

9. for i=1 to NoP do

10. Update pbesti; // Cập nhật pbesti

11. end for

12. Update gbest; // Cập nhật gbesti

13. for i=1 to NoP do

14. lbesti = Ring(xi) ; // Cập nhật lbesti

15. end for

16. for i=1 to NoP do

17. Update vik and compute xi ; // Cập nhật vector

dịch chuyển vikxi 19. end for

20. t++ ;

21. if (the deviation of gbest ≤  after K generations)

// nếu sau K thế hệ mà độ lệch giữa các gbest

không vượt quá 

then gbest= Variable_Neighborhood_Searching (gbest);

23. End while;

24. Return gbest;

End Function

tính bởi hàm Ring() như sau:

Function Ring(xi)

Input: phương án đang xét xi

Output: x trong đó Fitness(x) = min{Fitness(xi),

Fitness(Left(xi)), Fitness(Right(xi))}

Hàm tìm kiếm lân cận Variable_Neighborhood_Searching(), hạt nhân của thuật toán LPSO được mô tả như sau:

Function Variable_Neighborhood_Searching ( )

Input: vector vị trí xi

Output: vector vị trí xk có Fitness(xk) < Fitness(xi) Begin

1. t = 0; // Khởi tạo bước lặp

2. while (Fitness(xk) > Fitness (xi) and (t <

Max_Iteration))

3. r = random [1,M]; // Khởi tạo giá trị r ngẫu

nhiên trong đoạn [1, M] 4. xi = RotateRight(xi, r);

5. rand1 = [1,M]; rand2 = [1,M]; // Khởi tạo ngẫu nhiên rand1, rand2 [1,M]

6. xk = Exchange (xi, rand1, rand2); 7. if Fitness(xk) < Fitness(xi) then 8. return xk 9. else 10. return xi; 12. end if 11. t = t+1; 12. end while End.

Hình 1.8. Hàm RotateRight (a) và hàm Exchange (b)

trong đó hàm RotateRight() và hàm Exchange() được thiết kế để giúp tạo ra cá thể đột biến cho quần thể hiện tại.

Hàm RotateRight sẽ tịnh tiến toàn bộ các phần tử của phương án về bên phải, còn hàm Exchange sẽ hoán đổi hai phần tử của phương án như hình 1.8.

(b) (a)

3 1 2 3 1 3 1 2 3 1

Một phần của tài liệu Luận án Tiến sĩ Toán học: Một số phương pháp gần đúng giải bài toán lập lịch với tài nguyên giới hạn (Trang 39 - 43)

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

(148 trang)