Bu senaryoda, basit bir dönüşüm ayarıyla bir araca atanan durakların sırasını maliyet parametreleridir. Bu, Rota Optimizasyonu işleminin en basit modudur ve tüm durakların belirtilen zaman aralığı içinde ziyaret edilmesini sağlar.
Aşağıdaki örnekte bir araç ve üç araç içeren temel bir senaryo gösterilmektedir depot adı verilen tek bir konumdan gelen gönderilerdir.
Örnek isteği inceleyin
{ "populatePolylines": true, "populateTransitionPolylines": true, "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" } ] }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ] }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ] } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerKilometer": 10.0, "costPerHour": 40.0 } ] } }
Rota optimizasyonu istek alanları
Genel Bakış'ta belirtildiği gibi, en önemli Rota Optimizasyonu isteğidir.
mülkleri vehicles
ve shipments
olarak ayarlanmıştır.
Talep, araca ve gönderilere ek olarak aşağıdakileri de içerir alanlar:
Çoklu çizgiler
populatePolylines
ve populateTransitionPolylines
, Rota olup olmadığını belirtir
Optimizasyon, çoklu çizgiler döndürmelidir.
Hizmet, Çoklu çizgileri Haritalar JS çoklu çizgi codec'ini kullanarak kodlar. Bu codec bileşeni
Yazdırılabilir ASCII karakterleri kullanan ikili çoklu çizgi verileri. URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için
Etkileşimli Çoklu Çizgi Kodlayıcı Yardımcı Programı'nı kullanarak
Rota Optimizasyonu. Bu kılavuzdaki örnekte populatePolylines
ve
populateTransitionPolylines
için doğru, diğer kılavuzlar tarafından "yanlış" olarak ayarlandı
yanıt boyutunu küçültebilirsiniz.
Kodlamanın açıklaması için Kodlanmış Çoklu Çizgi Algoritma Biçimi'ne bakın. biçimindedir.
Küresel saat kısıtlamaları
model.globalStartTime
ve model.globalEndTime
rastgele bir 24 değerine ayarlandı
saatlik süre. Bu, çıkış zaman damgalarının yorumlanmasını kolaylaştırır.
Konumları ziyaret edin
Örnek istek yalnızca model.shipments[].pickups[].arrivalLocation
ve
model.shipments[].deliveries[].arrivalLocation
. Ayrıca bir de
Aracın bir konumdan ayrıldığı durumlarda departureLocation
özelliği
Varış noktasından farklı bir nokta (ör. girişi olan bir otopark)
diğerinde çıkışlar görebilirsiniz. Bu ve sonraki dönemde
varış ve kalkış noktalarının aynı olduğu varsayılır.
latLng
yerine varış ve kalkış noktası waypoint
olarak da kullanılabilir.
Waypoint
alanları, LatLng
yerine Google Yer Kimliklerinin kullanımını destekliyor.
araç başlıkları da belirtebilir. Referans belgeleri inceleyin
(REST, gRPC) inceleyin.
Örnekteki kısıtlamalar
Bu senaryo, optimize ediciyi çeşitli şekillerde kısıtlar:
- Tüm etkinlikler genel başlangıç ve bitiş zamanları arasında tamamlanmalıdır. Bu senaryoda başlangıç ve bitiş zamanları, teslimatlara yakın mesafe ve geniş küresel zaman aralığı.
- Tüm gönderimlerin tamamlanması gerekir. Bu, aşağıdaki durumlar söz konusu olduğunda varsayılan davranıştır:
shipments
tarihinde ceza maliyetleri belirtilmemiş. costPerKilometer
vecostPerHour
araçta ayarlandı.
Maliyetler Maliyet Modeli Parametreleri bölümünde ele alınır.
Rota optimizasyonu yanıtı özellikleri
Örnek isteğe verilen yanıtı görüntüleyin
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:36:41Z", "visits": [ { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "isPickup": true, "startTime": "2023-01-14T00:05:00Z", "detour": "300s" }, { "startTime": "2023-01-14T00:11:25Z", "detour": "0s" }, { "shipmentIndex": 1, "startTime": "2023-01-14T00:19:29Z", "detour": "503s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:29:02Z", "detour": "1324s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z", "routePolyline": {} }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z", "routePolyline": {} }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:05:00Z", "routePolyline": {} }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:07:30Z", "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@" } }, { "travelDuration": "234s", "travelDistanceMeters": 793, "waitDuration": "0s", "totalDuration": "234s", "startTime": "2023-01-14T00:15:35Z", "routePolyline": { "points": "cwseFti_jVRWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[`@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@" } }, { "travelDuration": "323s", "travelDistanceMeters": 1204, "waitDuration": "0s", "totalDuration": "323s", "startTime": "2023-01-14T00:23:39Z", "routePolyline": { "points": "cuseFhjVSTY`@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@" } }, { "travelDuration": "209s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "209s", "startTime": "2023-01-14T00:33:12Z", "routePolyline": { "points": "{zteFxbajV?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" } } ], "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@RWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@STY@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" }, "metrics": { "performedShipmentCount": 3, "travelDuration": "1001s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2201s", "travelDistanceMeters": 3457 }, "travelSteps": [ { "duration": "0s", "routePolyline": {} }, { "duration": "0s", "routePolyline": {} }, { "duration": "0s", "routePolyline": {} }, { "duration": "227s", "distanceMeters": 794, "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@" } }, { "duration": "233s", "distanceMeters": 791, "routePolyline": { "points": "cwseFti_jVRWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[`@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@" } }, { "duration": "322s", "distanceMeters": 1205, "routePolyline": { "points": "cuseFhjVSTY`@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@" } }, { "duration": "208s", "distanceMeters": 666, "routePolyline": { "points": "{zteFxbajV?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" } } ], "vehicleDetour": "2201s", "routeCosts": { "model.vehicles.cost_per_hour": 24.455555555555556, "model.vehicles.cost_per_kilometer": 34.57 }, "routeTotalCost": 59.025555555555556 } ], "totalCost": 59.025555555555556, "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1001s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2201s", "travelDistanceMeters": 3457 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:36:41Z", "totalCost": 59.025555555555556, "costs": { "model.vehicles.cost_per_kilometer": 34.57, "model.vehicles.cost_per_hour": 24.455555555555556 } } }
Rota optimizasyonu yanıtı, aşağıdaki gibi en üst düzey routes
alanını içerir:
önerilen rotaları, araç başına bir rota olacak şekilde gösterir. Çünkü örnekteki
bu kılavuzdaki istek yalnızca bir araç belirtiyor, routes
bir araç içeriyor
ShipmentRoute
mesaj.
ShipmentRoute
tesis
ShipmentRoute
mesaj türünün en önemli iki özelliği şunlardır:
visits
ve transitions
.
Her Visit
, şunlardan birinden teslim alma veya teslimatın tamamlandığını gösterir:
istek mesajının VisitRequest
'leri. Bir ziyaret, etkin bir şekilde
bir araç tarafından belirli bir yerde ve zamanda tamamlanmasıdır.
Her Transition
, bir konumdan başka bir konuma giden aracı temsil eder
tıklayın. Aracın başlangıç noktası çifti ile ziyaret arasında
konumu ve aracın uç noktası.
Aracın tam rotasını yeniden oluşturmak için ShipmentRoute
visits
ve
transitions
birleştirilmelidir. Alanların birleşiminden oluşan
araç etkinliği aşağıdaki gibi görünür:
request.vehicles[0].startLocation -> transitions[0] -> visits[0] ->
transitions[1] -> visits[1] -> transitions[2] -> ... -> visits[3] ->
transitions[4] -> request.vehicles[0].endLocation
Bir ShipmentRoute
, visits
ile karşılaştırıldığında her zaman bir tane daha fazla transitions
değerine sahiptir.
araç, başlangıç konumundan ilk ziyaretine kadar seyahat etmelidir
ve rotanın sonundaki son konumuna kadar
yol gösterir. Aracın başlangıç veya bitiş konumu yoksa yine de bir başlangıç noktası bulunur.
ilk veya son ziyaretin konumu şu olduğu için visits
ile kıyaslandığında daha fazla transitions
başlangıç veya varış konumu olarak kullanılır.
Bu örnekte, ilk üç teslim alma ziyaretinde geçişler vardır. Ayrıca mesafe ve süre sıfır çünkü üç teslim alma özelliği istekte aynı konumu paylaşması gerekir.
Daha fazla bilgi için ShipmentRoute
referans belgelerini (REST, gRPC) inceleyin
bolca fırsat sunuyor.
Basit ara nokta sırası optimizasyonu
Bu örnekte gösterildiği gibi, Rota Optimizasyonu, ziyaretleri
bağımsız bir kaynak olarak veya bağlantılı duraklar
olmayan bir şirket olarak
varlık. Ancak durakları veya ara noktaları kargo olarak göstermek mümkündür.
teslim alma veya teslimat olarak tam olarak bir VisitRequest
ile. Araç hâlâ
optimize edicinin kendisine bir costPerHour
veya costPerKilometer
atanmasını
(makul rota bulmaktan ziyade en uygun rota)