Phần mở đầu Lý do thực hiện và mục tiêu của đề tài Lớp bài toán điều phối xe (Vehicle Routing Problem – VRP) có ứng dụng rất rộng rãi trong nhiều lĩnh vực của đời sống, đặc biệt là trong lĩnh vực giao thông vận tải. Mỗi bài toán VRP thực tế thường có các ràng buộc đặc trưng riêng, nhưng nhìn chung tất cả đều là bài toán NPkhó. ðề tài này tậptrung nghiên cứu và giải quyết một bài toán VRP thực tế, bắt nguồn từ nhu cầu điềuphối các xe giao hàng của công ty Cổ phần sữa Việt Nam (Vinamilk), cơ sở TP.HCM. Hiện nay, Vinamilk thực hiện việc điều phối xe giao hàng bằng tay với quy trình như sau: mỗi ngày, công ty sẽ nhận các đơn đặt hàng của khách hàng (sốlượng đơn hàng từ vài trăm đến hơn một ngàn), đến cuối ngày, nhân viên điều phối sẽ tổng hợp lại toàn bộ các đơn đặt hàng đã nhận trong ngày, và bộ phận điều phối thường phải mất khoảng 6 đến 8 tiếng (đôi khi phải thức cả đêm) để thực hiệnviệc phân bổ đơn hàng lên xe và xác định đường đi cho các xe vào ngày hôm sau. Cáchlàm này tốn khá nhiều thời gian và công sức mà đôi khi lời giải thu được lại chưa hẳn tốt. Do đó, vấn đề tự động hóa trong khâu điều phối xe là một nhu cầu rấtcần thiết. ðiểm đặc biệt của bài toán này là ngoài vấn đề điều phối xe, bài toáncòn yêu cầu phải xếp lịch vào kho cho các xe, yêu cầu có thể được mô hình hóa dưới dạng bài toán Flexible Job Shop Scheduling – một bài toán thuộc lớp bài toán NP – khó. Sự lồng ghép của hai bài toán khó khiến cho bài toán giao hàng của Vinamilk trở nên khá phức tạp. ðề tài đã đề nghị một thuật giải metaheuristic dựa trên local search để giải quyết bài toán này, kết quả thực nghiệm được so sánh với kết quả xếp tay được lấy từ thực tế và kết quả đã được công bố dưới dạng bài báo của một phương pháp dựa trên quy hoạch động (áp dụng trên cùng bài toán). Bố cục luận văn Luận văn gồm có 5 chương: 2 Chương 1: trình bày tổng quan về bài toán điều phối xe (Vehicle Routing Problem) – bao gồm định nghĩa bài toán, các biến thể của bài toán và sơ lược về các hướng tiếp cận hiện nay để giải quyết bài toán. Chương 2: trình bày chi tiết về bài toán mà luận văn tập trung nghiên cứu và giải quyết bài toán giao hàng của Công Ty Cổ Phần Sữa Việt Nam – Vinamilk. Chương 3: trình bày các kĩ thuật liên quan mà luận văn sẽ sử dụng để giải quyết bài toán giao hàng của Vinamilk Chương 4: trình bày chi tiết về thuật giải metaheurisitic dựa trên local search mà luận văn đề nghị để giải quyết bài toán giao hàng của Vinamilk Chương 5: trình bày kết quả thực nghiệm khi áp dụngthuật giải đã đề nghị lên một số bộ dữ liệu thực tế của Vinamilk. Chương 6: trình bày kết luận và các hướng phát triển của đề tài
Trang 1ðẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ðẠI HỌC KHOA HỌC TỰ NHIÊN
Trang 3ii
Mục lục
Lời cảm ơn i
Mục lục ii
Danh mục các bảng iv
Danh mục các hình v
Phần mở ñầu 1
Lý do thực hiện và mục tiêu của ñề tài 1
Bố cục luận văn 1
Chương 1 Tổng quan về bài toán Vehicle Routing 3
1.1 Giới thiệu bài toán Vehicle Routing (VRP) 3
1.2 Các biến thể của bài toán VRP 4
1.3 Các hướng tiếp cận cho bài toán VRP 8
Chương 2 Bài toán giao hàng của công ty cổ phần sữa Việt Nam - Vinamilk 15
2.1 Một số khái niệm và ñặc trưng của bài toán 15
2.2 Ràng buộc của bài toán và thành phần của lời giải 17
2.3 Mục tiêu của bài toán 18
2.4 Các bài toán liên quan 18
2.5 Sự khác biệt của bài toán so với các bài toán VRP ñã ñược công bố 18
Chương 3 Các kĩ thuật liên quan 20
3.1 Thuật giải Tabu Search 20
3.2 Thuật giải Large Neighborhood Search 21
3.3 Bài toán Flexible Job Shop Scheduling 24
Chương 4 Thuật giải ñề nghị 32
Trang 4iii
4.1 Bước 1: tạo ra một lời giải của bài toán nhưng bỏ qua vấn ñề xếp lịch vào
kho của các xe 33
4.2 Bước 2: Xếp lịch vào kho cho các xe 39
4.3 Bước 3: Chỉnh sửa các chuyến của các xe trễ (nếu có) 44
4.4 Bước 4: Thêm xe mới vào lời giải hiện tại 46
Chương 5 Kết quả thực nghiệm 49
Chương 6 Kết luận và hướng phát triền 54
6.1 Kết luận 54
6.2 Hướng phát triển 55
Tài liệu tham khảo 56
Danh mục các công trình của tác giả 62
Trang 5iv
Danh mục các bảng
Bảng 2.1 Thông tin chi tiết về ñội xe của Vinamilk 15
Bảng 4.1 Sự tương quan giữa các khái niệm trong bài toán giao hàng của Vinamilk với các khái niệm trong bài toán FJSP 41
Bảng 5.1 Thông tin 19 bộ dữ liệu của Vinamilk 49
Bảng 5.2 Kết quả thực nghiệm (với bài báo [38]) 52
Bảng 5.3 Kết quả thực nghiệm mới 53
Trang 6v
DANH MỤC CÁC HÌNH VÀ ĐỒ THỊ
Trang
Hình 1.1 Cấu trúc bộ gene của HPV 3
Hình 1.2 Cấu trúc của protein E7 5
Hình 1.3 Tác động của protein E7 lên các quá trình nội bào 6
Hình 1.4 Hệ thống phát hiện trực tiếp 13
Hình 1.5 Hệ thống avidin-biotin 13
Hình 1.6 Hệ thống polymer – kháng thể thứ cấp – enzyme 14
Hình 1.7 ELISA và immuno PCR Nguyên lý và độ nhạy của hai phương pháp 15
Hình 1.8 Immuno-PCR cổ điển, sử dụng protein lai giữa protein A và streptavidin 17
Hình 1.9 Immuno-PCR phổ biến 18
Hình 1.10 Sơ đồ mô tả đoạn DNA marker được gắn cộng hợp vào kháng thể 19
Hình 1.11 Immuno-PCR trực tiếp 20
Hình 1.12 Immuno-PCR sử dụng các hạt từ phủ kháng thể 21
Hình 1.13 Immuno-PCR sử dụng “bio-barcode” 21
Hình 1.14 Immuno-PCR sử dụng LG protein và hệ thống phát hiện Tus-Ter 22
Hình 2.1 Buồng đếm hồng cầu 31
Hình 2.2 Sơ đồ phương pháp ELISA 38
Hình 2.3 Sơ đồ phương pháp checkerboard 38
Hình 2.4 Sơ đồ phương pháp immuno-PCR 39
Hình 3.1 Mô hình phương pháp lai hóa tế bào miễn dịch sử dụng trong đề tài 41
Hình 3.2 Lai hóa tế bào miễn dịch sử dụng KTĐD 1D5 trên dòng tế bào HeLa và C33A với các nồng độ kháng thể 10 µg/ml (A1, A2), 5 µg/ml (B1, B2), 2,5 µg/ml (C1, C2) 42
Hình 3.3 Lai hóa tế bào miễn dịch sử dụng KTĐD 4H5 trên dòng tế bào HeLa và C33A với các nồng độ kháng thể 10 µg/ml (A1, A2), 5 µg/ml (B1, B2), 2,5 µg/ml (C1, C2) 43
Trang 7vi
Hình 3.4 Lai hóa tế bào miễn dịch sử dụng kháng thể 1D5 (10 µg/ml) trên các dòng
tế bào HeLa (A), C33A (B), K1 chuyển vector pEGFP-E7HPV18 (C),
CHO-K1 chuyển vector pEGFP-C2 (D), CaSki (E) 44
Hình 3.5 Lai hóa tế bào miễn dịch sử dụng kháng thể 4H5 (10 µg/ml) trên các dòng tế bào HeLa (A), C33A (B), K1 chuyển vector pEGFP-E7HPV18 (C), CHO-K1 chuyển vector pEGFP-C2 (D), CaSki (E) 45
Hình 3.6 Lai hóa tế bào miễn dịch trên dòng tế bào HeLa với kháng thể 1D5 (10 µg/ml), sử dụng tác nhân bộc lộ kháng nguyên là citrate pH 6 10 mM (A), EDTA pH 8 1 mM (B), không xử lý với tác nhân bộc lộ kháng nguyên (C) 46
Hình 3.7 Lai hóa tế bào miễn dịch trên mẫu tế bào HeLa (A), CaSki (B), C33A (C) xử lý theo phương pháp ly tâm và trải lên 47
Hình 3.8 Lai hóa tế bào miễn dịch trên các mẫu tế bào dịch phết cổ tử cung 49
Hình 3.9 Mô hình kĩ thuật immuno-PCR và ELISA sử dụng trong đề tài 50
Hình 3.10 Đồ thị xác định hằng số ái lực của KTĐD 4H5-biotin với kháng nguyên E7 HPV 18 tái tổ hợp tinh sạch 53
Hình 3.11 PCR tạo DNA đánh dấu biotin 54
Hình 3.12 Đồ thị khảo sát nồng độ kháng thể “bắt giữ” 1D5 55
Hình 3.13 Đồ thị khảo sát nồng độ kháng thể “phát hiện” 4H5-biotin 56
Hình 3.14 Đồ thị khảo sát nồng độ STV-AP 57
Hình 3.15 Tối ưu hóa nồng độ DNA đánh dấu biotin sử dụng cho immuno-PCR 58
Hình 3.16 Tối ưu hóa nồng độ streptavidin sử dụng cho immuno-PCR 59
Hình 3.17 Tối ưu hóa tác nhân khóa giếng 60
Hình 3.18 Kết quả immuno-PCR với protein E7 HPV 18 tái tổ hợp 61
Trang 8Phần mở ñầu
Lý do thực hiện và mục tiêu của ñề tài
Lớp bài toán ñiều phối xe (Vehicle Routing Problem – VRP) có ứng dụng rất rộng rãi trong nhiều lĩnh vực của ñời sống, ñặc biệt là trong lĩnh vực giao thông vận tải Mỗi bài toán VRP thực tế thường có các ràng buộc ñặc trưng riêng, nhưng nhìn chung tất cả ñều là bài toán NP-khó ðề tài này tập trung nghiên cứu và giải quyết một bài toán VRP thực tế, bắt nguồn từ nhu cầu ñiều phối các xe giao hàng của công ty Cổ phần sữa Việt Nam (Vinamilk), cơ sở TP.HCM Hiện nay, Vinamilk thực hiện việc ñiều phối xe giao hàng bằng tay với quy trình như sau: mỗi ngày, công ty sẽ nhận các ñơn ñặt hàng của khách hàng (số lượng ñơn hàng từ vài trăm ñến hơn một ngàn), ñến cuối ngày, nhân viên ñiều phối sẽ tổng hợp lại toàn bộ các ñơn ñặt hàng ñã nhận trong ngày, và bộ phận ñiều phối thường phải mất khoảng 6 ñến 8 tiếng (ñôi khi phải thức cả ñêm) ñể thực hiện việc phân bổ ñơn hàng lên xe và xác ñịnh ñường ñi cho các xe vào ngày hôm sau Cách làm này tốn khá nhiều thời gian và công sức mà ñôi khi lời giải thu ñược lại chưa hẳn tốt Do ñó, vấn ñề tự ñộng hóa trong khâu ñiều phối xe là một nhu cầu rất cần thiết ðiểm ñặc biệt của bài toán này là ngoài vấn ñề ñiều phối xe, bài toán còn yêu cầu phải xếp lịch vào kho cho các xe, yêu cầu có thể ñược mô hình hóa dưới dạng bài toán Flexible Job Shop Scheduling – một bài toán thuộc lớp bài toán NP – khó Sự lồng ghép của hai bài toán khó khiến cho bài toán giao hàng của Vinamilk trở nên khá phức tạp ðề tài
ñã ñề nghị một thuật giải metaheuristic dựa trên local search ñể giải quyết bài toán này, kết quả thực nghiệm ñược so sánh với kết quả xếp tay ñược lấy từ thực tế và kết quả ñã ñược công bố dưới dạng bài báo của một phương pháp dựa trên quy hoạch ñộng (áp dụng trên cùng bài toán)
Bố cục luận văn
Luận văn gồm có 5 chương:
Trang 9- Chương 1: trình bày tổng quan về bài toán ñiều phối xe (Vehicle Routing Problem) – bao gồm ñịnh nghĩa bài toán, các biến thể của bài toán và sơ lược
về các hướng tiếp cận hiện nay ñể giải quyết bài toán
- Chương 2: trình bày chi tiết về bài toán mà luận văn tập trung nghiên cứu và giải quyết - bài toán giao hàng của Công Ty Cổ Phần Sữa Việt Nam – Vinamilk
- Chương 3: trình bày các kĩ thuật liên quan mà luận văn sẽ sử dụng ñể giải quyết bài toán giao hàng của Vinamilk
- Chương 4: trình bày chi tiết về thuật giải metaheurisitic dựa trên local search
mà luận văn ñề nghị ñể giải quyết bài toán giao hàng của Vinamilk
- Chương 5: trình bày kết quả thực nghiệm khi áp dụng thuật giải ñã ñề nghị lên một số bộ dữ liệu thực tế của Vinamilk
- Chương 6: trình bày kết luận và các hướng phát triển của ñề tài
Trang 10Chương 1 Tổng quan về bài toán Vehicle Routing
1.1 Giới thiệu bài toán Vehicle Routing (VRP)
Bài toán ñiều phối xe (Vehicle Routing Problem) [59] - gọi tắt là VRP - là bài toán
mà trong ñó ta có sẵn một tập các xe (vehicle) và một tập các khách hàng
(customer), mỗi khách hàng yêu cầu một số lượng hàng nhất ñịnh, yêu cầu của bài
toán là phải phân phối hàng và tìm ñường ñi giao hàng cho các xe dựa trên một số mục tiêu cho trước sao cho tất cả các khách hàng ñều phải ñược giao hàng, một trong những mục tiêu phổ biến nhất là cực tiểu hóa tổng thời gian vận chuyển của
tất cả các xe Bài toán quen thuộc người ñưa thư (Travelling Salesman Problem -
gọi tắt là TSP) [16] chính là một trường hợp ñặc biệt của bài toán VRP với một xe
giao hàng duy nhất (người ñưa thư)
Bài toán VRP và các biến thể của nó ñều thuộc lớp các bài toán NP-khó [55] ðây
là một trong những bài toán có ứng dụng thực tế rất rộng lớn và ñã nhận ñược sự quan tâm, nghiên cứu của rất nhiều nhà khoa học trên thế giới trong suốt 50 năm
qua [4] Trong bài toán này, các xe sẽ xuất phát từ các kho hàng (depot) và ñi giao hàng cho các khách hàng, sau ñó quay trở về lại kho hàng Một số khái niệm chính
của bài toán gồm:
- Xe (vehicle): các phương tiện dùng ñể chuyên chở hàng, có thể có nhiều loại
xe khác nhau, chẳng hạn như xe tải nhỏ, xe tải lớn, xe gắn máy, Các khái
niệm gắn liền với loại xe bao gồm: sức chứa của xe (capacity) – thông số này cho biết số lượng hàng tối ña mà xe có thể chở, chi phí vận chuyển (gồm hai loại thông dụng: chi phí cố ñịnh - fixed cost - là chi phí cần thiết ñể xe có
thể khởi hành, chi phí này không phụ thuộc vào ñộ dài quãng ñường mà xe
phải ñi; chi phí ñộng - variable cost là chi phí tiêu tốn trên từng ñơn vị quãng ñường mà xe phải ñi), quãng ñường tối ña mà xe có thể ñi trong một ngày
(maximum route length), loại mặt hàng (commodity type) mà xe có thể chở,
…
Trang 11- Kho hàng (depot): là nơi chứa hàng hóa và có thể cũng là ñịa ñiểm xuất
phát/ñịa ñiểm trở về của các xe, các xe sẽ lấy hàng tại kho ñể ñi giao hàng cho các khách hàng, sau khi giao xong, xe sẽ quay trở về lại kho hàng
- Khách hàng (customer): khách hàng có thể chỉ nhận hàng do xe giao tới, nhưng cũng có thể vừa nhận hàng (linehaul customer), vừa lấy hàng
(backhaul customer) Các khái niệm ñi kèm với khách hàng gồm: số lượng hàng mà khách yêu cầu (demand), loại mặt hàng mà khách yêu cầu, khoảng thời gian (time window) mà khách hàng cho phép xe ñến giao hàng (ví dụ:
khoảng thời gian của khách hàng A là [2p.m, 4p.m] nghĩa là khách hàng A chỉ cho phép xe ñến giao hàng (hoặc lấy hàng) trong khoảng thời gian từ
2p.m ñếm 4p.m, lượng thời gian cần thiết ñể thực hiện việc giao (nhận)
hàng (service time),
- Chuyến (route - trip): mỗi chuyến của một xe là một chu trình, với ñiểm xuất
phát và ñiểm kết thúc là kho hàng của xe, các ñiểm thành phần của chu trình tương ứng với ñịa ñiểm của các khách hàng mà xe ghé qua ñể giao (lấy) hàng
1.2 Các biến thể của bài toán VRP
Bài toán VRP có rất nhiều biến thể khác nhau dựa trên yêu cầu cụ thể của các bài toán thực tế Các biến thể này ñã tạo thành các nhánh nghiên cứu khác nhau, tất nhiên các phương pháp giải quyết các biến thể cũng có thể ñược chỉnh sửa ñể áp dụng qua lại lẫn nhau Một số biến thể quan trọng của bài toán VRP bao gồm [60][59]:
- Bài toán VRP với khoảng cách bất ñối xứng (Asymmetric VRP, gọi tắt là
AVRP): là bài toán VRP mà trong ñó, ñồ thị biểu diễn ñường ñi là một ñồ thị
có hướng Hầu hết các bài toán VRP trong thực tế ñều thuộc dạng này
- Bài toán VRP với nhiều kho hàng (Multi-Depot VRP, gọi tắt là MDVRP): bài
toán với nhiều kho hàng khác nhau, mỗi xe sẽ phụ thuộc vào một kho hàng
duy nhất (home depot)
Trang 12- Bài toán VRP với ràng buộc sức chứa (Capacitated Vehicle Routing
Problem, gọi tắt là CVRP): trong bài toán này, mỗi loại xe có sức chứa
(capacity) khác nhau, yêu cầu bài toán là phải tìm ñường ñi cho các xe sao cho tổng lượng hàng mà xe phải chở tại thời ñiểm bất kì không ñược vượt quá sức chứa của xe
- Bài toán VRP với ràng buộc ñộ dài tối ña của quãng ñường mà xe ñược phép
ñi (Distance-Constrained VRP, gọi tắt là DVRP): trong bài toán này, gắn với
mỗi loại xe là một tham số thể hiện tổng ñộ dài quãng ñường tối ña mà mỗi
xe ñược phép ñi Yêu cầu bài toán là phải tìm ñường ñi cho các xe sao cho tổng quãng ñường mà mỗi xe phải ñi không ñược vượt quá tham số này
- Bài toán VRP với ràng buộc khoảng thời gian (VRP with Time Windows, gọi
tắt là VRPTW): trong bài toán này, mỗi khách hàng sẽ chỉ cho phép xe ñến
giao hàng trong một khoảng thời gian cho phép (time windows) nhất ñịnh, tương ứng với mỗi khách hàng i, khoảng thời gian này sẽ ñược biểu diễn bởi ñoạn [a i , b i ], nếu xe ñến ñịa ñiểm của khách hàng thứ i vào trước thời ñiểm
a i , xe sẽ phải ñứng chờ cho ñến thời ñiểm a i mới ñược giao hàng cho khách,
bên cạnh ñó, việc giao hàng của xe cho khách hàng thứ i cần kết thúc trước thời ñiểm b i
- Bài toán VRP với yêu cầu giao và nhận hàng (VRP Pickup and Delivery, gọi
tắt là VRPPD): bài toán này cho phép xe thực hiện cả hai chức năng - lấy hàng (pickup) từ một số khách hàng (linehaul customer) và ñem ñi giao (delivery) cho khách hàng khác (backhaul customer), bài toán này thường áp
dụng cho các dịch vụ vận chuyển hàng, trong ñó, khách hàng sẽ yêu cầu xe ñến chỗ mình ñể nhận hàng và giao ñến cho người nhận (một khách hàng khác) Khi ñó, tất nhiên xe phải ñến gặp khách hàng thứ nhất ñể lấy hàng trước, rồi mới có hàng ñể giao ñến cho người nhận Như vậy, trong bài toán
này sẽ có thêm một loại ràng buộc mới: ràng buộc thứ tự ñến gặp khách hàng (precedence constraint) Các xe phải tuân thủ thứ tự này, nghĩa là phải
Trang 13gặp khách hàng ñặt giao hàng trước, rồi mới ñược ñến gặp khách hàng cần nhận hàng
- Bài toán VRP với yêu cầu giao hàng trước (VRP with Backhauls, gọi tắt là
VRPB): tương tự như bài toán VRPPD, bài toán này cũng cho phép xe giao
hàng và nhận hàng, nhưng có một chút khác biệt: xe không ñến gặp khách hàng ñể lấy hàng rồi giao cho khách hàng khác nữa mà ràng buộc thứ tự gặp
khách hàng ở ñây sẽ là: xe phải ñi giao hàng cho tất cả các khách hàng cần
nhận (linehaul customers) trước, rồi sau ñó mới ñến gặp các khách hàng cần giao (backhaul customers) ñể lấy hàng ñem về kho Wade và Salhi [10] ñã
ñề nghị một biến thể khác của bài toán VRPB, trong ñó, xe không cần phải giao hết hàng rồi mới ñược nhận hàng, mà có thể nhận hàng sớm hơn (tại một thời ñiểm nào ñó trong lúc giao hàng, thời ñiểm này ñược xác ñịnh dựa trên kinh nghiệm của tài xế, trạng thái hàng của xe tại thời ñiểm ñó,…)
- Bài toán VRP cho phép một xe ñi nhiều chuyến (bài toán này có rất nhiều tên gọi khác nhau, bao gồm: VRP with multiple use of vehicles, VRP with multi-
trips, VRP with multiple trips, VRP with multiple vehicle trips, gọi tắt chung
là VRPM): trong bài toán này, mỗi xe có thể chạy nhiều hơn một chuyến,
nghĩa là một chiếc xe có thể xuất phát từ kho hàng, ñi giao hàng, quay trở về kho hàng và lại lấy hàng ñi giao tiếp cho ñến khi tổng thời gian giao hàng của xe chạm mức cho phép
- Bài toán VRP cho phép chia nhỏ ñơn hàng (VRP with split delivery) [13]:
trong bài toán này, mỗi ñơn ñặt hàng của khách hàng ñược phép phân nhỏ ra thành các ñơn ñặt hàng với số lượng nhỏ hơn, khi ñó, một khách hàng có thể ñược giao hàng bởi nhiều hơn một xe Khi các ñơn ñặt hàng của các khách hàng có kích thước quá lớn, việc chia nhỏ các ñơn ñặt hàng này ra sẽ giúp tận dụng ñược tối ña sức chứa của xe
- Bài toán VRP với nhiều loại xe khác nhau [11]: là bài toán với tập các loại xe
có sức chứa và chi phí vận chuyển khác nhau Bài toán này có hai biến thể con, gồm:
Trang 14+ Bài toán VRP với ñội xe cố ñịnh (Heterogeneous VRP, hoặc VRP with
Heterogeneous fleet of vehicles): Số lượng xe của mỗi loại là một hằng số
+ Bài toán VRP với ñội xe biến ñộng (Mixed fleet and size VRP, Fleet Size and
Mix VRP): Số lượng xe của mỗi loại cũng là một biến số, nghĩa là ngoài việc
ñịnh tuyến, ta còn cần phải xác ñịnh ñược số lượng xe mỗi loại cần dùng sao cho tốt nhất
- Bài toán VRP với yêu cầu loại xe phù hợp (VRP with site-dependence, gọi tắt
là SDVRP): trong bài toán này, mỗi khách hàng chỉ chấp nhận một số loại xe
nhất ñịnh, ñây cũng là một yêu cầu rất thực tế, chẳng hạn như với các khách hàng nằm trong hẻm nhỏ hoặc nằm ở ñường cấm xe tải lớn thì chỉ có các xe tải nhỏ hoặc xe máy mới có thể giao hàng ñến ñược
- Bài toán VRP với khách hàng ñược biểu diễn bởi các cung (Arc Routing
Problems )[12]: ñây là một bài toán ñặc biệt, khác với các bài toán VRP
thông thường, trong ñó, các khách hàng thay vì ñược biểu diễn bằng các ñiểm trong ñồ thị, thì sẽ ñược biểu diễn bằng các cung Bài toán này xuất phát từ yêu cầu của các bài toán thực tế, chẳng hạn như bài toán tìm ñường ñi cho các xe dọn tuyết trong mùa ñông, rải muối, rải cát lên mặt ñường băng
ñể hạn chế trơn trượt, khi ñó, các vị trí cần rải muối, cát hoặc lấy tuyết không
còn là các ñiểm nữa, mà là các ñoạn ñường
- Bài toán VRP với ñơn ñặt hàng theo chu kì (Periodic VRP): trong bài toán
này, các xe giao hàng cho mỗi khách hàng trong nhiều ngày (gọi là một chu kì), mỗi xe có thể gặp một khách hàng nhiều hơn một lần trong suốt chu kì Mỗi khách hàng sẽ có một tham số ñi kèm, quy ñịnh số lần mà xe phải ñến giao hàng cho khách trong suốt chu kì Một ứng dụng thực tế của bài toán này là bài toán thu gom rác với khách hàng là các siêu thị, các cửa hàng tạp hóa,…, trong ñó, các siêu thị lớn thường cần gom rác ngày một lần, trong khi
các cửa hàng tạp hóa nhỏ thì chỉ cần một tuần hai lần là ñủ
- Bài toán VRP ña mục tiêu (Multi Objective VRP): ñây là hướng bài toán mới
ñược phát triển trong những năm gần ñây do nhu cầu xuất phát từ thực tế
Trang 15Trong bài toán này, ngoài mục tiêu cực tiểu hóa tổng chi phí (thời gian) vận chuyển, còn có các mục tiêu khác, chẳng hạn như: cực tiểu hóa số lượng xe cần dùng ñể phục vụ hết nhu cầu khách hàng, cân bằng về tổng quãng ñường, tổng thời gian phải ñi giữa các tuyến ñường nhằm ñảm bảo ñộ công bằng giữa các tài xế (bằng cách giảm thiểu ñộ chênh lệch ñộ dài, thời gian di chuyển giữa tuyến ñường dài nhất và tuyến ñường ngắn nhất), giảm thiểu rủi
ro khi chuyên chở các hàng hóa nguy hiểm, tạo mối quan hệ thân quen giữa tài xế và khách hàng
Tất nhiên, các biến thể trên của bài toán VRP có thể kết hợp lại với nhau ñể tạo nên các biến thể mới cho phù hợp với bài toán thực tế cụ thể Chẳng hạn như: kết hợp bài toán CVRP (bài toán VRP với ràng buộc sức chứa của xe) và bài toán AVRP (bài toán VRP với ñồ thị biểu diễn ñường ñi là ñồ thì có hướng), ta có bài toán ACVRP (bài toán bài toán VRP với ñồ thị biểu diễn ñường ñi là ñồ thị có hướng và
có ràng buộc sức chứa của xe) Bài toán mà luận văn này giải quyết là một bài toán VRP thực tế và cũng là một dạng biến thể kết hợp của các biến thể ñã nêu trên nhưng ñược bổ sung thêm một số yêu cầu ñặc trưng khác
1.3 Các hướng tiếp cận cho bài toán VRP
Các hướng tiếp cận cho bài toán VRP và các biến thể của nó có thể ñược chia làm 4 nhóm chính [4] [35]: nhóm các thuật toán chính xác, nhóm các thuật giải xấp xỉ, nhóm các thuật giải heuristics cổ ñiển và nhóm các thuật giải metaheuristic Sơ ñồ tóm tắt các hướng tiếp cận của từng nhóm ñược trình bày ở Hình 1 Sau ñây là chi tiết của từng nhóm:
- Nhóm các thuật toán chính xác (exact algorithms): là các thuật toán mà lời
giải thu ñược luôn ñảm bảo là lời giải tối ưu, các thuật toán chính xác cho bài VRP phần lớn ñược phát triển lên từ các thuật toán chính xác cho bài toán TSP và các biến thể của nó, gồm: các thuật toán branch and bound, quy hoạch ñộng (dynamic programming), các thuật toán dựa trên mạng phân luồng (network flow algorithms), các thuật toán set partitioning Do hạn chế
Trang 16về mặt thời gian tìm kiếm, các thuật toán chính xác chủ yếu ñược sử dụng ñể giải quyết các bài toán VRP với kích thước nhỏ và số lượng ràng buộc hạn chế Với bài toán CVRP, các thuật toán chính xác hiện nay chỉ khả thi cho các bộ dữ liệu với số khách hàng nhỏ hơn hoặc bằng 135 [4]
- Nhóm các thuật giải xấp xỉ (approximate algorithms): là các thuật giải mà tỉ
lệ giữa chất lượng lời giải thu ñược so với lời giải tối ưu luôn ñược ñảm bảo
ở một mức nhất ñịnh cho trước Tương tự như các thuật toán chính xác, các thuật giải xấp xỉ cho bài toán TSP cũng ñược mở rộng ñể áp dụng cho bài toán VRP và các biến thể của nó [2] Các thuật toán ñược ñề nghị trong [33][34] là một trong các thuật toán tiêu biểu của nhóm này
- Nhóm các thuật giải heuristic cổ ñiển: các thuật giải này phát triển mạnh vào
khoảng các năm 1960 ñến 1990, hiện nay, các thuật giải này thường ñược dùng kèm trong các metaheuristic và ñảm nhận nhiệm vụ khởi tạo lời giải ban ñầu hoặc cải thiện chất lượng của lời giải sẵn có Sau ñây là một số thuật giải heuristic cổ ñiển tiêu biểu [4] [35]:
+ Nhóm các thuật giải khởi tạo (constructive heuristics):
• Các thuật giải Savings: ñược ñề nghị lần ñầu bởi Clarke và Wright [1] vào
năm 1964, thuật giải này xây dựng một lời giải theo phương pháp sau: ban ñầu, khởi tạo n chuyến tương ứng với n khách hàng, sau ñó, các chuyến này
sẽ ñược ghép lại với nhau cho ñến khi không thể ghép ñược nữa (do giới hạn sức chứa của xe), việc chọn các chuyến ñể ghép lại với nhau dựa trên một hàm saving Nhiều tác giả [61][62] ñã phát triển thêm các hàm saving khác nhau dựa trên phiên bản gốc của Clarke và Wright
• Các thuật giải Insertion: các thuật giải thuộc nhóm này sẽ xây dựng các
chuyến của lời giải bằng cách lần lượt chèn mỗi khách hàng vào một chuyến, các chuyến có thể ñược xây dựng ñồng thời hoặc tuần tự Tiêu chí
ñể chèn khách hàng vào các chuyến thường dựa trên nguyên lý của thuật
Trang 17giải tham lam, một trong những tiêu chí ñơn giản nhất là chèn khách hàng vào chuyến sao cho tổng quãng ñường mà xe phải ñi thêm là nhỏ nhất
• Các thuật giải gom nhóm khách hàng trước, tìm ñường ñi sau (cluster-first,
route-second): quá trình tạo lập một lời giải ñược chia làm 2 bước – bước
thứ nhất: chia tập các khách hàng thành các tập con, mỗi tập con tương ứng với một chuyến, bước thứ 2: xác ñịnh ñường ñi cụ thể cho từng chuyến Hai thuật giải tiêu biểu nhất của nhóm này là thuật giải seed-based của Fisher và Jaikumar giới thiệu vào năm 1981[30] và thuật giải sweep-based của Gillet
và Miller giới thiệu vào năm 1974 [36]
+ Nhóm các thuật giải cải tiến chất lượng lời giải sẵn có (improvement
heuristics): các thuật giải thuộc nhóm này sẽ tìm cách cải tiến chất lượng của
lời giải hiện tại thông qua các bước chỉnh sửa lời giải hiện tại Các bước chỉnh sửa này ñược gọi là các phép move Có hai loại phép move cho bài toán VRP:
phép move tác ñộng lên một chuyến duy nhất (intra-route moves) phép move tác ñộng lên nhiều chuyến cùng một lúc (inter-route move) [37]
- Nhóm các thuật giải metaheuristic: bắt ñầu phát triển từ năm 1990, ñây là
nhóm các hướng tiếp cận có nhiều triển vọng nhất hiện nay và thu hút ñược
sự quan tâm của một lượng lớn các nhà nghiên cứu Tác giả M.Gendreau và các cộng sự ñã công bố một bài khảo sát chi tiết và khá ñầy ñủ về các thuật giải metaheuristic hiện nay cho bài toán VRP [41] Sở dĩ metaheuristícc phát triển mạnh mẽ trong những năm gần ñây là do trong nhiều trường hợp, các thuật giải metaheuristic cho phép tìm ñược các lời giải tương ñối tốt trong khoảng thời gian hợp lý cho các bài toán với không gian tìm kiếm quá lớn (ñặc biệt là các bài toán ứng dụng thực tế) mà các thuật toán chính xác hoặc các thuật toán xấp xỉ không thể khả thi Tuy nhiên, ñiểm bất lợi của các metaheuristic là vấn ñề lựa chọn giá trị phù hợp cho các tham số, cách làm thông dụng nhất hiện nay là dựa vào kinh nghiệm Các metaheuristic có thể chia làm hai nhóm chính:
Trang 18+ Nhĩm các thuật giải metaheuristic dựa trên local search (local search
metaheuristics): Bắt nguồn từ một lời giải ban đầu (lời giải này gọi là lời giải
khởi tạo, cĩ thể được tạo thành từ nhiều phương pháp khác nhau, chẳng hạn như các constructive heursitics đã đề cập ở phần trên), các thuật giải Local Search sẽ thực hiện lặp đi lặp lại việc tìm kiếm trong miền khơng gian tìm kiếm của bài tốn nhằm mục đích tìm ra lời giải tối ưu, tại mỗi bước lặp của mình, thuật giải sẽ tìm kiếm và chỉ lựa ra một lời giải duy nhất để làm cơ sở cho bước lặp tiếp theo, đây chính là điểm khác biệt cơ bản nhất giữa nhĩm thuật giải Local Search so với nhĩm các thuật giải dựa trên quần thể, ở nhĩm các thuật giải dựa trên quần thể, sau mỗi bước lặp, kết quả thu được là cả một tập các lời giải, trong khi nhĩm Local Search chỉ chọn một lời giải duy nhất Tại mỗi bước lặp, thuật giải sẽ lấy lời giải duy nhất thu được từ bước lặp trước
làm lời giải hiện tại, thuật giải sẽ duyệt trong miền khơng gian láng giềng của
lời giải hiện tại để chọn ra lời giải thay thế cho lời giải hiện tại ở bước lặp kế sau Mỗi lời giải trong khơng gian láng giềng của lời giải hiện tại được gọi là
một láng giềng của lời giải hiện tại Sự tác động lên lời giải hiện tại để biến nĩ thành một lời giải láng giềng của nĩ gọi là một bước chuyển (move) Trong các local search, hai vấn đề quan trọng nhất cần quan tâm là tính tăng cường
(intensification) và tính đa dạng (diversification) của quá trình tìm kiếm, tính
tăng cường là khả năng tập trung tìm kiếm sâu ở những vùng khơng gian mà ta
dự đốn là sẽ chứa lời giải tối ưu, tính đa dạng là khả năng tìm đến những vùng khơng gian lời giải mới nhằm thốt ra khỏi các vùng chứa điểm tối ưu cục bộ Các local search khác nhau sẽ đưa ra các chiến lược khác nhau để đảm bảo sự tồn tại và cân bằng giữa hai yếu tố này Một số metaheuristic tiêu biểu của nhĩm này đã được áp dụng khá hiệu quả cho bài tốn VRP gồm:
• Thuật giải Tabu Search: được đề nghị lần đầu tiên bởi Fred Glover vào năm
1989 [40], thành phần chính quan trọng nhất của thuật giải Tabu Search là Tabu list, đây là một danh sách chứa một số phép move đã được áp dụng trong quá khứ, một phép move sẽ khơng được phép áp dụng lên lời giải hiện
Trang 19tại chừng nào phép move này còn nằm trong Tabu list Nhiệm vụ của Tabu list là ñể tránh quay trở lại những lời giải ñã tìm trước ñó, nhằm tăng tính ña dạng của quá trình tìm kiếm Tuy nhiên, nếu một phép move ñang nằm trong Tabu list nhưng nó lại có thể giúp cải thiện chất lượng của lời giải tốt nhất hiện tại thì phép move này vẫn ñược chấp nhận sử dụng (aspiration criteria) Các thuật giải Tabu Search tiêu biểu cho bài toán VRP gồm [5][6][7][15]
• Thuật giải tôi luyện thép (Simulated Annealing): bắt nguồn từ thuật giải Metropolis-Hasting [22], thuật giải tôi luyện thép mô phỏng quá trình luyện thép trong tự nhiên vào lý thuyết ñề giải các bài toán tối ưu tổ hợp khó Ứng dụng tiêu biểu của thuật giải tôi luyện thép cho bài toán VRP có thể kể ñến bài báo [42]
• Các phiên bản deterministic của thuật giải tôi luyện thép: trong các phiên bản này, việc quyết ñịnh xem có chấp nhận một lời giải xấu hơn lời giải hiện tại hay không sẽ không dựa vào xác suất, mà ñược quyết ñịnh dựa vào kết quả của quá trình tìm kiếm trước ñó Các thuật giải tiêu biểu thuộc nhóm này gồm: thuật giải Threshold accepting, Record-to-record travel [43] và Great Deluge
• Thuật giải Variable Neighborhood Search (VNS): thuật giải VNS ñặc biệt ở chỗ cho phép tìm kiếm trên nhiều tập láng giềng khác nhau, nhờ ñó tăng tính ña dạng của quá trình tìm kiếm Các tập láng giềng sẽ ñược ñịnh nghĩa sẵn theo một ñộ ưu tiên cho trước, và tại mỗi bước lặp, các tập láng giềng sẽ ñược duyệt lần lượt, nếu lời giải láng giềng phát sinh ngẫu nhiên tập láng giềng có ñộ ưu tiên cao hơn không thể cải thiện chất lượng lời giải hiện tại, tập láng giềng kế tiếp sẽ ñược chọn ðể nâng cao chất lượng tìm kiếm, thuật giải VNS có thể kết hợp với các local search khác từ ñơn giản (thuật giải leo ñồi) ñến phức tạp (các metaheuristics khác thuộc nhóm local search) Các
Trang 20thuật giải VNS cho hiệu quả cao ñối với các bài toán VRP ñược ñề cập ñến trong các bài báo [44] và [45]
• Thuật giải Large Neighborhood Search [14] và Adaptive Large Neighborhood Search [21]: các miền láng giềng ñược xét tại mỗi bước lặp của các thuật giải thuộc nhóm này thường có kích thước rất lớn, ñiều này sẽ giúp quá trình tìm kiếm có thể vượt ra khỏi những ñiểm tối ưu cục bộ
+ Nhóm các thuật giải dựa trên quần thể (population-based metaheuristics) gồm:
các thuật giải tiến hóa (Evolutionary Algorithms, gồm thuật giải di truyền [26] – Genetic Algorithm, và thuật giải Memetic [46]), những năm gần ñây còn có một số thuật giải khác dựa trên quy luật sống bầy ñàn của các loại ñộng vật trong tự nhiên như thuật giải bầy kiến (Ant Colony Algorithm) [9], thuật giải Particle Swarm Optimization [47]
Trang 21Hình 1.1 Các hướng tiếp cận cho bài toán VRP
Trang 22Chương 2 Bài toán giao hàng của công ty cổ phần sữa
Việt Nam - Vinamilk
2.1 Một số khái niệm và ñặc trưng của bài toán
Trạm xuất phát (home depot) và các kho hàng(depot) :
Vào ñầu ngày, tất cả các xe của công ty ñều khởi hành từ một trạm xuất phát duy nhất
(Xí Nghiệp Kho Vận Vinamilk – TP.HCM) và quay trở lại trạm xuất phát này sau khi
ñã giao hết số hàng ñược phân Trong quá trình ñi, xe sẽ ñến các kho hàng ñể lấy hàng
ñem ñi giao cho các khách hàng Hiện nay, Vinamilk TP.HCM có 2 kho hàng:
- Kho thứ nhất: Kho Trường Thọ -Thống Nhất (Quận Thủ ðức)
- Kho thứ hai: Nhà máy sữa Sài Gòn (Quận 12)
Các kho hàng này chỉ mở cửa cho xe lấy hàng trong khoảng thời gian từ 6h30 ñến 15h
Do ràng buộc về kích thước mặt bằng của kho, tại cùng một thời ñiểm, chỉ có tối ña 3
xe ñược vào mỗi kho cùng một lúc
Các loại mặt hàng:
Các loại mặt hàng lạnh của Vinamilk bao gồm hai nhóm:
- Nhóm kem – gồm các sản phẩm kem các loại
- Nhóm sữa chua - gồm các sản phẩm: sữa chua các loại, fromage, provi
Các xe chở hàng lạnh ñều yêu cầu phải có máy lạnh, nhưng nhóm kem yêu cầu nhiệt
ñộ thấp hơn nhóm sữa chua và mặt hàng khác Do ñó, xe chở ñược kem thì cũng có thể chở ñược các mặt hàng thuộc nhóm sữa chua, nhưng ñiều ngược lại thì không ñúng
ðội xe:
ðội xe lạnh của Vinamilk TP.HCM hiện nay gồm 23 chiếc (thuộc tổ xe Lạnh Phố), với sức chứa và khả năng chở khác nhau Trong ñó, có 11 xe có thể chở ñược cả kem
và sữa chua Các xe còn lại chỉ có thể chở sữa chua Tại một thời ñiểm, mỗi xe chỉ có
thể chở một nhóm mặt hàng Ở ñây, chi phí vận chuyển của các xe ñược xem là như
nhau (mặc dù sức chứa khác nhau) Mỗi xe có hai thông tin quan trọng: loại mặt hàng
mà xe có thể chở, sức chứa (tương ứng với từng loại mặt hàng) Vào ñầu ngày, tất cả các xe ñều tập trung sẵn ở một ñịa ñiểm chung duy nhất: Xí nghiệp kho vận Các xe phải quay trở lại ñịa ñiểm này sau khi kết thúc lịch trình hoạt ñộng trong ngày của mình Thông tin cụ thể về sức chứa của từng xe ñược liệt kê trong Bảng 2.1
Bảng 2.1 Thông tin chi tiết về ñội xe của Vinamilk
Trang 23Sức chứa (ñơn vị: thùng)
STT
Sức chứa (ñơn vị: thùng) Sữa chua Kem Sữa chua Kem
trước khi bắt ñầu một chuyến mới; yêu cầu này giúp tài xế tránh ñược khó khăn khi phải xếp hàng lên xe khi lấy hàng ở các kho xen kẽ nhau nhiều lần trong quá trình ñi
giao hàng Bài toán cho phép một xe có thể ñi nhiều chuyến trong một ngày
- Loại mặt hàng (mỗi ñơn hàng chỉ thuộc một loại mặt hàng duy nhất)
- Số lượng hàng yêu cầu
- Kho hàng chứa ñơn hàng này (hàng ñể giao cho mỗi ñơn hàng sẽ ñược ñóng gói lại sẵn thành kiện và ñặt tại một kho nào ñó, khi ñi giao hàng, các xe bắt buộc phải ñến ñúng kho và lấy ñúng kiện hàng của ñơn hàng tương ứng)
Thời gian lấy/giao hàng:
Trang 24Thời gian lấy hàng tại kho v
sẽ là tổng của hai thành ph
hàng phải lấy), và thời gian lấy(giao)
ñược tính bằng công thức:
Thời gian lấy hàng = t
Trong bài toán này, thời gian l
làm thủ tục tại mỗi ñịa chỉ giao hàng là 10 phút, t
Hình 2.1 Hình minh họa các khái niệm trong b
2.2 Ràng buộc của bài toán
Bài toán có 7 ràng buộc sau:
1 Các xe ñược phép ghé kho lấy h
2 Do giới hạn về thời gian hoạt ñộng của xe tải trong th
phép bắt ñầu giao hàng t
xe kết thúc trước 8h, xe ph
3 Thời ñiểm trở về lại trạm xuất phát của các xe không ñ
4 Tại mỗi thời ñiểm, mỗi xe chỉ ñ
5 Lượng hàng mà mỗi xe chở
của xe ñối với loại mặt h
6 ðối với mỗi chuyến, xe phải giao hết to
chuyến hiện tại ñể bắt ñầu một chuyến ñi mới
ại kho và thời gian giao hàng tại mỗi ñịa chỉ giao hàng c
ành phần: thời gian làm thủ tục (không phụ thuộc v
ời gian lấy(giao) hàng (phụ thuộc vào số lượng h
àng = tổng số thùng hàng * tốc ñộ lấy(giao) h
ời gian làm thủ tục tại kho ñược quy ñịnh là 15 phút, thgiao hàng là 10 phút, tốc ñộ lấy (giao) hàng là 3 giây/thùng
ọa các khái niệm trong bài toán giao hàng của Vinamilk
a bài toán và thành phần của lời giải
ộc sau:
ợc phép ghé kho lấy hàng trong khoảng thời gian từ 6h30 ñến 15h
ới hạn về thời gian hoạt ñộng của xe tải trong thành phố, các xe chỉ ñ
àng từ 8h Nghĩa là, nếu ñợt ghé kho lấy hàng ñ8h, xe phải ñứng chờ cho ñến 8h mới ñược phép ñi giao h
ời ñiểm trở về lại trạm xuất phát của các xe không ñược vượt quá 15h
ại mỗi thời ñiểm, mỗi xe chỉ ñược chở một loại hàng duy nhất
ỗi xe chở tại mỗi thời ñiểm không ñược vượt
ối với loại mặt hàng mà xe ñang chở
ối với mỗi chuyến, xe phải giao hết toàn bộ số hàng ñã lấy trư
ến hiện tại ñể bắt ñầu một chuyến ñi mới
ủa Vinamilk
ảng thời gian từ 6h30 ñến 15h
ố, các xe chỉ ñược àng ñầu tiên của
ợc phép ñi giao hàng
ợt quá 15h
ợt quá sức chứa
ước khi kết thúc
Trang 25Tất cả các ràng buộc trên ñều là các ràng buộc cứng, nghĩa là lời giải của bài toán chỉ ñược chấp nhận khi thỏa tất cả các ràng buộc trên
Lời giải của bài toán gồm có ba thành phần:
- Tập xe sẽ sử dụng ñể giao hàng (là tập con của tập 23 xe của xí nghiệp)
- Thông tin về danh sách khách hàng, thứ tự giao hàng của từng chuyến của các
xe trong tập xe ñược chọn
- Thứ tự xếp hàng của các xe tại từng kho
2.3 Mục tiêu của bài toán
Bài toán có hai mục tiêu:
- Mục tiêu thứ nhất: Cực tiểu hóa số xe cần dùng ðây là mục tiêu quan trọng nhất và có ñộ ưu tiên cao nhất
- Mục tiêu thứ hai: Cực tiểu hóa tổng thời gian di chuyển (total traveling time)
của tất cả các xe – thời gian di chuyển này không tính thời gian chất hàng/bốc
dỡ hàng tại kho/vị trí khách hàng
2.4 Các bài toán liên quan
Bài toán giao hàng lạnh trong thành phố của Vinamilk là một dạng kết hợp của nhiều biến thể của bài toán VRP trong lý thuyết, bao gồm:
- Bài toán VRP với khoảng cách bất ñối xứng (AVRP): do dữ liệu ñường ñi lấy
từ thực tế nên ñồ thị biểu diễn khoảng cách giữa các ñiểm là ñồ thị có hướng
- Bài toán VRP với ràng buộc sức chứa (CVRP): các xe ñều có ràng buộc về sức chứa
- Bài toán VRP với ràng buộc về ñộ dài tối ña của quãng ñường mà mỗi xe có thể
ñi (DVRP): các xe phải về kho trước khoảng thời gian quy ñịnh là 4h chiều
- Bài toán VRP cho phép một xe ñi nhiều chuyến (VRPM): các xe ñược phép ñi nhiều chuyến trong một ngày
- Bài toán VRP với nhiều loại xe khác nhau (Heterogeneous VRP): tập 23 xe cho trước có sức chứa khác nhau ñối với từng loại mặt hàng
2.5 Sự khác biệt của bài toán so với các bài toán VRP ñã ñược công bố
- Bài toán của Vinamilk khác với các bài toán CVRP cơ bản vì có ñến hai loại mặt hàng, và sức chứa của các xe cũng tùy thuộc vào từng loại mặt hàng
Trang 26- Bài toán của Vinamilk tuy có nhiều kho hàng, nhưng lại khác với bài toán Multi-depot VRP trong lý thuyết vì: ñối với bài toán Multi-depot VRP, mỗi xe
sẽ thuộc một kho cố ñịnh duy nhất, trong khi ở bài toán của Vinamilk, các xe có thể ñến bất kì kho hàng nào ñể lấy hàng; mặt khác, các khách hàng trong bài toán Multi-depot VRP có thể nhận hàng từ bất cứ kho hàng nào, trong khi ở bài toán của Vinamilk, mỗi ñơn hàng ñã ñược chỉ ñịnh sẵn kho chứa, và các xe bắt buộc phải giao ñúng kiện hàng của ñơn hàng tại kho ñã chỉ ñịnh
- Có lồng ghép một bài toán NP-khó khác ở bên trong – bài toán Flexible Job
Shop Scheduling [49]: do tại mỗi thời ñiểm, chỉ có tối ña 3 xe ñược vào một kho hàng lấy hàng cùng lúc, do ñó, nếu kho ñang hết chỗ, xe ñến lấy hàng phải ñứng chờ cho ñến khi có chỗ trống thì mới ñược vào, nếu xe phải chờ quá lâu thì có thể sẽ không kịp trở về xí nghiệp vào cuối ngày theo thời gian quy ñịnh (không vượt quá 15h) Do ñó, ngoài việc ñịnh tuyến cho các xe, một yêu cầu
khác của bài toán này là phải xếp lịch vào kho cho các xe Bài toán xếp lịch vào kho cho các xe có thể ñược mô hình hóa thành một bài toán Flexible Job Shop
Scheduling [49] – một lớp bài toán con thuộc lớp bài toán Machine Scheduling,
và cũng thuộc lớp bài toán NP khó Sự lồng ghép giữa hai bài toán khó (VRP và Flexible Job Shop Scheduling) khiến cho bài toán của Vinamilk trở nên rất phức tạp Theo khảo sát của tác giả thì cho ñến nay, bài toán VRP kết hợp với bài toán xếp lịch vào kho lấy hàng như vậy chỉ mới ñược ñề cập ñến trong một bài báo duy nhất [39], tuy nhiên, trong bài báo này, chỉ có một kho hàng duy nhất và tại mỗi thời ñiểm chỉ có 1 xe ñược phép vào kho lấy hàng – do ñó, bài
toán xếp lịch vào kho lấy hàng của [39] sẽ tương ñương với bài toán Job Shop
Scheduling [51] – bài toán tiền thân của bài toán Flexible Job Shop Scheduling
Trang 27Chương 3 Các kĩ thuật liên quan
Phần này sẽ trình bày các kĩ thuật liên quan mà luận văn sử dụng ñể giải quyết bài toán ñiều phối xe của Vinamilk, gồm: thuật giải Tabu Search, thuật giải Large Neighborhood Search và bài toán Flexible Job Shop Scheduling
3.1 Thuật giải Tabu Search
Tabu Search là một trong những metaheuristic ñược áp dụng nhiều nhất cho các bài
toán tối ưu tổ hợp khó Trong phần này, chúng tôi sẽ giới thiệu sơ lược về các thành phần cơ bản nhất của thuật giải Tabu Search và cách hoạt ñộng của nó Ngoài các thành phần cơ bản này, thuật giải Tabu Search ñược áp dụng trong thực tế có rất nhiều biến thể, với rất nhiều chiến lược hiệu quả khác ñược bổ sung vào nhằm nâng cao khả năng tìm kiếm của thuật giải và ñược trình bày chi tiết tại tài liệu của tác giả Fred Glover [57], người ñược xem là cha ñẻ của thuật giải này
Bài toán mà thuật giải Tabu Search giải quyết là bài toán tối ưu, mục tiêu của bài toán
là tìm ra lời giải tốt nhất - lời giải mà tại ñó, hàm mục tiêu của bài toán ñạt giá trị cực
tiểu Hàm mục tiêu là hàm dùng ñể ño chi phí của một lời giải, lời giải có chi phí càng thấp thì càng tốt
Ý tưởng chính của thuật giải Tabu Search như sau: bắt nguồn từ một lời giải ban ñầu (lời giải này gọi là lời giải khởi tạo, có thể ñược tạo thành từ nhiều phương pháp khác nhau, chẳng hạn như: phương pháp thuật giải tham lam, phương pháp khởi tạo ngẫu nhiên, ), thuật giải Tabu Search sẽ thực hiện lặp ñi lặp lại việc tìm kiếm trong miền không gian tìm kiếm của bài toán nhằm mục ñích tìm ra lời giải tối ưu, tại mỗi bước lặp của mình, thuật giải Tabu Search sẽ tìm kiếm và chỉ lựa ra một lời giải duy nhất ñể làm cơ sở cho bước lặp tiếp theo
Tại mỗi bước lặp, Tabu Search sẽ lấy lời giải duy nhất thu ñược từ bước lặp trước làm lời giải hiện tại, thuật giải sẽ duyệt trong miền không gian láng giềng của lời giải hiện tại ñể chọn ra lời giải tốt nhất, lời giải này sẽ thay thế cho lời giải hiện tại ở trong bước lặp kế sau Mỗi lời giải trong không gian láng giềng của lời giải hiện tại ñược gọi là một láng giềng của lời giải hiện tại Sự tác ñộng lên lời giải hiện tại ñể biến nó thành một lời giải láng giềng của nó gọi là một bước chuyển
ðể tránh việc duyệt trở lại những lời giải ñã từng ñược duyệt, thuật giải Tabu Search
sử dụng một danh sách ñể lưu trữ một số bước chuyển ñã từng ñược sử dụng, gọi là
Trang 28danh sách Tabu (Tabu list) Danh sách này sẽ chứa (một phần hoặc tất cả) thông tin
của những bước chuyển ñã ñược thực hiện trong một số bước lặp gần ñây, các bước
chuyển nằm trong danh sách Tabu ñược gọi là các bước chuyển Tabu (Tabu move)
Các bước chuyển này sẽ bị cấm sử dụng lại trong chừng nào nó còn nằm trong danh sách Tabu Một bước chuyển Tabu sẽ tồn tại trong danh sách Tabu trong một khoảng thời gian n bước lặp, sau ñó, bước chuyển này sẽ ñược loại ra khỏi danh sách Tabu và
trở về trạng thái bình thường (không bị cấm nữa), số n này ñược gọi là giá trị Tabu
tenure của bước chuyển, giá trị n này có thể cố ñịnh cho tất cả các bước chuyển hoặc
là một số ñược chọn ngẫu nhiên cho từng bước chuyển
Tuy nhiên, ñôi khi một số bước chuyển dù bị cấm (bước chuyển Tabu) nhưng nó lại có khả năng cải tiến chất lượng của lời giải tốt nhất hiện nay, do ñó, ñể tránh bỏ sót các
bước chuyển tốt này, Tabu Search ñưa ra một khái niệm nữa, ñó là khái niệm tiêu
chuẩn mong ñợi (aspiration criteria), cách áp dụng của tiêu chuẩn này như sau: nếu
một bước chuyển Tabu bất kì thỏa ñược tiêu chuẩn mong ñợi thì nó sẽ ñược loại ra khỏi danh sách Tabu ngay lập tức, cho dù giá trị Tabu tenure ñi kèm có là bao nhiêu ñi chăng nữa Tiêu chuẩn mong ñợi thường ñược dùng nhất là “nếu bước chuyển Tabu nào có thể làm cho lời giải hiện tại trở nên tốt hơn cả lời giải tốt nhất hiện nay thì bước chuyển Tabu ñó sẽ ñược loại ra khỏi danh sách Tabu ngay lập tức”
3.2 Thuật giải Large Neighborhood Search
Ý tưởng của thuật giải Large Neighborhood Search (gọi tắt là LNS) ñược ñề nghị lần ñầu tiên bởi Shaw [14] vào năm 1998 Thuật giải LNS là một thuật giải metaheuristic dựa trên Local Search, thuật giải thuộc nhóm các thuật giải Very Large Scale Neighborhood Search (gọi tắt là VLSN – các thuật giải Local Search với các miền láng giềng có kích thước rất lớn và biến ñộng) Với các thuật giải VLSN, các miền láng giềng ñược xét tại mỗi bước lặp thường có kích thước rất lớn, ñiều này sẽ giúp quá trình tìm kiếm có thể vượt ra khỏi những ñiểm tối ưu cục bộ, nhờ ñó có thể tìm ra ñược những lời giải gần với tối ưu toàn cục Tuy nhiên, chính vì kích thước miền láng giềng lớn mà các thuật giải VLSN khi chạy thường tốn rất nhiều thời gian Nhiều kĩ thuật ñã ñược ñề nghị ñể khắc phục vấn ñề này, từ ñó tạo nên nhiều biến thể VLSN khác nhau Thuật giải LNS chính là một trong những biến thể này Trong thuật giải LNS, việc duyệt miền láng giềng của lời giải hiện tại ñược thực hiện thông qua hai bước chính:
Trang 29bước phá hủy (destroy) và bước chỉnh sửa (repair) [21] Tại bước phá hủy, một số phần tử của lời giải hiện tại sẽ bị loại ra, tạo nên một lời giải thành phần (partial
solution), sau ñó, tại bước chỉnh sửa, các phần tử vừa bị loại sẽ lần lượt ñược thêm trở
lại vào lời giải thành phần của bước trước, ñể tạo lại một lời giải hoàn chỉnh Như vậy, miền láng giềng tại mỗi bước lặp chính là tập các lời giải ñầy ñủ mới thu ñược sau khi
áp dụng hai bước phá hủy và chỉnh sửa lên lời giải hiện tại Phương pháp cụ thể ñược chọn ñể thực hiện bước phá hủy và bước chỉnh sửa sẽ quyết ñịnh lượng thời gian cần tiêu tốn cho một bước lặp Phương pháp ñơn giản nhất là chọn ngẫu nhiên tại bước phá hủy và thực hiện thêm các phần tử vào tại bước chỉnh sửa bằng một thuật giải tham lam ñơn giản
Hình 3.1 minh họa một bước lặp của thuật giải LNS cho bài toán CVRP với 21 khách hàng, trong ñó, hình phía trên bên trái là lời giải hiện tại, hình phía trên bên phải là lời giải sau khi thực hiện bước phá hủy, lời giải phía dưới là lời giải thu ñược sau khi thực hiện bước chỉnh sửa Ở ñây, tại bước phá hủy, 6 khách hàng sẽ ñược chọn ngẫu nhiên
ñể loại ra khỏi lời giải hiện tại (các khách hàng bị loại: ), và sau ñó sẽ thêm lần lượt trở lại dựa trên nguyên tắc của thuật giải tham lam như sau: tại mỗi bước thêm, chọn khách hàng c sao cho cực tiểu hóa ∆tc, trong ñó ∆tc là quãng ñường phải ñi thêm khi thêm c vào vị trí tốt nhất (vị trí mà tổng quãng ñường phải ñi thêm là ngắn nhất)
Hình 3.1 Mình họa một bước lặp của thuật giải LNS cho bài toán CVRP với 21
Trang 30Hình 3.2 Mã giả của thuật giải LNS [21]
Hình 3.2 minh họa mã giả của thuật giải LNS, trong ñó, ñầu vào của thuật giải là một
lời giải hợp lệ (feasible solution) x, nghĩa là một lời giải thỏa tất cả các ràng buộc
cứng, x b là lời giải tốt nhất hiện tại, d(.) là hàm phá hủy, r(.) là hàm chỉnh sửa Ở ñây,
tại mỗi bước lặp, thay vì quét toàn bộ miền láng giềng và chọn ra lời giải tốt nhất,
thuật giải chỉ chọn một lời giải duy nhất x’ thuộc tập láng giềng N(x) (có thể phát sinh
ngẫu nhiên, hoặc chọn lời giải tốt nhất thuộc một tập con rất nhỏ của tập láng giềng
N(x)) (dòng 4) Tiêu chuẩn accept(x’.x) sẽ quyết ñịnh xem có chọn lời giải x’ thay thế
cho lời giải hiện tại hay không, hai tiêu chuẩn accept(x’.x) phổ biến nhất là:
- Chỉ chấp nhận các lời giải tốt hơn lời giải hiện tại: Nếu x’ < x thì
accept(x’.x)=true, ngược lại accept(x’.x)=false
- Chấp nhận theo tiêu chuẩn của thuật giải Simulated Annealing: Nếu
T ) x ( c ) ' x
< thì accept(x’.x)=true, ngược lại accept(x’.x)=false, với r là một số
ngẫu nhiên thuộc ñoạn [0,1]
Việc chọn phương pháp phá hủy và phương pháp chỉnh sửa sao cho hợp lý là các vấn
ñề rất quan trọng, quyết ñịnh tính hiệu quả của thuật giải LNS
- Quá trình phá hủy: việc chọn kích thước tập các phần tử bị loại ra khỏi lời giải
hiện tại rất quan trọng, nếu con số này quá nhỏ, quá trình tìm kiếm sẽ khó thoát
ra khỏi tối ưu cục bộ, nhưng nếu con số này quá lớn, việc tìm kiếm sẽ mất rất nhiều thời gian Hơn nữa, chiến lược chọn tập các phần tử bị loại cũng phải ñược chọn sao quá trình tìm kiếm có thể bao quát hết không gian lời giải, hoặc hướng ñược ñến nhiều vùng không gian lời giải có khả năng chứa tối ưu toàn cục, tránh việc “lẩn quẩn” quanh một miền không gian con duy nhất Do ñó, các chiến lược phá hủy thường có chứa yếu tố mang tính xác suất
Trang 31- Quá trình chỉnh sửa: quá trình chỉnh sửa có thể thực hiện bằng phương pháp
heuristic (thông dụng nhất là thuật giải tham lam), hoặc bằng một thuật toán chính xác (có thể mô hình hóa về dạng Quy hoạch ràng buộc-Constraint Programming hoặc Quy hoạch nguyên hỗn hợp-Mixed Integer Programming và dùng các solver có sẵn ñể giải) Nếu sử dụng các phương pháp chính xác ñể giải, trong một số trường hợp sẽ giúp ñạt ñến tối ưu toàn cục nhanh hơn, tuy nhiên, trong một số trường hợp, có thể làm giảm tính ña dạng hóa (diversification) của quá trình tìm kiếm
3.3 Bài toán Flexible Job Shop Scheduling
3.3.1 Phát biểu bài toán
Bài toán Flexible Job Shop Scheduling là một mở rộng của bài toán Job Shop Scheduling và cũng là một bài toán NP-khó [58] Trong bài toán này, ta có:
- là hạn chót của công việc J i, nghĩa là tất cả các thao tác của công
việc J i phải kết thúc việc xử lí trước thời ñiểm
- là thời ñiểm bắt ñầu sớm nhất của công việc J i, nghĩa là thao tác ñầu tiên của công việc J i chỉ ñược phép thực hiện tại ngay hoặc sau thời ñiểm
- Mỗi thao tác của công việc Ji sẽ có một tập các máy ñi kèm, ñó là tập các máy có thể xử lí ñược thao tác (lưu ý là các tập có thể giao nhau) Thời gian xử lí của thao tác trên một máy ! ñược kí hiệu là
"#
Bài toán FJSP có hai yêu cầu:
- Yêu cầu thứ nhất - routing task: gán các thao tác của các công việc vào các
máy thích hợp (gán mỗi thao tác vào một máy ! tương ứng)
Trang 32- Yêu cầu thứ hai - sequencing task
của bài toán FJSP ñều ñược lấy từ b
[51]:
- Cực tiểu hóa thời gian kết t
trong ñó là thời gian kết thúc của
3.3.2 Biểu diễn lời giải bằ
Xét về thời gian xử lí của các
sequencing task: sau khi ñã gán các thao tác
ợp, cần sắp xếp thứ tự xử lí của các thao tác trên từng máy một cách hợp
ảm bảo thứ tự thực hiện ñã quy ñịnh sẵn của các thao tác thu
ọa một ví dụ của bài toán FJSP, trong ñó
Hình 3.3 Hình minh họa một bài toán FJSP
ợc thực hiện dựa tên một hàm mục tiêu cụ thể, các h
ợc lấy từ bài toán JSP, sau ñây là các hàm thông d
ực tiểu hóa thời gian kết thúc trễ nhất của các công việc :
ời gian kết thúc của công việc J i
ộ trễ (có trọng số) của các công việc :
ọng số thể hiện ñộ ưu tiên của công việc i, là ñ
ng (có trọng số) số lượng công việc bị trễ:
ọng số thể hiện ñộ ưu tiên của công việc i, = 1 n ngược lại = 0
ằng Disjunctive Graph
ề thời gian xử lí của các thao tác tại mỗi máy , ta có 2 trư
thao tác vào các máy ừng máy một cách hợp
Trang 33- Trường hợp 1: Các "# trùng nhau với mọi ! , nghĩa là thời gian xử lí của mỗi thao tác trên mỗi máy thuộc tập là như nhau, khi ñó, giá trị "#
không phụ thuộc vào chỉ số k nên sẽ ñược thay bằng kí hiệu "
- Trường hợp 2: Các "# không trùng nhau
Trong khuôn khổ luận văn này, bài toán FJSP ñược xét tới là bài toán của trường hợp
1 Khi ñó, các máy trong tập ñều tương ñương nhau và ta có thể biểu diễn lời giải
của bài toán bằng loại ñồ thị có tên là Disjunctive Graph [51] ðồ thị này có các ñặc
ñiểm sau (các kí hiệu của bài toán FJSP ñã phát biểu bên trên ñược sử dụng lại trong phần này):
- Là một ñồ thị có hướng với tập ñỉnh
diện cho một thao tác của bài toán FJSP, mỗi ñỉnh sẽ gắn liền với giá trị " – giá trị cho biết thời gian xử lí của thao tác
- ðồ thị có hai tập cạnh:
+ Tập Conjunctive Arcs, hay còn gọi là tập Job Arcs: là tập cạnh có hướng biểu
diễn mối liên hệ giữa các thao tác trong cùng một công việc , một Conjunctive Arc nối từ ñỉnh ñến ñỉnh khi và chỉ khi thao tác nằm trước thao tác
# trong dãy các thao tác của công việc
+ Tập Disjunctive Arcs, hay còn gọi là tập Machine Arcs: là tập cạnh có hướng biểu
diễn mối liên hệ giữa các thao tác ñược xử lí trên cùng một máy, một Disjunctive Arc nối từ ñỉnh ñến ñỉnh " khi và chỉ khi thao tác và thao tác %&cùng ñược xử lí trên cùng một máy, và ñược xử lí trước %&
Bài toán FJSP ñã cho ta biết mối liên hệ giữa các thao tác thuộc cùng một công việc ,
nghĩa là ta ñã biết trước tập cạnh Conjunctive Arcs Tuy nhiên, tập cạnh Disjunctive
Arcs thì ta chưa biết và cần phải ñi tìm, bài toán chỉ cho biết hai ñỉnh nào có “khả
năng” ñược nối với nhau bằng một Disjunctive Arc: hai ñỉnh và " có thể
ñược nối với nhau bằng một Disjunctive Arc nếu và chỉ nếu ' %&( ) Do vậy,
mục tiêu của bài toán FJSP là ñi xác ñịnh tập Disjunctive Arcs sao cho lời giải thu ñược là một lời giải hợp lệ: ñó là tập Disjunctive Arcs mà khi kết hợp với tập
Conjunctive Arcs sẽ không tạo ra chu trình trong ñồ thị biểu diễn lời giải
Trang 34Trong ñồ thị Disjunctive Graph của bài toán FJSP, tập Conjunctive Arcs sẽ ñược biểu diễn bởi các cạnh nét liền, còn tập các Disjunctive Arc ứng cử viên sẽ ñược biểu diễn
bởi các cạnh nét ñứt Như vậy, mỗi cặp ñỉnh và " mà có ' %& ( ) sẽ
ñược nối với nhau bởi hai Disjunctive Arc ứng cử viên với chiều ngược nhau (vì có thể ñược xử lí trước %& hoặc ngược lại)
Hình 3.4minh họa Disjunctive Graph của một bài toán FJSP và Hình 3.5 minh họa Disjunctive Graph của một lời giải của bài toán (các ñỉnh U, V1, V 2 , V 3 là các ñỉnh ảo ñược thêm vào ñể tính toán và sẽ ñược giải thích chi tiết ở phần 3.3.3
Hình 3.4 Hình minh họa Disjunctive Graph của một bài toán FJSP
Hình 3.5 Hình minh họa Disjunctive Graph của một lời giải bài toán FJSP
Trang 353.3.3 Thuật toán Critical path cho bài toán FJSP
Thuật toán Critcal path ñể tính thời gian kết thúc của các công việc :
Trong khuôn khổ luận văn này, hàm mục tiêu mà ta xét tới là: Cực tiểu hóa tổng ñộ trễ của các công việc :
*!,-+, trong ñó + là ñộ trễ của công việc J i và ñược tính bằng công thức:
+ ./01 ... Phương pháp thơng dụng để tính giá trị + phương pháp Critical Path [53] dựa Disjunctive Graph lời giải Trước tiên, ta thêm vào ñồ thị ñỉnh
sau:
- Một. .. giải toán FJSP
Thuật giải mà luận văn ñề nghị metaheurisitc dựa local search, thuật giải gồm có bốn bước, bước tập trung giải toán theo hướng khác nhau:
- Bước 1: tạo lời giải toán. .. vào
kho xe, nghĩa ta giả sử kho cho xe vào lấy hàng lúc ñược Lời giải thu ñược từ bước cho ta ước lượng số xe tối thiểu cần phải dùng cho toán
- Bước 2: từ lời giải thu từ