Method: projects.locations.optimizeTours

ShipmentModel içeren bir OptimizeToursRequest gönderir ve ShipmentRoute içeren bir OptimizeToursResponse döndürür. ShipmentRoute, araçlar tarafından gerçekleştirilecek ve genel maliyeti en aza indirecek bir rota kümesidir.

Bir ShipmentModel modeli temel olarak, gerçekleştirilmesi gereken Shipment ve Shipment'ları taşımak için kullanılabilecek Vehicle'lardan oluşur. ShipmentRoute, Shipment'yi Vehicle'ye atar. Daha net bir ifadeyle, her araca bir dizi Visit atarlar. Burada Visit, VisitRequest'ye karşılık gelir. VisitRequest ise Shipment için teslim alma veya teslimat anlamına gelir.

Amaç, maliyetin ShipmentModel içinde tanımlanan birçok bileşeni olduğu durumlarda toplam maliyeti en aza indiren bir ShipmentRoute-Vehicle ataması 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 hedef projeyi veya konumu seçin.

Biçim:

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

Konum belirtilmezse otomatik olarak bir bölge seçilir.

İ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 senkron istekler için sunucu son tarihine ulaşılmadan önce (hangisi daha önceyse) yanıt döndürür.

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

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)

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

İlk çözüm oluşturulduğunda model kısıtlanır. Bir rota üzerinde gerçekleştirilmeyen gönderiler, ilk çözümde örtülü 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 değerleri aralıkta olmalıdır.
  • Bir gönderiye yalnızca tek bir rotada referans verilebilir.
  • Teslim alma-teslimat gönderisinin teslim alınması, teslimattan önce yapılmalıdır.
  • Bir gönderinin teslim alınması veya teslim edilmesi için birden fazla alternatif işlem yapılamaz.
  • Tüm rotalarda süreler artıyor (ör. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • Yalnızca izin verilen bir araçla gönderim yapılabilir. Shipment.allowed_vehicle_indices boşsa veya vehicleIndex, Shipment.allowed_vehicle_indices içinde yer alıyorsa araca izin verilir.

Yerleştirilen çözüm uygun değilse doğrulama hatası döndürülmeyebilir. Bunun yerine, uygun olmadığını belirten bir hata döndürülebilir.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Optimizasyon algoritmasını, önceki çözüme benzer bir nihai çözüm bulacak şekilde 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.

Yerleştirilen çözüm uygun değilse doğrulama hatası döndürülmeyebilir. Bunun yerine, uygun olmadığını belirten bir hata döndürülebilir.

refreshDetailsRoutes[]

object (ShipmentRoute)

Boş değilse verilen rotalar, ziyaretlerin veya seyahat sürelerinin temel sırası değiştirilmeden yenilenir: yalnızca diğer ayrıntılar güncellenir. Bu, modeli çözmez.

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

Gönderilen 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önderiler veya araçlar 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 yorum, injectedFirstSolutionRoutes, injectedSolutionConstraint ve refreshDetailsRoutes alanları için geçerlidir. İstek oluşturulduktan sonra çözüme dahil edilen gönderi veya araç indeksleri değiştiyse (ör. gönderiler veya araçlar istekten kaldırıldıysa ya da isteğe eklendiyse) kullanılabilir.

Doğruysa aşağıdaki kategorilerdeki etiketler, kategorilerinde en fazla bir kez görünmelidir:

Enjekte edilen çözümdeki bir vehicleLabel, talep edilen bir araçla eşleşmiyorsa ilgili rota, ziyaretleriyle birlikte çözümden kaldırılır. Yerleştirilen çözümdeki bir shipmentLabel, istenen bir gönderime karşılık gelmiyorsa ilgili ziyaret çözüme dahil edilmez. Yerleştirilen çözümdeki bir SkippedShipment.label, talep edilen bir gönderime karşılık gelmiyorsa SkippedShipment çözüme dahil edilmez.

Enjekte edilen bir çözümden rota ziyaretlerinin veya rotaların tamamının kaldırılması, dolaylı kısıtlamaları etkileyebilir. Bu durum, çözümde değişikliğe, doğrulama hatalarına veya uygulanabilirliğin ortadan kalkmasına neden olabilir.

NOT: Arayan, her Vehicle.label (sırasıyla Shipment.label), iki ilgili istekte kullanılan bir araç (veya gönderi) varlığını benzersiz şekilde tanımlar: yerleştirilen çözümde kullanılan OptimizeToursResponse öğesini üreten geçmiş istek ve yerleştirilen çözümü içeren mevcut istek. Yukarıda açıklanan benzersizlik kontrolleri, bu koşulun karşılanmasını garanti etmek için yeterli değildir.

considerRoadTraffic

boolean

ShipmentRoute, Transition.travel_duration, Visit.start_time ve vehicleEndTime 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ğruysa yanıtlarda çoklu çizgiler doldurulur ShipmentRoute.

populateTransitionPolylines

boolean

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

allowLargeDeadlineDespiteInterruptionRisk

boolean

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

useGeodesicDistances

boolean

Doğruysa seyahat mesafeleri Google Haritalar mesafeleri yerine jeodezik mesafeler kullanılarak, seyahat süreleri ise 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, OptimizeToursResponse.request_label içinde bildirilen etiket.

geodesicMetersPerSecond

number

useGeodesicDistances doğru olduğunda bu alan ayarlanmalı ve seyahat sürelerini hesaplamak için uygulanan hızı tanımlamalıdır. 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 INVALID_ARGUMENT hata yüküne BadRequest hata ayrıntısı (https://cloud.google.com/apis/design/errors#error_details) olarak eklenir. Ancak solvingMode=VALIDATE_ONLY ise OptimizeToursResponse.validation_errors alanına bakın. Varsayılan değer 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 izni gerekir:

  • routeoptimization.locations.use

Daha fazla bilgi için IAM belgelerine bakın.