Method: projects.locations.optimizeTours

ShipmentModel içeren bir OptimizeToursRequest gönderir ve ShipmentRoute içeren bir OptimizeToursResponse döndürür. Bunlar, araçlar tarafından toplam maliyeti en aza indiren rota grubudur.

ShipmentModel modeli, esas olarak gerçekleştirilmesi gereken Shipment öğeleri ve Shipment öğelerini taşımak için kullanılabilecek Vehicle öğelerinden 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/*/locations/*}: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 bölge otomatik olarak seçilir.

İstek içeriği

İstek gövdesi, aşağıdaki yapıya sahip 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.

Eşzamansız istekler için sunucu, zaman aşımı dolmadan önce bir çözüm (mümkünse) oluşturur.

En fazla dokuz kesir basamağı olan ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

model

object (ShipmentModel)

Çözülecek 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 çö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 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.
  • bir gönderime yalnızca bir rotada referans verilebilir.
  • Teslim alınacak kargonun teslim alınması, teslimattan önce 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) bilgileri gösterilir.
  • Gönderim yalnızca izin verilen araçlarda yapılabilir. Shipment.allowed_vehicle_indices boşsa veya vehicleIndex özelliği Shipment.allowed_vehicle_indices içinde bulunuyorsa araca izin verilir.

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ş değilse belirli rotalar, temel ziyaret sırası 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.

Geçilen 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 öğelerinin 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.

Doğru değerine ayarlanırsa 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. Yerleştirilen çözümdeki bir shipmentLabel, bir istek gönderimine karşılık gelmiyorsa ilgili ziyaret çözümden kaldırılır. Enjekte edilen çözümdeki bir SkippedShipment.label, istek gönderimine karşılık gelmiyorsa SkippedShipment çözümden kaldırılır.

Yerleştirilen bir çözümden rota ziyaretlerini veya rotaların tamamını kaldırmak, ima edilen kısıtlamaları etkileyebilir ve bu da çözümde, doğrulama hatalarında veya uygulanabilirlikte değişikliğe yol açabilir.

NOT: Arayan, her Vehicle.label (veya Shipment.label), iki ilgili istekte kullanılan araç (resp. sevkiyat) tüzel kişiliğini benzersiz bir şekilde tanımlar: enjekte edilen çözümde kullanılan OptimizeToursResponse öğesini üreten geçmiş istek ve eklenen çö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 trafik tahminini göz önünde bulundurun; ShipmentRoute.has_traffic_infeasibilities alanının ayarlanmasında ve OptimizeToursResponse.total_cost alanının hesaplanmasında kullanılır.

populatePolylines

boolean

Doğru değerine ayarlanırsa yanıt ShipmentRoute'lerinde çoklu çizgiler doldurulur.

populateTransitionPolylines

boolean

Doğru değerine ayarlanırsa 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 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 ve seyahat süreleri, 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) bildirilmiştir.

geodesicMetersPerSecond

number

useGeodesicDistances Doğru değerine ayarlandığında 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 hatalarının sayısını kısaltır. Bu hatalar genellikle BadRequest hata ayrıntısı (https://cloud.google.com/apis/design/errors#error_details) olarak bir INVALID_CHANGES hata yüküne eklenir. ÇözmeMode=TRUEATE_ONLY: OptimizeToursResponse.validation_errors alanına bakın. Bu değer varsayılan olarak 100'e ayarlanır ve üst sınır 10.000'dir.

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

  • routeoptimization.locations.use

Daha fazla bilgi için IAM belgelerini inceleyin.