Bước 3: Chỉnh sửa các chuyến của các xe trễ (nếu cĩ)

Một phần của tài liệu Phương pháp local search cho một bài toán giao hàng trong thực tế (Trang 52 - 113)

Nếu như sau bước 2 mà lời giải thu được vẫn cịn cĩ xe bị về trễ so với giờ quy định, ta sẽ tiếp tục cải thiện lời giải bằng cách chỉnh sửa thơng tin chuyến của các xe trễ, cụ thể là: các đơn hàng thuộc các critical operation trên các critical path của các cơng việc tương ứng với các xe bị trễ sẽ được di chuyển sang các vị trí khác nhằm làm giảm độ dài của các critical path này, từ đĩ giúp giảm độ trễ của các xe.

Từ nhận xét này, ta sẽ lọc ra được tập các đơn hàng ứng cử viên để tham gia vào các phép chuyển của thuật giải.

Chi tiết của thuật giải ở bước này được trình bày ở Hình 4.5.

Thuật giải được áp dụng cũng cĩ hai bước xĩa và chèn tương tự như thuật giải Large Neighborhood Search [54]. Việc chọn tập đơn hàng cs từ tập ứng cử viên (Hình 4.5 – dịng 6) sẽ dựa trên độ đo mức độ liên quan, tương tự như ở [54]:

< $<

Trong đĩ:

- là mức độ liên quan giữa hai đơn hàng ij

- là khoảng cách giữa địa điểm giao của hai đơn hàng (đã được chuẩn hĩa về đoạn [0,1]),

Tuy nhiên, tại bước chèn, thay vì duyệt qua danh sách tổ hợp các cách chèn khác nhau để chọn ra cách chèn tốt nhất (bằng phương pháp chính xác, hoặc phương pháp

heuristic) như ở phiên bản gốc, ở đây, ta chỉ chọn cách chèn least cost insertion – chèn đơn hàng vào vị trí tốt nhất tại mỗi xe rồi sau đĩ chọn ra xe mà khi chèn đơn hàng vào thì lời giải thu được cĩ độ trễ thấp nhất. Lí do của sự thay đổi này là vì chi phí tính tốn cho một bước chèn của một đơn hàng là khá lớn, vì mỗi khi chèn một đơn hàng vào một xe, ta phải tính lại tồn bộ các critical path trong đồ thị Disjunctive Graph của lời giải mới, từ đĩ mới tính được độ trễ của các xe trong lời giải mới.

Lưu ý rằng tại dịng 17 của thuật giải ở Hình 4.5, việc so sánh chất lượng giữa hai lời giải sẽ dựa trên hai tiêu chí sau:

- Cực tiểu hĩa tổng thời gian trễ của các xe trong lời giải - Cực tiểu hỏa tổng số xe trong lời giải

- Cực tiểu hĩa tổng thời gian di chuyển của tất cả các xe trong lời giải Các tiêu chí so sánh trên được sắp xếp theo thứ tự độ ưu tiên giảm dần.

Hình 4.5. Thuật giải của bước 3 4.4.Bước 4: Thêm xe mới vào lời giải hiện tại

Nếu các bước chỉnh sửa trên vẫn khơng thể tạo ra được một lời giải khơng vi phạm ràng buộc thời gian về trạm xuất phát của các xe, nghĩa là thuật giải khơng thể tạo ra lời giải hợp lệ với số xe đã tìm được ở bước 1. Ta sẽ lần lượt thêm từng xe vào lời giải để cố gắng giải quyết vi phạm ràng buộc với mong muốn số xe phải thêm vào càng ít càng tốt (vì mục tiêu của bài tốn là cực tiểu hĩa số xe). Các xe chưa được chọn trong tập 23 xe sẽ được thử thêm lần lượt vào lời giải, và xe tốt nhất sẽ được chọn, sau đĩ, thuật giải sẽ sử dụng lại các bước trước để cố gắng cải thiện chất lượng của lời giải

1. ðặt qcur = qbest = lời giải tốt nhất thu được từ các bước trước 2. ðặt iter = 0

