Bu kılavuzda, loadDemands
, loadLimits
ve bunların birbiriyle nasıl ilişkili olduğu 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. Bazı OptimizeToursRequest
özellikleri yükleme kısıtlamalarını temsil eder.
Araçlar ve sevkiyatların, rota planlarken göz önünde bulundurulması gereken fiziksel mülkleri vardır.
- Araçlar:
loadLimits
özelliği, aracın kaldırabileceğ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ı (REST, gRPC) belgelerini inceleyin.
Bu iki kısıtlama, optimize edicinin gönderileri araçlara uygun şekilde, filo kapasitenize ve gönderim taleplerinize en uygun şekilde atamasını sağlar.
Bu dokümanın geri kalanında loadLimits
ve loadDemands
ayrıntılı olarak açıklanmaktadır.
Yükleme 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 eşyaların veya ekipmanların adları
Bu kılavuzda, örnek türü olarak weightKg
kullanılmıştır.
Hem Shipment.loadDemands
hem de Vehicle.loadLimits
, yük türlerini temsil eden string
anahtarları ile Protokol Arabelleklerimap
türünü kullanır.
Shipment.loadDemands
değerleri, Load
mesajını (REST, gRPC) kullanır.
Load
mesajı, belirtilen türde gönderimi tamamlamak için ne kadar kapasite gerektiğini temsil eden tek bir amount
özelliğine sahiptir.
Vehicle.loadLimits
değerleri, LoadLimit
mesajını (REST, gRPC) kullanır. LoadLimit
mesajının çeşitli özellikleri vardır. maxLoad
, aracın belirtilen türdeki maksimum yük kapasitesini temsil eder.
Bir gönderinin loadDemands
, kendisine atanan aracın loadLimits
özelliğini yalnızca eşleşen yük türü anahtarlarına sahipse tüketir. Örneğin, şu özelliklere sahip bir kargo:
loadDemands
:
"loadDemands": {
"weightKg": {
"amount": 50
}
}
gönderimin tamamlanması için weightKg
türünde 50 yükleme birimi gerektirir. Şu özelliklere sahip bir araç: loadLimits
:
"loadLimits": {
"weightKg": {
"maxLoad": 100
}
}
Aracın weightKg
türündeki maxLoad
değeri, weightKg
türündeki gönderinin loadDemands
değerinden yüksek veya buna eşit olduğundan gönderimi tamamlayabilir. Ancak şu özelliklere sahip bir araç: loadLimits
:
"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:
- Gereken yük kapasitesi, gönderim için
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 pozitifvisits.loadDemands
ile temsil edilir. - Araç, gönderimi teslim eder ve aracın
vehicleLoads
değeri, teslim edilen sevkiyatınloadDemand
tutarı 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ük talepleri ve sınırlarıyla ilgili eksiksiz bir örnek
Yük talepleri ve sınırlarıyla ilgili örnek bir isteği inceleyin
{ "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ükleme talebine sahip.shipments[1]
, 10weightKg
yükleme talebine sahip.shipments[2]
, 80weightKg
yük talebine sahip.vehicles[0]
uygulamasının yükleme sınırı 100weightKg
.
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
sırasını etkiler:
shipment[0]
alındıshipment[1]
alındıshipment[0]
teslim edildishipment[1]
teslim edildishipment[2]
alındıshipment[2]
teslim edildi
Bu sipariş, toplam loadDemands
sevkiyatın araç tarafından loadLimits
değerini aştığından araç tarafından aynı anda üç sevkiyatın tamamlanamadığını gösteriyor.
Her visits
girişi, Visit
maddesinin tamamlanmasından kaynaklanan araç yükündeki değişikliği içerir. Pozitif yük değerleri kargo yüklemesini, negatif değerler ise sevkiyat yüklemesinin boşaltılmasını temsil eder.
Her transitions
girişi, Transition
süresince toplam araç yükünü içerir. Örneğin transitions[2]
, toplam shipment[0]
ve shipment[1]
yüklemelerini temsil eden 60'lık bir weightKg
yüküne sahiptir.
routes[0].metrics
ve metrics.aggregatedRouteMetrics
metrik nesneleri bir maxLoads
özelliği içerir. weightKg
türünün değeri 80'dir. Bu değer, aracın rotanın shipments[2]
konumunu teslimat konumuna taşıyan kısmını temsil eder.
Esnek yükleme sınırı kısıtlamaları
Teslim alma ve teslimat süresi aralığı kısıtlamalarında açıklanan zaman aralıklarında olduğu gibi yük sınırı kısıtlamalarının sabit ve esnek varyantları vardır. LoadLimit
mesajının maxLoad
özelliği sabit bir kısıtlama ifade ediyor: Araç, belirtilen türde maxLoad
değerini aşan yükü hiçbir zaman taşımamalıdır. softMaxLoad
ve costPerUnitAboveSoftMax
mülkleri, softMaxLoad
değerini aşan her birimin costPerUnitAboveSoftMax
maliyetine neden olduğu esnek bir kısıtlama ifade eder.
Geçici yükleme sınırı kısıtlamalarının aşağıdakiler gibi çeşitli kullanım alanları vardır:
- uygun maliyetli olduğunda, daha fazla araç genelinde gerekli minimum sayıdan fazla sevkiyatın dengelenmesi;
- belirli bir rotada rahatça teslim alıp teslim edebilecekleri öğe sayısı için sürücü tercihini ifade eder.
- aşınmayı sınırlandırmak ve bakım maliyetlerini azaltmak için araçları maksimum fiziksel kapasitelerinin altında yükleme
Sert ve hafif yükleme sınırı kısıtlamaları birlikte kullanılabilir. Örneğin, ağır yük sınırı, bir aracın güvenli bir şekilde taşıyabileceği maksimum kargo ağırlığını veya bir araca aynı anda sığabilecek maksimum öğe sayısını ifade ederken yumuşak yük sınırı, sürücünün araçtaki her şeyi sığdırabilmesine engel olacak maksimum ağırlık veya öğe sayısı olabilir.