Bir ShipmentModel içeren bir OptimizeToursRequest gönderir ve toplam maliyeti en aza indirecek şekilde araçlar tarafından gerçekleştirilecek bir rota grubu olan ShipmentRoute içeren bir OptimizeToursResponse döndürür.
ShipmentModel modeli, temel olarak yapılması gereken Shipment'lerden ve Shipment'leri taşımak için kullanılabilecek Vehicle'lerden oluşur. ShipmentRoute öğeleri, Shipment öğelerini Vehicle öğelerine atar. Daha ayrıntılı olarak belirtmek gerekirse, her araca bir dizi Visit atanır. Bu Visit, bir Shipment için teslimat veya teslim alma işlemi olan bir VisitRequest'a karşılık gelir.
Amaç, ShipmentModel içinde tanımlanan birçok bileşenin maliyet olduğu durumlarda toplam maliyeti en aza indirecek biçimde Vehicle öğelerine ShipmentRoute atanmasını sağlamaktır.
HTTP isteği
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours
Bu zaman aşımı ayarlanırsa sunucu, zaman aşımı süresi dolmadan veya eşzamanlı isteklerin sunucu için son tarihi dolmadan önce (hangisi önceyse) bir yanıt döndürür.
Asenkron istekler için sunucu, zaman aşımı dolmadan önce (mümkünse) bir çözüm oluşturur.
En fazla dokuz kesir basamağı olan ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".
Önceki bir çözüme benzer ilk çözümü bulma konusunda optimizasyon algoritmasına rehberlik edin.
İlk çözüm oluşturulduğunda model kısıtlanır. Bir rota üzerinde gerçekleştirilmeyen tüm sevkiyatlar, ilk çözümde dolaylı olarak atlanır, ancak birbirini izleyen çözümlerde kullanılabilir.
Çözüm, bazı temel geçerlilik varsayımlarını karşılamalıdır:
tüm rotalar için, vehicleIndex aralık dahilinde olmalı ve yinelenmemelidir.
tüm ziyaretler için shipmentIndex ve visitRequestIndex aralık dahilinde olmalıdır.
Kargo yalnızca bir rotada referans verilebilir.
Alım ve teslimat işleminin yapıldığı gönderimlerde teslimat öncesinde teslim alma işlemi yapılmalıdır.
bir kargo için en fazla bir teslim alma veya teslimat alternatifi gerçekleştirilemez.
tüm rotalar için süre artıyor (ör. vehicleStartTime
<= visits[0].start_time <= visits[1].start_time ...
<= vehicleEndTime).
Önceki bir çözüme benzer nihai bir çözüm bulmak için optimizasyon algoritmasını kısıtlayın. Örneğin bu, tamamlanmış veya tamamlanmak üzere olan ancak değiştirilmemesi gereken rota bölümlerini dondurmak için kullanılabilir.
Enjekte edilen çözüm uygun değilse doğrulama hatası döndürülmeyebilir ve bunun yerine uygun olmadığını belirten bir hata döndürülebilir.
Boş olmayan rotalar, temel ziyaret sıraları veya seyahat süreleri değiştirilmeden yenilenir, yalnızca diğer ayrıntılar güncellenir. Bu işlem, modeli çözmez.
2020/11 itibarıyla, bu yalnızca boş olmayan rotaların çoklu çizgilerini dolduruyor ve populatePolylines değerinin doğru olmasını gerektiriyor.
Bu alan, injectedFirstSolutionRoutes veya injectedSolutionConstraint ile birlikte kullanılmamalıdır.
Shipment.ignore ve Vehicle.ignore'un davranış üzerinde herhangi bir etkisi yoktur. İlgili gönderimlerin veya araçların yoksayılıp yoksayılmamasına bakılmaksızın, boş olmayan tüm rotalardaki tüm ziyaretler arasında çoklu çizgiler doldurulur.
Bu yorum injectedFirstSolutionRoutes, injectedSolutionConstraint ve refreshDetailsRoutes alanları için geçerlidir. Çözüm oluşturulduktan sonra istekteki gönderi veya araç dizinleri değiştiğinde (ör. gönderi veya araçlar istekten kaldırıldığı veya isteğe eklendiği için) kullanılabilir.
Bu değer doğruysa aşağıdaki kategorilerdeki etiketler kategorilerinde en fazla bir kez görünmelidir:
Enjekte edilen çözümdeki vehicleLabel bir istek aracına karşılık gelmiyorsa ilgili rota, ziyaretleriyle birlikte çözümden kaldırılır. Yerleştirilen çözümdeki bir shipmentLabel, bir istek gönderimine karşılık gelmiyorsa ilgili ziyaret çözümden kaldırılır. Yerleştirilen çözümdeki bir SkippedShipment.label, istek gönderimine karşılık gelmiyorsa SkippedShipment çözümden kaldırılır.
Rota ziyaretlerinin veya rotaların tamamının enjekte edilmiş bir çözümden kaldırılması, ima edilen kısıtlamaları etkileyebilir. Bu da çözümde değişikliğe, doğrulama hatalarına veya uygulanamazlığa neden olabilir.
NOT: Arayan, her Vehicle.label (veya Shipment.label), ilgili iki istekte kullanılan bir araç (veya gönderi) öğesini benzersiz şekilde tanımlar: Enjekte edilen çözümde kullanılan OptimizeToursResponse öğesini oluşturan geçmiş istek ve enjekte edilen çözümü içeren mevcut istek. Yukarıda açıklanan benzersizlik kontrolleri, bu koşulu garanti etmek için yeterli değildir.
Doğru ise yanıt ShipmentRoute'lerine çoklu çizgiler doldurulur.
populateTransitionPolylines
boolean
Doğru değerine ayarlanırsa ShipmentRoute.transitions yanıtında çoklu çizgiler ve rota jetonları doldurulur.
allowLargeDeadlineDespiteInterruptionRisk
boolean
Bu ayar belirlenirse istek için 60 dakikaya kadar son tarih (https://grpc.io/blog/deadlines adresine bakın) belirlenebilir. Aksi takdirde, maksimum son tarih yalnızca 30 dakikadır. Uzun süreli isteklerin çok daha büyük (ancak yine de küçük) kesinti riskinin olduğunu unutmayın.
useGeodesicDistances
boolean
Doğru değerine ayarlanırsa seyahat mesafeleri, Google Haritalar'daki mesafeler yerine jeodezik mesafeler kullanılarak, seyahat süreleri ise geodesicMetersPerSecond tarafından tanımlanan hıza sahip jeodezik mesafeler kullanılarak hesaplanır.
useGeodesicDistances doğru olduğunda bu alan ayarlanmalıdır ve seyahat sürelerini hesaplamak için uygulanan hızı tanımlar. Değeri en az 1,0 metre/saniye olmalıdır.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-08-31 UTC."],[[["\u003cp\u003eThe Route Optimization API minimizes the total cost of routes by assigning \u003ccode\u003eShipmentRoute\u003c/code\u003es to \u003ccode\u003eVehicle\u003c/code\u003es.\u003c/p\u003e\n"],["\u003cp\u003eThe API takes an \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e with a \u003ccode\u003eShipmentModel\u003c/code\u003e and returns an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e with \u003ccode\u003eShipmentRoute\u003c/code\u003es.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eShipmentModel\u003c/code\u003e defines the \u003ccode\u003eShipment\u003c/code\u003es to be transported, the \u003ccode\u003eVehicle\u003c/code\u003es available, and the cost components.\u003c/p\u003e\n"],["\u003cp\u003eThe API considers various factors, including traffic, time windows, and vehicle capacities, to optimize the routes.\u003c/p\u003e\n"],["\u003cp\u003eAuthorization is required using OAuth scope \u003ccode\u003ehttps://www.googleapis.com/auth/cloud-platform\u003c/code\u003e and IAM permission \u003ccode\u003erouteoptimization.locations.use\u003c/code\u003e.\u003c/p\u003e\n"]]],["This content details the `OptimizeTours` API, which optimizes routes for shipments using vehicles. The core action involves sending a `POST` request to `https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours`, specifying a `ShipmentModel` within the request body. This model defines shipments, vehicles, and cost parameters. The API returns an `OptimizeToursResponse` that details `ShipmentRoute`s, assigning visits to each vehicle to minimize costs. The request body allows for parameters like `timeout`, `solvingMode`, and `injectedSolutionConstraint` to further fine-tune the route optimization process.\n"],null,[]]