Method: projects.optimizeTours

OptimizeToursRequest içeren bir ShipmentModel gönderir ve ShipmentRoute içeren bir OptimizeToursResponse döndürür. ShipmentRoute, genel maliyeti en aza indirmek için araçlar tarafından gerçekleştirilecek bir dizi rotadır.

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

Amaç, maliyetin ShipmentModel içinde tanımlanan birçok bileşeni olduğu durumlarda toplam maliyeti en aza indiren ShipmentRoute'ların Vehicle'lara 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 hedef proje veya konum.

Biçim:

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

Konum belirtilmemişse 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) bir yanıt döndürür.

Asenkron isteklerde sunucu, zaman aşımı süresi 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)

Varsayılan olarak, çözüm modu DEFAULT_SOLVE (0) olur.

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.

Model, ilk çözüm oluşturulduğunda 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 bir rotada referans verilebilir.
  • Teslim alma-teslimat gönderisinin teslim alınması, teslimattan önce yapılmalıdır.
  • Bir gönderinin birden fazla teslim alma veya teslimat alternatifi gerçekleştirilemez.
  • Tüm rotalarda süreler artıyor (ör. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • Yalnızca izin verilen bir araçta gönderim yapılabilir. Shipment.allowed_vehicle_indices boşsa veya vehicleIndex değeri 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 ve bunun yerine uygun olmadığını 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, tamamlanmış veya tamamlanacak ancak değiştirilmemesi gereken rota bölümlerini dondurmak için kullanılabilir.

Yerleştirilen çö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 verilen rotalar, ziyaretlerin veya seyahat sürelerinin temel sırası 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 çizgisini 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 herhangi bir etkiye sahip değildir. İlgili gönderiler veya araçlar yoksayılsa da çoklu çizgiler, boş olmayan tüm rotalardaki tüm ziyaretler arasında 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 kargo veya araç indeksleri değiştiyse (ör. kargo 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üme eklenen 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ümden kaldırılır. Yerleştirilen çözümdeki bir SkippedShipment.label, gönderi isteğine karşılık gelmiyorsa SkippedShipment çözüme eklenmez.

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) öğesini benzersiz şekilde tanımlar: Enjekte edilen çözümde kullanılan OptimizeToursResponse öğesini üreten 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, 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 dikkate alın.

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 BadRequest hata ayrıntısı (https://cloud.google.com/apis/design/errors#error_details) olarak bir INVALID_ARGUMENT hata yüküne eklenir. Ancak solvingMode=VALIDATE_ONLY ise 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.