3. while (qbest vẫn cịn xe trễ anditeriterMax) 4. Liệt kê tất cả các đơn hàng ứng cử viên 5. ðặt qcur_best = qcur

6. foreach (tập đơn hàng cs chọn từ tập ứng cử viên) 7. ðặt qcs = qcur

8. Xĩa tất cả các đơn hàng trong tập cs ra khỏi qcs 9. foreach (đơn hàng ci trong tập cs)

10. Tìm vị trí chèn tốt nhất (least cost insertion) của ci trong lịch trình của từng xe trong qcs

11. Tìm xe mà khi chèn ci vào thì lời giải thu được ít vi phạm ràng buộc

nhất

12. Áp dụng phép chèn đã chọn lên qcs

13. if (qcs tốt hơn qcur_best) thenqcur_best = qcs

14. end for 15. end for

16. qcur = qcur_best

17. if (qcur tốt hơn qbest) thenqbest = qcur

18. iter = iter + 1 19. endwhile

mới thu được. Quá trình này được lặp đi lặp lại cho đến khi lời giải thu được là hợp lệ (khơng cịn vi phạm ràng buộc nào). Tuy nhiên, nếu tất cả 23 xe đều đã được chọn mà lời giải hiện tại vẫn cịn vi phạm ràng buộc thời gian về trạm xuất phát của các xe, thuật giải sẽ thất bại.

Chi tiết các bước của bước 4 được trình bày ở Hình 4.6, trong đĩ, V(q) là tập các xe chưa được chọn vào lời giải q, late(q) cho biết tổng thời gian trễ của các xe trong lời giải q. Ý tưởng của giải thuật là lần lượt thử thêm từng xe một trong tập các xe chưa được chọn vào lời giải hiện tại, sau đĩ, sử dụng giải thuật ở bước 3 (Hình 4.6 – dịng 7) để tìm cách chỉnh sửa các chuyến trong lời giải mới nhằm làm giảm vi phạm ràng buộc của lời giải (nhưng vẫn giữ nguyên lịch vào kho hiện tại của các xe cũ – chỉ tìm vị trí chèn tốt nhất của các thao tác của cơng việc tương ứng với xe mới được thêm vào), nếu sau bước 3 mà lời giải mới vẫn cịn vi phạm ràng buộc, ta sẽ thay đổi lịch vào kho của các xe trong lời giải thơng qua giải thuật của bước 2 (Hình 4.6 – dịng 8) nhằm cố gắng giải quyết vi phạm, nếu sau bước 3 và bước 2 ở trên, giải thuật thành cơng trong việc tìm ra lời giải hợp lệ, ta sẽ sử dụng thêm giải thuật ở bước 1.2 (Hình 4.6 – dịng 10) nhằm cố gắng cải thiện lời giải hiện tại một lần cuối (giảm số xe – tổng thời gian di chuyển của các xe) trước khi trả về lời giải hợp lệ này. Nếu như việc tận dụng lại các bước trước của giải thuật vẫn khơng giúp tìm được một lời giải hợp lệ, ta sẽ chọn ra lời giải ít vi phạm nhất để sử dụng cho bước lặp kế tiếp. (adsbygoogle = window.adsbygoogle || []).push({});

Hình 4.6. Thuật giải của bước 4 1. ðặt qcur = lời giải tốt nhất thu được từ các bước trước 2. while (qcur vẫn cịn vi phạm ràng buộc và V(qcur)( ]) 3. ðặt qcur_best = qcur

4. foreach (vi!V(qcur)) do

5. ðặt q1 = qcur

6. Thêm vi vào q1

7. q1 = Bước3(q1)

8. if (q1 vẫn cịn vi phạm ràng buộc) then q1 = Bước2(q1) 9. if (q1 hợp lệ) then

10. q1 = Bước1.2(q1) 11. return q1

12. endif

13. if (late(q1) < late(qbest)) thenqcur_best = q1

14. end for

15. qcur = qcur_best

16. endwhile

17. if (qcur hợp lệ) then return qcur

