Bu kılavuzda loadDemands
ve loadLimits
ile bunların birbirleriyle olan ilişkisi açıklanmaktadır.
Teslim alma ve teslim süresi aralığı Kısıtlamaları bölümünde belirtildiği gibi OptimizeToursRequest
mesajı (REST, gRPC), optimize edilen sorunla ilgili kısıtlamaları belirten bir dizi özellik içerir. Birkaç OptimizeToursRequest
mülkü yükleme kısıtlamalarını temsil eder.
Araçlar ve kargoların, rota planlanırken dikkate alınması gereken fiziksel özellikleri vardır.
- Araçlar:
loadLimits
mülkü, aracın taşıyabileceği maksimum yükü belirtir.Vehicle
mesajı (REST, gRPC) belgelerini inceleyin. - Gönderimler:
loadDemands
özelliği, belirli bir gönderimin ne kadar yük tükettiğini belirtir.Shipment
mesajının (REST, gRPC) belgelerine bakın.
Bu iki kısıtlama birlikte, optimizasyon aracının kargoları filo kapasitenize ve kargo taleplerinize en uygun şekilde araçlara uygun şekilde atamasını sağlar.
Bu belgenin geri kalanında loadLimits
ve loadDemands
ayrıntılı olarak ele alınmaktadır.
Yük talepleri ve sınırları: türler
Her yükleme talebini ve sınır kısıtlamasını bir tür bazında ifade edersiniz.
Aşağıdaki örnekler gibi kendi yükleme türlerinizi sağlayabilirsiniz:
- ağırlık
- ses düzeyi
- doğrusal ölçümler
- Taşınan öğelerin veya ekipmanların adları
Bu kılavuzda örnek tür olarak weightKg
kullanılmaktadır.
Hem Shipment.loadDemands
hem de Vehicle.loadLimits
, yük türlerini temsil eden string
anahtarlarıyla Protokol Tamponlarımap
türünü kullanır.
Shipment.loadDemands
değerleri, Load
mesajını (REST, gRPC) kullanır.
Load
mesajında, belirtilen türde gönderimi tamamlamak için ne kadar kapasite gerektiğini temsil eden tek bir amount
özelliği bulunur.
Vehicle.loadLimits
değerleri, LoadLimit
mesajını (REST, gRPC) kullanır. LoadLimit
mesajında çeşitli özellikler bulunur. maxLoad
, aracın belirtilen türdeki maksimum yük kapasitesini temsil eder.
Bir gönderinin loadDemands
, yalnızca ikisinin eşleşen yükleme türü anahtarlarına sahip olması durumunda atanmış aracının loadLimits
'unu tüketir. Örneğin, loadDemands
içeren bir gönderim:
"loadDemands": {
"weightKg": {
"amount": 50
}
}
gönderimin tamamlanması için weightKg
türündeki 50 yük birimi gerekir. Şu özelliklere sahip bir araç: loadLimits
:
"loadLimits": {
"weightKg": {
"maxLoad": 100
}
}
Araç, weightKg
türündeki maxLoad
değerine sahip olduğu için gönderimi tamamlayabilir. Bu değer, gönderimin weightKg
türündeki loadDemands
değerinden büyük veya eşit olmalıdır. Ancak aşağıdakilerden loadLimits
olan bir araç:
"loadLimits": {
"equipmentRackStorage": {
"maxLoad": 10
}
}
weightKg
yük sınırı olmadığı için dolaylı olarak sınırsız weightKg
kapasitesine sahiptir. Böylece araç, kargonun ağırlık talebiyle kısıtlanmaz.
Gönderiler ve araçlar arasında yük aktarımı
Gönderiler araçlar tarafından alınıp teslim edilirken loadDemand
, gönderim ile araç arasında aktarılır. Belirli bir aracın OptimizeToursResponse
mesajının (REST, gRPC)routes.transitions
girişinde aracın yüklemelerini görebilirsiniz. Sıralama aşağıdaki gibidir:
- Gönderim için gerekli yük kapasitesi
loadDemand
olarak tanımlanır. - Gönderi, kendisine atanan araç tarafından teslim alınır ve aracın
vehicleLoads
değeri, sevkiyatınloadDemand
tutarı kadar artar. Bu aktarım, yanıt mesajında olumluvisits.loadDemands
ile gösterilir. - Araç, gönderimi teslim eder ve aracın
vehicleLoads
değeri, teslim edilen gönderiminloadDemand
değeri kadar azalır. Bu aktarım, yanıt mesajında negatifvisits.loadDemands
ile temsil edilir.
Bir aracın vehicleLoads
değeri, rota üzerindeki herhangi bir noktada belirtilen loadLimits
değerini aşamaz.
Yükleme talepleri ve sınırlarını içeren tam bir örnek
Yük talepleri ve sınırlar içeren örnek bir isteğe bakın
{ "populatePolylines": false, "populateTransitionPolylines": false, "model": { "globalStartTime": "2023-01-13T16:00:00Z", "globalEndTime": "2023-01-14T16:00:00Z", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": 50 } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 15.0, "loadDemands": { "weightKg": { "amount": 10 } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "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 } } } ] } }
Örnek istek, yükle ilgili çeşitli parametreler içerir:
shipments[0]
, 50weightKg
yük talebine sahiptir.shipments[1]
, 10weightKg
yükleme talebine sahip.shipments[2]
'in yük talebi 80weightKg
.vehicles[0]
için yükleme sınırı 100weightKg
'tür.
Yük talepleri ve sınırlarıyla isteğe verilen yanıtı görün
{ "routes": [ { "vehicleStartTime": "2023-01-13T16:00:00Z", "vehicleEndTime": "2023-01-13T16:43:27Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T16:00:00Z", "detour": "0s", "loadDemands": { "weightKg": { "amount": "50" } } }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-13T16:02:30Z", "detour": "150s", "loadDemands": { "weightKg": { "amount": "10" } } }, { "startTime": "2023-01-13T16:08:55Z", "detour": "150s", "loadDemands": { "weightKg": { "amount": "-50" } } }, { "shipmentIndex": 1, "startTime": "2023-01-13T16:16:37Z", "detour": "343s", "loadDemands": { "weightKg": { "amount": "-10" } } }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T16:27:07Z", "detour": "1627s", "loadDemands": { "weightKg": { "amount": "80" } } }, { "shipmentIndex": 2, "startTime": "2023-01-13T16:36:26Z", "detour": "0s", "loadDemands": { "weightKg": { "amount": "-80" } } } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T16:00:00Z", "vehicleLoads": { "weightKg": {} } }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T16:02:30Z", "vehicleLoads": { "weightKg": { "amount": "50" } } }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-13T16:05:00Z", "vehicleLoads": { "weightKg": { "amount": "60" } } }, { "travelDuration": "212s", "travelDistanceMeters": 791, "waitDuration": "0s", "totalDuration": "212s", "startTime": "2023-01-13T16:13:05Z", "vehicleLoads": { "weightKg": { "amount": "10" } } }, { "travelDuration": "380s", "travelDistanceMeters": 1190, "waitDuration": "0s", "totalDuration": "380s", "startTime": "2023-01-13T16:20:47Z", "vehicleLoads": { "weightKg": {} } }, { "travelDuration": "409s", "travelDistanceMeters": 1371, "waitDuration": "0s", "totalDuration": "409s", "startTime": "2023-01-13T16:29:37Z", "vehicleLoads": { "weightKg": { "amount": "80" } } }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-13T16:40:36Z", "vehicleLoads": { "weightKg": {} } } ], "metrics": { "performedShipmentCount": 3, "travelDuration": "1407s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2607s", "travelDistanceMeters": 4812, "maxLoads": { "weightKg": { "amount": "80" } } }, "routeCosts": { "model.vehicles.cost_per_kilometer": 48.12, "model.vehicles.cost_per_hour": 28.966666666666665 }, "routeTotalCost": 77.086666666666659 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1407s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2607s", "travelDistanceMeters": 4812, "maxLoads": { "weightKg": { "amount": "80" } } }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T16:00:00Z", "latestVehicleEndTime": "2023-01-13T16:43:27Z", "totalCost": 77.086666666666659, "costs": { "model.vehicles.cost_per_hour": 28.966666666666665, "model.vehicles.cost_per_kilometer": 48.12 } } }
Eklenen yük kısıtlamaları, visits
'ün sırasını etkiler:
shipment[0]
alındıshipment[1]
teslim alındıshipment[0]
yayınlandıshipment[1]
yayınlandıshipment[2]
teslim alındıshipment[2]
yayınlandı
Bu sipariş, toplam loadDemands
'leri aracın loadLimits
'unu aştığı için üç gönderimin aynı anda araç tarafından tamamlanamadığını gösterir.
Her visits
girişi, Visit
maddesinin tamamlanmasından kaynaklanan araç yükündeki değişikliği içerir. Pozitif yükleme değerleri, kargo yüklemeyi, negatif yükleme değerleri ise kargo boşaltmayı temsil eder.
Her transitions
girişi, Transition
süresince toplam araç yükünü içerir. Örneğin, transitions[2]
'ün weightKg
yükü 60'tır. Bu değer, shipment[0]
ve shipment[1]
'in birleşik yüklerini temsil eder.
routes[0].metrics
ve metrics.aggregatedRouteMetrics
metrik nesneleri bir maxLoads
özelliği içeriyor. weightKg
türü için değer 80'dir ve aracın rotasının shipments[2]
'yi teslimat konumuna taşıyan kısmını temsil eder.
Sanal yükleme sınırı kısıtlamaları
Araç Alma ve Teslimat Zaman Aralığı Kısıtlamaları bölümünde açıklanan zaman aralıkları gibi, yükleme sınırı kısıtlamalarının da katı ve esnek varyantları vardır. LoadLimit
mesajının maxLoad
mülkü katı bir kısıtlamayı ifade eder: Araç hiçbir zaman belirtilen türdeki maxLoad
değerini aşan yük taşımamalıdır. softMaxLoad
ve costPerUnitAboveSoftMax
özellikleri yumuşak bir kısıtlama ifade eder. softMaxLoad
'ü aşan her birim için costPerUnitAboveSoftMax
maliyeti oluşur.
Yumuşak yük sınırı kısıtlamalarının çeşitli kullanım alanları vardır. Örneğin:
- uygun maliyetli olduğunda, daha fazla araç genelinde gerekli minimum sayıdan fazla sevkiyatın dengelenmesi;
- Sürücünün, belirli bir rotada rahatça alıp teslim edebileceği öğe sayısıyla ilgili tercihini belirtmesi
- Araçları, aşınmayı sınırlamak ve bakım maliyetlerini azaltmak için maksimum fiziksel kapasitelerinin altında yükleme
Sert ve yumuşak yükleme sınırı kısıtlamaları birlikte kullanılabilir. Örneğin, katı yükleme sınırı, bir aracın güvenli bir şekilde taşıyabileceği maksimum kargo ağırlığını veya bir araca tek seferde sığabilecek maksimum öğe sayısını ifade edebilir. Öte yandan, yumuşak yükleme sınırı, sürücünün her şeyi araca sığdırma kapasitesini zorlayan maksimum ağırlık veya öğe sayısı olabilir.