1. Trang chủ
  2. » Công Nghệ Thông Tin

Đề tài thuật toán Tabu search Thạc sĩ khoa học máy tính

18 46 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 292,19 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giải thuật tìm kiếm cục bộ giải pháp Metaheuristic cho việc giải các bài toán tối ưu hóa tổ hợp, hoặc tối ưu hóa rời rạc trên máy tính. Những bài toán này cần tìm trạng thái tối ưu hoặc tổ hợp tối ưu trong không gian rời rạc các trang thái, không quan tâm đến đường đi dẫn tới trạng thái đó. Phương pháp tìm kiếm sẽ duyệt qua các lời giải trong không gian tìm kiếm cho đến khi tìm ra lời giải được cho là tối ưu hoặc vượt quá thời gian tìm kiếm cho phép. Tìm kiếm cục bộ được thiết kế cho bài toán tìm kiếm với không gian trạng thái rất lớn và cho phép tìm kiếm trang thái tương đối tốt với thời gian chấp nhận được.

Trang 1

Họ tên học viên:

TÌM HIỂU TÌM KIẾM TABU (TABU SEARCH)

Chuyên ngành: Khoa học máy tính – K27

Người hướng dẫn khoa học: PGS TS PHẠM THẾ BẢO

THÀNH PHỐ HỒ CHÍ MINH, 2017

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHỐ HỒ CHÍ MINH

-

Họ tên học viên:

Trang 2

TÌM HIỂU TÌM KIẾM TABU (TABU SEARCH)

Chuyên ngành: Khoa học máy tính – K27

Người hướng dẫn khoa học:

THÀNH PHỐ HỒ CHÍ MINH, 2017

Trang 3

MỤC LỤC

Trang 4

I – TRÌNH BÀY GIẢI THUẬT

Ý tưởng của thuật toán tìm kiếm: Xem xét trạng thái, sử dụng các hàm biến đổi

trạng thái để di chuyển trong không gian trạng thái cho đến khi đạt được trạng thái mong muốn

1. Giải thuật tìm kiếm cục bộ

Giải thuật tìm kiếm cục bộ - giải pháp Metaheuristic cho việc giải các bài toán tối ưu hóa tổ hợp, hoặc tối ưu hóa rời rạc trên máy tính Những bài toán này cần tìm trạng thái tối ưu hoặc tổ hợp tối ưu trong không gian rời rạc các trang thái, không quan tâm đến đường đi dẫn tới trạng thái đó Phương pháp tìm kiếm

sẽ duyệt qua các lời giải trong không gian tìm kiếm cho đến khi tìm ra lời giải được cho là tối ưu hoặc vượt quá thời gian tìm kiếm cho phép Tìm kiếm cục bộ được thiết kế cho bài toán tìm kiếm với không gian trạng thái rất lớn và cho phép tìm kiếm trang thái tương đối tốt với thời gian chấp nhận được

Có rất nhiều giải thuật tìm kiếm cục bộ như: thuật toán leo đồi (Hill climbing), thuật toán luyện thép (Simulated Annealing), giải thuật tìm kiếm lân cận lớn (Large Neighbourhood Search LNS), giải thuật tìm kiếm Tabu,… Ý tưởng chung của các giải thuật tìm kiếm cục bộ là: Chỉ quan tâm đến trạng thái đích, không quan tâm đến đường đi

2. Giải thuật tìm kiếm Tabu

Giải thuật tìm kiếm Tabu (Tabu search – TS) được đưa ra đầu tiên bởi Glover vào năm 1986 Từ Tabu được viết lại từ chữ Taboo, có nghĩa là sự cấm kỵ

Ý tưởng của Tabu search là sử dụng một danh sách lưu trữ các lời giải (Tabu list) đã thực hiện để không thăm lại một lời giải hai lần Trong tìm kiếm Tabu, những bước đi có chi phí thấp hơn với lời giải vẫn được chấp nhận nếu nó không nằm trong danh sách cấm (Tabu list) Giải thuật Tabu tiếp tục tìm kiếm trong trường hợp không thể tìm ra được lời giải tốt hơn lời giải hiện tại với hy vọng vượt qua những lời giải tối ưu cục bộ

