Tải bản đầy đủ (.pdf) (67 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.11 MB, 67 trang )

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 TỐN TÌM KIẾM CỤC BỘ GIẢI BÀI TỐ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

Hà Nội – Năm 2018


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 TỐN TÌM KIẾM CỤC BỘ GIẢI BÀI TỐ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

Hà Nội – Năm 2018


LỜ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 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 tố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 tố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 tốn tối ưu lộ trình
1


vậ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 tốn tham
lam và chiến lược của từng thuật tố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.

2


MỤ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 tốn ................................................................................... 32
1.5.2 Mơ hình tốn học .................................................................................... 33
CHƯƠNG 2. CÀI ĐẶT THUẬT TOÁN GIẢI BÀI TỐ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
2.8 Thuật toán tham lam 8 (Greedy8) ............................................................... 45
3


2.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

4


LỜ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 hồn tồ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

5


LỜ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 hồ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!

6


DANH MỤC CÁC CHỮ VIẾT TẮT


Chữ viết tắt

Tên đầy đủ

Ý nghĩa

CBLS

Constraint Based Local

Tìm kiếm cục bộ dựa trên

Search

ràng buộc

Min-Max Capacitated

Bài

Vehicle Routing Problem

đường đi các phương tiện

MMCVRP

tốn

định


tuyến

nhằm tối thiểu hóa hành
trình dài nhất
ILP

Integer Linear Program

Quy hoạch ngun tuyến
tính

VNS

Variable Neighborhood

Tìm kiếm trên các tập

Search

láng giềng khác nhau

VRP

Vehicle Routing Problem

Bài toán vận tải

CVRP


Capacitated Vehicle

Bài tốn vận tải có ràng

Routing Problem

buộc sức chứa

Vehicle Routing Problem

Bài tốn vận tải có ràng

with Time Window

buộc về khung thời gian

VRP Pickup and Delivery

Bài tốn vận chuyển hàng

VRPTW

VRPPD

hóa
UAV

Unmanned aerial vehicle

Máy bay khơng người lái


CBLSVR

Constraint Based Local

Tìm kiếm cục bộ dựa trên

Search Vehicle Routing

ràng buộc các bài toán
vận tải

Application Programming

Giao diện lập trình ứng

Interface

dụng

SD

Standard Deviation

Độ lệch chuẩn

MDR

Minimum distance Route


API

7


DANH 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

8


DANH 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 tốn performTwoOptMove1(2,6) .................................... 19
Hình 1.3: Minh họa thuật tốn performTwoOptMove2(2,6) .................................... 19

Hình 1.4: Minh họa thuật tốn performTwoOptMove3(2,6) .................................... 20
Hình 1.5: Minh họa thuật tố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 tốn performTwoOptMove5(2,6) .................................... 21
Hình 1.8: Minh họa thuật tốn performTwoOptMove6(2,6) .................................... 22
Hình 1.9: Minh họa thuật tốn performTwoOptMove7(2,6) .................................... 22
Hình 1.10: Minh họa thuật tố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 tốn performOrOptMove1(2,4,6) .................................. 24
Hình 1.13: Minh họa thuật tố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 tố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

9


DANH 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

10


CHƯƠ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 tố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 tố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 tốn đóng gói hàng hóa [26], bài tố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 tố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 tốn tối ưu tổ hợp [31] là một bộ (X, D, C, f) trong đó:
X = {X1, …, Xn} là tập các biến.
D = {D1, …, Dn} trong đó Di là một tập rời rạc thể hiện miền giá trị của Xi.
C = {C1, …, Ck} 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 tố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.


11


Khống chế những ơ thuộc cùng đường chéo.
Bài tốn N-Queen thuộc vào lớp bài tốn tối ưu tổ hợp, có thể được mơ tả bằng mơ
hình tốn học:
Tập n biến quyết định X = {X1, X2, …, Xn}: Biến Xi biểu thị hàng cho con hậu
đứng ở cột i.
Miền giá trị D = {D1, D2, …, Dn} trong đó Di = {1…n} Mỗi biến Xi có miền
từ 1 đến n.
Tập ràng buộc:
Xi ≠ Xj với i ≠ j: Các con hậu không ở cùng 1 hàng.
Xi + i ≠ Xj + j với i ≠ j: Các con hậu không khống chế theo đường chéo.
Xi - i ≠ Xj - j với i ≠ j: Các con hậu không khống chế theo đường chéo.
Q trình giải bài tố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 tốn N-Queen với n = 8 theo mơ hình CBLS. Q trình mơ hình hóa
bài tốn dựa theo mơ hình tố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].
12


Tập ràng buộc:

Xi ≠ Xj với i ≠ j
Xi + i ≠ Xj + j với i ≠ j
Xi - i ≠ Xj - j với i ≠ j
Một lời giải là một cách gán giá trị {X1 = x1, X2 = x2, …, X7 = x7} thỏa mãn
tất cả các ràng buộc.
Tập lời giải lân cận của một lời giải S = {x1, x2, …x7} gồm mọi lời giải S’ =
{y1, y2, …y7} sao cho:
xi ≠ yi với một giá trị i duy nhất.
xj = yj với mọi j ≠ i
Chỉ 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ử Xi 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ị Xi 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
tố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.

13


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 tốn điển hình
như thuật tố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 tốn tối ưu, trong đó có đề xuất
khác thành cơng như [20] [5] [4].
-

Thuật tố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
14


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 tố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 tốn
vận tải dưới dạng bài tố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 tốn
chính xác [3] [10].
Bài tố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 tố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 tốn VRPTW thực chất là bài tố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

15


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 tố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 tố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 tố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 tố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 tố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.
16


1.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 tố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 tốn. Ngồ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. Ngồ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.

17


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.
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, S2 là điểm xuất phát và E1, E2 là điểm kết thúc tuyến đường.

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

18


Hình 1.2: Minh họa thuật tốn performTwoOptMove1(2,6)
Kết quả


route[1] = S11265E1
route[2] = S2437E2

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

Hình 1.3: Minh họa thuật tốn performTwoOptMove2(2,6)
Kết quả

route[1] = S15621E1
route[2] = S2437E2

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)

19


+ Đổi chiều tuyến đường

Hình 1.4: Minh họa thuật tốn performTwoOptMove3(2,6)
Kết quả

route[1] = S11265E1
route[2] = S2 734E2

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

Hình 1.5: Minh họa thuật toán performTwoOptMove4(2,6)
Kết quả

route[1] = S15621E1
route[2] = S2 734E2

20


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
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,
S2 là điểm xuất phát và E1, E2 là điểm kết thúc tuyến đường

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 tốn performTwoOptMove5(2,6)
21


Kết quả

route[1] = S1127E1
route[2] = S25634E2

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

Hình 1.8: Minh họa thuật toán performTwoOptMove6(2,6)
Kết quả

route[1] = S1721E1
route[2] = S2 5634E2

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

Hình 1.9: Minh họa thuật toán performTwoOptMove7(2,6)

22



Kết quả

route[1] = S1127E1
route[2] = S2 4365E2

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

Hình 1.10: Minh họa thuật toán performTwoOptMove8(2,6)
Kết quả

route[1] = S1721E1
route[2] = S24365E2

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, x2 là 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])

23



×