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ığında 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.
İstek, araca ve gönderimlere ek olarak aşağıdaki alanları içerir:
Ç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. Rota Optimizasyonu tarafından hesaplanan yolları görselleştirmek için Etkileşimli Poli Çizgi Kodlayıcı Yardımcı Programı'nı kullanabilirsiniz. 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 saatlik döneme ayarlanmıştır. 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.
waypoint
, latLng
'e alternatif olarak da kullanılabilir.
Waypoint
alanları, LatLng
yerine Google Yer Kimliklerinin kullanımını destekliyor.
araç başlıkları da belirtebilir. Daha fazla bilgi için referans dokümanlarına (REST, gRPC) bakın.
Ö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, gönderimlerin yakınlığı ve geniş küresel zaman aralığı göz önüne alındığında başlangıç ve bitiş zamanları çok gevşek bir kısıtlamadır.
- Tüm gönderimlerin tamamlanması gerekir.
shipments
'te ceza maliyetleri belirtilmediğinde varsayılan davranış budur. 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. Bu kılavuzdaki örnek istekte yalnızca bir araç belirtildiğinden routes
, bir ShipmentRoute
mesajı içerir.
ShipmentRoute
tesis
ShipmentRoute
mesaj türü için en önemli iki özellik visits
ve transitions
'tir.
Her Visit
, aşağıdakilerden 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 araç etkinliği ilerleyişine göre birleştirilmesi 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 gönderimlerin özellikleri olarak modeller ve bağımsız bir öğe olarak yol işaretleri veya durak kavramına sahip değildir. 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)