Vì những bước đi của lời giải sẽ được chấp nhận hay không phụ thuộc vào việc nó có nằm trong danh sách cấm hay không, do đó kích thước của Tabu list là cực kỳ quan trọng, nó phải đủ lớn để đảm bào thoát ra khỏi vùng tối ưu cục bộ, nhưng phải đủ nhỏ để không bỏ các lời giải có khả năng Đây là tham số ảnh hưởng đến hiệu quả của việc tìm kiếm và được thiết lập bởi người lập trình Tìm kiếm Tabu dựa trên giải thuyết vấn đề đã được giải, kết hợp chặt chẽ bộ nhớ thích nghi và thăm dò phản ứng Giống như việc leo núi, người ta phải nhớ

có chọn lọc các đường đã đi qua và lập các lựa chọn chiến lược trên đường Bộ

Trang 5

nhớ thích nghi này cho phép tìm kiếm trong không gian lời giải tiết kiệm và hiệu quả Việc nhấn mạnh vào đặc điểm thăm dò phản ứng của Tabu search là: một lựa chọn chiến lược kém vẫn cung cấp nhiều thông tin hơn một lựa chọn ngẫu nhiên tốt Thăm dò phản ứng tích hợp các nguyên lý cơ bản của tìm kiếm thông tin như khai thác những lời giải tốt trong khi vẫn tìm những vùng có khả năng tốt khác Tìm kiếm Tabu phối hợp tìm đường đi mới và hiệu quả hơn trong việc kết hợp ưu thế của kỹ thuật liên quan tới bộ nhớ thích nghi và thăm dò phản ứng Vì vậy, một thành phần chính trong tìm kiếm Tabu là cách sử dụng bộ nhớ

3. Cách sử dụng bộ nhớ

Cấu trúc bộ nhớ trong Tabu search hoạt động bằng cách tham khảo 4 chiều chính:

Tính chất vừa xảy ra (Recency)

Tính chất thường xuyên (Frequency)

Tính chất chất lượng (Quality)

Tính chất ảnh hưởng (Infuence)

Hình 1: Cấu trúc bộ nhớ Tabu search

Trong đó tính chất vừa xảy ra và tính chất thường xuyên hỗ trợ lẫn nhau Chiều chất lượng cho biết khả năng phân biệt chất lượng các lời giải được tìm thấy trong quá trình tìm kiếm

Chiều ảnh hưởng là tính xem xét các lựa chọn được tạo ra trong quá trình tìm kiếm có ảnh hưởng đến chất lượng và cấu trúc không

Trang 6

Bộ nhớ dùng trong tìm kiếm Tabu là bộ nhớ hiện và bộ nhớ thuộc tính (Explicit và Attributive Memory) Bộ nhớ hiện ghi nhận toàn bộ lời giải, thường

là chứa lời giải tốt trong quá trình tìm kiếm Nó được dùng để mở rộng tìm kiếm cục bộ Bộ nhớ thuộc tính lưu lại thông tin về các thuộc tính của lời giải khi có thay đổi từ lời giải này sang lời giải khác

Ví dụ minh họa cho thấy việc sử dụng các thuộc tính trong cấu trúc bộ nhớ vừa mới xảy ra và thường xuyên

Yêu cầu: Tìm câu tối ưu trên đồ thị với 7 nút được đánh số từ 1 đến 7 Ba đồ thị thể hiện ở bước k, k+1, k+ 2 trong quá trình tạo ra các trạng thái để tìm lời giải Một phép chuyển phải gồm: 1 cạnh lấy ra và 1 cạnh thêm vào

Hình 2: Minh họa tabu bằng cây tối ưu

Phép chuyển từ bước k sang k+1: Gỡ cạnh (1, 3) (cạnh trong) và thêm vào (4, 6) (cạnh ngoài) Ở bước k, 2 cạnh này được coi là hai thuộc tính lời giải khác nhau và được gọi là Tabu – active Dùng để tạo ra trạng thái Tabu của phép chuyển ở các bước tiếp theo

Ví dụ trong bộ nhớ mới xảy ra có thể chọn cạnh (1, 3) trong tabu-active trong

