OptimizeToursRequest
mesajı (REST, gRPC), maliyetler ile ilgili birçok özellik içerir. Bu maliyet parametreleri birlikte isteğin maliyet modelini temsil eder. Maliyet modeli, isteğin aşağıdakiler gibi üst düzey optimizasyon hedeflerinin çoğunu yakalar:
- Daha kısa rotalar yerine daha hızlı
Vehicle
rotalarına veya tam tersi şekilde öncelik verilmesi Shipment
yayınlama maliyetinin,Shipment
tamamlama değerine değip değmeyeceğine karar vermek- Teslim alma ve teslimat işlemlerini yalnızca zaman aralıkları dahilinde yapmak uygun maliyetli bir yöntemdir.
Maliyetleri içeren örnek bir isteği inceleyin
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
Vehicle
maliyet özelliği
Vehicle
mesajının (REST, gRPC) çeşitli maliyet özellikleri vardır:
Vehicle.cost_per_hour
: Toplu taşıma, bekleme, ziyaret ve mola süreleri dahil saat başına araç kullanma maliyetini temsil eder.Vehicle.cost_per_kilometer
: Aracın katettiği kilometre başına maliyeti temsil eder.Vehicle.cost_per_traveled_hour
: Bekleme, ziyaret ve mola süreleri hariç, aracı yalnızca nakliye sırasında kullanma maliyetini temsil eder.
Bu maliyet parametreleri, optimize edicinin zamanda-seyahat edilen mesafeden ödün vermeden
ödüller vermesine olanak tanır. Optimize edilmiş rotanın aldığı maliyetler, yanıt mesajında metrics.costs
olarak görünür:
costPerHour
arttıkça optimize edici, en kısa rotalar olmayabilecek daha hızlı rotaları bulmaya çalışır. Bu örnekte en hızlı rota en kısa rotadır. Bu nedenle, maliyet parametrelerindeki değişikliklerin etkisi çok azdır.
Shipment
maliyet özelliği
Shipment
mesajında (REST, gRPC) birkaç maliyet parametresi de bulunur:
Shipment.penalty_cost
, gönderimin atlanması sonucu ortaya çıkan maliyeti temsil eder.Shipment.VisitRequest.cost
, belirli bir teslim alma veya teslimat maliyetini temsil eder. Bu maliyet, öncelikli olarak tek bir kargo için birden fazla teslim alma veya teslimat seçeneği arasındaki maliyet dengesini sağlamak amacıyla kullanılır.
Shipment
maliyet parametreleri, Vehicle
maliyet parametreleriyle aynı boyutsuz birimleri kullanır. Shipment
maliyeti, ceza maliyetini aşıyor. Shipment
, Vehicle
rotalarına dahil edilmez ve yanıt mesajında skipped_shipments
listesinde görünür.
ShipmentModel
maliyet özelliği
ShipmentModel
mesajı (REST, gRPC) tek bir maliyet özelliği (globalDurationCostPerHour
) içerir. Bu maliyet, tüm araçların ShipmentRoute
işlemlerini tamamlaması için gereken toplam süreye göre belirlenir. globalDurationCostPerHour
artırıldığında tüm gönderimlerin daha erken tamamlanmasına öncelik verilir.
Rota optimizasyonu yanıt maliyeti özellikleri
OptimizeToursResponse
mesajı (REST, gRPC), ShipmentRoute
'leri tamamlama sürecinde tahakkuk eden maliyetleri temsil eden maliyet özellikleri içerir.
metrics.costs
ve metrics.totalCost
özellikleri, yanıttaki tüm rotalarda karşılaşılan maliyet birimlerinin sayısını temsil eder. Her routes
girişinde, söz konusu rotanın maliyetlerini temsil eden routeCosts
ve routeTotalCosts
özellikleri bulunur.
Maliyetleri içeren örnek isteğe verilen yanıtı görüntüleyin
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
Örnek yanıtta, üst düzey metrics.costs
şunlardır:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
model.shipments.penalty_cost
değeri, gönderimlerin atlanması nedeniyle oluşan maliyeti temsil eder. skippedShipments
özelliği, hangi gönderimlerin atlandığını listeler.
Bu örnekte, örnek istekteki yalnızca model.shipments[1]
atlanmıştır.
model.shipments[1]
için 5 birim ceza maliyeti var. Bu değer, örnek yanıttaki toplam model.shipments.penalty_cost
anahtarıyla aynıdır. Vehicle
ürününün 40,0 costPerHour
ve 10,0 değerine kıyasla
penaltyCost
düşük olan sevkiyat
costPerKilometer
, gönderimi tamamlamaktan daha uygun maliyetli olmasını sağlar.
İleri düzey konu: maliyetler ve hafif kısıtlamalar
Çeşitli OptimizeToursRequest
mesajı (REST, gRPC) özellikleri yumuşak kısıtlamaları temsil eder. Bu kısıtlamalar, yerine getirilemediklerinde maliyete neden olur.
Örneğin, araç LoadLimit
(REST, gRPC) kısıtlamaları softMaxLoad
ve costPerUnitAboveSoftMax
özelliklerine sahiptir. Bunlar birlikte, softMaxLoad
değerini aşan yük birimleriyle orantılı bir maliyete neden olur. Böylece, sınırın yalnızca maliyet açısından mantıklı olması durumunda aşılmasına izin verilir.
Benzer şekilde TimeWindow
kısıtlamaları (REST, gRPC), soft_start_time
ve soft_end_time
özelliklerine sahiptir ve bunlara karşılık gelen cost_per_hour_before_soft_start_time
ve cost_per_hour_after_soft_end_time
özellikleri, kısıtlamalı etkinliğin TimeWindow
'a göre ne kadar erken veya geç gerçekleştiğine bağlı olarak ortaya çıkar.
Tüm maliyet modeli parametrelerinde olduğu gibi esnek sınırlama maliyetleri, diğer maliyet parametreleriyle aynı boyutsuz birimler olarak ifade edilir.
LoadLimit
kısıtlamaları, Yükleme Talepleri ve Sınırları bölümünde ayrıntılı olarak ele alınmaktadır. TimeWindow
kısıtlamaları, Teslim alma ve Teslimat Süresi Aralığı Kısıtlamaları bölümünde ayrıntılı olarak ele alınmaktadır.