Chương 5. Kết quả thực nghiệm

Thuật giải mà luận văn đề nghị được cài đặt bằng ngơn ngữ C++ và được thử nghiệm trên 19 bộ dữ liệu thực tế từ cơng ty Cổ Phần Sữa Việt Nam – Vinamilk. ðây là dữ liệu giao hàng của cơng ty vào tháng 2/2010. Thơng tin chi tiết của từng bộ được trình bày trong Bảng 5.1.

Bảng 5.1. Thơng tin 19 bộ dữ liệu của Vinamilk

Dữ liệu Số đơn hàng Tổng lượng hàng yêu cầu (đơn vị: thùng) Feb-01 821 9861 Feb-02 573 7320 Feb-03 658 9977 Feb-04 582 8376 Feb-05 756 9891 Feb-06 602 8949 Feb-08 939 14009 Feb-09 542 11283 Feb-10 720 9854 Feb-11 482 13379 Feb-18 363 5583 Feb-19 819 11597 Feb-20 510 9561 Feb-22 1513 16483 Feb-23 727 13827 Feb-24 726 10395 Feb-25 678 8464 Feb-26 760 10515 Feb-27 607 7018

Giá trị được chọn của các tham số trong thuật giải mà luận văn đề nghị khi chạy thực nghiệm là:

+ minTabuTenure = 1

+ maxTabuTenure = tổng số xe đang sử dụng trong lời giải hiện tại / 3. Lý do mà tác giả chọn giá trị này là vì: nếu giá trị maxTabuTenure được chọn quá lớn thì xác suất để các đơn hàng bị xĩa khơng cịn vị trí hợp lệ để chèn vào trở lại lời giải sẽ càng cao, khiến cho thuật giải bị bế tắc, khơng thể thực hiện tiếp được. Cịn nếu giá trị maxTabuTenure quá nhỏ thì sẽ khĩ phát huy được tác dụng của Tabu list, và theo kết quả thực nghiệm của tác giả thì khi giá trị maxTabuTenure nhỏ (khoảng maxTabuTenure/10) thì xác suất để quá trình tìm kiếm bị rơi vào chu trình là khá cao.

+ maxIter = 100

- Bước 3: maxIter = 100

Kết quả thực nghiệm về tổng số xe cần dùng của thuật giải được so sánh với kết quả sắp tay (được lấy từ thực tế) của cơng ty Vinamilk, đồng thời thuật giải cũng được so sánh với một hướng tiếp cận khác được áp dụng trên cùng một bài tốn: hướng tiếp cận dựa trên Quy hoạch động (dynamic programming). Hướng tiếp cận Quy hoạch động này đã được cơng bố trong bài báo [38]. Kết quả thực nghiệm chi tiết được trình bày ở Bảng 5.2. Bảng kết quả này cho ta thấy thuật giải đề nghị cho kết quả tốt hơn kết quả sắp tay ở tất cả các bộ dữ liệu, bên cạnh đĩ, so với phương pháp quy hoạch động, thuật giải đề nghị đã cải thiện được số xe cần sử dụng (mục tiêu quan trọng nhất) ở 13 (/18) bộ dữ liệu (các ơ được in đậm), và cải thiện được tổng thời gian di chuyển của các xe trên tất cả các bộ dữ liệu. Riêng ở bộ dữ liệu Feb-22 (được đánh dấu bởi dấu *), cả thuật giải mà luận văn đề nghị và phương pháp quy hoạch động của [38] đều khơng thể tìm được lời giải hợp lệ do giới hạn về số lượng xe của cơng ty (23 xe). Theo khảo sát thực tế của tác giả, thì tại ngày 22/2/2010 này, cơng ty cũng phải thuê thêm xe ngồi vì 23 xe cĩ sẵn khơng đủ để chở hết lượng hàng yêu cầu trong ngày. Do đĩ, bộ dữ liệu này sẽ khơng được tính vào kết quả thống kê khi so sánh giữa hai thuật giải. Tuy nhiên, về mặt thời gian thực hiện (running time), thời gian của thuật giải đề nghị lâu hơn so với phương pháp quy hoạch động ở [38]. Do đĩ, để sự so sánh được khách quan hơn, tác giả của [38] đã cho chạy thực nghiệm lại trên cùng các bộ dữ liệu (trên cùng cấu hình máy với cấu hình máy mà tác giả luận văn đã chạy) nhưng với thời gian chạy gần tương đương với thuật giải mà luận văn đề nghị bằng cách tăng giá trị của hệ