3 bước, để cạnh (1, 3) không bị thêm lại vào cây trong những bước này Do đó, nếu muốn thêm cạnh (1, 3) chỉ có thể thêm vào bước k+4 là gần nhất Nếu cạnh (4, 6) ngoài Tabu-active, trong một bước để giữ cho cạnh (4, 6) khỏi bị gỡ ra Những điều này giúp việc thực hiện các phép chuyển không lặp lại những lần chuyển trước

Trang 7

Số bước một cạnh trong trạng thái Tabu-active gọi là Tabu-tenure Nếu giá trị Tabu tenure quá lớn thì chất lượng lời giải không được cải thiện, nhưng nếu quá nhỏ thì sẽ làm cho hàm mục tiêu bị lặp lại theo chu kỳ

Khi bộ nhớ hiện mở rộng các lời giải sang vùng lân cận thì bộ nhớ thuộc tính giữ hoặc cấm các phép chuyển có chọn lọc, sẽ làm giảm các lời giải đó

4. Chiến lược và các tham số của tìm kiếm Tabu

Gồm 3 chiến lược chính:

1 Chiến lược cấm: Kiểm soát những gì nhập vào Tabu list

2 Chiến lược giải phóng: Kiểm soát những gì thoát khỏi Tabu list và thời điểm thoát khỏi

3 Chiến lược ngắn hạn (short-term): Quản lý sự tác động qua lại giữa chiến lược cấm và chiến lược giải phóng để lựa chọn các bước giải thử nghiệm (thăm

dò phản ứng)

Các tham số của Tabu search

1 Thủ tục tìm kiếm địa phương

2 Cấu trúc vùng lân cận (Neighbourhood): Dùng để xác định các lời giải liền

kề có thể đạt được từ lời giải hiện tại

3 Di chuyển Tabu: Một danh sách ghi lại các hành động bị cấm (tabu list)

4 Thêm một di chuyển Tabu: Thêm một lựa chọn vào tabu list

5 Điều kiện “khát vọng”: Khi di chuyển tabu có một lời giải thăm dò hấp dẫn

đủ để nó có thể đưa ra giải pháp tốt nhất, thì phân loại tabu của nó có thể bị ghi

đè Một điều kiện cho phép ghi đè như vậy được gọi là tiêu chuẩn “khát vọng”

6 Kích thước tối đa của Tabu list

7 Điều kiện dừng

5. Thuật toán tìm kiếm Tabu

Bước 1.

k=1

Chọn một lịch trình ban đầu S 1 và gán S best = S 1

Bước 2.

Xác định vùng lân cận N(S k)

Chọn S cN(S k) từ lịch trình tốt nhất hiện có

Nếu di chuyển S k S c bị cấm bởi một cặp di chuyền nằm trong tabu list thì đến bước 2

Trang 8

Nếu di chuyển S k S c không bị cấm bởi một cặp di chuyền nằm trong tabu list

thì gán S k+1 = S c

Đưa di chuyển theo chiều ngược lại vào đầu danh sách cấm (tabu list)

Đẩy tất cả các di chuyển khác trong tabu list xuống một vị trí

Xóa di chuyển nằm ở cuối tabu list

Nếu F(S c ) tốt hơn F(S best ) thì S best = S c

Đi tới bước 3

Bước 3.

k = k+1 ;

Nếu điều kiện dừng (stopping condition) = true thì dừng lại

Ngược lại thì quay lại bước 2

Một số điều kiện dừng:

Không có giải pháp khả thi trong vùng lân cận

K lớn hơn số lần lặp lại tối đa cho phép

Số lần lặp từ lần cải tiến cuối cùng lớn hơn một số được chỉ định trước đó

Đã tìm được lời giải tối ưu

6. Ví dụ minh họa thuật toán

Cho bảng phân công với k công việc cần hoàn thành (trong ví dụ xét 4 công việc), mỗi việc sẽ thực hiện trong một đơn vị thời gian pj Việc j có khối lượng wj Tìm cách thực hiện các công việc để lợi nhuận cao nhất trong thời gian thực hiện ít nhất

T j được tính bằng tổng thời gian thực hiện j và công việc trước đó trừ đi thời gian

quy định Nếu T j <0 thì cho T j =0

Hàm mục tiêu F(Sj) là thời gian hoàn thành công việc, được tính bằng ∑w j* T j

được mong muốn tìm ra giá trị nhỏ nhất.

Vùng lân cận : tất cả lịch trình có thể thu được thông qua việc trao đổi các cặp lân cận

Tabu list: Chọn độ dài của danh sách Tabu: số lượng lớn nhất của các cặp

Trang 9

Đưa các cặp công việc (j, k) vào danh sách: Đây Là các cặp công việc đã được hoán đổi trong hai bước cuối cùng

Interation 1: S 1 = (2, 1, 4, 3); Gán S best = S 1

Hàm mục tiêu của S1: F(S1) = ∑w j* T j = 500

Các vùng lân cận của S1, có:

F(1, 2, 4, 3) = 480

F(2, 4, 1, 3) = 480

F(2, 1, 3, 4) = 652

Trang 10

F(S1) 652

Chọn ứng viên Sc = 2, 4, 1, 3 vì F(Sc) = 436 nhỏ nhất trong vùng lân cận

Cặp (1, 4) được đổi chỗ trong 2 lần => Tabu list {(1, 4)}

F(Sbest) = 436

Interation 2: S 2 = (2, 4, 1, 3); F(S2) = 436

Các vùng lân cận của S2, có:

F(4, 2, 1, 3) = 460

F(4, 2, 1, 3) = 500

Vi phạm Tabu list {(1, 4)}

F(2, 4, 3, 1) = 608

Chọn ứng viên Sc = 4, 2, 1, 3 vì F(Sc) = 460 nhỏ nhất trong vùng lân cận F(Sc) > F(Sbest) nên F(Sbest) = 436 (theo giá trị hiện tại)

Cặp (2, 4) được đổi chỗ trong 2 lần => Tabu list {(2, 4) (1, 4)}

Trang 11

Interation 3: S 3 = (4, 2, 1, 3); F(S3) = 460

Các vùng lân cận của S3, có:

F(2, 4, 1, 3) = 436

Vi phạm Tabu list {(2, 4) (1, 4)}

F(4, 1, 2, 3) = 440

F(4, 1, 3, 1) = 632

Chọn ứng viên Sc = 4, 1, 2, 3 vì F(Sc) = 440 nhỏ nhất trong vùng lân cận F(Sc) > F(Sbest) nên F(Sbest) = 436 (theo giá trị hiện tại)

Cặp (2, 1) được đổi chỗ trong 2 lần => Tabu list {(2, 1) (2, 4)}

Interation 4: S4 = (4, 1, 2, 3); F(S3) = 440

Các vùng lân cận của S4, có:

F(1, 4, 2, 3) = 408

Trang 12

pj 10 4 10 13

F(4, 2, 1, 3) = 460

Vi phạm Tabu list {(2, 1) (2, 4)}

F(4, 1, 3, 2) = 586

Chọn ứng viên Sc = 1, 4, 2, 3 vì F(Sc) = 408 nhỏ nhất trong vùng lân cận, đồng thời F(Sc) < F(Sbest) nên F(Sbest) = 408

Cặp (4, 1) được đổi chỗ trong 2 lần => Tabu list {(4, 1) (2, 1)}

II – XÂY DỰNG DỮ LIỆU TEST

Xây dựng dữ liệu giải quyết bài toán người du lịch bằng thuật toán Tabu search Bài toán Travelling Salesman Problem – TSP là bài toán tối ưu tổ hợp Bài toán được phát biểu: Cho trước một danh sách các thành phố và khoảng cách giữa các thành phố đó Tìm chu trình ngắn nhất đi qua tất cả các thành phố một lần duy nhất Bài toán này có thể biểu diễn dưới dạng đồ thị với: Mỗi thành phố là một đỉnh, đường đi giữa các thành phố là mỗi cách đi, khoảng cách là trọng số của đồ thị Bài toán trở thành tìm chu trình đi qua các đỉnh sao cho tổng trọng số trên các cạnh là nhỏ nhất

