BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI --- NGUYỄN HẢI ĐĂNG THUẬT TOÁN TÌM KIẾM CỤC BỘ GIẢI BÀI TOÁN ĐIỀU HÀNH VẬN TẢI TỐI THIỂU HÓA HÀNH TRÌNH DÀI NHẤT LUẬN VĂN THẠC
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-
NGUYỄN HẢI ĐĂNG
THUẬT TOÁN TÌM KIẾM CỤC BỘ GIẢI BÀI TOÁN
ĐIỀU HÀNH VẬN TẢI TỐI THIỂU HÓA
HÀNH TRÌNH DÀI NHẤT
LUẬN VĂN THẠC SĨ KỸ THUẬT
CÔNG NGHỆ THÔNG TIN
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-
NGUYỄN HẢI ĐĂNG
THUẬT TOÁN TÌM KIẾM CỤC BỘ GIẢI BÀI TOÁN
ĐIỀU HÀNH VẬN TẢI TỐI THIỂU HÓA
HÀNH TRÌNH DÀI NHẤT
Chuyên ngành: CÔNG NGHỆ THÔNG TIN
LUẬN VĂN THẠC SĨ KỸ THUẬT
CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC:
TS PHẠM QUANG DŨNG
Trang 3hoạt động vận chuyển hàng hóa vẫn chưa hiệu quả Việc thiếu thông tin thời gian
thực và sự phức tạp trong lập kế hoạch để tối ưu hóa sự lựa chọn các tuyến đường cho các phương tiện là một trong những lý do chính Có rất ít nghiên cứu về lợi ích
có được về tối ưu quãng đường di chuyển của các phương tiện để phục vụ nhiều lượng khách nhất và tốn ít chi phí nhất Sự tối ưu này phù hợp với xu hướng phát triển của nền kinh tế hiện nay
Tối ưu hóa quá trình di chuyển của các phương tiện tạo ra cơ hội kinh doanh
hấp dẫn bởi vì quá trình di chuyển của các phương tiện sẽ là ngắn nhất và phục vụ được nhiều nhu cầu nhất Như vậy sẽ kéo theo giá thành trong việc chở hàng sẽ
giảm theo, ngoài ra còn giảm nguy cơ tắc nghẽn giao thông, gây ra nhiều hệ lụy như
về ô nhiễm môi trường…
Trong luận văn này, tôi nghiên cứu bài toán lập lộ trình vận tải giao hàng cho các xe tải với ràng buộc về tải trọng nhằm tối thiểu hóa hành trình dài nhất (MMCVRP) Mục tiêu của bài toán này là đảm bảo tất cả các khách hàng được
phục vụ sớm nhất có thể và tối thiểu hóa hành trình dài nhất Sau đó, tôi đề xuất và cài đặt thử nghiệm 10 thuật toán tham lam xây dựng lời giải ban đầu Các thuật toán này được cài đặt, thử nghiệm và đánh giá trên các bộ dữ liệu trích xuất từ bộ dữ liệu
vận tải của Christophides
Luận văn được chia thành 3 chương không kể phần mở đầu và phần kết luận: Chương 1 trình bày cơ sở lý thuyết về bài toán tối ưu tổ hợp, bài toán tối ưu lộ trình
Trang 4vận tải, các hướng tiếp cận và thư viện Chương 2 trình bày về 10 thuật toán tham lam và chiến lược của từng thuật toán Chương 3 trình bày về kết quả thử nghiệm và đánh giá đối với các thuật toán tham lam
Trang 5M ỤC LỤC
L ỜI MỞ ĐẦU 1
L ỜI CAM ĐOAN 5
L ỜI CẢM ƠN 6
DANH M ỤC CÁC CHỮ VIẾT TẮT 7
DANH M ỤC CÁC BẢNG 8
DANH M ỤC CÁC HÌNH VẼ 9
DANH M ỤC CÁC GIẢ MÃ 10
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 11
1.1 Bài toán t ối ưu tổ hợp 11
1 2 Các hướng tiếp cận giải bài toán tối ưu tổ hợp 13
1.2.1 Hướng tiếp cận giải đúng 14
1.2.2 Hướng tiếp cận giải gần đúng 14
1.3 Các bài toán t ối ưu điều hành vận tải 15
1.4 Thư viện CBLSVR 17
1.4.1 T ổng quan 17
1.4.2 Láng gi ềng 17
1.4.3 Các l ớp API 27
1.5 Bài toán điều hành vận tải tối thiểu hóa hành trình dài nhất 32
1.5.1 Phát bi ểu bài toán 32
1.5.2 Mô hình toán h ọc 33
CHƯƠNG 2 CÀI ĐẶT THUẬT TOÁN GIẢI BÀI TOÁN ĐIỀU HÀNH VẬN T ẢI TỐI THIỂU HÓA HÀNH TRÌNH DÀI NHẤT 37
2.1 Thu ật toán tham lam 1 (Greedy1) 37
2.2 Thu ật toán tham lam 2 (Greedy2) 38
2.3 Thu ật toán tham lam 3 (Greedy3) 39
2.4 Thu ật toán tham lam 4 (Greedy4) 40
2.5 Thu ật toán tham lam 5 (Greedy5) 42
2.6 Thu ật toán tham lam 6 (Greedy6) 43
2.7 Thu ật toán tham lam 7 (Greedy7) 44
ật toán tham lam 8 (Greedy8) 45
Trang 62.9 Thu ật toán tham lam 9 (Greedy9) 46
2.10 Thu ật toán tham lam 10 (Greedy10) 47
CHƯƠNG 3 KẾT QUẢ THỬ NGHIỆM VÀ ĐÁNH GIÁ 49
3.1 D ữ liệu 49
3.2 K ết quả thử nghiệm và đánh giá 49
3.3 T ổng kết và nhận xét kết quả thử nghiệm 58
K ẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 61
TÀI LI ỆU THAM KHẢO 62
Trang 7L ỜI CAM ĐOAN
Tôi xin cam đoan số liệu và kết quả nghiên cứu trong luận văn này là trung
thực và không sao chép từ bất kỳ đồ án, luận văn nào khác Mọi thông tin trích dẫn trong luận văn đã được chỉ rõ nguồn gốc rõ ràng và được phép công bố Nếu không đúng như đã nêu trên tôi xin hoàn toàn chịu trách nhiệm về đề tài của mình
Hà Nội, Ngày 30 Tháng 9 Năm 2018
H ọc viên thực hiện
Nguy ễn Hải Đăng
Trang 8L ỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành và sự tri ân sâu sắc đối với các thầy cô của trường Đại học Bách Khoa Hà Nội, đặc biệt là các thầy cô trong viện Công Nghệ Thông Tin và Truyền thông của trường đã tạo điều kiện cho em được học tập và nghiên cứu chuyên ngành công nghệ thông tin Và em cũng xin chân thành cảm ơn
thầy TS Phạm Quang Dũng và các thành viên trong nhóm nghiên cứu đã nhiệt tình hướng dẫn, giúp đỡ em hoàn thành khóa luận tốt nghiệp
Với điều kiện thời gian cũng như kinh nghiệm còn hạn chế của một học viên,
luận văn này không thể tránh được những thiếu sót Em rất mong nhận được sự chỉ
bảo, đóng góp ý kiến của các thầy cô để em có điều kiện bổ sung, nâng cao ý thức
của mình, phục vụ tốt hơn trong công việc thực tế
Em xin chân thành cảm ơn!
Trang 9DANH M ỤC CÁC CHỮ VIẾT TẮT
Chữ viết tắt Tên đầy đủ Ý nghĩa
CBLS Constraint Based Local
Search
Tìm kiếm cục bộ dựa trên ràng buộc
MMCVRP Min-Max Capacitated
Vehicle Routing Problem
Bài toán định tuyến đường đi các phương tiện
nhằm tối thiểu hóa hành trình dài nhất
ILP Integer Linear Program Quy hoạch nguyên tuyến
tính VNS Variable Neighborhood
Search
Tìm kiếm trên các tập láng giềng khác nhau VRP Vehicle Routing Problem Bài toán vận tải
CVRP Capacitated Vehicle
Routing Problem
Bài toán vận tải có ràng
buộc sức chứa VRPTW Vehicle Routing Problem
with Time Window
Bài toán vận tải có ràng
buộc về khung thời gian VRPPD VRP Pickup and Delivery Bài toán vận chuyển hàng
hóa UAV Unmanned aerial vehicle Máy bay không người lái CBLSVR Constraint Based Local
Search Vehicle Routing
Tìm kiếm cục bộ dựa trên ràng buộc các bài toán
vận tải API Application Programming
Interface
Giao diện lập trình ứng
dụng
SD Standard Deviation Độ lệch chuẩn
MDR Minimum distance Route
Trang 10DANH M ỤC CÁC BẢNG
Bảng 1.1: Nhóm hàm khởi tạo lời giải 28
Bảng 1.2: Nhóm hàm truy vấn về trạng thái của lời giải 28
Bảng 1.3: Một số hàm và ràng buộc cơ bản được thiết kế trong thư viện CBLSVR 30 Bảng 3.1: Mô tả bộ dữ liệu 49
Bảng 3.2: Kết quả thử nghiệm với thuật toán greedy1 51
Bảng 3.3: Kết quả thử nghiệm với thuật toán greedy2 51
Bảng 3.4: Kết quả thử nghiệm với thuật toán greedy3 52
Bảng 3.5: Kết quả thử nghiệm với thuật toán greedy4 53
Bảng 3.6: Kết quả thử nghiệm với thuật toán greedy5 54
Bảng 3.7: Kết quả thử nghiệm với thuật toán greedy6 55
Bảng 3.8: Kết quả thử nghiệm với thuật toán greedy7 56
Bảng 3.9: Kết quả thử nghiệm với thuật toán greedy8 56
Bảng 3.10: Kết quả thử nghiệm với thuật toán greedy9 57
Bảng 3.11: Kết quả thử nghiệm với thuật toán greedy10 58
Bảng 3.12: Tổng hợp kết quả thử nghiệm với các thuật toán 60
Trang 11DANH M ỤC CÁC HÌNH VẼ
Hình 1.1: Ví dụ 2 tuyến đường khác nhau 18
Hình 1.2: Minh họa thuật toán performTwoOptMove1(2,6) 19
Hình 1.3: Minh họa thuật toán performTwoOptMove2(2,6) 19
Hình 1.4: Minh họa thuật toán performTwoOptMove3(2,6) 20
Hình 1.5: Minh họa thuật toán performTwoOptMove4(2,6) 20
Hình 1.6: Ví dụ 2 tuyến đường khác nhau router[1], router[2] 21
Hình 1.7: Minh họa thuật toán performTwoOptMove5(2,6) 21
Hình 1.8: Minh họa thuật toán performTwoOptMove6(2,6) 22
Hình 1.9: Minh họa thuật toán performTwoOptMove7(2,6) 22
Hình 1.10: Minh họa thuật toán performTwoOptMove8(2,6) 23
Hình 1.11: Ví dụ 2 tuyến đường với 5 điểm 24
Hình 1.12: Minh họa thuật toán performOrOptMove1(2,4,6) 24
Hình 1.13: Minh họa thuật toán performOrOptMove2(2,4,6) 25
Hình 1.14: Ví dụ tuyến đường với 8 điểm 25
Hình 1.15: Minh họa thuật toán performThreeOptMove1(2,4,6) 26
Hình 1.16: Ví dụ 2 tuyến đường router[1] và router [2] với các điểm khác nhau 26
Hình 1.17: Minh họa giải thuật performCrossExchangeMove(2,4,7,9) 27
Hình 1.18: Minh họa lộ trình vận tải cho 2 xe 34
Trang 12DANH M ỤC CÁC GIẢ MÃ
Giả mã 2.1: Thuật toán tham lam thứ 1 38
Giả mã 2.2: Thuật toán tham lam thứ 2 39
Giả mã 2.3: Thuật toán tham lam thứ 3 40
Giả mã 2.4: Thuật toán tham lam thứ 4 41
Giả mã 2.5: Thuật toán tham lam thứ 5 43
Giả mã 2.6: Thuật toán tham lam thứ 6 44
Giả mã 2.7: Thuật toán tham lam thứ 7 45
Giả mã 2.8: Thuật toán tham lam thứ 8 46
Giả mã 2.9: Thuật toán tham lam thứ 9 47
Giả mã 2.10: Thuật toán tham lam thứ 10 48
Trang 13CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.1 Bài toán t ối ưu tổ hợp
Bài toán tối ưu tổ hợp là bài toán không quan tâm đến việc xây dựng tất cả các cấu hình như bài toán liệt kê mà chỉ nhằm xây dựng một cấu hình “tốt” nhất theo một mục tiêu nào đó Bài toán thường xuất hiện rất nhiều trong các lĩnh vực
của đời sống xã hội đặc biệt là các hoạt động quản lý, lập kế hoạch, điều hành trong các tổ chức, doanh nghiệp Như bài toán lập tuyến tối ưu trong lĩnh vực giao thông
vận tải [18] [16], bài toán đóng gói hàng hóa [26], bài toán xếp hàng trong các dây chuyền sản xuất [8], bài toán xếp thời khóa biểu trong quản lý đào tạo [25]
Mục tiêu của các bài toán này là cần tìm ra một lời giải thỏa mãn một tập các ràng buộc đặt ra, đồng thời tối ưu một hoặc nhiều hàm mục tiêu nào đó
Một bài toán tối ưu tổ hợp [31] là một bộ (X, D, C, f) trong đó:
f là hàm mục tiêu cần tối ưu Trong nhiều bài toán, yêu cầu đặt ra là tìm lời
giải thỏa mãn ràng buộc, vì vậy hàm mục tiêu f không được quan tâm
Bài toán tối ưu tổ hợp có nhiều ứng dụng trong thực tế, đã và đang thu hút được đầu tư nghiên cứu nhằm giải quyết các vấn đề trong điều hành, sản xuất để tăng sản lượng lao động, tiết kiệm chi phí nguyên liệu và thời gian
Ví dụ về bài toán N-Queen yêu cầu xếp n con hậu lên một bàn cờ vua kích thước nxn sao cho không có hai con hậu bất kì nào khống chế nhau Khả năng
khống chế của mỗi con hậu bao gồm:
Khống chế những ô cùng hàng hoặc cùng cột
Trang 14Khống chế những ô thuộc cùng đường chéo
Bài toán N-Queen thuộc vào lớp bài toán tối ưu tổ hợp, có thể được mô tả bằng mô hình toán học:
Tập n biến quyết định X = {X 1 , X 2 , …, X n}: Biến X i biểu thị hàng cho con hậu
đứng ở cột i
Miền giá trị D = {D 1 , D 2 , …, D n } trong đó D i = {1…n} M ỗi biến X i có miền
từ 1 đến n
Tập ràng buộc:
X i ≠ Xj v ới i ≠ j: Các con hậu không ở cùng 1 hàng
Quá trình giải bài toán theo hướng tìm kiếm cục bộ dựa trên ràng buộc gồm hai bước chính dựa theo kiến trúc CBLS [28]:
Mô hình hóa bài toán
Định nghĩa các biến quyết định
Xây dựng ràng buộc và hàm mục tiêu
Tìm kiếm
Khởi tạo lời giải ban đầu
Thực hiện lặp: Di chuyển qua các lời giải lân cận
Phân tích bài toán N-Queen với n = 8 theo mô hình CBLS Quá trình mô hình hóa
bài toán dựa theo mô hình toán học đã trình bày ở trên:
Tập biến: Mảng x[i], trong đó x[i] là hàng của con hậu trên cột i
Miền giá trị x[i], D[i] = [0 7]
Trang 15Chỉ có duy nhất một loại bước di chuyển là gán lại giá trị một phần tử X i trong tập
biến Lời giải được khởi tạo ngẫu nhiên Tìm kiếm dừng lại khi không còn vi phạm
Lời giải tiếp theo được lựa chọn ra trong các lời giải lân cận hiện tại theo cách tham lam:
Chọn con hậu ở cột i đang bị khống chế nhiều nhất
Gán lại giá trị X i thành giá trị làm giảm vi phạm nhiều nhất
1.2 Các hướng tiếp cận giải bài toán tối ưu tổ hợp
Các hướng tiếp cận để giải bài toán tối ưu tổ hợp được chia thành 2 loại: hướng tiếp cận giải đúng và hướng tiếp cận giải gần đúng Hướng tiếp cận giải đúng đảm bảo luôn cho lời giải tối ưu, tuy nhiên với các bộ dữ liệu lớn thì thời gian tính
là rất lớn Hướng tiếp cận giải gần đúng trong đó có tìm kiếm cục bộ để giải các bài toán tối ưu tổ hợp kích thước lớn đang được quan tâm nghiên cứu phát triển vì nó
có khả năng tìm ra lời giải chất lượng tốt trong nhiều bài toán kích thước lớn với
thời gian hữu hạn cho phép
Trang 161.2.1 Hướng tiếp cận giải đúng
Hướng tiếp cận giải đúng bao gồm các kỹ thuật cho phép tìm ra lời giải tối
ưu hoặc chỉ ra lời giải thỏa mãn ràng buộc không tồn tại vì nó duyệt hết các khả năng trong không gian lời giải Phương pháp này bao gồm các thuật toán điển hình như thuật toán nhánh cận hoặc quy hoạnh động, quy hoạch ràng buộc, hay quy
hoạch nguyên tuyến tính (ILP)
1.2.2 Hướng tiếp cận giải gần đúng
Tìm kiếm cục bộ (Local Search) là phương pháp tìm lời giải tốt hơn từ
những lời giải là láng giềng của lời giải hiện tại bằng cách áp dụng các phép biến đổi cục bộ để sinh ra lời giải láng giềng từ lời giải hiện tại
Để tránh vấn đề tối ưu cục bộ của Local search có thể áp dụng các phương pháp Meta-Heuristic được trình bày sau đây:
- Tìm kiếm Tabu (Tabu search) [13] [14] Là thuật toán sử dụng một danh sách
chứa các thao tác di chuyển đã thực hiện trước đó, thao tác di chuyển sẽ không được
thực hiện nếu đã tồn tại trong danh sách Sử dụng phương pháp này để tránh quay
trở lại các lời giải trước đó
- Giải thuật di truyền [15] dựa trên các nguyên lý của tiến hóa như đột biến,
chọn lọc Ý tưởng ban đầu là khởi tạo một quần thể các lời giải Các cặp cá thể trong quần thể sẽ giao ghép với nhau để tạo ra cá thể mới có đặc tính như cặp cá thể sinh ra nó Hoặc từ một cá thể đột biến cho ra cá thể khác bằng cách thay đổi một số đặc tính của cá thể ban đầu Cho đến nay, đã có rất nhiều phương thức được đề xuất cho quá trình ghép gặp và đột biến áp dụng cho bài toán tối ưu, trong đó có đề xuất khác thành công như [20] [5] [4]
- Thuật toán Variable neighborhood Search chia tập láng giềng thành các tập láng giềng nhỏ hơn với độ ưu tiên khác nhau Trong quá trình tìm kiếm các tập láng
giềng sẽ lần lượt được duyệt theo thứ tự ưu tiên theo các mức độ ưu tiên cho trước
Nếu tìm thấy láng giềng tốt hơn lời giải hiện tại thì các tập láng giềng còn lại sẽ không được duyệt, nhờ vậy tại mỗi vòng lặp, lời giải được cải thiện với chi phí thấp
Trang 17và trong tình huống gặp tối ưu cục bộ, tất cả các tập láng giềng sẽ được duyệt để tìm
lời giải tốt hơn do đó khả năng tìm được lời giải tối ưu sẽ cao hơn Hansen đã nguyên cứu tỉ mỉ thuật toán Variable Neighborhood Search (VNS) cơ bản và các kỹ thuật cải tiến, rồi sử dụng chúng để giải nhiều bài toán cổ điển trong [19]
1.3 Các bài toán t ối ưu điều hành vận tải
Bài toán tối ưu điều hành vận tải là bài toán trong đó cần xây dựng lộ trình cho một đội xe phục vụ các yêu cầu vận chuyển người và hàng hóa Có nhiều biến
thể của bài toán phụ thuộc vào ràng buộc và hàm mục tiêu trong tùy từng ngữ cảnh
cụ thể
Vào năm 1959 Dantzig [6] và cộng sự đã đề xuất mô hình hóa của bài toán
vận tải dưới dạng bài toán tối ưu Trong mô hình với điều kiện bao gồm các xe vận
tải giống nhau về sức chứa để vận chuyển hàng hóa từ kho trung tâm đến cho khách hàng Ngày nay, bài toán này được gọi chung là “Vehicle Routing Problem” (VRP) [17] [22] Đã có rất nhiều bài báo nghiên cứu về vấn đề này và phát triển theo nhiều hướng khác nhau như Capacitated Vehicle Routing problem (CVRP) [30] Min-Max Capacitated Vehicle Routing Problem (MMCVRP) [1], Vehicle Routing Problem with Time Windows (VRPTW) [7]
Mục tiêu của bài toán CVRP là tổng chiều dài tuyến đường là ngắn nhất Có
rất nhiều nhà khoa học đã phát triển các thuật toán heuristics [11] [24] và thuật toán chính xác [3] [10]
Bài toán MMCVRP (Min-Max Capacitated Vehicle Routing Problem) với
mục tiêu tối thiểu hóa hành trình dài nhất Thuật toán này đầu tiên được đề xuất bởi Golden và đồng sự [2] Gần đây, thuật toán tìm kiếm cục bộ đang được đề xuất và cài đặt thử nghiệm [9] để giải bài toán MMCVRP Bài toán này sẽ được trình bày
cụ thể phần 1.5.3
Bài toán VRPTW thực chất là bài toán CVRP có bổ sung thêm ràng buộc về khung thời gian VRPTW Là bài toán điều hành xe sao cho với mỗi yêu cầu của
Trang 18khách hàng điều tồn tại 2 tham số e, l Xe phải đến đón trong khoảng thời gian từ e đến l Nếu xe đến sớm hơn e thì sẽ phải chờ tới thời điểm e mới được phục vụ và xe không được tới muộn hơn l Một số thuật toán thường được sử dụng để giải quyết
vấn đề này là tìm kiếm Tabu, giải thuật di truyền, thuật toán tiến hóa, tối ưu hóa
hoặc nhiều khách khác Như vậy sẽ có ràng buộc về thứ tự gặp khách hàng và tuân
thủ theo thứ tự hành trình đó Khi gắn với các mô hình thực tế trong cuộc sống trở nên khó khăn và phức tạp hơn nhiều so với VRP cổ điển Trong thực tế, hàng hóa không chỉ cần giao đến khách hàng mà còn nhận từ khách hàng và đưa trở lại về kho Có nhiều công trình nghiên cứu về vấn đề này, thuật toán tìm kiếm cục bộ Heuristics đã được đề xuất trong [12], để tối ưu hóa tuyến đường dự kiến của xe Đến năm 2014, một mô hình vận tải mới kết hợp vận chuyển người và hàng hoá được đề xuất đầu tiên bởi Li và đồng nghiệp [23]
Trong một vài năm gần đây, mô hình vận tải kết hợp giữa xe tải với thiết bị bay UAV đã được đề xuất, nghiên cứu và thử nghiệm Mô hình tối ưu cho bài toán này được đề xuất bởi Murray và Chu vào năm 2015 [27] Mô hình được xây dựng theo hướng xe tải sẽ vận chuyển các hàng hoá nặng và cồng kềnh và có khoảng cách lớn với tốc độ di chuyển chậm hơn so với thiết bị bay UAV nhưng UAV chỉ di chuyển được trong khoảng cách ngắn và phải quay về để nạp năng lượng điện
Điều đó cho thấy, bài toán tối ưu điều hành vận tải được quan tâm trong nhiều thập kỷ qua và số lượng giải pháp đã tăng lên nhanh chóng Cùng với sự phát triển về tốc độ xử lý và dung lượng bộ nhớ đã tăng lên đáng kể, cho phép các nhà khoa học giải quyết nhiều trường hợp khác nhau, thử nghiệm với dữ liệu lớn và thu được kết quả tốt hơn
Trang 19diện giúp định nghĩa các bất biến, hàm, ràng buộc mà người dùng tự định nghĩa có
thể tích hợp với các thành phần sẵn có của thư viện Ngoài ra thư viện còn có tính
mở, cho phép người dùng có thể tự thiết kế và cài đặt các bất biến, hàm và ràng
buộc của mình và tích hợp vào các thành phần khác, cũng như cài đặt chiến lược tìm kiếm của riêng mình Các API hỗ chợ cho người dùng giảm thời gian phát triển các ứng dụng, chương trình Local Search ngắn gọn hơn và không cần phải thao tác trên dữ liệu phức tạp
1.4.2 Láng gi ềng
Thuật toán local Search là thuật toán được tạo ra từ các lời giải láng giềng
dựa trên các thao tác di chuyển (move) Thư viện CBLSVR đề cập đến các thao tác
di chuyển (move) thông dụng như: One-point move thay đổi vị trí 1 điểm Twopoint move đổi vị trí 2 điểm với nhau Two-opt move xóa bỏ 2 kết nối cũ, thay bằng 2 kết
nối mới giữa các điểm… Phần sau đây, các toán tử di chuyển cục bộ sẽ được trình bày chi tiết
1.4.2.1 Phương thức performOnePointMove(Point x, Point y)
Trong đó: điểm x và điểm y có thể cùng hoặc khác tuyến đường (route)
Thực hiện: chèn điểm x vào sau điểm y
Trang 201.4.2.2 Các phương thức performTwoOptMove1(Point x, Point y);
performTwoOptMove2(Point x, Point y); performTwoOptMove3(Point x, Point y); performTwoOptMove4(Point x, Point y)
Trong đó: điểm x, y nằm trên các tuyến đường khác nhau; x, y không phải là điểm đầu hay điểm kết thúc; next[x], next[y] là điểm tiếp theo lần lượt của x, y trên
tuyến đường
Thực hiện: Xóa bỏ đường nối giữa điểm x và next[x], điểm y và next[y] Tạo
mới đường nối cạnh (x, y) và cạnh (next[x], next[y]) đối với mỗi phương thức sẽ xác
định tuyến đường khác nhau (do đổi chiều đường đi)
Ví dụ: Cho 2 tuyến đường router[1] và router[2] với 1, 2, 3, 4, 5, 6, 7 là các điểm,
S1, S2là điểm xuất phát và E1, E2là điểm kết thúc tuyến đường
Nếu thực hiện: performTwoOptMove1(2,6)
+ Xóa bỏ kết nối cạnh (2,3); (6,7)
+ Bổ sung kết nối (2,6); (3,7)
+ Đổi chiều tuyến đường
Trang 21Hình 1.2: Minh h ọa thuật toán performTwoOptMove1(2,6)
Kết quả route[1] = S11265E1
route[2] = S2437E2
Nếu thực hiện: performTwoOptMove2(2,6)
+ Xóa bỏ kết nối cạnh (2,3); (6,7)
+ Bổ sung kết nối (2,6); (3,7)
+ Đổi chiều tuyến đường
Kết quả route[1] = S15621E1
route[2] = S2437E2
Nếu thực hiện: performTwoOptMove3(2,6)
+ Xóa bỏ kết nối cạnh (2,3); (6,7)
+ Bổ sung kết nối (2,6); (3,7)
Trang 22+ Đổi chiều tuyến đường
Kết quả route[1] = S11265E1
route[2] = S2 734E2
Nếu thực hiện: performTwoOptMove4(2,6)
+ Xóa bỏ kết nối cạnh (2,3); (6,7)
+ Bổ sung kết nối (2,6); (3,7)
+ Đổi chiều tuyến đường
Kết quả route[1] = S15621E1
route[2] = S2 734E2
Trang 231.4.2.3 Các phương thức: performTwoOptMove5(Point x, Point y);
performTwoOptMove6(Point x, Point y); performTwoOptMove7(Point x, Point y); performTwoOptMove8(Point x, Point y)
Trong đó: điểm x, y nằm trên các tuyến đường khác nhau; x, y không phải là điểm đầu hay điểm kết thúc; next[x], next[y] là điểm tiếp theo lần lượt của x, y trên
tuyến đường
Thực hiện: Xóa bỏ đường nối giữa điểm x và next[x], điểm y và next[y] Tạo
mới đường nối cạnh (x, next[y]) và cạnh (y, next[x]) đối với mỗi phương thức sẽ xác
định tuyến đường khác nhau (do đổi chiều đường đi)
Ví dụ: Có 2 tuyến đường router[1] và router[2] với 1, 2, 3, 4, 5, 6, 7 là các điểm, S1,
S2là điểm xuất phát và E1, E2là điểm kết thúc tuyến đường
Nếu thực hiện: performTwoOptMove5(2,6)
+ Xóa bỏ kết nối cạnh (2,3); (6,7)
+ Bổ sung kết nối (2,7); (6,3)
+ Đổi chiều tuyến đường
Trang 24Kết quả route[1] = S1127E1
route[2] = S25634E2
Nếu thực hiện: performTwoOptMove6(2,6)
+ Xóa bỏ kết nối cạnh (2,3); (6,7)
+ Bổ sung kết nối (2,7); (6,3)
+ Đổi chiều tuyến đường
Kết quả route[1] = S1721E1
route[2] = S2 5634E2
Nếu thực hiện: performTwoOptMove7(2,6)
+ Xóa bỏ kết nối cạnh (2,3); (6,7)
+ Bổ sung kết nối (2,7); (6,3)
+ Đổi chiều tuyến đường
Trang 25Kết quả route[1] = S1127E1
route[2] = S2 4365E2
Nếu thực hiện: performTwoOptMove8(2,6)
+ Xóa bỏ kết nối cạnh (2,3); (6,7)
+ Bổ sung kết nối (2,7); (6,3)
+ Đổi chiều tuyến đường
Kết quả route[1] = S1721E1
route[2] = S24365E2
1.4.2.4 Các phương thức: performOrOptMove1(Point x1, Point x2, Point y); performOrOptMove1(Point x1, Point x2, Point y)
Trong đó: x1, x2là các điểm cùng nằm trên 1 tuyến đường, y là điểm nằm trên
tuyến đường còn lại; x1, x2, y không phải là điểm đầu, cuối trên tuyến đường
prev [x1], prev [x2], prev [y ] là các điểm lần lượt đứng trước x1, x2, y
next [x1], next [x2], next [y ] là các điểm lần lượt đứng sau x1, x2, y
Thực hiện di chuyển x1, x2đến tuyến đường chứa y
Xóa bỏ kết nối: (prev[x1], x1); (x2, next[x2]); (y, next[y])
Bổ sung kết nối (y, x1); (x2, next[y]); (prev[x1], next[x2])
Trang 26Ví dụ: Có 2 tuyến đường router[1] và router[2] với 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 là các điểm, S1, S2 là điểm xuất phát và E1, E2 là điểm kết thúc tuyến đường
Nếu thực hiện: performOrOptMove1(2,4,6)
+ Xóa bỏ kết nối cạnh (1,2); (4,5); (8,9)
+ Bổ sung kết nối (8,2); (4,9); (1,5)
+ Cập nhật lại tuyến đường
Kết quả route[1] = S115E1
Trang 27Hình 1.13: Minh h ọa thuật toán performOrOptMove2(2,4,6)
Kết quả route[1] = S115E1
route[2] = S2678432910E2+ Phương thức: performThreeOptMove1(Point x, Point y, Point z)
Trong đó: x, y, z là 3 điểm thuộc cùng 1 tuyến đường (x trước y, y trước z)
Xóa bỏ kết nối cạnh (x, next[x]); (y, next[y]); (z, next[z])
Bổ sung kết nối (x, z); (next[y], next[x]; (y, next[z])
Ví dụ: Tuyến đường router[1] với 1, 2, 3, 4, 5, 6, 7, 8 là các điểm, S1 là điểm xuất phát và E1 là điểm kết thúc tuyến đường
Nếu thực hiện: performThreeOptMove1(2,4,6)
+ Xóa bỏ kết nối cạnh (2,3); (4,5); (6,7)
+ Bổ sung kết nối (2,6); (5,3); (4,7)
+ Cập nhật lại tuyến đường
Trang 28Hình 1.15: Minh h ọa thuật toán performThreeOptMove1(2,4,6)
Kết quả
route[1] = S112653478E1
1.4.2.5 Phương thức: performCrossExchangeMove(Point x1, Point y1, Point x2, Point y2)
Trong đó: x1 và y1là điểm cùng 1 tuyến đường, x1 đứng trước y1
x2 và y2là điểm cùng 1 tuyến đường, x2đứng trước y2
Thực hện: Xóa bỏ (x1, next[x1]), (y1, next[y1]), (x2, next[x2]), (y2, next[y2]) và
bổ sung (x1, next[x2]), (y2, next[y1]), (x2, next[x1]), (y1, next[y2])
Ví dụ: Có 2 tuyến đường router[1] và router [2] với 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
là các điểm S1, S2 là điểm xuất phát và E1, E2 là điểm kết thúc tuyến đường
Nếu thực hiện: performCrossExchangeMove(2,4,7,9)
+ Xóa bỏ kết nối cạnh (2,3); (4,5); (7,8); (9,10)
+ Bổ sung kết nối (2,5); (9,8); (1,5); (4,3); (7,5)
+ Cập nhật lại tuyến đường
Trang 29Hình 1.17: Minh h ọa giải thuật performCrossExchangeMove(2,4,7,9)
Kết quả route[1] = S112895E2
route[2] = S2673410E2
Với kiến trúc CBLS khi một số biến thay đổi giá trị thì các bất biến, hàm và ràng buộc được xây dựng trên các biến cũng sẽ thay đổi theo Nên trong thư viện CBLSVR có đối tượng VRManager để thực hiện quản lý và cập nhật các thay đổi
của biến, bất biến, hàm, ràng buộc
1.4.3.1 Bi ến lộ trình
Biến lộ trình là biến thể hiện lời giải của bài toán đã cho VarRoutersVR
trong thư viện CBLSVR là biến lộ trình Biến này sẽ mô hình hóa lời giải cho bài toán Trong bài toán vận tải có tập K là tập tuyến đường, trong đó mỗi tuyến đường
ứng với một xe và sẽ có điểm đầu và điểm kết thúc; ngoài ra còn tập các khách hàng
mỗi khách hàng chỉ có duy nhất 1 tuyến đường đi qua Một số phương thức của biến
lộ trình:
Ký hiệu: ⊥ là null point
Các hàm khởi tạo lời giải trình bày trong bảng 1.1
Trang 30khách hàng
initRandom() Sắp xếp các điểm khách hàng vào ngẫu
nhiên các tuyến đường
Các hàm truy vấn về trạng thái của lời giải trình bày trong bảng 1.2
Point next(Point x)
Trả về điểm ngay sau x trong tuyến đường nếu x là điểm cuối hoặc x không thuộc tuyến đường nào thì trả về ⊥
Point prev(Point x)
Trả về điểm ngay trước x trong tuyến đường nếu x là điểm đầu hoặc x không thuộc tuyến đường nào thì trả về ⊥
int route(Point x)
Trả về chỉ số tuyến đường đi qua điểm x
nếu không có tuyến đường nào đi qua x thì trả về ⊥
int index(Point x)
Trả về chỉ số của điểm x trong tuyến đường nếu x không thuộc tuyến đường nào thì trả về ⊥
Point oldNext(Point x) Trả về điểm có vị trí ngay sau x trong
lời giải trước
Point oldPrev(Point x) Trả về điểm có vị trí ngay trước x trong
lời giải trước
int oldRoute(Point x) Trả về chỉ số tuyến đường đi qua x trong
lời giải trước
int oldIndex(Point x) Trả về chỉ số của x trong tuyến đường
của lời giải trước đó
Trang 311.4.3.2 B ất biến
Bất biến là đối tượng biểu diễn đặc trưng của lời giải Khi lời giải thay đổi thì các bất biến cũng cần được cập nhật để chúng có thể biểu diễn đúng thuộc tính
của lời giải mới
Các hàm propagate chính là các hàm cập nhật bất biến khi lời giải thay đổi như đã nói ở trên, còn hàm initPropagate là hàm khởi tạo các biến và cấu trúc dữ
liệu hàm sẽ được tự động gọi bởi VRManager khi việc lên mô hình bài toán kết thúc
Thư viện CBLSVR có cung cấp các bất biến hay gặp trong các bài toán VRP sau: + AccumulatedWeightEdges tính tổng trọng số tích lũy theo cạnh Bất biến này
có thể được dùng để tính tổng quãng đường di chuyển theo mỗi điểm
+ AccumulatedWeightNodes tính tổng trọng số tích lũy theo đỉnh Bất biến này
có thể được dùng để biểu diễn điều kiện tổng số yêu cầu trên một tuyến không được vượt quá khả năng của xe trong bài toán CVRP
cạnh từ điểm xuất phát đến điểm bất
kỳ Hàm này được sử dụng cho các bài toán có ràng buộc về độ dài đường đi
hoặc tính chi phí cho tuyến đường nào
đó AccumulatedNodeWeightsOnPathVR
Tính tổng tích lũy trọng số theo điểm Thường được sử dụng với bài toán ràng
buộc về trọng tải của xe
Trang 32TotalCostVR Tính tổng các chi phí của tất cả các
Đưa thời gian đến sớm nhất của các điểm trong bài toán VRP với ràng buộc
về thời gian Plus, Minus, Mult, Div, Mod Các phép toán số học
Leq, Eq, Neq, Implicate, AND, OR Các phép toán logic
1 public class GenericLocalSearch implements ISearch {
2 public GenericLocalSearch (VRManager mgr, LexMultiFunctions F,
3 ArrayList <INeighborhoodExplorer > neighborhoodExplorer) {
Trang 334 }
5 public void search(int maxIter, int timeLimit) {
6 bestSolution = new ValueRoutesVR (XR);
7 currentIter = 0;
8 XR.setRandom();
9 Neighborhood N = new Neighborhood(mgr);
10 bestValue = new LexMultiValues (F.getValues());