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

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

Đ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

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.

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: 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: 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 MỤC LỤC I – TRÌNH BÀY GIẢI THUẬT Ý tưởng thuật tốn tìm kiếm: Xem xét trạng thái, sử dụng hàm biến đổi trạng thái để di chuyển không gian trạng thái đạt trạng thái mong muốn Giải thuật tìm kiếm cục Giải thuật tìm kiếm cục - giải pháp Metaheuristic cho việc giải tốn tối ưu hóa tổ hợp, tối ưu hóa rời rạc máy tính Những tốn cần tìm trạng thái tối ưu tổ hợp tối ưu không gian rời rạc trang thái, không quan tâm đến đường dẫn tới trạng thái Phương pháp tìm kiếm duyệt qua lời giải khơng gian tìm kiếm tìm lời giải cho tối ưu vượt thời gian tìm kiếm cho phép Tìm kiếm cục thiết kế cho tốn tìm kiếm với khơng gian trạng thái lớn 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ó nhiều giải thuật tìm kiếm cục 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 giải thuật tìm kiếm cục là: Chỉ quan tâm đến trạng thái đích, khơng quan tâm đến đường Giải thuật tìm kiếm Tabu Giải thuật tìm kiếm Tabu (Tabu search – TS) đưa Glover vào năm 1986 Từ Tabu viết lại từ chữ Taboo, có nghĩa cấm kỵ Ý tưởng Tabu search sử dụng danh sách lưu trữ lời giải (Tabu list) thực để không thăm lại lời giải hai lần Trong tìm kiếm Tabu, bước có chi phí thấp với lời giải chấp nhận khơng nằm danh sách cấm (Tabu list) Giải thuật Tabu tiếp tục tìm kiếm trường hợp khơng thể tìm lời giải tốt lời giải với hy vọng vượt qua lời giải tối ưu cục Vì bước lời giải chấp nhận hay khơng phụ thuộc vào việc có nằm danh sách cấm hay khơng, kích thước Tabu list quan trọng, phải đủ lớn để đảm bào thoát khỏi vùng tối ưu cục bộ, phải đủ nhỏ để không bỏ lời giải có khả Đây tham số ảnh hưởng đến hiệu việc tìm kiếm thiết lập người lập trình Tìm kiếm Tabu dựa giải thuyết vấn đề giải, kết hợp chặt chẽ nhớ thích nghi thăm dị phản ứng Giống việc leo núi, người ta phải nhớ có chọn lọc đường qua lập lựa chọn chiến lược đường Bộ nhớ thích nghi cho phép tìm kiếm khơng gian lời giải tiết kiệm hiệu Việc nhấn mạnh vào đặc điểm thăm dò phản ứng Tabu search là: lựa chọn chiến lược cung cấp nhiều thông tin lựa chọn ngẫu nhiên tốt Thăm dị phản ứng tích hợp ngun lý tìm kiếm thơng tin khai thác lời giải tốt tìm vùng có khả tốt khác Tìm kiếm Tabu phối hợp tìm đường hiệu việc kết hợp ưu kỹ thuật liên quan tới nhớ thích nghi thăm dị phản ứng Vì vậy, thành phần tìm kiếm Tabu cách sử dụng nhớ Cách sử dụng nhớ Cấu trúc nhớ Tabu search hoạt động cách tham khảo chiều chính: Tính chất vừa xảy (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 nhớ Tabu search Trong tính chất vừa xảy tính chất thường xuyên hỗ trợ lẫn Chiều chất lượng cho biết khả phân biệt chất lượng lời giải tìm thấy trình tìm kiếm Chiều ảnh hưởng tính xem xét lựa chọn tạo trình tìm kiếm có ảnh hưởng đến chất lượng cấu trúc khơng 6 Bộ nhớ dùng tìm kiếm Tabu nhớ nhớ thuộc tính (Explicit Attributive Memory) Bộ nhớ ghi nhận toàn lời giải, thường chứa lời giải tốt trình tìm kiếm Nó dùng để mở rộng tìm kiếm cục Bộ nhớ thuộc tính lưu lại thơng tin thuộc tính lời giải có thay đổi từ lời giải sang lời giải khác Ví dụ minh họa cho thấy việc sử dụng thuộc tính cấu trúc nhớ vừa xảy thường xuyên Yêu cầu: Tìm câu tối ưu đồ thị với nút đánh số từ đến Ba đồ thị thể bước k, k+1, k+ trình tạo trạng thái để tìm lời giải Một phép chuyển phải gồm: cạnh lấy cạnh thêm vào Hình 2: Minh họa tabu tối ưu Phép chuyển từ bước k sang k+1: Gỡ cạnh (1, 3) (cạnh trong) thêm vào (4, 6) (cạnh ngoài) Ở bước k, cạnh coi hai thuộc tính lời giải khác gọi Tabu – active Dùng để tạo trạng thái Tabu phép chuyển bước Ví dụ nhớ xảy chọn cạnh (1, 3) tabu-active bước, để cạnh (1, 3) không bị thêm lại vào bước Do đó, muốn thêm cạnh (1, 3) thêm vào bước k+4 gần Nếu cạnh (4, 6) Tabu-active, bước để giữ cho cạnh (4, 6) khỏi bị gỡ Những điều giúp việc thực phép chuyển không lặp lại lần chuyển trước 7 Số bước cạnh trạng thái Tabu-active gọi Tabu-tenure Nếu giá trị Tabu tenure lớn chất lượng lời giải khơng cải thiện, nhỏ làm cho hàm mục tiêu bị lặp lại theo chu kỳ Khi nhớ mở rộng lời giải sang vùng lân cận nhớ thuộc tính giữ cấm phép chuyển có chọn lọc, làm giảm lời giải Chiến lược tham số tìm kiếm Tabu Gồm chiến lược chính: Chiến lược cấm: Kiểm sốt nhập vào Tabu list Chiến lược giải phóng: Kiểm sốt khỏi Tabu list thời điểm thoát khỏi Chiến lược ngắn hạn (short-term): Quản lý tác động qua lại chiến lược cấm chiến lược giải phóng để lựa chọn bước giải thử nghiệm (thăm dò phản ứng) Các tham số Tabu search Thủ tục tìm kiếm địa phương Cấu trúc vùng lân cận (Neighbourhood): Dùng để xác định lời giải liền kề đạt từ lời giải Di chuyển Tabu: Một danh sách ghi lại hành động bị cấm (tabu list) Thêm di chuyển Tabu: Thêm lựa chọn vào tabu list Điều kiện “khát vọng”: Khi di chuyển tabu có lời giải thăm dị hấp dẫn đủ để đưa giải pháp tốt nhất, phân loại tabu bị ghi đè Một điều kiện cho phép ghi đè gọi tiêu chuẩn “khát vọng” Kích thước tối đa Tabu list Điều kiện dừng Thuật tốn tìm kiếm Tabu Bước k=1 Chọn lịch trình ban đầu S1 gán Sbest = S1 Bước Xác định vùng lân cận N(Sk) Chọn Sc∈N(Sk) từ lịch trình tốt có Nếu di chuyển Sk → Sc bị cấm cặp di chuyền nằm tabu list đến bước Nếu di chuyển Sk → Sc không bị cấm cặp di chuyền nằm tabu list gán Sk+1 = Sc Đưa di chuyển theo chiều ngược lại vào đầu danh sách cấm (tabu list) Đẩy tất di chuyển khác tabu list xuống vị trí Xóa di chuyển nằm cuối tabu list Nếu F(Sc) tốt F(Sbest) Sbest = Sc Đi tới bước Bước k = k+1 ; Nếu điều kiện dừng (stopping condition) = true dừng lại Ngược lại quay lại bước Một số điều kiện dừng: Khơng có giải pháp khả thi vùng lân cận K lớ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 lớn số định trước Đã tìm lời giải tối ưu Ví dụ minh họa thuật tốn Cho bảng phân cơng với k cơng việc cần hồn thành (trong ví dụ xét cơng việc), việc thực đơn vị thời gian pj Việc j có khối lượng wj Tìm cách thực công việc để lợi nhuận cao thời gian thực Tj tính tổng thời gian thực j cơng việc trước trừ thời gian quy định Nếu Tj Tabu list {(1, 4)} F(Sbest) = 436 Interation 2: S2 = (2, 4, 1, 3); F(S2) = 436 Các vùng lân cận S2, có: F(4, 2, 1, 3) = 460 Công việc pj dj wj Tj F(S2) 4 12 12 460 10 12 12 10 14 20 13 1 36 Công việc pj 10 dj wj 12 Tj F(S2) 500 Vi phạm Tabu list {(1, 4)} 10 14 16 4 12 12 12 13 1 36 F(4, 2, 1, 3) = 500 F(2, 4, 3, 1) = 608 Công việc pj 10 13 10 dj 12 wj 12 12 14 Tj 26 33 F(S2) 608 Chọn ứng viên Sc = 4, 2, 1, F(Sc) = 460 nhỏ vùng lân cận F(Sc) > F(Sbest) nên F(Sbest) = 436 (theo giá trị tại) Cặp (2, 4) đổi chỗ lần => Tabu list {(2, 4) (1, 4)} 11 Interation 3: S3 = (4, 2, 1, 3); F(S3) = 460 Các vùng lân cận S3, có: F(2, 4, 1, 3) = 436 Công việc pj 10 dj wj 12 Tj F(S3) 436 Vi phạm Tabu list {(2, 4) (1, 4)} 4 12 12 10 14 20 13 1 36 10 14 10 10 12 22 13 1 36 F(4, 1, 2, 3) = 440 Công việc pj dj wj Tj F(S3) 4 12 12 440 F(4, 1, 3, 1) = 632 Công việc pj 10 13 10 dj 12 wj 12 12 14 Tj 12 26 33 F(S3) 632 Chọn ứng viên Sc = 4, 1, 2, F(Sc) = 440 nhỏ vùng lân cận F(Sc) > F(Sbest) nên F(Sbest) = 436 (theo giá trị tại) Cặp (2, 1) đổi chỗ 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 S4, có: F(1, 4, 2, 3) = 408 Công việc 12 pj dj wj Tj F(S4) 10 14 408 12 12 10 12 22 13 1 36 10 12 12 10 14 20 13 1 36 F(4, 2, 1, 3) = 460 Công việc pj dj 12 wj 12 Tj F(S4) 460 Vi phạm Tabu list {(2, 1) (2, 4)} F(4, 1, 3, 2) = 586 Công việc pj 10 13 10 dj 12 wj 12 14 12 Tj 10 26 35 F(S4) 586 Chọn ứng viên Sc = 1, 4, 2, F(S c) = 408 nhỏ vùng lân cận, đồng thời F(Sc) < F(Sbest) nên F(Sbest) = 408 Cặp (4, 1) đổi chỗ lần => Tabu list {(4, 1) (2, 1)} II – XÂY DỰNG DỮ LIỆU TEST Xây dựng liệu giải toán người du lịch thuật toán Tabu search Bài toán Travelling Salesman Problem – TSP toán tối ưu tổ hợp Bài toán phát biểu: Cho trước danh sách thành phố khoảng cách thành phố Tìm chu trình ngắn qua tất thành phố lần Bài tốn biểu diễn dạng đồ thị với: Mỗi thành phố đỉnh, đường thành phố cách đi, khoảng cách trọng số đồ thị Bài tốn trở thành tìm chu trình qua đỉnh cho tổng trọng số cạnh nhỏ Biểu diễn thành phố tọa độ chúng Mỗi dòng liệu biểu diễn thành phố với: Số số thứ tự thành phố, số thứ hoành độ số thứ thể tung độ Dữ liệu dùng tính độ dài đỉnh liệu đầu vào cho thuật toán Tabu search 13 III – CÀI ĐẶT Số đỉnh nhập vào >=10 Mỗi đỉnh có giá trị: Số thứ tự đỉnh, hoành độ X, tung độ Y Đưa 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 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::max(); for(int i = 0; i < NUM_INTERATION; i++) { 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 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 câu lệnh clock_t time = clock(); time = clock() - time; int ms = time / CLOCKS_PER_SEC * 1000; cout

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