Method: projects.optimizeTours

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

ShipmentModel modeli, temel olarak uygulanması gereken Shipment adımlarından ve Shipment öğelerini taşımak için kullanılabilen Vehicle öğelerinden oluşur. ShipmentRoute öğeleri, Shipment öğelerini Vehicle öğelerine atar. Daha ayrıntılı belirtmek gerekirse her araca bir Visit serisi atarlar. Burada Visit, Shipment için teslim alma veya teslimat anlamına gelen VisitRequest değerine karşılık gelir.

Amaç, maliyetin ShipmentModel içinde birçok bileşeni olduğu durumlarda toplam maliyeti en aza indiren Vehicle öğelerine ShipmentRoute ataması 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 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

İsteğin gövdesi, aşağıdaki yapıya sahip veriler 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, zaman aşımı süresi dolmadan veya eşzamanlı istekler için sunucu son tarihine (hangisi daha önceyse) ulaşılmadan sunucu bir yanıt döndürür.

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

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

model

object (ShipmentModel)

Çözülmesi gereken gönderim 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)

Önceki çözüme benzer ilk çözümü bulması için optimizasyon algoritmasına rehberlik etme.

İlk çözüm oluşturulduğunda model kısıtlanır. Bir rotada gerçekleştirilmeyen tüm gönderimler ilk çözümde örtülü olarak atlanır, ancak ardışık çözümlerde gerçekleştirilebilir.

Çözüm, geçerliliğiyle ilgili bazı temel varsayımları karşılamalıdır:

  • vehicleIndex, tüm rotalar için kapsama alanında olmalı ve yinelenmemelidir.
  • shipmentIndex ve visitRequestIndex aralık dahilinde olmalıdır.
  • Bir gönderiye yalnızca tek bir rotada referans verilebilir.
  • gel-al gönderimin teslim alınması teslimattan önce gerçekleştirilmelidir.
  • bir gönderim için en fazla bir teslim alma veya teslimat alternatifi gerçekleştirilemez.
  • tüm rotalarda, süreler artmaktadır (yani, vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • Gönderim yalnızca izin verilen bir araç üzerinde gerçekleştirilebilir. 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 uygulanabilir olmadığını belirten bir hata döndürülebilir.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Önceki çözüme benzer nihai çözüm bulmak için optimizasyon algoritmasının kısıtlanmasını sağlar. Örneğin, hâlihazırda tamamlanan ya da tamamlanmak üzere olan ancak değiştirilmemesi gereken güzergahların bölümlerini dondurmak için kullanılabilir.

Eklenen çözüm uygun 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ş bırakılmamışsa belirtilen rotalar, temel ziyaret veya seyahat süresi 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 işlem yalnızca boş olmayan rotaların çoklu çizgilerini doldurur ve populatePolylines değerinin doğru olmasını gerektirir.

Giriş yapılan 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 özelliklerinin davranış üzerinde herhangi bir etkisi yoktur. İlgili sevkiyatların veya araçların yok sayılmasına bakılmaksızın, boş olmayan tüm rotalardaki tüm ziyaretler arasında çoklu çizgiler yine de doldurulur.

interpretInjectedSolutionsUsingLabels

boolean

Doğruysa:

Bu yorum injectedFirstSolutionRoutes, injectedSolutionConstraint ve refreshDetailsRoutes alanları için geçerlidir. Bu sütun, çözüm oluşturulduktan sonra istekteki gönderim veya araç dizinleri değiştiğinde (talebe eklenen sevkiyatlar veya araçlar kaldırılmış ya da eklenmiş olabilir) kullanılabilir.

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

Enjekte edilen çözümdeki vehicleLabel bir istek aracına karşılık gelmiyorsa ilgili rota, ziyaretleriyle birlikte çözümden kaldırılır. Yerleştirilen çözümdeki shipmentLabel bir istek gönderimine karşılık gelmiyorsa ilgili ziyaret çözümden kaldırılır. Eklenen çözümdeki SkippedShipment.label, istek gönderimine karşılık gelmiyorsa SkippedShipment çözümden kaldırılır.

Rota ziyaretlerinin veya rotaların enjekte edilen çözümden tamamen kaldırılması, 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 kişi, her Vehicle.label (yanıt Shipment.label), enjekte edilen solüsyonda kullanılan OptimizeToursResponse'yi üreten geçmiş istek ve yerleştirilen çözümü içeren mevcut istek olmak üzere iki ilgili istekte kullanılan araç (sorumlu gönderim) varlığını benzersiz şekilde tanımlar. Yukarıda açıklanan benzersizlik kontrolleri bu gereksinimi garanti etmek için yeterli değildir.

considerRoadTraffic

boolean

ShipmentRoute alanlarının Transition.travel_duration, Visit.start_time ve vehicleEndTime ile hesaplanmasında, ShipmentRoute.has_traffic_infeasibilities alanının ve OptimizeToursResponse.total_cost alanının hesaplanmasında trafik tahminini göz önünde bulundurun.

populatePolylines

boolean

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

populateTransitionPolylines

boolean

Doğruysa ShipmentRoute.transitions yanıtında çoklu çizgiler doldurulur.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Bu ayarlanırsa istek için 60 dakikaya kadar bir son tarih (https://grpc.io/blog/deadlines sayfasına bakın) olabilir. Aksi takdirde, maksimum son tarih yalnızca 30 dakikadır. Uzun süreli isteklerin kesintiye uğrama riskinin çok daha büyük (ancak yine de küçük) olduğunu unutmayın.

useGeodesicDistances

boolean

Doğruysa, seyahat mesafeleri Google Haritalar mesafeleri yerine jeodezik mesafeler kullanılarak, seyahat süreleri ise geodesicMetersPerSecond ile tanımlanan bir hıza sahip jeodezik mesafeler kullanılarak hesaplanır.

label

string

Bu isteği tanımlamak için kullanılabilecek ve OptimizeToursResponse.request_label içinde bildirilen etiket.

geodesicMetersPerSecond

number

useGeodesicDistances doğru 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 genellikle BadRequest hata ayrıntısı (https://cloud.google.com/apis/design/errors#error_details) olarak INVALID_ARGUMENT hata yüküne eklenir. SolutionMode=VALIDATE_ONLY: OptimizeToursResponse.validation_errors alanına bakın. Varsayılan olarak 100 değeri kullanılı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