Method: projects.locations.optimizeTours

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, Shipment'leri Vehicle'lere 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ç, maliyetin ShipmentModel içinde tanımlanmış birçok bileşene sahip olduğu toplam maliyeti en aza indiren bir ShipmentRoute'lerin Vehicle'lere 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 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.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

model

object (ShipmentModel)

Çözülecek gönderim modeli.

solvingMode

enum (SolvingMode)

Çözüm 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.

İlk çözüm oluşturulduğunda model 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 kopyalanmamalıdır.
  • tüm ziyaretler için shipmentIndex ve visitRequestIndex aralıkta 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 gönderim için en fazla bir teslim alma veya teslimat alternatifi gerçekleştirilebilir.
  • tüm rotalar için süreler artıyor (ör. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • Gönderim yalnızca izin verilen bir araçta yapılabilir. Shipment.allowed_vehicle_indices boşsa veya vehicleIndex değeri Shipment.allowed_vehicle_indices içindeyse araca izin verilir.

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.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

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

Enjekte edilen çözüm uygulanabilir değilse doğrulama hatası döndürülmeyebilir ve bunun yerine uygulanabilir 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 işlev 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 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ö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.

interpretInjectedSolutionsUsingLabels

boolean

Doğruysa:

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 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. Enjekte edilen çö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

ShipmentRoute alanları Transition.travel_duration, Visit.start_time ve vehicleEndTime'i 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 ve rota jetonları doldurulur.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Bu ayar belirlenirse istek için 60 dakikaya kadar bir 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 kesinti riskinin önemli ölçüde daha yüksek (ancak yine de küçü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 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, 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 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.