số α – hệ số điều khiển thời gian chạy của thuật tốn (α càng lớn thì chất lượng tìm kiếm càng cao, nghĩa là kết quả càng tốt). Kết quả thực nghiệm mới được thể hiện ở Bảng 5.3. Từ bảng kết quả này, ta thấy lời giải mới mà phương pháp quy hoạch động thu được đã cải thiện mục tiêu tối thiểu hĩa số xe cần sử dụng ở 4 bộ dữ liệu Feb-03, Feb-06, Feb-11, Feb-19 (các ơ được in nghiêng trong Bảng 5.3, trong đĩ, số trong dấu ngoặc đơn là số xe ở lời giải cũ, số ở ngồi dấu ngoặc đơn là số xe thu được ở lời giải mới). Khi tăng thời gian chạy của thuật giải lên xấp xỉ với thời gian chạy của thuật giải mà luận văn đề nghị, lời giải mới mà phương pháp quy hoạch động thu được so với thuật giải mà luận văn đề nghị cĩ những bước cải tiến sau:

- Thứ nhất: cho kết quả tốt hơn đối với mục tiêu tổng thời gian di chuyển của các xe ở một bộ dữ liệu (bộ Feb-02, được tơ nền màu xám)

- Thứ hai: cho kết quả bằng đối với mục tiêu số xe cần sử dụng ở một bộ dữ liệu (bộ Feb-11)

Cịn ở các bộ dữ liệu cịn lại, thơng tin so sánh vẫn khơng thay đổi. Tĩm lại, với kết quả mới ở Bảng 5.3, thuật giải mà luận văn đề nghị đã:

- Cho kết quả tốt hơn phương pháp quy hoạch động đối với mục tiêu tổng số xe cần sử dụng ở 12/18 bộ dữ liệu

- Cho kết quả xấu hơn phương pháp quy hoạch động đối với mục tiêu tổng thời gian di chuyển của xe ở 1/18 bộ dữ liệu

- Cho kết quả tốt hơn phương pháp quy hoạch động đối với mục tiêu tổng thời gian di chuyển của xe ở 17/18 bộ dữ liệu (adsbygoogle = window.adsbygoogle || []).push({});

Bảng 5.2. Kết quả thực nghiệm (với bài báo [38])

Dữ liệu

Dynamic programming Thuât giải đề nghị Kết quả sắp tay Số xe Tổng thời gian di chuyển (phút) Thời gian chạy (giây) Số xe Tổng thời gian di chuyển (phút)

Thời gian chạy

(giây) Số xe Feb-01 13 2676 40 12 2185 179 20 Feb-02 10 2200 12 10 1945 50 19 Feb-03 12 2650 22 11 1986 190 11 Feb-04 10 1941 16 9 1509 65 20 Feb-05 12 2337 26 11 2075 143 22 Feb-06 11 2325 18 9 1650 75 21 Feb-08 17 3348 76 16 2690 278 20 Feb-09 12 2499 18 11 2093 194 19 Feb-10 12 2382 27 12 2216 173 19 Feb-11 13 2740 8 12 2229 176 16 Feb-18 7 1557 3 6 1210 45 15 Feb-19 14 2837 69 12 2167 222 21 Feb-20 10 2177 13 9 1738 122 23 Feb-22* 23 4655 312 23 3563 724 23 Feb-23 17 3306 111 13 2527 261 18 Feb-24 12 2434 52 11 1856 177 19 Feb-25 11 2153 19 11 1997 118 14 Feb-26 12 2341 75 12 2171 530 23 Feb-27 9 1916 21 9 1650 74 18

