Ví dụ này cho biết cách sử dụng các thuộc tính chuyển đổi để ưu tiên các tuyến đường mà cùng một xe thực hiện việc nhận hàng và giao hàng ở gần trong một khoảng thời gian. Để tìm hiểu thêm về các thuộc tính chuyển đổi, hãy xem phần Mô hình logic nghiệp vụ bằng thuộc tính chuyển đổi.
Trong ví dụ này:
- Các lô hàng A, B và C được giao gần nhau trên cùng một con đường.
- Chúng tôi sẽ tiếp tục cung cấp các bản phát hành khác trong tương lai.
- Các lượt phân phối không có thời gian phân phối cụ thể.
- Bất kể lịch trình ghé thăm, xe cần đi trên con đường này hai lần: một lần vào buổi sáng trên đường từ kho và một lần vào buổi tối trên đường về.
- Tổng quãng đường và thời gian di chuyển của tuyến đường luôn giống nhau, bất kể thời điểm thực hiện A, B và C.
Trong trường hợp này và đối với yêu cầu chỉ sử dụng chi phí mỗi giờ và chi phí mỗi kilômét, tuyến đường được tối ưu hoá có thể xử lý A và B vào buổi sáng và xử lý C vào buổi tối. Chi phí của giải pháp sẽ giống như khi cả ba yêu cầu được xử lý cùng một lúc.
Chi phí trên mỗi km có ngưỡng
Để nhóm các lượt truy cập lân cận, trước tiên, bạn cần chọn một khoảng cách ngưỡng. Đây là khoảng cách tối đa giữa hai lượt truy cập mà bạn coi là gần nhau. Ví dụ này sử dụng ngưỡng 100 mét, tương ứng với khoảng một khối nhà trong khu vực đô thị. Bạn có thể tăng hoặc giảm ngưỡng để phù hợp với nhu cầu của doanh nghiệp và lựa chọn ưu tiên của tài xế.
Để nhóm các lượt truy cập gần nhau trong phạm vi 100 mét, bạn đặt chi phí cao cho 100 mét đầu tiên của mỗi lượt chuyển đổi và chi phí thấp hơn cho mọi mét bổ sung của lượt chuyển đổi. Vì 100 mét đầu tiên là đoạn đường tốn kém nhất, nên trình tối ưu hoá sẽ tiết kiệm được nhiều nhất bằng cách sử dụng các đoạn chuyển đổi ngắn hơn ngưỡng 100 mét, ngay cả khi điều đó có nghĩa là kéo dài tổng chiều dài của tuyến đường.
Để thiết lập chi phí, bạn thêm một mục mới vào ShipmentModel.transition_attributes
bằng các thuộc tính sau:
- Để khớp với tất cả các hiệu ứng chuyển đổi có thể có, hãy chọn một thẻ không được sử dụng ở bất kỳ vị trí nào trong mô hình, ví dụ:
UNUSED_TAG
. ĐặtTransitionAttributes.excluded_src_tag
vàTransitionAttributes.excluded_dst_tag
thành thẻ này. - Thiết lập
TransitionAttributes.distance_limit
với khoảng cách và chi phí ngưỡng:- Đặt
DistanceLimit.soft_max_meters
thành ngưỡng đã chọn. - Đặt
DistanceLimit.cost_per_kilometer_below_soft_max
thành chi phí trên mỗi km dưới ngưỡng. - Đặt
DistanceLimit.cost_per_kilometer_above_soft_max
thành chi phí trên mỗi km vượt quá ngưỡng.
- Đặt
{
"model": {
"transitionAttributes": [
{
"excluded_dst_tag": "UNUSED_TAG ",
"excluded_src_tag": "UNUSED_TAG ",
"distanceLimit": {
"softMaxMeters": 100,
"costPerKilometerBelowSoftMax": 50,
"costPerKilometerAboveSoftMax": 1,
}
}
]
}
}
Không được sử dụng thẻ #unused_tag#
cho bất kỳ lô hàng hoặc phương tiện nào để khớp với tất cả các lượt chuyển đổi có thể có. Để biết thêm thông tin, hãy xem bài viết Cách so khớp tất cả yêu cầu truy cập.
Cách hoạt động của chi phí cao dưới ngưỡng
Phần này cho thấy mức độ ảnh hưởng của chi phí dưới và trên ngưỡng đến chi phí tổng thể của các giải pháp khác nhau trong trường hợp mẫu.
Giải pháp 1: Thực hiện A, B trên đường đến đó, C trên đường về
Trong giải pháp này, các lô hàng được chia thành hai lần đi qua con đường này. Hai trong số đó được phân phối trong lần truy cập đầu tiên và một trong số đó được phân phối trong lần truy cập thứ hai. Có 5 hiệu ứng chuyển đổi:
Hiệu ứng chuyển cảnh | Khoảng cách | Dưới ngưỡng | Trên ngưỡng | ||
---|---|---|---|---|---|
Khoảng cách | Chi phí | Khoảng cách | Chi phí | ||
kho →A | 1.000 m | 100 m | 5 | 900 m | 0,9 |
A→B | 50 m | 50 m | 2.5 | 0 m | 0 |
B→other | 1.030 m | 100 m | 5 | 930 m | 0,93 |
other→C | 1.000 m | 100 m | 5 | 900 m | 0,9 |
C→kho | 1.080 m | 100 m | 5 | 980 m | 0,98 |
Tổng | 450 m | 22,5 | 3.710 m | 3,71 |
Tổng chi phí được tính bằng tổng của hai chi phí trên mỗi km:
- chi phí mỗi km dưới ngưỡng (50) nhân với tổng quãng đường đã đi dưới ngưỡng (450 m = 0,45 km),
- chi phí trên mỗi km vượt quá ngưỡng (1) nhân với tổng quãng đường đã đi vượt quá ngưỡng (3710 m = 3,71 km).
Do đó, tổng chi phí là 0,45 * 50 + 3,71 * 1 = 22,5 + 3,71 = 26,21.
Giải pháp 2: Thực hiện A, B, C trên đường đến đó, không thực hiện thao tác nào trên đường về
Trong giải pháp này, không giống như giải pháp 1, cả ba lô hàng đều được giao "dưới dạng một nhóm" trong một lần đi qua đường. Ở lần đi qua khác, xe hoàn toàn không dừng lại. Xin nhắc lại, có 5 hiệu ứng chuyển đổi, nhưng thời lượng và thành phần của các hiệu ứng này khác nhau:
Hiệu ứng chuyển cảnh | Khoảng cách | Dưới ngưỡng | Trên ngưỡng | ||
---|---|---|---|---|---|
Khoảng cách | Chi phí | Khoảng cách | Chi phí | ||
kho →A | 1.000 m | 100 m | 5 | 900 m | 0,9 |
A→B | 50 m | 50 m | 2.5 | 0 m | 0 |
B→C | 30 m | 30 m | 1,5 | 0 m | 0 |
C→other | 1.000 m | 100 m | 5 | 900 m | 0,9 |
other→depot | 2.080 m | 100 m | 5 | 1.980 m | 1,98 |
Tổng | 380 m | 19 | 3.780 m | 3,78 |
Sử dụng cùng một phép tính như trong giải pháp 1, chi phí tổng thể là 0,38 * 50 + 3,78 * 1 = 19 + 3,78 = 22,78 và việc thực hiện tất cả các lượt truy cập trong một khoảng thời gian sẽ có chi phí thấp hơn so với việc thực hiện các lượt truy cập đó trong hai nhóm. Bạn có thể tăng cường hiệu ứng này bằng cách tăng DistanceLimit.cost_per_kilometer_below_soft_max
.
Lý do khiến chi phí thấp trên mỗi km dưới ngưỡng không hoạt động
Vì muốn ưu tiên các đoạn chuyển đổi ngắn hơn so với các đoạn chuyển đổi dài, nên bạn có thể sẽ muốn đặt chi phí cao trên mỗi km cho các đoạn chuyển đổi dài và giữ chi phí thấp trên mỗi km cho các đoạn chuyển đổi ngắn. Nhưng trên thực tế, điều này có tác động ngược lại: vì 100 mét đầu tiên của quá trình chuyển đổi là rẻ nhất, nên trình tối ưu hoá sử dụng các mét "rẻ" này để đạt được hiệu quả cao nhất bằng cách ưu tiên các quá trình chuyển đổi có gần hoặc hơn 100 mét.
Bạn có thể thấy hiệu ứng này trên hai giải pháp mẫu. Nếu bạn hoán đổi chi phí cho mỗi kilômét dưới và trên ngưỡng, chi phí tuyến sẽ thay đổi:
Chi phí cao vượt quá ngưỡng | Chi phí cao dưới ngưỡng | |||
---|---|---|---|---|
Giải pháp 1 | Giải pháp 2 | Giải pháp 1 | Giải pháp 2 | |
Số km dưới ngưỡng | 0,45 | 0,38 | 0,45 | 0,38 |
Chi phí mỗi km dưới ngưỡng | 1 | 1 | 50.00 | 50.00 |
KM vượt quá ngưỡng | 3,71 | 3,78 | 3,71 | 3,78 |
Chi phí trên mỗi KM vượt quá ngưỡng | 50.00 | 50.00 | 1 | 1 |
Tổng chi phí | 185,95 | 189,38 | 26,21 | 22,78 |
Đối với mỗi phiên bản, tổng chi phí thấp hơn của hai giải pháp sẽ được làm nổi bật bằng phông chữ in đậm. Bạn có thể thấy rằng khi sử dụng chi phí cao hơn ngưỡng, tổng chi phí của tuyến đường hiện cao hơn cho tuyến đường mà các lượt truy cập được nhóm lại, điều này trái ngược với mục tiêu bạn muốn đạt được.