Biểu diễn các thành phố bằng tọa độ của chúng Mỗi dòng dữ liệu sẽ biểu diễn một thành phố với: Số đầu tiên chỉ số thứ tự của thành phố, số thứ 2 chỉ hoành độ và số thứ 3 thể hiện tung độ Dữ liệu này sẽ dùng tính độ dài giữa 2 đỉnh và là dữ liệu đầu vào cho thuật toán Tabu search

Trang 13

III – CÀI ĐẶT

Số đỉnh nhập vào >=10 Mỗi đỉnh có 3 giá trị: Số thứ tự của đỉnh, hoành độ X, tung

độ Y

Đưa dữ liệu

if (vertexDataRegion)

{

int vertexId;

double posX;

double posY;

sscanf(line.c_str(), "%d %lf %lf" , &vertexId,&posX,&posY);

vertexId ; // we store vertex from 0

this ->coordinate[vertexId][0] = posX;

this ->coordinate[vertexId][1] = posY;

Xây dựng Tabu list

tabu_list = new int *[map->numVertex];

tabu_f_list = new int *[map->numVertex];

for ( int i = 0; i < map->numVertex; i++)

{

tabu_f_list[i] = new int [map->numVertex];

tabu_list[i] = new int [map->numVertex];

}

resetTabuList();

void TSPTabuSolver ::resetTabuList()

{

for ( int i = 0; i < map->numVertex; i++)

{

for ( int j = 0; j < map->numVertex; j++) {

tabu_list[i][j] = 0;

tabu_f_list[i][j] = 0;

} }

}

Xây dựng thuật toán Tabu

for ( int loopCount = 0; loopCount < numCandidate ; loopCount++)

{

s->initSolution();

resetTabuList();

bestSolverScore = std:: numeric_limits < double >::max();

for ( int i = 0; i < NUM_INTERATION ; i++)

{

Trang 14

s = this ->getBestNearbySolution(i);

double score = s->getScore();

if (score < bestSolverScore) {

bestSolverScore = score;

if (bestSolverScore < bestSolutionScore) {

for ( int j = 0; j < map->numVertex; j++) {

bestSolution.set(j,s->getV(j));

} bestSolutionScore = bestSolverScore; }

} }

}

Tính khoảng cách giữa 2 tọa độ

double Map ::getDistance( int vertexA , int vertexB )

{

double distance = sqrt(sqr( this ->coordinate[ vertexA ][0] - this

->coordinate[ vertexB ][0])+ sqr( this ->coordinate[ vertexA ][1] - this

->coordinate[ vertexB ][1]));

return distance;

}

Tính thời gian thực hiện câu lệnh

clock_t time = clock();

time = clock() - time;

int ms = time / CLOCKS_PER_SEC * 1000;

cout << "Duraton Timer : " << ms;

Kết quả sau khi chạy chương trình:

IV – TEST 1

Đo thời gian thực hiện:

File tsp_29_1.txt với 29 đỉnh được cho hoành độ và tung độ

1 Mã nguồn chương trình: github.com/CaoManhDat/TSP-TabuSearch

Trang 15

Thời gian thực hiện: 19000ms.

Đường đi ngắn nhất có trọng số: 27585.1

7 22183.3333 13133.3333

9 22683.3333 12716.6667

10 23616.6667 15866.6667

11 23700 15933.3333

12 23883.3333 14533.3333

13 24166.6667 13250

14 25149.1667 12365.8333

15 26133.3333 14500

17 26283.3333 12766.6667

18 26433.3333 13433.3333

20 26733.3333 11683.3333

21 27026.1111 13051.9444

22 27096.1111 13415.8333

23 27153.6111 13203.3333

24 27166.6667 9833.3333

25 27233.3333 10450

26 27233.3333 11783.3333

27 27266.6667 10383.3333

28 27433.3333 12400

29 27462.5 12992.2222

File tsp_38_2.txt với 38 đỉnh 38 đỉnh này trong thực tế là 38 khu vực ở Djibouti – Đông Phi

Thời gian thực hiện: 43000ms

Đường đi ngắn nhất có trọng số: 6610.66

Trang 16

4 11155.8333 42712.5

Tính kỳ vọng, phương sai, độ lệch chuẩn

Trang 17

V – ĐỘ PHỨC TẠP

Khi số lượng đỉnh tăng thì số phép gán và so sánh trong thuật toán tìm kiếm Tabu sẽ tăng nhưng không quá nhanh So sánh với các thuật toán tìm kiếm lân cận khác, thì tốc độ của thuật toán này sẽ tốt hơn:

Leo đồi: Tạo ra lân cận cho trạng thái hiện thời và di chuyển sang lân cận có hàm mục tiêu tốt hơn Thuật toán dừng khi đạt tới đỉnh của đồ thị hàm mục tiêu, tương ứng với trạng thái không có lân cận nào tốt hơn Đây có thể là đỉnh thấp nhất (thuật toán tìm được cực trị), hoặc cao nhất (thuật toán chỉ tìm được cực trị địa phương) Thuật toán leo đồi không lưu lại những trạng thái đã qua, không nhìn được xa hơn lân cận của trạng thái hiện thời

Vấn đề lớn với thuật toán leo đồi là không có khả năng “đi xuống” do vậy không thoát được cực trị địa phương khi đã rơi vào Cách di chuyển hoàn toàn ngẫu nhiên

có thể khảo sát toàn bộ không gian trạng thái nhưng không hiệu quả Thuật toán Luyện thép là phương pháp tìm kiếm cục bộ cho phép giải quyết phần nào vấn đề

Trang 18

trên Thuật toán Luyện thép giống như thuật toán Leo đồi ngẫu nhiên, trong đó chấp nhận cả những trạng thái kém hơn trạng thái hiện thời với một xác suất p nào đó Khi chọn ngẫu nhiên một lân cận mà kém hơn trạng thái hiện hành thì thuật toán quyết định di chuyển sang đó với xác suất p Theo thời gian thì p giảm dần do ban đầu thuật toán chưa ở vùng trạng thái tốt và phải chấp nhận thay đổi lớn Thuật toán Luyện thép sẽ tốn nhiều thời gian xử lý ban đầu

Lân cận lớn: Các miền láng giềng được xem tại mỗi bước lặp thường có kích thước rấ lớn, điều này giúp quá trình tìm kiếm vượt ra khỏi những điểm tối ưu cục

bộ, từ đó tìm được những lời giải gần với tối ưu toàn cục Nhược điểm là kích thước miền láng giềng lớn nên các giải thuật lân cận lớn thường mất rất nhiều thời gian Thuật giải Tabu: Sử dụng một danh sách lưu trữ các lời giải nên sẽ không có lời giải nào viếng thăm hai lần Những bước chuyển có chi phí kém hơn lời giải hiện tại vẫn được chấp nhận chỉ cần không nằm trong danh sách cấm So với giải thuật Leo đồi thì Tabu tốt hơn khi vẫn tìm kiếm trong trường hợp không thể tìm ra lời giải tốt hơn lời giải hiện tại với hy vọng sẽ vượt qua những lời giải tối ưu cục bộ

Theo dự đoán, thuật giải tìm kiếm Tabu sẽ có tốc độ tìm kiếm tốt hơn so với các thuật toán khác trong cùng một điều kiện

VI – TÀI LIỆU THAM KHẢO

[1] Bài giảng môn học Cơ sở toán – Tìm kiếm cục bộ, thầy Phạm Thế Bảo, khoa Toán – Tin trường Đại học Tự nhiên

[2] Bài giảng thuật toán của trường Columbia trên website

www.columbia.edu/~cs2035/courses/ieor4405.S17/heur.ppt

[3] Fred Glover and Rafael Marti, chapter 4 Tabu search

[4] Glover, F and Laguna, M., (1997) Tabu Search, Kluwer Academic Publishers,

Boston

[5] Glover, F and M Laguna (1993) “Tabu Search,” Modern Heuristic Techniques

for Combinatorial Problems, C Reeves (ed.), Blackwell Scientific Publishing,

Oxford, pp 70-150

[6] github.com/CaoManhDat/TSP-TabuSearch

Ngày đăng: 23/07/2020, 15:39

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w