Bảng 5.3. Kết quả thực nghiệm mới

Dữ liệu

Dynamic programming Thuât giải đề nghị Kết quả sắp tay Số xe Tổng thời gian di chuyển (phút) Thời gian chạy (giây) Số xe Tổng thời gian di chuyển (phút)

Thời gian chạy

(giây) Số xe Feb-01 13 2344 326 12 2185 179 20 Feb-02 10 1891 125 10 1945 50 19 Feb-03 12 (13) 2282 188 11 1986 190 11 Feb-04 10 1695 216 9 1509 65 20 Feb-05 12 2220 271 11 2075 143 22 Feb-06 10 (11) 1938 170 9 1650 75 21 Feb-08 17 3117 472 16 2690 278 20 Feb-09 12 2196 168 11 2093 194 19 Feb-10 12 2162 232 12 2216 173 19 Feb-11 12 (13) 2386 116 12 2229 176 16 Feb-18 7 1284 46 6 1210 45 15 Feb-19 13 (14) 2278 383 12 2167 222 21 Feb-20 10 2025 153 9 1738 122 23 Feb-22* 23 4692 312 23 3563 724 23 Feb-23 17 3019 292 13 2527 261 18 Feb-24 12 2072 237 11 1856 177 19 Feb-25 11 2005 291 11 1997 118 14 Feb-26 12 2117 344 12 2171 530 23 Feb-27 9 1916 161 9 1650 74 18

Chương 6. Kết luận và hướng phát triền

6.1. Kết luận

Dựa trên ý tưởng của các thuật giải tham lam, thuật giải Tabu Search [40], Hill Climbing, Large Neighborhood Search [54], luận văn đã đề xuất một giải thuật metaheuristic dạng local search để giải quyết một biến thể thực tế của bài tốn VRP – bài tốn giao hàng của Cơng Ty Cổ Phần Sữa Việt Nam – Vinamilk. Ngồi những đặc điểm liên quan đến các bài tốn VRP như:

- Cĩ hai kho hàng - Cĩ hai loại mặt hàng

- Tập xe cĩ sức chứa khác nhau

- ðồ thị biểu diễn đường đi là đồ thị bất đối xứng - Cho phép xe thực hiện nhiều chuyển trong một ngày

Bài tốn cịn cĩ một yêu cầu rất đặc biệt: yêu cầu xếp lịch vào kho hàng cho các xe – một bài tốn khĩ cĩ thể được mơ hình hĩa dưới dạng bài tốn Flexible Job Shop Scheduling [49]. Yêu cầu này khá phổ biến trong thực tế, do giới hạn về mặt bằng khơng gian của các kho lấy hàng. Thuật giải được thử nghiệm trên 19 bộ dữ liệu thực tế trong tháng 2/2010 của cơng ty Vinamilk. Kết quả được so sánh với:

- Kết quả xếp tay đã được sử dụng trong thực tế

- Kết quả của một hướng tiếp cận dựa trên Quy Hoạch ðộng (đã được cơng bố trong bài báo [38])

Trong đĩ, thuật giải mà luận văn đề nghị và phương pháp quy hoạch động đều thất bại trong việc tìm lời giải hợp lệ cho bộ dữ liệu của ngày 22/2/2010. Do đĩ, kết quả thống kê chỉ thực hiện trên 18 bộ dữ liệu cịn lại.

Kết quả của thuật giải mà luận văn đề nghị cho kết quả tốt hơn kết quả xếp tay ở tất cả 18 bộ dữ liệu, và cho kết quả tốt hơn phương pháp quy hoạch động trên 17 bộ dữ liệu, trong đĩ, thuật giải cải thiện được ở hàm mục tiêu quan trọng nhất (cực tiểu hĩa số xe cần sử dụng) ở tất cả các bộ dữ liệu khi so sánh với kết quả xếp tay, và cải thiện

Một phần của tài liệu Phương pháp local search cho một bài toán giao hàng trong thực tế (Trang 52 - 113)