Chi phí tải trọng chỉ định chi phí hoặc khoản phạt mà một chiếc xe phải chịu dựa trên tải trọng mà xe chở giữa các lần lấy và giao hàng. Bạn có thể định cấu hình các chi phí này dựa trên khoảng cách di chuyển bằng costPerKilometer, thời gian di chuyển bằng costPerTraveledHour hoặc sử dụng cả hai cùng một lúc.
Định cấu hình chi phí tải để hỗ trợ các mục tiêu như sau:
- Tính đến chi phí nhiên liệu tăng theo trọng lượng hàng hoá.
- Tránh định tuyến cho xe chở nhiều hàng hoá đi quãng đường dài.
- Tính đến hao mòn xe do chở hàng nặng.
Thuộc tính
Chỉ định chi phí tải trong thuộc tính loadLimits của Vehicle.
Giống như tất cả các thông số chi phí khác, chi phí tải sử dụng các đơn vị chi phí tương đối, không có thứ nguyên.
Bạn có thể xác định chi phí tải bằng các thuộc tính sau:
| Thuộc tính | Loại | Mô tả |
|---|---|---|
costPerKilometer |
Đối tượng | Chứa kiểu đối tượng LoadCost để tính chi phí đi lại dựa trên số km đã đi. |
costPerTraveledHour |
Đối tượng | Chứa kiểu đối tượng LoadCost để tính toán chi phí đi lại dựa trên số giờ đã đi, không bao gồm thời gian chờ, thời gian tham quan và thời gian nghỉ. |
LoadCost
Loại thông báo LoadCost xác định chi phí đi lại để vận chuyển một tải trọng cụ thể. Bạn có thể đặt ngưỡng tải, sau đó chỉ định các mức phí khác nhau cho mỗi đơn vị tải, cả dưới và trên ngưỡng đó.
Đối tượng LoadCost chứa các thông số cấu hình sau:
| Tham số | Loại | Mô tả |
|---|---|---|
loadThreshold |
chuỗi (định dạng int64) | Mức tải mà tỷ lệ tính toán chi phí thay đổi. Giá trị mặc định là 0. |
costPerUnitAboveThreshold |
Số | Chi phí áp dụng cho mỗi đơn vị tải trên loadThreshold. Giá trị mặc định là 0. |
costPerUnitBelowThreshold |
Số | Chi phí áp dụng cho mỗi đơn vị tải bằng hoặc dưới loadThreshold. Giá trị mặc định là 0. |
So khớp chi phí tải với lô hàng
Chi phí tải được áp dụng khi tải trọng của xe khớp với loadDemands loại lô hàng trên tuyến đường của xe. Loại tải là chuỗi tuỳ ý, chẳng hạn như trọng lượng hoặc thể tích. Để biết thêm thông tin về cách định cấu hình các loại tải, hãy xem phần Các loại tải.
Ví dụ
Phần này trình bày 3 loại ví dụ:
- Mã mẫu minh hoạ cấu trúc của chi phí tải.
- Một ví dụ về tình huống cho thấy một cách sử dụng chi phí tải để đạt được mục tiêu kinh doanh.
- Ví dụ về yêu cầu bao gồm các giá trị được đặt trong tình huống ví dụ.
Mã mẫu
Ví dụ sau đây cho thấy cách cấu trúc chi phí tải với tất cả các thông số cấu hình hiện có. Mẫu này sử dụng costPerKilometer, nhưng bạn có thể thay thế bằng costPerTraveledHour để tính chi phí dựa trên thời gian di chuyển thay vì khoảng cách.
{
"model": {
"vehicles": [{
"loadLimits": {
"LOAD_TYPE": {
"maxLoad": "MAX_LOAD",
"costPerKilometer": {
"loadThreshold": "LOAD_THRESHOLD",
"costPerUnitAboveThreshold": COST_ABOVE,
"costPerUnitBelowThreshold": COST_BELOW
}
}
}
}]
}
}
Tình huống ví dụ
Phần này mô tả một tình huống mà bạn muốn tối ưu hoá mức tiêu thụ nhiên liệu, trong đó lượng nhiên liệu tiêu thụ tỷ lệ thuận với khoảng cách và trọng lượng hàng hoá. Vì xe tiêu thụ nhiều nhiên liệu hơn khi chở hàng nặng hơn, nên bạn cần lên kế hoạch cho những tuyến đường giao các gói hàng nặng hơn trước.
Để thiết lập hành vi này, bạn có thể định cấu hình yêu cầu của mình để phạt những chiếc xe đi quãng đường dài chở hàng nặng. Đối với ví dụ này, hãy sử dụng các giá trị thuộc tính sau trong yêu cầu của bạn:
| Cha mẹ | Thuộc tính | Loại | Giá trị | Trường hợp |
|---|---|---|---|---|
loadLimits |
loại cửa | chuỗi | weightKg |
Xác định loại dung lượng cần theo dõi. Ví dụ này sử dụng weightKg để biểu thị trọng lượng hàng hoá tính bằng kilôgam. |
loadLimits |
maxLoad |
chuỗi | 100 |
Trọng lượng hàng hoá tối đa mà xe có thể chở. |
costPerKilometer |
loadThreshold |
chuỗi | 15 |
Đặt ngưỡng tải cơ sở. Mọi trọng lượng hàng hoá trên 15 kg đều phải chịu mức phạt chi phí nhiên liệu dựa trên tải trọng. |
costPerKilometer |
costPerUnitAboveThreshold |
số | 1 |
Đóng vai trò là hệ số chi phí nhiên liệu của bạn. Cứ mỗi ki-lô-mét đã đi, mỗi ki-lô-gam hàng hoá vượt quá ngưỡng 15 kg sẽ phải chịu 1 đơn vị chi phí. |
loadDemands |
amount |
chuỗi | Lô hàng 1: 50Lô hàng 2: 10Lô hàng 3: 80 |
Chỉ định trọng lượng hàng hoá cho mỗi trong số 3 lô hàng. |
Trong trường hợp này, các giá trị bạn đã định cấu hình sẽ có những tác động sau:
- Trình tối ưu hoá sắp xếp các tuyến đường để giao những gói hàng nặng nhất trước. Trình giải quyết sẽ lên lịch giao hàng 80 kg và 50 kg vào đầu tuyến đường để giảm thiểu khoảng cách di chuyển khi chở hàng nặng.
- Công cụ tối ưu hoá sắp xếp các tuyến đường để giảm thiểu quãng đường di chuyển khi chở hàng nặng. Để xem những chế độ cài đặt này ảnh hưởng như thế nào đến các tuyến đường, bạn có thể tăng
costPerUnitAboveThresholdtừ1lên5. Bằng cách tăng mức phạt trọng lượng, bạn sẽ nhắc trình tối ưu hoá làm việc chăm chỉ hơn nữa để giảm thiểu khoảng cách di chuyển khi chở hàng nặng. Điều này có thể sắp xếp lại thứ tự giao hàng hoặc chia các lô hàng trên nhiều xe.
Ví dụ về yêu cầu
Ví dụ sau đây cho thấy cấu trúc của một yêu cầu optimizeTours cơ bản kết hợp các giá trị chi phí tải từ tình huống ví dụ:
{ "model": { "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": "50" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "penaltyCost": 30.0, "loadDemands": { "weightKg": { "amount": "10" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "penaltyCost": 50.0, "loadDemands": { "weightKg": { "amount": "80" } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "100", "costPerKilometer": { "loadThreshold": "15", "costPerUnitAboveThreshold": 1 } } } } ] } }
Công thức tính
Trình tối ưu hoá tính toán chi phí tải bằng các công thức sau.
Tính toán ngưỡng đầy đủ
Khi chỉ định cả costPerUnitAboveThreshold và costPerUnitBelowThreshold, bạn sẽ phải chịu chi phí đi lại riêng cho số lượng tải trọng cả trên và dưới loadThreshold. Công thức như sau:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
+ min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold
Ví dụ: sử dụng các giá trị trong Ví dụ về yêu cầu, trong đó giá trị của costPerUnitBelowThreshold là 2, nếu xe đi được 10 km và chở tải trọng 50, thì cách tính là:
max(50 - 15, 0) * 10 * 1 + min(50, 15) * 10 * 2 = 650 cost units
Tính toán trên ngưỡng
Khi bạn chỉ định costPerUnitAboveThreshold, thì phép tính này là một trường hợp đặc biệt của công thức ngưỡng đầy đủ. Vì chi phí dưới ngưỡng là 0, nên nửa sau của công thức đầy đủ sẽ được đánh giá là 0. Công thức như sau:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
Ví dụ: sử dụng các giá trị trong Ví dụ về yêu cầu, trong đó loadThreshold là 15 và costPerUnitAboveThreshold là 1, nếu xe đi được 10 km khi chở 50 kg, thì cách tính như sau:
max(50 - 15, 0) * 10 * 1 = 350 cost units
Tính toán dưới ngưỡng
Tương tự, nếu bạn chỉ định costPerUnitBelowThreshold, thì phép tính này là một trường hợp đặc biệt khác của công thức ngưỡng đầy đủ, trong đó chi phí trên ngưỡng bằng 0. Công thức như sau:
cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold