CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự do – Hạnh phúc BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ Họ và tên tác giả luận văn: Thân Thị Lệ Quyên Đề tài luận văn: Phát triển thuật t
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Chuyên ngành: Công nghệ thông tin
LUẬN VĂN THẠC SĨ KHOA HỌC CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC
TS Phạm Quang Dũng
Hà Nội – Năm 2017
Trang 2CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ
Họ và tên tác giả luận văn: Thân Thị Lệ Quyên
Đề tài luận văn: Phát triển thuật toán giải bài toán tối ưu hoá trong điều hành vận tải chở hành khách và hàng hoá chia sẻ lộ trình
Chuyên ngành: Công nghệ thông tin
Mã số SV: CB150297
Tác giả, Người hướng dẫn khoa học và Hội đồng chấm luận văn xác nhận tác giả đã sửa chữa, bổ sung luận văn theo biên bản họp Hội đồng ngày 28/10/2017 với các nội dung sau:
A Về trình bày
1 Phần Hàm mục tiêu f1 và f2 bổ sung " > max" hoặc " > min"
2 Hình 1.18 sửa E2 thành E1
B Về nội dung
1 Bổ sung thêm tính toán độ phức tạp của thuật toán
2 Bổ sung thêm ưu điểm, nhược điểm của thuật toán
Giáo viên hướng dẫn
Hà Nội, ngày 10 tháng 11 năm 2017
Tác giả luận văn
CHỦ TỊCH HỘI ĐỒNG
Trang 3LỜI MỞ ĐẦU
Trong thực tế hiện nay có nhiều loại mô hình vận tải Việc vận chuyển hàng hóa từ kho đến các cửa hàng Hệ thống chuyển hàng hóa theo yêu cầu Hệ thống chở người và vận chuyển hàng hóa theo tuyến cố định, hệ thống taxi, hệ thống xe buýt các mô hình này về cơ bản đã phục vụ phần lớn nhu cầu đi lại và vận chuyển hàng hóa Tuy nhiên mô hình vận tải truyền thống đặc biệt là ở khu vực thành thị, hoạt động chở người và hoạt động vận chuyển hàng hóa được xử lý riêng biệt Việc thiếu thông tin thời gian thực và sự phức tạp về lập kế hoạch tăng do sự kết hợp như vậy là một trong những lý do chính Có rất ít nghiên cứu về lợi ích có được bằng cách kết hợp việc vận chuyển hàng hóa và chở người Việc kết hợp này phù hợp với
xu hướng phát triển của nền kinh tế chia sẻ
Kết hợp chở người và vận chuyển hàng hóa tạo ra cơ hội kinh doanh hấp dẫn bởi vì nhu cầu vận chuyển tương tự có thể được đáp ứng với ít xe và chi phí thấp hơn Với chi phí thấp hơn sẽ kéo theo giá thành trong việc chở người và vận chuyển hàng hóa chi phí 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, chúng tôi khảo sát bài toán lập lộ trình vận tải kết hợp giữa chở người và hàng hóa Trong đó cần tính toán lộ trình cho một đội xe Taxi phục vụ các yêu cầu vận chuyển, mỗi yêu cầu bao gồm các thông tin như điểm đón, điểm trả, khung thời gian Sau đó chúng tôi đề xuất và cài đặt thử nghiệm 7 thuật toán tham lam xây dựng lời giải 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 hành của Taxi San Francisco
Luận văn được chia thành 3 chương không kể phần mở đầu và 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 vận tải, các hướng tiếp cận và thư viện Chương 2 trình bày về 7 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 bộ dữ liệu và tốc độ khác nhau
Trang 4LỜI MỞ ĐẦU 1
LỜI CẢM ƠN 4
DANH MỤC CÁC CHỮ VIẾT TẮT 5
DANH MỤC CÁC BẢNG 6
DANH MỤC CÁC HÌNH VẼ 7
DANH MỤC CÁC GIẢ MÃ 7
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 8
1.1 Bài toán tối ưu tổ hợp 8
1.2 Các hướng tiếp cận giải bài toán tối ưu tổ hợp 10
1.3 Các bài toán tối ưu điều hành vận tải 11
1.4 Thư viện CBLSVR 13
1.5 Bài toán điều hành vận tải chở người và hàng hoá chia sẻ tuyến đường 24
CHƯƠNG 2 CÀI ĐẶT THUẬT TOÁN GIẢI BÀI TOÁN ĐIỀU HÀNH VẬN TẢI CHỞ NGƯỜI VÀ HÀNG HOÁ 32
2.1 Chiến lược tham lam 1 (Greedy1) 32
2.2 Chiến lược tham lam 2 (Greedy2) 33
2.3 Chiến lược tham lam 3 (Greedy3) 35
2.4 Chiến lược tham lam 4 (Greedy4) 36
2.5 Chiến lược tham lam 5 (Greedy5) 37
2.6 Chiến lược tham lam 6 (Greedy6) 38
2.7 Chiến lược tham lam 7 (Greedy7) 39
CHƯƠNG 3 THỬ NGHIỆM VÀ ĐÁNH GIÁ 41
3.1 Dữ liệu 41
3.2 Kết quả thử nghiệm và đánh giá 41
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 50
TÀI LIỆU THAM KHẢO 51
MỤC LỤC
Trang
Trang 5LỜ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 Tháng Năm 2017
Học viên thực hiện
Thân Thị Lệ Quyên
Trang 6LỜ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 7DANH MỤC CÁC CHỮ VIẾT TẮT
VRP Vehicle Routing Problem Bài toán vận tải
CVRP Capacitated Vehicle Routing
Bài toán vận tải có ràng buộc
về khung thời gian
CBLS Constraint Based Local Search Tìm kiếm cục bộ dựa trên
Trang 8DANH MỤC CÁC BẢNG
Bảng 1.1: Nhóm hàm khởi tạo lời giải 21
Bảng 1.2: Nhóm hàm truy vấn về trạng thái của lời giải 21
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 CBLSVR23 Bảng 1.4: Các ký hiệu hình vẽ 26
Bảng 3.1: Mô tả bộ dữ liệu 41
Bảng 3.2: Kết quả thử nghiệm với bộ dữ liệu n1000r100_1 43
Bảng 3.3: Kết quả thử nghiệm với bộ dữ liệu n1000r200_1 44
Bảng 3.4: Kết quả thử nghiệm với bộ dữ liệu n2000r100_1 45
Bảng 3.5: Kết quả thử nghiệm với bộ dữ liệu n2000r200_1 47
Bảng 3.6: Kết quả thuật toán tham lam thứ 5 với trường hợp ngẫu nhiên 48
Bảng 3.7: So sánh thuật toán greedy2 với bộ dữ liệu n2000r100_1 48
Trang 9DANH MỤC CÁC HÌNH VẼ
Hình 1.1: Ví dụ 2 tuyến đường khác nhau 14
Hình 1.2: Minh họa thuật toán performTwoOptMove1(2,6) 14
Hình 1.3: Minh họa thuật toán performTwoOptMove1(2,6) 14
Hình 1.4: Minh họa thuật toán performTwoOptMove3(2,6) 15
Hình 1.5: Minh họa thuật toán performTwoOptMove4(2,6) 15
Hình 1.6: Ví dụ 2 tuyến đường khác nhau router[1], router[2] 16
Hình 1.7: Minh họa thuật toán performTwoOptMove5(2,6) 16
Hình 1.8: Minh họa thuật toán performTwoOptMove6(2,6) 16
Hình 1.9: Minh họa thuật toán performTwoOptMove7(2,6) 17
Hình 1.10: Minh họa thuật toán performTwoOptMove8(2,6) 17
Hình 1.11: Ví dụ 2 tuyến đường với 5 điểm 18
Hình 1.12: Minh họa thuật toán performOrOptMove1(2,4,6) 18
Hình 1.13: Minh họa thuật toán performOrOptMove2(2,4,6) 18
Hình 1.14: Ví dụ tuyến đường với 8 điểm 19
Hình 1.15: Minh họa thuật toán performThreeOptMove1(2,4,6) 19
Hình 1.16: Ví dụ 2 tuyến đường router[1] và router [2] với các điểm khác nhau 20
Hình 1.17: Minh họa giải thuật performCrossExchangeMove(2,4,7,9) 20
Hình 1.18: Minh họa lộ trình vận tải cho 3 xe 27
DANH MỤC CÁC GIẢ MÃ Giả mã 2.1: Thuật toán tham lam thứ 1 33
Giả mã 2.2: Thuật toán tham lam thứ 2 34
Giả mã 2.3: Thuật toán tham lam thứ 3 35
Giả mã 2.4: Thuật toán tham lam thứ 4 36
Giả mã 2.5: Thuật toán tham lam thứ 5 37
Giả mã 2.6: Thuật toán tham lam thứ 6 38
Giả mã 2.7: Thuật toán tham lam thứ 7 40
Trang 10CHƯƠ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 đó:
X ={X 1 ,…,X n} là tập các biến,
D ={D 1 ,…,D n } trong đó D i là một tập rời rạc thể hiện miền giá trị của X i
C ={C 1 ,…,C k} là tập các ràng buộc được định nghĩa trên các biến,
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
Khố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
Trang 11Tập ràng buộc:
X i ≠ X j với i ≠ j: Các con hậu không ở cùng 1 hàng
X i +i ≠ X j +j với i ≠ j: Các con hậu không khống chế theo đường chéo
X i -i ≠ X j -j với i ≠ j: Các con hậu không khống chế theo đường chéo
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 12Gá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
1.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
Trang 13cho 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
và 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
Trang 14Bà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 khá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 quần thể [21]
VRP kết hợp với vấn đề nhận hàng, giao hàng VRP Pickup and Delivery (VRPPD) Bài toán này thường được áp dụng cho các dịch vụ vận chuyển hàng hóa Xe sẽ thực hiện 2 chức năng đó là nhận hàng từ khách và đem đi giao hàng cho khách khác Một xe có thể nhận hàng từ 1 hoặc nhiều khách hàng và giao cho 1 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] Bài toán này sẽ được trình bày cụ thể phần 1.5.3
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 151.4 Thư viện CBLSVR
1.4.1 Tổng quan
Constraint Based Local Search Vehicle Routing (CBLSVR) [9] là thư viện CBLS cho các bài toán VRP, thư viện này cung cấp sẵn các bất biến, hàm, ràng buộc hay gặp trong các bài toán VRP có thể sử dụng thư viện giải quyết các bài toán VRP bằng cách lên mô hình hóa bài toán Ngoài ra thư viện còn cung cấp các giao diệ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.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
1.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
Trang 16Thự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, S2 là điểm xuất phát và E1, E2 là điểm kết thúc tuyến đường
router[1]
router[2]
Hình 1.1: Ví dụ 2 tuyến đường khác nhau
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
Hình 1.2: Minh họa thuật toán performTwoOptMove1(2,6)
Kết quả route[1] = S11265E1
route[2] = S2437E2Nế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
Hình 1.3: Minh họa thuật toán performTwoOptMove1(2,6)
Trang 17Kế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)
+ Đổi chiều tuyến đường
Hình 1.4: Minh họa thuật toán performTwoOptMove3(2,6)
Kết quả route[1] = S11265E1
route[2] = S2 734E2Nế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
Hình 1.5: Minh họa thuật toán performTwoOptMove4(2,6)
Kết quả route[1] = S15621E1
route[2] = S2 734E2
1.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
Trang 18Thự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[x]) 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, S2 là điểm xuất phát và E1, E2 là điểm kết thúc tuyến đường
router[1]
router[2]
Hình 1.6: Ví dụ 2 tuyến đường khác nhau router[1], router[2]
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
Hình 1.7: Minh họa thuật toán performTwoOptMove5(2,6)
Kết quả route[1] = S1127E1
route[2] = S25634E2Nế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
Hình 1.8: Minh họa thuật toán performTwoOptMove6(2,6)
Trang 19Kết quả route[1] = S1721E1
route[2] = S2 5634E2Nế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
Hình 1.9: Minh họa thuật toán performTwoOptMove7(2,6)
Kết quả route[1] = S1127E1
route[2] = S2 4365 E2Nế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
Hình 1.10: Minh họa thuật toán performTwoOptMove8(2,6)
Kết quả route[1] = S1721E1
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
Trang 20Xó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])
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
Hình 1.11: Ví dụ 2 tuyến đường với 5 điểm
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
Hình 1.12: Minh họa thuật toán performOrOptMove1(2,4,6)
Kết quả route[1] = S115E1
route[2] = S2678234910E2
Nếu thực hiện: performOrOptMove2(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,4); (2,9); (1,5)
+ Cập nhật lại tuyến đường
Hình 1.13: Minh họa thuật toán performOrOptMove2(2,4,6)
Kết quả route[1] = S115E1
Trang 21+ Phương thức:performThreeOptMove1(Point x, Point y, Point z)
Trong đó: x, y, z là 2 đ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
Hình 1.14: Ví dụ tuyến đường với 8 điểm
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
Hì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à y1 là điểm cùng 1 tuyến đường, x1 đứng trước y1
x2 và y2 là đ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
Trang 22Hình 1.16: Ví dụ 2 tuyến đường router[1] và router [2] với các điểm khác nhau
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
Hình 1.17: Minh họa giải thuật performCrossExchangeMove(2,4,7,9)
Kết quả route[1] = S112895E2
route[2] = S2673410E21.4.3 Các lớp API
Với kiến trúc CBLS khi một số biến thay dổ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
addRoute(Point Sp,Point Ep) Tạo thêm một tuyến đường mới có điểm bắt đầu là
Sp và điểm kết thúc là Ep addClientPoint(Point p) Bổ sung thêm điểm p vào tập các điểm khách hàng
Trang 23initRandom() Sắp xếp các điểm khách hàng vào ngẫu nhiên các
tuyến đường
Bảng 1.1: Nhóm hàm khởi tạo lời giải
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 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
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 initPropagte 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
Trang 24Thư 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
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
TotalCostVR Tính tổng các chi phí của tất cả các tuyến
đường
IndexOnRoute Chỉ số của điểm v trong tuyến đường đi
qua nó RouteIndex Chỉ số của tuyến đường đi qua một điểm v
EarliestArrivalTimeVR
Đư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
Trang 25ConstraintViolations Hàm cho biết giá trị vi phạm của một ràng
buộc nào đó
Capacity Hàm ràng buộc cho biết giá trị vi phạm về
ràng buộc sức chứa trên xe ConstraintSystemVR Đối tượng quản lý các ràng buộc
Min, Max Hàm trả về giá trị lớn nhất hoặc nhỏ nhất
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
1.4.3.4 Tìm kiếm
Trong thư viện có lớp GenericLocalSearch hỗ trợ người dùng cài đặt thuật
toán tìm kiếm một cách ngắn gọn như sau
1 publicclass GenericLocalSearch implements ISearch {
2 public GenericLocalSearch ( VRManager mgr , LexMultiFunctions F,
3 ArrayList <INeighborhoodExplorer >neighborhoodExplorer ) {
4 }
5 publicvoid 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());
11 while( currentIter < maxIter ) {
Trang 268) để khởi tạo ngẫu nhiên lời giải Ngoài ra đối tượng N được tạo theo kiểu
Neighbohood (tại dòng 9) để chứa các láng giềng tốt nhất trong quá trình khám phá
láng giềng Khi chưa vượt qua giới hạn số vòng lặp thì tiếp tục xét tập láng giềng của lời giải hiện tại để tìm lời giải tốt hơn (tại dòng 11) Trong mỗi vòng lặp sẽ
khởi tạo lại biến N (dòng 12) Gọi hàm exploreNeighborhood của tất cả các đối tượng INeighborhoodExplorer để tìm kiếm các láng giềng (dòng 15 - 17) Sau khi
duyệt xong nếu N có thao tác move, thì chọn ngẫu nhiên một trong số chúng để thực hiện nhằm tạo ra lời giải mới (từ dòng 18 – 20) Nếu lời giải mới sinh ra tốt hơn lời giải tốt nhất thì cập nhật lời giải tốt nhất theo lời giải mới (từ dòng 21 – 23) Nếu N không có thao tác move nào, tức lời giải hiện tại không có láng giềng, quá trình tìm kiếm sẽ kết thúc (Từ dòng 24 – 26)
1.5 Bài toán điều hành vận tải chở người và hàng hoá chia sẻ tuyến đường
1.5.1 Phát biểu bài toán
Hiện nay, việc chở người và vận chuyển hàng hóa còn tách biệt nhau khi sử dụng cùng hệ thống giao thông gây ra nhiều lãng phí Từ thực trạng trên việc kết hợp giữa chờ người và vận chuyển hàng hoá là cần thiết, đã có nhiều bài báo đề cập
Trang 27đến vấn đề này Bài toán Share-A-Ride được đề xuất với mục đích xây dựng một hệ thống kết hợp chở người và hàng hóa
Đầu vào của bài toán là các thông tin về hệ thống vận tải và danh sách các yêu cầu cần đáp ứng
- Thông tin về hệ thống vận tải bao gồm: số yêu cầu, tổng số lượng xe, vị trí
đỗ của của từng xe S, ma trận bản đồ hệ thống đường cung cấp quãng đường di chuyển giữa các điểm
- Mỗi yêu cầu vận chuyển bao gồm các thông tin sau: phân biệt đối tượng vận chuyển là người hay hàng hóa, địa điểm đón khách hay nhận hàng, địa điểm khách
xuống hay trả hàng Tại các điểm nhận và điểm trả có khoảng thời gian [e, l] (do
khách hàng cung cấp) Các phương tiện phải di chuyển tới điểm yêu cầu trong
khoảng thời gian [e, l] mà khách hàng cung cấp Thời gian để đón hoặc trả hàng hay khách tại các điểm yêu cầu là s
Lời giải của bài toán là tuyến đường di chuyển của các xe đi Mỗi xe phải đáp ứng tất cả các yêu cầu của khách hàng với tổng quãng đường đi là nhỏ nhất Một yêu cầu gọi là được đáp ứng, nếu có xe di chuyển tới điểm nhận để đón khách hoặc nhận hàng rồi di chuyển tới điểm trả để trả khách hay hàng trong khoảng thời gian yêu cầu Để tiết kiệm chi phí, trong hành trình di chuyển các xe có thể kết hợp chở hàng và người Tuy nhiên, trong quá trình chở người không cho phép hệ thống đón hàng hay trả hàng Nên lịch trình di chuyển của các xe phải thỏa mãn điều kiện điểm đón và trả của yêu cầu chở người là hai điểm liên tiếp nhau
Mục tiêu của đề tài là tìm hiểu mô hình vận tải kết hợp vận chuyển người và hàng hóa được đề xuất đầu tiên vào năm 2014 bởi Li và công sự [1], tìm hiểu các phương pháp thuật toán và thư viện liên quan trong việc giải lớp các bài toán lập lộ trình vận tải Thuật toán giải bài toán tĩnh (thông tin về các yêu cầu vận chuyển đã được biết từ trước) với dữ liệu lớn chưa được đề xuất và thử nghiệm Đề tài đề xuất một biến thể của mô hình trong đó yêu cầu vận chuyển người phải được phục vụ trực tiếp (không dừng đón yêu cầu khác) và đưa thêm hàm mục tiêu mới (số xe sử dụng là ít nhất) Từ đó, đề tài tập trung vào phát triển và thử nghiệm, đánh giá các thuật toán tham lam xây dựng lời giải đối với những bộ dữ liệu lớn