Bài toán tìm đường đi của người giao hàng

19 1.7K 12
Bài toán tìm đường đi của người giao hàng

Đ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

Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương NHẬN XÉT CỦA GIÁO VIÊN Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương PHỤ LỤC Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương MỞ ĐẦU Bài toán người giao hàng (tiếng Anh: travelling salesman problem - TSP) toán NP-khó (Một toán A gọi NP- khó (NP-hard) tồn thuật toán đa thức để giải kéo theo tồn thuật toán đa thức để giải toán NP.) thuộc thể loại tối ưu rời rạc hay tổ hợp nghiên cứu vận trù học lý thuyết khoa học máy tính Bài toán phát biểu sau Cho trước danh sách các thành phố khoảng cách chúng, tìm chu trình ngắn thăm thành phố lần Bài toán nêu lần năm 1930 toán nghiên cứu sâu tối ưu hóa Nó thường dùng làm thước đo cho nhiều phương pháp tối ưu hóa Mặc dù toán khó giải trường hợp tổng quát, có nhiều phương pháp giải xác heuristic tìm để giải số trường hợp có tới hàng chục nghìn thành phố Ngay hình thức phát biểu đơn giản nhất, toán TSP có nhiều ứng dụng lập kế hoạch, hậu cần, thiết kế vi mạch Trong lý thuyết độ phức tạp tính toán, phiên định TSP (cho trước độ dài L, xác định xem có tồn hay không chu trình qua đỉnh lần có độ dài nhỏ L) thuộc lớp NP-đầy đủ (Một toán định A gọi NPđầy đủ (NP-Complete) A toán NP hay toán NP quy dẫn A.) Do đó, có nhiều khả thời gian xấu thuật toán cho TSP tăng theo cấp số nhân với số thành phố I TỔNG QUAN VỀ BÀI TOÁN NGƯỜI GIAO HÀNG (travelling salesman problem - TSP) 1.Lịch sử toán người giao hàng Nguồn gốc toán người bán hàng vẫn chưa biết rõ Một sổ tay dành cho người bán hàng xuất năm 1832 có đề cập đến toán có ví dụ cho chu trình nước Đức Thụy Sĩ, không chứa nội dung toán học Bài toán người bán hàng định nghĩa kỉ 19 nhà toán học Ireland William Rowan Hamilton nhà toán học Anh Thomas Kirkman Trò chơi Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương Icosa Hamilton trò chơi giải trí dựa việc tìm kiếm chu trình Hamilton Trường hợp tổng quát TSP nghiên cứu lần các nhà toán học Vienna Harvard năm 1930, đặc biệt Karl Menger, người định nghĩa toán, xem xét thuật toán hiển nhiên cho toán, phát hiện thuật toán láng giềng gần không tối ưu Hassler Whitney đại học Princeton đưa tên toán người bán hàng sau Trong năm 1950 1960, toán trở nên phổ biến giới nghiên cứu khoa học Châu Âu Mỹ George Dantzig, Delbert Ray Fulkerson Selmer M.Johnson công ty RAND Santa Monica có đóng góp quan trọng cho toán này, biểu diễn toán dưới dạng quy hoạch nguyên đưa phương pháp mặt phẳng cắt để tìm lời giải Với phương pháp mới này, họ giải tối ưu trường hợp có 49 thành phố cách xây dựng chu trình chứng minh chu trình ngắn Trong thập niên tiếp theo, toán nghiên cứu nhiều nhà nghiên cứu các lĩnh vực toán học, khoa học máy tính, hóa học, vật lý, các ngành khác Năm 1972, Richard M Karp chứng minh toán chu trình Hamilton NPđầy đủ, kéo theo toán TSP NP-đầy đủ Đây lý giải toán học cho sự khó khăn việc tìm kiếm chu trình ngắn Một bước tiến lớn thực hiện cuối thập niên 1970 1980 Grötschel, Padberg, Rinaldi cộng sự giải trường hợp lên tới 2392 thành phố, sử dụng phương pháp mặt phẳng cắt nhánh cận Trong thập niên 1990, Applegate, Bixby, Chvátal, Cook phát triển chương trình mang tên Concorde giải nhiều trường hợp có độ lớn kỉ lục hiện Gerhard Reinelt xuất liệu các trường hợp có độ khó khác mang tên TSPLIB năm 1991, sử dụng nhiều nhóm nghiên cứu để so sánh kết Năm 2005, Cook cộng sự giải trường hợp có 33810 thành phố, xuất phát từ toán thiết kế vi mạch Đây trường hợp lớn giải TSPLIB Trong nhiều trường hợp khác với hàng triệu thành phố, người ta tìm lời giải với sai số không quá 1% so với lời giải tối ưu Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương Phát biểu toán người giao hàng Có người giao hàng cần giao hàng n thành phố Xuất phát từ thành phố đó, qua các thành phố khác để giao hàng trở thành phố ban đầu Mỗi thành phố đến lần, khoảng cách từ thành phố đến các thành phố khác xác định Hãy tìm chu trình (một đường khép kín thỏa mãn điều kiện trên) cho tổng độ dài các cạnh nhỏ Hiện nay, có nhiều giải thuật khác nhằm mục đích giải bải toán TSP, phải kể đến các giải thuật như: Quy hoạch động (Dynamic Programming), giải thuật di truyền (Genetic Algorithm - GA), giải thuật luyện thép (Simulated Annealing - SA) ,giải thuật đàn kiến (Ant Colony Optimization - ACO), giải thuật trí tuệ bầy đàn (Particle Swarm Optimization - PSO), giải thuật nhánh cận (A branchand-bound)…Và nội dung báo niên luận sẽ đề cập tới việc sử dụng giải thuật nhánh cận để giải toán TSP II GIẢI THUẬT NHÁNH CẬN (A branch-and-bound) Tìm hiểu giải thuật nhánh cận Trong các phương pháp giải toán quy hoạch nguyên, phương pháp nhánh cận các phương pháp có hiệu Phương pháp nhánh cận Land A.H Doig A.G xây dựng năm 1960 giải toán qui hoạch nguyên, đến 1963 Little J.D, Murty K.G, Sweeney D.W Karen C sử dụng thành công giải toán người du Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương lịch Năm 1979 Giáo sư Hoàng Tụy ứng dụng rộng rãi để giải các toán tối ưu khó Phương pháp nhánh cận phương pháp chủ yếu để giải các toán tối ưu tổ hợp Tư tương thuật toán xây dựng tìm kiếm phương án tối ưu, không xây dựng toàn mà sử dụng giá trị cận để hạn chế bớt các nhánh Cây tìm kiếm phương án có nút gốc biểu diễn cho tập tất các phương án có, nút lá biểu diễn cho phương án Nút n có các nút tương ứng với các khả lựa chọn tập phương án xuất phát từ n Với nút ta sẽ xác định giá trị cận Giá trị cận giá trị gần với giá phương án Với toán tìm ta sẽ xác định cận dưới với toán tìm max ta sẽ xác định cận Cận dưới giá trị nhỏ giá phương án, ngược lại cận giá trị lớn giá phương án Áp dụng thuật toán nhánh cận cho toán TSP a) Bài toánngười giao hàng cần giao hàng n thành phố T1…Tn Xuất phát từ thành phố đó, người giao hàng cần qua tất các thành phố lại, thành phố qua lần quay trở lại thành phố xuất phát Gọi Cij chi phí từ thành phố Ti đến Tj Hãy tìm hành trình thỏa yêu cầu toán cho chi phí nhỏ b) Ý tưởng Gọi π hoán vị {1…n} hành trình thỏa yêu cầu toán co dạng: T π(1) => T π(2) =>… => T π(n) Nên co tất n! hành trình Ta cố định thành phố xuất phát T1 co (n-1)! hành trình Lúc này, toán quy toán tìm Min{f(a2,…,an) : (a2,…,an) hoán vị {2,…,n}} Với f(a1,…, an) = C1,a2 + Ca2 ,a3 + + Can−1 ,an + Can ,1 c) Thiết kế Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương Input: C = (Cij) Output: x* = (x1,…,xn) //Hành trình tối ưu f* = f(x*) //Giá trị tối ưu Try(i) = For (j=1  n) If (Chấp nhận được) { Xác định xi theo j; Ghi nhận trạng thái mới; If (i==n) Cập nhật lời giải tối ưu; Else { Xác định cận g(x1,…,xi); If (g(x1,…,xi) ≤ f*) Try (i+1); } //Trả toán trạng thái cu } Nếu ta cố định xuất phát từ T1, phải duyệt vòng lặp từ j=2 Đặt: CMin = Min{Cij: i, j ϵ {1, ,n}} Giả sử vào bước i ta tìm lời giải phận cấp i (x1, ,xi), tức qua đoạn đường T1  T2 … Ti, tương ứng với chi phí: Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương Si = C1x2 + C x2 x3 + + C xi−1 xi Để phát triển hành trình phận thành hành trình đầy đủ, ta phải qua n-i+1 đoạn đường nữa, gồm n-i thành phố lại đoạn quay lại T1 Do chi phí n-i+1 đoạn lại không nhỏ CMin, nên hàm đánh giá cận xác đinh sau: g(x1,…,x2) = Si + (n-i+1)CMin Điều kiện chấp nhận j thành phố Tj chưa qua Ta sử dụng mảng logic để biểu diễn cho trạng thái Daxet[j] = Mảng Daxet[] phải tất Xác định xi theo j câu lệnh gán: xi=j Cập nhật trạng thái mới: Daxet[j]=1 Cập nhật lại chi phí sau tìm xi: S = S + Cxi−1xi Cập nhật lời giải tối ưu: Chi phí hành trình vừa tìm được: Tong = S + Cxn ; Nếu (Tong < f*) Lgtu=x; f* = Tong; Thao tác hủy bỏ trạng thái : Daxet[j]=0 Trả lại chi phí cũ: S = S - C xi−1 xi Báo cáo niên luận Giáo viên hướng dẫn: Nguyễn Minh Thuận Bài toán tìm đường người giao hàng Sinh viên thực hiện: Nguyễn Minh Dương Thủ tục nhánh cận viết lại sau: Try(i) = For (j=2  n) If (!Daxet[j]) { x[i] = j; Daxet[j] = 1; S = S + C[x[i-1]][x[i]]; If (i==n) //Cập nhật tối ưu { Tong = S + C[x[n]][x[1]]]; If(Tong

Ngày đăng: 19/10/2017, 16:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan