Method: projects.locations.optimizeTours

ShipmentModel içeren bir OptimizeToursRequest gönderir ve ShipmentRoute'ler içeren bir OptimizeToursResponse döndürür. Bunlar, araçların toplam maliyeti en aza indirmek için izleyeceği bir dizi rotadır.

ShipmentModel modeli temel olarak, gerçekleştirilmesi gereken Shipmentlardan ve Shipmentları taşımak için kullanılabilecek Vehiclelardan oluşur. ShipmentRoute, Vehicle için Shipment atar. Daha açık belirtmek gerekirse her araca bir dizi Visit atarlar. Burada bir Visit, bir Shipment için teslim alma veya teslimat olan bir VisitRequest değerine karşılık gelir.

Amaç, ShipmentRoute'leri Vehicle'lere atayarak toplam maliyeti en aza indirmektir. Maliyet, ShipmentModel içinde tanımlanan birçok bileşenden oluşur.

HTTP isteği

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours

URL, gRPC Kod Dönüştürme söz dizimini kullanır.

Yol parametreleri

Parametreler
parent

string

Zorunlu. Arama yapmak için hedef projeyi veya konumu seçin.

Biçim:

  • projects/{project-id}
  • projects/{project-id}/locations/-

Bölgesel {location-id} değerleri desteklenmez.

İstek metni

İstek içeriği 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 senkronize istekler için sunucu son tarihine ulaşılmadan önce (hangisi daha önce gerçekleşirse) bir yanıt döndürür.

Asenkron isteklerde sunucu, zaman aşımı süresi dolmadan önce bir çözüm üretir (mümkünse).

model

object (ShipmentModel)

Çözülecek gönderi modeli.

solvingMode

enum (SolvingMode)

Varsayılan olarak, çözme modu DEFAULT_SOLVE (0) şeklindedir.

searchMode

enum (SearchMode)

İsteği çözmek için kullanılan arama modu.

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Optimizasyon algoritmasını, önceki bir çözüme benzer bir ilk çözüm bulmaya yönlendirin.

