Method: projects.optimizeTours
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
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
'ye 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
URL, gRPC Kod Dönüştürme söz dizimini kullanır.
Yol parametreleri
Parametreler |
parent |
string
Zorunlu. Arama yapmak için projeyi veya konumu hedefleyin. Biçim: * projects/{project-id} * projects/{project-id}/locations/{location-id} Konum belirtilmezse otomatik olarak bir bölge seçilir.
|
İstek içeriği
İstek metni aşağıdaki yapıyla birlikte verileri içerir:
JSON gösterimi |
{
"timeout": string,
"model": {
object (ShipmentModel )
},
"solvingMode": enum (SolvingMode ),
"searchMode": enum (SearchMode ),
"injectedFirstSolutionRoutes": [
{
object (ShipmentRoute )
}
],
"injectedSolutionConstraint": {
object (InjectedSolutionConstraint )
},
"refreshDetailsRoutes": [
{
object (ShipmentRoute )
}
],
"interpretInjectedSolutionsUsingLabels": boolean,
"considerRoadTraffic": boolean,
"populatePolylines": boolean,
"populateTransitionPolylines": boolean,
"allowLargeDeadlineDespiteInterruptionRisk": boolean,
"useGeodesicDistances": boolean,
"label": string,
"geodesicMetersPerSecond": number,
"maxValidationErrors": integer
} |
Alanlar |
timeout |
string (Duration format)
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. "s " ile biten, en fazla dokuz kesir basamağı içeren, saniye cinsinden süre. Örnek: "3.5s" .
|
model |
object (ShipmentModel )
Çözülmesi gereken gönderim modeli.
|
solvingMode |
enum (SolvingMode )
Çözme modu varsayılan olarak DEFAULT_SOLVE (0) şeklindedir.
|
searchMode |
enum (SearchMode )
İsteği çözmek için kullanılan arama modu.
|
injectedFirstSolutionRoutes[] |
object (ShipmentRoute )
Önceki bir çözüme benzer ilk çözümü bulma konusunda optimizasyon algoritmasına rehberlik edin. Model, ilk çözüm oluşturulduğunda kısıtlanır. Bir rotada gerçekleştirilmeyen tüm gönderimler ilk çözümde dolaylı olarak atlanır ancak sonraki çözümlerde gerçekleştirilebilir. Çözüm, bazı temel geçerlilik varsayımlarını karşılamalıdır:
- tüm rotalar için
vehicleIndex aralık içinde olmalı ve kopya olmamalıdır.
- 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 ).
- Gönderim yalnızca izin verilen araçlarda yapılabilir.
Shipment.allowed_vehicle_indices boşsa veya vehicleIndex değeri Shipment.allowed_vehicle_indices içindeyse araca izin verilir.
avoidUTurns doğru değerine ayarlanırsa injectedSolutionLocationToken , alakalı ziyaretler için ayarlanmalıdır
Yerleştirilen çözüm uygulanabilir değilse doğrulama hatası her zaman döndürülmez ve bunun yerine uygulanabilir olmadığını belirten bir hata döndürülebilir.
|
injectedSolutionConstraint |
object (InjectedSolutionConstraint )
Önceki çö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.
|
refreshDetailsRoutes[] |
object (ShipmentRoute )
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 işlem, yalnızca boş olmayan rotaların çoklu çizgilerini dolduruyor ve populatePolylines değerinin doğru olmasını gerektiriyor. İletilen rotaların routePolyline alanları, transitions rotasıyla tutarlı olmayabilir. 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önderilerin veya araçların yoksayılıp sayılmadığından bağımsız olarak, boş olmayan tüm rotalardaki tüm ziyaretler arasında çoklu çizgiler doldurulmaya devam eder.
|
interpretInjectedSolutionsUsingLabels |
boolean
Eğer doğruysa:
Bu yorum injectedFirstSolutionRoutes , injectedSolutionConstraint ve refreshDetailsRoutes alanları için geçerlidir. Çözüm oluşturulduktan sonra talepteki gönderim veya araç endeksleri değiştiğinde (talepten gönderilerin ya da araçların çıkarılması veya eklenmesi gibi) kullanılabilir. Bu değer doğruysa aşağıdaki kategorilerdeki etiketler kategorilerinde en fazla bir kez görünmelidir:
Enjekte edilen çözümdeki bir vehicleLabel , istek aracına karşılık gelmiyorsa ilgili rota, ziyaretleriyle birlikte çözümden kaldırılır. Enjekte edilen çözümdeki bir shipmentLabel , 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.
|
considerRoadTraffic |
boolean
Transition.travel_duration , Visit.start_time ve vehicleEndTime ShipmentRoute alanlarını hesaplarken, ShipmentRoute.has_traffic_infeasibilities alanını ayarlarken ve OptimizeToursResponse.total_cost alanını hesaplarken trafik tahminini göz önünde bulundurun.
|
populatePolylines |
boolean
Doğru ise yanıt ShipmentRoute 'lerine çoklu çizgiler doldurulur.
|
populateTransitionPolylines |
boolean
Doğru ise ShipmentRoute.transitions yanıtında çoklu çizgiler doldurulur.
|
allowLargeDeadlineDespiteInterruptionRisk |
boolean
Bu ayarlanırsa isteğin son tarihi 60 dakikadır (bkz. https://grpc.io/blog/deadlines). Aksi takdirde, maksimum son tarih yalnızca 30 dakikadır. Uzun ömürlü isteklerin kesinti riskinin önemli ölçüde daha yüksek (ancak yine de küçük) 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.
|
label |
string
Bu isteği tanımlamak için kullanılabilecek etiket. OptimizeToursResponse.request_label içinde bildirilir.
|
geodesicMetersPerSecond |
number
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.
|
maxValidationErrors |
integer
Döndürülen doğrulama hatası sayısını kısaltır. Bu hatalar genellikle bir INVALID_STATUS hata yüküne BadRequest hata ayrıntısı olarak eklenir (https://cloud.google.com/apis/design/errors#error_details). ÇözmeMode=VALIDATE_ONLY: OptimizeToursResponse.validation_errors alanına bakın. Bu değer varsayılan olarak 100'dür ve 10.000 ile sınırlıdır.
|
Yanıt gövdesi
Başarılıysa yanıt metni, OptimizeToursResponse
öğesinin bir örneğini içerir.
Yetkilendirme kapsamları
Aşağıdaki OAuth kapsamını gerektirir:
https://www.googleapis.com/auth/cloud-platform
IAM İzinleri
parent
kaynağında aşağıdaki IAM izni gerekir:
routeoptimization.locations.use
Daha fazla bilgi için IAM belgelerini inceleyin.
Aksi belirtilmediği sürece bu sayfanın içeriği Creative Commons Atıf 4.0 Lisansı altında ve kod örnekleri Apache 2.0 Lisansı altında lisanslanmıştır. Ayrıntılı bilgi için Google Developers Site Politikaları'na göz atın. Java, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-08-29 UTC.
[[["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-29 UTC."],[[["\u003cp\u003eThis API optimizes delivery routes by sending an \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e with a \u003ccode\u003eShipmentModel\u003c/code\u003e, and it returns an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e that includes \u003ccode\u003eShipmentRoute\u003c/code\u003es, which outline the routes for vehicles to minimize cost.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eShipmentModel\u003c/code\u003e includes \u003ccode\u003eShipment\u003c/code\u003es that require transport and \u003ccode\u003eVehicle\u003c/code\u003es available for use, with the goal being to assign \u003ccode\u003eShipmentRoute\u003c/code\u003es to \u003ccode\u003eVehicle\u003c/code\u003es efficiently to reduce overall cost.\u003c/p\u003e\n"],["\u003cp\u003eThe HTTP request uses a \u003ccode\u003ePOST\u003c/code\u003e method to the \u003ccode\u003ehttps://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours\u003c/code\u003e endpoint, utilizing gRPC Transcoding syntax, and requiring the \u003ccode\u003eparent\u003c/code\u003e parameter to specify the project or location.\u003c/p\u003e\n"],["\u003cp\u003eThe request body includes fields such as \u003ccode\u003etimeout\u003c/code\u003e, \u003ccode\u003emodel\u003c/code\u003e, \u003ccode\u003esolvingMode\u003c/code\u003e, and \u003ccode\u003esearchMode\u003c/code\u003e, allowing for customization of the optimization process, and other parameters related to route details, and injected solutions.\u003c/p\u003e\n"],["\u003cp\u003eThe API requires the \u003ccode\u003ehttps://www.googleapis.com/auth/cloud-platform\u003c/code\u003e OAuth scope and the \u003ccode\u003erouteoptimization.locations.use\u003c/code\u003e IAM permission on the parent resource for authorization.\u003c/p\u003e\n"]]],[],null,[]]