Tối ưu hóa lộ trình lấy hàng trong kho bằng giải thuật Nearest neighbor và chiến lược Wave picking
Một trong những lợi thế cạnh tranh của các doanh nghiệp là có một hệ thống logistics và chuỗi cung ứng hoạt động hiệu quả. Trong đó, quản lý kho vận và phân phối (warehousing & distribution) là một trong những phần không thể thiếu trong hoạt động logistics. Ở bài viết này, chúng mình sẽ viết về việc tối ưu hóa hoạt động vận hành trong kho, cụ thể là sử dụng Python để tối ưu hóa quá trình lấy hàng sử dụng giải thuật Nearest neighbor và chiến lược Wave picking (một trong những chiến lược lấy hàng trong kho).
Một trong những lợi thế cạnh tranh của các doanh nghiệp là có một hệ thống logistics và chuỗi cung ứng hoạt động hiệu quả. Trong đó, quản lý kho vận và phân phối (warehousing & distribution) là một trong những phần không thể thiếu trong hoạt động logistics. Ở bài viết này, chúng mình sẽ viết về việc tối ưu hóa hoạt động vận hành trong kho, cụ thể là sử dụng Python để tối ưu hóa quá trình lấy hàng sử dụng giải thuật Nearest neighbor và chiến lược Wave picking (một trong những chiến lược lấy hàng trong kho).
1. Giới thiệu
Một trong những lợi thế cạnh tranh của các doanh nghiệp là có một hệ thống logistics và chuỗi cung ứng hoạt động hiệu quả. Trong đó, quản lý kho vận và phân phối (warehousing & distribution) là một trong những phần không thể thiếu trong hoạt động logistics.
Trong quản lý kho vận, có rất nhiều bài toán cần được xem xét để có một kho hàng và mạng lưới phân phối hoạt động hiệu quả.
- Xác định địa điểm đặt kho
- Quản lý hóa vận hành trong kho
- Quản lý tồn kho
- Thiết kế mặt bằng kho ...
Ở bài viết này, chúng mình sẽ viết về việc tối ưu hóa hoạt động vận hành trong kho, cụ thể là sử dụng Python để tối ưu hóa quá trình lấy hàng sử dụng giải thuật nearest neighbor và kỹ thuật wave picking (một trong những kỹ thuật lấy hàng trong kho).
Lộ trình đi lấy hàng của một đơn hàng trong kho cũng giống như bài toán Traveling Salesman Problem (TSP). Nếu bạn chưa từng quen với những bài toán tối ưu hóa trong logistics thì chúng mình sẽ mô tả bài toán TSP như sau: Giả sử có một người đang ở một thành phố và có dự định đi du lịch ở một danh sách các thành phố định sẵn, vấn đề bài toán là tìm ra đường đi ngắn nhất để anh này có thể đi qua tất cả các thành phố trong danh sách rồi trở về thành phố ban đầu.
Để giải bài toán này, rất nhiều giải thuật đã được phát triển, các bạn có thể tham khảo link sau đây để tìm hiểu thêm về một số giải thuật dành cho bài toán này ở link này.
Khi nhìn vào vận hành trong kho, ta sẽ thấy có 5 hoạt động chính: Nhận hàng - Cất hàng - Lưu trữ - Lấy hàng - Giao hàng (Receive - Put away - Store - Pick - Ship). Trong đó, hoạt động lấy hàng chiếm khoảng 60% thời gian vận hành. Do đó, lấy hàng là hoạt động chúng ta nên tập trung để giảm thiểu thời gian vận hành.
Khi một nhân viên kho nhận một đơn hàng và trong đơn hàng chỉ định một số các địa điểm trong kho cần phải đi lấy thì ta có thấy việc người nhân viên đi lấy hàng giống như một bài toán TSP cỡ nhỏ với điểm ban đầu là cửa kho và các điểm lấy hàng là các thành phố cần phải đi qua.
Trong hoạt động vận hành kho, người ta cũng phát triển ra nhiều chiến lược lấy hàng (order picking strategy) trong kho như: Discrete picking, Batch picking, Wave picking, Zone picking ... Các bạn có thể tham khảo chi tiết hơn những chiến lược lấy hàng ở link này.
Wave picking là chiến lược thay vì mỗi nhân viên kho đi lấy một đơn hàng thì ở đây người lấy sẽ lấy những "wave" gồm hai hay nhiều đơn hàng được gộp lại để tiết kiệm khoảng cách di chuyển. Trong wave picking, gộp càng nhiều đơn thì khoảng cách di chuyển sẽ ngắn lại, tuy nhiên việc giao hàng có thể sẽ bị trì hoãn do phải đợi lấy hết lượng đơn quy định rồi mới giao hàng, gây ra service level giảm.
Ví dụ, vào một thời điểm, ta có 10 đơn hàng cần phải lấy, khi ta lấy từng đơn, tổng khoảng cách di chuyển (thời gian di chuyển) khi lấy hết 10 đơn đó sẽ lớn nhưng khi một đơn được lấy xong thì có thể giao hàng ngay đơn đó; ngược lại, khi ta gộp 5 đơn trong một lần lấy hàng, tổng khoảng cách di chuyển (thời gian di chuyển) để lấy 10 đơn đó sẽ giảm đáng kể, nhưng khi ta chỉ giao được hàng khi lấy đủ hết 5 đơn. Do đó, đây là trade-off mà các nhà quản lý kho cần phải quyết định về lượng đơn mỗi wave đối với hàng hóa trong kho của mình khi thực hiện chiến lược wave picking này.
Bên cạnh đó, chiến lược wave picking này cũng sẽ chỉ phù hợp với một số loại hàng hóa khi mà xe lấy hàng (cart) có thể chứa được nhiều đơn hàng trong một lần lấy, một số dạng kho phù hợp cho chiến lược là kho e-commerce, kho hàng FMCG ...
2. Thực hiện trên Python
2.1. Import các thư viện
Trước khi thực hiện việc tối ưu hóa, ta sẽ cần import những thư viện cần thiết trên Python.
2.2. Gom những đơn hàng theo chiến lượt Wave picking
2.2.1. Ghép những đơn hàng thành từng wave với số lượng đơn mong muốn
Đầu vào: DataFrame những đơn hàng cần lấy (df_orderlines), số lượng đơn trên một wave (orders_number)
Đầu ra: DataFrame với các đơn đã được gộp thành từng wave (df_orderlines), tổng số lượng wave (waves_number)
2.2.2 List ra những location của một wave
Đầu vào: DataFrame với các đơn đã được gộp thành từng wave (df_orderlines), mã wave cần list (wave_id)
Đầu ra: List toạ độ của những location của mã wave đã nhập (list_locs), số lượng location trong list đó (n_locs)
2.3. Giải thuật Nearest Neighbor
2.3.1 Tính khoảng cách giữa 2 điểm lấy hàng trong kho dựa vào tọa độ
Đầu vào: Toạ độ điểm 1, toạ độ điểm 2 và toạ độ cao nhất (y_high) và thấp nhất (y_low) theo trục y
Đầu ra: Khoảng cách giữa 2 địa điểm lấy hàng trong kho
2.3.2 Tìm địa điểm lấy hàng tiếp theo gần nhất trong danh sách các điểm lấy hàng
Đầu vào: Toạ độ điểm bắt đầu, danh sách toạ độ các điểm, y_low, y_high
Đầu ra: Danh sách các điểm còn lại, toạ độ điểm bắt đầu, toạ độ điểm tiếp theo, khoảng cách giữa 2 điểm này
2.3.3 Tạo lộ trình lấy hàng trong danh sách địa điểm lấy hàng theo giải thuật Nearest Neighbor
Đầu vào: Toạ độ điểm bắt đầu, danh sách toạ độ các điểm, y_low, y_high
Đầu ra: Tổng khoảng cách di chuyển, danh sách lộ trình di chuyển qua các điểm
2.4 Chạy giải thuật và kết quả
Ở phần này chúng ta sẽ viết chương trình chạy các hàm đã viết và chạy thử với dữ liệu 12 đơn hàng như dưới đây, gồm những thông tin cần thiết như mã đơn hàng, thời gian đơn hàng trên hệ thống và tọa độ các điểm lấy hàng:
Dưới đây là phần chạy chương trình và kết quả khi gom các lượng đơn hàng mỗi wave khác nhau:
Ta có thể thấy khi gộp càng nhiều đơn hàng thành từng wave, khoảng cách di chuyển rõ ràng giảm xuống.
Dưới đây là bảng kết quả chi tiết của lộ trình di chuyển và khoảng cách khi ta gom các đơn hàng với lượng đơn mỗi wave khác nhau:
Mặc dù khoảng cách giảm xuống khi gộp càng nhiều đơn nhưng như đã đề cập ở trên, lượng đơn hàng mỗi wave cần được xác định hợp lý đối với đặt tính từng loại hàng để tối ưu hóa những đánh đổi.
3. Những hướng phát triển tiếp theo
Giải thuật Nearest Neighbor cho bài toán trên là một giải thuật Heuristics được sử dụng trong Vận trù học (Operations Research). Operations Research là một môn khoa học nghiên cứu các cách thức tối ưu hoá bằng cách mô hình hoá vấn đề thành những mô hình toán học và giải quyết chúng bằng các giải thuật tìm kiếm tối ưu.
Trong Operations Research, các giải thuật Heuristics thường được hình thành dựa trên kinh nghiệm thực tế, nên thường cho kết quả không tốt lắm, ngoài các giải thuật Heuristics, người ta còn phát triển các giải thuật Metaheuristics qua các quan sát ngoài tự nhiên như: Ant Colony Optimization (ACO - nghiên cứu cách di chuyển của loài kiến), Simulated Annealing (SA - mô phỏng cách luyện kim), Genetic Algorithm (GA - tối ưu hoá dựa trên chọn lọc tự nhiên của các đoạn gen di truyền)... Các giải thuật Metaheuristics này sử dụng các giải thuật Heuristics để tạo lời giải khả dĩ ban đầu, sau đó cải thiện lời giải dựa trên các nguyên lý tự nhiên đã đề cập, thường cho kết quả tương đối tốt (gần tối ưu tuyệt đối). Ngoài ra, còn một dạng giải thuật là các giải thuật tối ưu toàn cục (global optimization) sẽ cho những kết quả tối ưu tuyệt đối như Branch and Bound, Branch and Cut... Tuy nhiên đối với các bài toán lớn, các giải thuật này lại tốn rất nhiều thời gian để chạy cũng như gây chi phí lớn.
Ở bài toán lấy hàng trong kho này, ta cũng có thể cải thiện kết quả bài toán bằng các giải thuật Metaheuristics như Simualated Annealing (ý tưởng của giải thuật là có một xác suất chấp nhận lời giải tệ hơn để kết quả có thể bỏ qua sự tối ưu cục bộ tiến tới một kết quả mới tốt hơn) hay Ant Colony Optimization (ý tưởng là việc đàn kiến đi trên một đoạn đường để lại một vết mùi, các con kiến sau dựa trên vết mùi để cải thiện lời giải)...
Hy vọng với bài viết trên, các bạn có thêm kiến thức hoạt động kho vận và có một các tiếp cận mới trong tối ưu hoá hoạt động kho vận. Đồng thời, đây có thể là những bước để bắt đầu tìm hiểu sâu hơn về Operations Research - một lĩnh vực chưa được chú ý nhiều ở Việt Nam, nhưng rất được chú trọng ở khu vực phát triển như Châu Âu, Bắc Mỹ...
Tham khảo: link
© 2021 CÔNG TY TNHH ERX VIỆT NAM
Địa chỉ văn phòng: 46/4 Nguyễn Cửu Vân, Phường 17, Quận Bình Thạnh, TP.HCM