İlk çözüm oluşturulduğunda model kısıtlanır. Bir rotada gerçekleştirilmeyen gönderiler, 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ıkta olmalı ve yinelenmemelidir.
  • Tüm ziyaretler için shipmentIndex ve visitRequestIndex aralıkta olmalıdır.
  • Bir gönderiye yalnızca bir rotada referans verilebilir.
  • Teslim alma-teslimat gönderisinin teslim alınması, teslimattan önce gerçekleştirilmelidir.
  • Bir gönderinin birden fazla teslim alma alternatifi veya teslimat alternatifi gerçekleştirilemez.
  • Tüm rotalarda süreler artıyorsa (ör. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • Gönderim yalnızca izin verilen bir araçla yapılabilir. Shipment.allowed_vehicle_indices boşsa veya vehicleIndex, Shipment.allowed_vehicle_indices içinde yer alıyorsa araca izin verilir.

Eklenen çözüm uygun değilse doğrulama hatası döndürülmeyebilir ve bunun yerine uygunsuzluğu belirten bir hata döndürülebilir.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Optimizasyon algoritmasını, önceki bir çözüme benzer nihai bir çözüm bulacak şekilde kısıtlayın. Örneğin, bu özellik, rotaların tamamlanmış veya tamamlanacak ancak değiştirilmemesi gereken kısımlarını dondurmak için kullanılabilir.

Eklenen çözüm uygun değilse doğrulama hatası döndürülmeyebilir ve bunun yerine uygunsuzluğu belirten bir hata döndürülebilir.

refreshDetailsRoutes[]

object (ShipmentRoute)

Boş değilse verilen 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.

Kasım 2020 itibarıyla bu, yalnızca boş olmayan rotaların çoklu çizgilerini doldurur ve populatePolylines değerinin doğru olmasını gerektirir.

İletilen rotaların routePolyline alanları, transitions rotasıyla tutarsız olabilir.

Bu alan, injectedFirstSolutionRoutes veya injectedSolutionConstraint ile birlikte kullanılmamalıdır.

Shipment.ignore ve Vehicle.ignore, davranış üzerinde etkili değildir. İlgili gönderilerin veya araçların yoksayılıp yoksayılmadığına bakılmaksızın, boş olmayan tüm rotalardaki tüm ziyaretler arasında çoklu çizgiler doldurulmaya devam eder.

interpretInjectedSolutionsUsingLabels

boolean

Doğruysa:

Bu yorumlama injectedFirstSolutionRoutes, injectedSolutionConstraint ve refreshDetailsRoutes alanları için geçerlidir. İstekteki gönderi veya araç dizinleri, çözüm oluşturulduktan sonra değiştiğinde (ör. gönderiler veya araçlar istekten kaldırıldığında ya da isteğe eklendiğinde) kullanılabilir.

True (doğru) ise aşağıdaki kategorilerdeki etiketler, kendi kategorilerinde en fazla bir kez görünmelidir:

Eklenen çözümdeki bir vehicleLabel, istek aracına karşılık gelmiyorsa ilgili rota, ziyaretleriyle birlikte çözümden kaldırılır. Eklenen çözümdeki bir shipmentLabel, istek gönderimiyle eşleşmiyorsa ilgili ziyaret çözümden kaldırılır. Eklenen çözümdeki bir SkippedShipment.label, istek gönderimiyle eşleşmiyorsa SkippedShipment çözümden kaldırılır.

Rota ziyaretlerini veya tüm rotaları eklenen bir çözümden kaldırmak, örtük kısıtlamaları etkileyebilir. Bu da çözümde değişikliğe, doğrulama hatalarına veya uygulanamazlığa yol açabilir.

NOT: Çağrıyı yapan taraf, her Vehicle.label (veya ) için Shipment.label), iki alakalı istekte kullanılan bir araç (veya gönderi) öğesini benzersiz şekilde tanımlar: eklenen çözümde kullanılan OptimizeToursResponse değerini üreten geçmiş istek ve eklenen çözümü içeren mevcut istek. Yukarıda açıklanan benzersizlik kontrolleri, bu şartın karşılanmasını garanti etmek için yeterli değildir.

considerRoadTraffic

boolean

ShipmentRoute alanları Transition.travel_duration, Visit.start_time ve vehicleEndTime hesaplanırken, ShipmentRoute.has_traffic_infeasibilities alanı ayarlanırken ve OptimizeToursResponse.total_cost alanı hesaplanırken trafik tahmini dikkate alınır.

populatePolylines

boolean

Doğru ise yanıtlarda çoklu çizgiler doldurulur ShipmentRoute.

populateTransitionPolylines

boolean

Doğru ise yanıtta çoklu çizgiler ve rota jetonları doldurulur ShipmentRoute.transitions.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Bu ayar belirlenirse isteğin son tarihi (https://grpc.io/blog/deadlines adresine bakın) 60 dakikaya kadar olabilir. Aksi takdirde, maksimum süre yalnızca 30 dakikadır. Uzun süreli isteklerin kesintiye uğrama riskinin çok daha yüksek (ancak yine de düşük) olduğunu unutmayın.

useGeodesicDistances

boolean

Doğru ise seyahat mesafeleri Google Haritalar mesafeleri yerine jeodezik mesafeler kullanılarak hesaplanır ve seyahat süreleri, geodesicMetersPerSecond tarafından tanımlanan bir hızla jeodezik mesafeler kullanılarak hesaplanır.

label

string

Bu isteği tanımlamak için kullanılabilecek etiket, OptimizeToursResponse.request_label içinde raporlanır.

geodesicMetersPerSecond

number

useGeodesicDistances true olduğunda bu alanın ayarlanması gerekir 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 hatalarının sayısını kısaltır. Bu hatalar, solvingMode=VALIDATE_ONLY olmadığı sürece genellikle INVALID_ARGUMENT hata yüküne BadRequest hata ayrıntısı (https://cloud.google.com/apis/design/errors#error_details) olarak eklenir: 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 metni

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 iznini gerektirir:

  • routeoptimization.locations.use

Daha fazla bilgi için IAM belgelerini inceleyin.