Package google.maps.routeoptimization.v1

Dizin

RouteOptimization

Araç turlarını optimize etmeye yönelik bir hizmet.

Belirli alan türlerinin geçerliliği:

  • google.protobuf.Timestamp
    • Saatler Unix saatine göredir: 1970-01-01T00:00:00+00:00'dan itibaren saniyeler.
    • saniye, [0, 253402300799], ör. [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] içinde olmalıdır.
    • nanos değeri ayarlanmalı veya 0 değerine ayarlanmalıdır.
  • google.protobuf.Duration
    • saniye, [0, 253402300799], ör. [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] içinde olmalıdır.
    • nanos değeri ayarlanmalı veya 0 değerine ayarlanmalıdır.
  • google.type.LatLng
    • enlem [-90,0, 90,0] aralığında olmalıdır.
    • boylam [-180,0, 180,0] biçiminde olmalıdır.
    • enlem ve boylamlardan en az biri sıfır olmamalıdır.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

Bir veya daha fazla OptimizeToursRequest mesajı için araç turlarını toplu olarak optimize eder.

Bu yöntem Uzun Süreli bir İşlemdir (LRO). Optimizasyon girişleri (OptimizeToursRequest mesaj) ve çıkışlar (OptimizeToursResponse mesaj) kullanıcı tarafından belirtilen biçimde Cloud Storage'dan okunur/yazılır. OptimizeTours yönteminde olduğu gibi her OptimizeToursRequest, bir ShipmentModel içerir ve ShipmentRoute içeren bir OptimizeToursResponse döndürür. Bunlar, araçlar tarafından toplam maliyeti en aza indiren bir rota grubudur.

Yetkilendirme kapsamları

Aşağıdaki OAuth kapsamını gerektirir:

  • https://www.googleapis.com/auth/cloud-platform
OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

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 bir araca bir Visit dizisi atar. Visit, bir Shipment için teslim alma veya teslimat olan VisitRequest değerine 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.

Yetkilendirme kapsamları

Aşağıdaki OAuth kapsamını gerektirir:

  • https://www.googleapis.com/auth/cloud-platform

AggregatedMetrics

ShipmentRoute için birleştirilmiş metrikler (tüm Transition ve/veya Visit (tüm ShipmentRoute) öğeleri üzerinden OptimizeToursResponse için sorumlu.

Alanlar
performed_shipment_count

int32

Gerçekleştirilen gönderim sayısı. Teslim alma ve teslimat çiftinin yalnızca bir kez sayıldığını unutmayın.

travel_duration

Duration

Bir rota veya çözüm için toplam seyahat süresi.

wait_duration

Duration

Bir rota veya çözüm için toplam bekleme süresi.

delay_duration

Duration

Bir rota veya çözüm için toplam gecikme süresi.

break_duration

Duration

Bir rota veya çözüm için toplam ara süresi.

visit_duration

Duration

Bir rota veya çözüm için toplam ziyaret süresi.

total_duration

Duration

Toplam süre, yukarıdaki tüm sürelerin toplamına eşit olmalıdır. Rotalar için aynı zamanda şunlara da karşılık gelir:

[ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time] - [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
travel_distance_meters

double

Bir rota veya çözüm için toplam seyahat mesafesi.

max_loads

map<string, VehicleLoad>

Bu rotadaki her miktar (ilgili çözüm) için rotanın tamamı boyunca elde edilen maksimum yük (sorumlu çözüm) ve Transition.vehicle_loads değerinin tamamı üzerinden maksimum değer olarak hesaplanır. ShipmentRoute.metrics.max_loads.

BatchOptimizeToursMetadata

Bu türde alan yok.

BatchOptimizeToursRequest çağrıları için işlem meta verileri.

BatchOptimizeToursRequest

Eşzamansız işlem olarak turları toplu olarak optimize etme isteği. Her giriş dosyası bir OptimizeToursRequest içermelidir ve her çıkış dosyası bir OptimizeToursResponse içermelidir. İstek, dosyaları okumak/yazmak ve ayrıştırmak için gereken bilgileri içerir. Tüm giriş ve çıkış dosyaları aynı proje altında olmalıdır.

Alanlar
parent

string

Zorunlu. Arama yapmak için hedef proje ve konum.

Biçim: * projects/{project-id} * projects/{project-id}/locations/{location-id}

Konum belirtilmezse bölge otomatik olarak seçilir.

model_configs[]

AsyncModelConfig

Zorunlu. Her satın alma modelinde giriş/çıkış bilgileri (ör. dosya yolları ve veri biçimleri).

AsyncModelConfig

Bir optimizasyon modelini eşzamansız olarak çözmeyle ilgili bilgiler.

Alanlar
display_name

string

İsteğe bağlı. Kullanıcı tanımlı model adı, modelleri takip etmek için kullanıcılar tarafından takma ad olarak kullanılabilir.

input_config

InputConfig

Zorunlu. Giriş modeliyle ilgili bilgiler.

output_config

OutputConfig

Zorunlu. İstenen çıkış konumu bilgileri.

BatchOptimizeToursResponse

Bu türde alan yok.

BatchOptimizeToursRequest yanıtı. Bu kimlik, işlem tamamlandıktan sonra Uzun Süreli İşlemde döndürülür.

BreakRule

Araç için zaman arası oluşturma kuralları (ör. öğle yemeği molaları). Mola, aracın mevcut konumunda boşta kaldığı ve herhangi bir ziyaret gerçekleştiremediği kesintisiz süredir. Süreçte kesinti yaşanabilir:

  • iki ziyaret arasındaki seyahat sırasında (ziyaretten hemen önceki veya hemen sonraki süreyi içerir, ancak ziyaretin ortasında değil) bu durumda ziyaretler arasındaki nakliye süresini uzatır.
  • veya araç çalışmaya başlamadan önce başlar (araç, aranın ortasında başlamayabilir) ve bu durumda aracın başlangıç süresi etkilenmez.
  • araç bitiş tarihinden sonra (araç bitiş zamanıyla birlikte).
Alanlar
break_requests[]

BreakRequest

Aralar dizisi. BreakRequest mesajını görüntüleyin.

frequency_constraints[]

FrequencyConstraint

Birkaç FrequencyConstraint geçerli olabilir. Hepsi bu BreakRule BreakRequest ile uyumlu olmalıdır. FrequencyConstraint hükümlerini inceleyin.

BreakRequest

Her araç için geçerli olan araların sırası (yani sayısı ve sırası) önceden bilinmelidir. Tekrarlanan BreakRequest öğeleri, gerçekleşmeleri gereken sırayla bu diziyi tanımlar. Aralarındaki zaman aralıkları (earliest_start_time / latest_start_time) çakışabilir ancak siparişle uyumlu olmalıdır (bu seçenek işaretlidir).

Alanlar
earliest_start_time

Timestamp

Zorunlu. Aranın başlangıcındaki alt sınır (dahil).

latest_start_time

Timestamp

Zorunlu. Aranın başlangıcındaki üst sınır (dahil).

min_duration

Duration

Zorunlu. Minimum ara süresi. Pozitif olmalıdır.

FrequencyConstraint

"Her 12 saatte en az 1 saatlik ara olmalıdır" gibi bir minimum ara sıklığı uygulayarak yukarıda belirtilen araların sıklığını ve süresini daha da kısıtlayabilirsiniz. Bunun, "12 saatlik herhangi bir kaydırma zaman aralığında, en az bir saatlik en az bir ara olması gerekir" şeklinde yorumlanabileceği varsayıldığında, bu örnek FrequencyConstraint anlamına gelir:

{
   min_break_duration { seconds: 3600 }         # 1 hour.
   max_inter_break_duration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

Çözümdeki araların zamanlaması ve süresi, BreakRequest politikasında önceden belirtilen zaman aralıkları ile minimum sürelere ek olarak bu tür kısıtlamalara da uyar.

FrequencyConstraint, ardışık olmayan aralar için pratikte geçerli olabilir. Örneğin, aşağıdaki program "her 12 saatte 1 saat" olarak dikkate alınır örnek:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
Alanlar
min_break_duration

Duration

Zorunlu. Bu kısıtlama için minimum ara süresi. Negatif değil. FrequencyConstraint açıklamasına bakın.

max_inter_break_duration

Duration

Zorunlu. Rotada en azından kısmen duration >= min_break_duration arası içermeyen herhangi bir zaman aralığı için izin verilen maksimum aralık. Pozitif olmalıdır.

DataFormat

Giriş ve çıkış dosyaları için veri biçimleri.

Sıralamalar
DATA_FORMAT_UNSPECIFIED Geçersiz değer. Biçim, UNSPECIFIED (BELİRTİLMEMİŞ) olmalıdır.
JSON JavaScript Nesne Gösterimi.
PROTO_TEXT Protokol Arabellekleri metin biçimi. https://protobuf.dev/reference/protobuf/textformat-spec/ adresine göz atın.

DistanceLimit

Katedilebilecek maksimum mesafeyi tanımlayan sınır. Sert veya yumuşak olabilir.

Hafif sınır tanımlanırsa hem soft_max_meters hem de cost_per_kilometer_above_soft_max tanımlanmalı ve negatif olmayan bir sayı olmalıdır.

Alanlar
max_meters

int64

Mesafeyi en fazla max_meter ile sınırlayan kesin bir sınır. Sınır negatif olmamalıdır.

soft_max_meters

int64

Maksimum mesafe sınırı uygulanmayan, ancak ihlal edildiğinde modelde tanımlanan ve aynı birimdeki diğer maliyetlerin toplamına eşit bir maliyet ortaya çıkan hafif bir sınır.

Tanımlanmışsa soft_max_meters, max_metreden küçük olmalı ve negatif olmamalıdır.

cost_per_kilometer_above_soft_max

double

Mesafe soft_max_meters sınırının üzerindeyse kilometre başına maliyet. Mesafe sınırın altındaysa ek maliyet 0 olur. Aksi durumda maliyeti hesaplamak için kullanılan formül aşağıdaki gibi olur:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

Maliyet negatif olmamalıdır.

GcsDestination

Çıkış dosyalarının yazılacağı Google Cloud Storage konumu.

Alanlar
uri

string

Zorunlu. Google Cloud Storage URI'si.

GcsSource

Giriş dosyasının okunacağı Google Cloud Storage konumu.

Alanlar
uri

string

Zorunlu. gs://bucket/path/to/object biçimindeki Google Cloud Storage nesnesinin URI'si.

InjectedSolutionConstraint

Hangi ziyaretlerin kısıtlanması gerektiği ve nasıl kısıtlanması gerektiği ile ilgili bilgileri de içeren isteğe eklenen çözümdür.

Alanlar
routes[]

ShipmentRoute

Yerleştirme çözümünün rotaları. Bazı rotalar orijinal çözümden çıkarılabilir. Rotalar ve atlanan gönderiler, injected_first_solution_routes için listelenen temel doğruluk varsayımlarını karşılamalıdır.

skipped_shipments[]

SkippedShipment

Eklenecek çözümün gönderimi atlandı. Bazıları orijinal çözümden çıkarılabilir. routes alanına bakın.

constraint_relaxations[]

ConstraintRelaxation

Sıfır veya daha fazla araç grubu için kısıtlamaların ne zaman ve ne kadar gevşetileceğini belirtir. Bu alan boşsa, boş olmayan tüm araç rotaları tamamen sınırlandırılır.

ConstraintRelaxation

Bir araç grubu için ziyaretlerdeki kısıtlamaların hangi eşiklerde ve hangi seviyeye gevşetileceğini belirtir. skipped_shipment alanında listelenen gönderimlerin atlanması zorunludur; Yani gerçekleştirilemez.

Alanlar
relaxations[]

Relaxation

vehicle_indices bölgesindeki araç bulunan rotalardaki ziyaretler için geçerli olacak tüm ziyaret kısıtlaması hafifletmeleri.

vehicle_indices[]

int32

relaxations ziyaret kısıtlamasının geçerli olduğu araç dizinlerini belirtir. Bu değer boşsa varsayılan olarak kabul edilir ve relaxations diğer constraint_relaxations özelliğinde belirtilmeyen tüm araçlar için geçerlidir. En fazla bir varsayılan olabilir. Yani en fazla bir kısıtlama gevşetme alanına boş vehicle_indices izin verilir. Bir araç dizini birkaç constraint_relaxations içinde olsa bile yalnızca bir kez listelenebilir.

interpret_injected_solutions_using_labels doğru ise araç dizini ShipmentRoute.vehicle_index ile aynı şekilde eşlenir (fields yorumuna bakın).

Dinlenme

relaxations boşsa routes tarihindeki tüm ziyaretlerin başlangıç zamanı ve sırası tamamen sınırlandırılır ve bu rotalara yeni ziyaret eklenemez veya eklenemez. Ayrıca, bir aracın routes bölgesindeki başlangıç ve bitiş zamanı tamamen sınırlandırılmıştır (araç boş olmadığı (yani, ziyaret olmadığı ve modelde used_if_route_is_empty değeri yanlış değerine ayarlandığı) sürece).

relaxations(i).level, aşağıdaki koşulları karşılayan #j ziyaretine uygulanan kısıtlama hafifletme düzeyini belirtir:

  • route.visits(j).start_time >= relaxations(i).threshold_time VE
  • j + 1 >= relaxations(i).threshold_visit_count

Benzer şekilde, aracın çalıştırılması gereken koşullar aşağıdaki koşulları karşılıyorsa relaxations(i).level değerine ayarlanır:

  • vehicle_start_time >= relaxations(i).threshold_time VE
  • relaxations(i).threshold_visit_count == 0 ve araç ucu şu koşulları karşılıyorsa relaxations(i).level seviyesine esnektir:
  • vehicle_end_time >= relaxations(i).threshold_time VE
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Ziyaret threshold_visit_count koşullarını karşılıyorsa rahatlama seviyesi uygulamak için threshold_time, aynı level değerine sahip iki relaxations ekleyin. Bunlardan birinde yalnızca threshold_visit_count, diğerinde ise yalnızca threshold_time grubu olacak. Bir ziyaret birden fazla relaxations koşullarını karşılıyorsa en esnek seviye uygulanır. Sonuç olarak, aracın başlangıcından rota ziyaretleri boyunca aracın bitişine kadar rahatlama seviyesi daha rahat hale gelir. Diğer bir deyişle, rota ilerledikçe rahatlama seviyesi azalmaz.

Herhangi bir relaxations öğesinin eşik koşullarını karşılamayan rota ziyaretlerinin zamanlaması ve dizisi tamamen sınırlıdır ve bu dizilere ziyaret eklenemez. Ayrıca, aracın başlangıcı veya bitişi herhangi bir gevşeme koşullarını karşılamıyorsa araç boş olmadığı sürece süre sabittir.

Alanlar
level

Level

threshold_time ve en az threshold_visit_count öncesi koşullar karşılandığında geçerli olan kısıtlama hafifletme düzeyi.

threshold_time

Timestamp

Gevşetme level'nın uygulanabileceği veya bundan sonra uygulanabileceği zaman.

threshold_visit_count

int32

level rahatlığının uygulanabileceği veya bundan sonra uygulanabileceği ziyaret sayısı. threshold_visit_count değeri 0 ise (veya ayarlanmazsa) level doğrudan araç çalıştırıldığında uygulanabilir.

route.visits_size() + 1 ise level yalnızca araç ucuna uygulanabilir. route.visits_size() + 1 değerinden büyükse, söz konusu rota için level uygulanmaz.

Seviye

Bir ziyarete uygulanan ve eşik koşullarını karşıladığında gerçekleşen farklı kısıtlama gevşetme düzeylerini ifade eder.

Aşağıdaki numaralandırma, gevşetmeyi artırmak içindir.

Sıralamalar
LEVEL_UNSPECIFIED

Örtülü varsayılan rahatlama seviyesi: Hiçbir kısıtlama gevşetilemez, diğer bir deyişle tüm ziyaretler tamamen sınırlandırılmıştır.

Bu değer, level içinde açıkça kullanılmamalıdır.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Ziyaret başlangıç ve araç başlangıç/bitiş zamanları gevşetilir ancak her ziyaret aynı araca bağlı kalır ve ziyaret sırasına dikkat edilmelidir: Aralarına veya öncesine hiçbir ziyaret eklenemez.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD ile aynıdır, ancak ziyaret dizisi de esnektir: Ziyaretler yalnızca araca bağlı kalır.
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD ile aynı, ancak araç aynı zamanda rahat. Eşik zamanında veya sonrasında ziyaretler tamamen ücretsizdir ve potansiyel olarak kötü performansa neden olabilir.

InputConfig

[BatchOptimizeTours][google.maps.route platformlarda.v1.RouteOptimizedService.BatchOptimizeTours] için bir giriş belirtin.

Alanlar
data_format

DataFormat

Zorunlu. Giriş verilerinin biçimi.

Birleştirme alanı source. Zorunlu. source şunlardan yalnızca biri olabilir:
gcs_source

GcsSource

Google Cloud Storage konumu. Tek bir nesne (dosya) olmalıdır.

Konum

Bir konumu (coğrafi nokta ve isteğe bağlı başlık) kapsar.

Alanlar
lat_lng

LatLng

Referans noktasının coğrafi koordinatları.

heading

int32

Trafiğin akış yönüyle ilişkilendirilen pusula başlığı. Bu değer, yolun teslim alma ve bırakma için kullanılacak kenarını belirtmek için kullanılır. Başlık değerleri 0 ile 360 arasında olabilir. Burada 0, vadesi Kuzey olan bir başlığı, 90 değeri ise gereken Doğu başlığını vb. belirtir.

OptimizeToursRequest

Çözülecek gönderim modelini ve optimizasyon parametrelerini tanımlayan bir tur optimizasyonu çözücüye verilme isteği.

Alanlar
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.

timeout

Duration

Bu zaman aşımı ayarlanırsa sunucu, zaman aşımı süresi dolmadan veya eşzamanlı istekler için sunucu son tarihine (hangisi daha önceyse) ulaşılmadan önce 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.

model

ShipmentModel

Çözülmesi gereken gönderim modeli.

solving_mode

SolvingMode

Çözme modu varsayılan olarak DEFAULT_SOLVE (0) şeklindedir.

search_mode

SearchMode

İsteği çözmek için kullanılan arama modu.

injected_first_solution_routes[]

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, vehicle_index aralık dahilinde olmalı ve yinelenmemelidir.
  • tüm ziyaretler için shipment_index ve visit_request_index 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. vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time) bilgileri gösterilir.
  • Gönderim yalnızca izin verilen araçlarda yapılabilir. Shipment.allowed_vehicle_indices boşsa veya vehicle_index ö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.

injected_solution_constraint

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.

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.

refresh_details_routes[]

ShipmentRoute

Boş olmayan rotalar, temel ziyaret sıraları 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şlem, yalnızca boş olmayan rotaların çoklu çizgilerini dolduruyor ve populate_polylines değerinin doğru olmasını gerektiriyor.

Geçilen rotaların route_polyline alanları, transitions rotasıyla tutarsız olabilir.

Bu alan, injected_first_solution_routes veya injected_solution_constraint 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.

interpret_injected_solutions_using_labels

bool

Eğer doğruysa:

Bu yorum injected_first_solution_routes, injected_solution_constraint ve refresh_details_routes 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 vehicle_label bir istek aracına karşılık gelmiyorsa ilgili rota, ziyaretleriyle birlikte çözümden kaldırılır. Yerleştirilen çözümdeki bir shipment_label, bir istek gönderimine karşılık gelmiyorsa ilgili ziyaret çözümden kaldırılır. Yerleştirilen çö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 bir Vehicle.label (resp. 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.

consider_road_traffic

bool

Transition.travel_duration, Visit.start_time ve vehicle_end_time 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.

populate_polylines

bool

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

populate_transition_polylines

bool

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

allow_large_deadline_despite_interruption_risk

bool

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.

use_geodesic_distances

bool

Doğru değerine ayarlanırsa seyahat mesafeleri, Google Haritalar'daki mesafeler yerine jeodezik mesafeler kullanılarak ve seyahat süreleri, geodesic_meters_per_second 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.

geodesic_meters_per_second

double

use_geodesic_distances 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.

max_validation_errors

int32

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

SearchMode

Arama davranışını tanımlayan, gecikmeyi çözüm kalitesinden uzaklaştıran mod. Tüm modlarda, genel istek son tarihi uygulanır.

Sıralamalar
SEARCH_MODE_UNSPECIFIED Belirtilmemiş arama modu, RETURN_FAST ile eşdeğerdir.
RETURN_FAST İlk iyi çözümü bulduktan sonra aramayı durdurun.
CONSUME_ALL_AVAILABLE_TIME Mevcut zamanınızı daha iyi çözümler aramaya harcayın.

SolvingMode

Çözücünün isteği nasıl işlemesi gerektiğini tanımlar. VALIDATE_ONLY dışındaki tüm modlarda, istek geçersizse INVALID_REQUEST hatası alırsınız. Döndürülen hata sayısını sınırlandırmak için max_validation_errors politikasına bakın.

Sıralamalar
DEFAULT_SOLVE Modeli çözün.
VALIDATE_ONLY Modeli yalnızca çözmeden doğrular: Mümkün olduğunca fazla OptimizeToursResponse.validation_errors doldurur.
DETECT_SOME_INFEASIBLE_SHIPMENTS

Yalnızca OptimizeToursResponse.validation_errors veya OptimizeToursResponse.skipped_shipments alanlarını doldurur ve isteğin geri kalanını çözmez (status ve routes, yanıtta ayarlanmamıştır). injected_solution_constraint rotalarında uygulanabilirlik olmadığı tespit edilirse bu rotalar OptimizeToursResponse.validation_errors alanına doldurulur ve OptimizeToursResponse.skipped_shipments rotası boş bırakılır.

ÖNEMLİ: Uygulanabilir olmayan tüm gönderiler buraya iade edilir. Yalnızca ön işleme sırasında uygulanabilir olmadığı belirlenenler buraya iade edilir.

OptimizeToursResponse

Her bir aracın izlediği rotaları, atlanan gönderileri ve çözümün toplam maliyetini içeren bir tur optimizasyonu problemini çözdükten sonra verilen yanıt.

Alanlar
routes[]

ShipmentRoute

Her araç için hesaplanan rotalar; i'inci rota, modeldeki i'inci araca karşılık gelir.

request_label

string

İstekte bir etiket belirtilmişse OptimizeToursRequest.label öğesinin kopyası.

skipped_shipments[]

SkippedShipment

Atlanan tüm gönderilerin listesi.

validation_errors[]

OptimizeToursValidationError

Bağımsız olarak tespit edebildiğimiz tüm doğrulama hatalarının listesi. "BİRDEN ÇOK HATA"ya bakın OptimizeToursValidationError mesajının açıklaması.

metrics

Metrics

Bu çözüm için süre, mesafe ve kullanım metrikleri.

Metrikler

Tüm rotalar için toplanan genel metrikler.

Alanlar
aggregated_route_metrics

AggregatedMetrics

Rotalar üzerinden toplanır. Her metrik, aynı ada sahip tüm ShipmentRoute.metrics alanlarının toplamıdır (veya yüklemeler için maksimum).

skipped_mandatory_shipment_count

int32

Atlanan zorunlu kargo sayısı.

used_vehicle_count

int32

Kullanılan araç sayısı. Not: Araç rotasının boş olması ve Vehicle.used_if_route_is_empty değerinin doğru olması durumunda araç kullanılmış olarak kabul edilir.

earliest_vehicle_start_time

Timestamp

İkinci el bir araç için en erken başlangıç zamanı. ShipmentRoute.vehicle_start_time değerindeki tüm ikinci el araçlar üzerinden minimum olarak hesaplanır.

latest_vehicle_end_time

Timestamp

İkinci el bir araç için en geç bitiş zamanı. ShipmentRoute.vehicle_end_time değerindeki tüm ikinci el araçlar üzerinden maksimum değer olarak hesaplanır.

costs

map<string, double>

Maliyetle ilgili istek alanlarına göre ayrılmış çözüm maliyeti. Anahtarlar, OptimizeToursRequest girişine göre proto yollarıdır (ör. "model.shipments.pickups.cost"tur. Değerler, ilgili maliyet alanı tarafından oluşturulan ve tüm çözüm genelinde toplanan toplam maliyettir. Diğer bir deyişle maliyetler["model.shipments.pickups.cost"], çözüm üzerinden tüm teslim alma maliyetlerinin toplamıdır. 01.01.2022 itibarıyla yalnızca toplu şekilde raporlanan TransitionAttributes ile ilgili maliyetler hariç olmak üzere, modelde tanımlanan tüm maliyetler burada ayrıntılı olarak raporlanmaktadır.

total_cost

double

Çözümün toplam maliyeti. Maliyet haritasındaki tüm değerlerin toplamı.

OptimizeToursValidationError

OptimizeToursRequest doğrulanırken karşılaşılan bir hatayı açıklar.

Alanlar
code

int32

Doğrulama hatası, her zaman mevcut olan çift (code, display_name) tarafından tanımlanır.

Diğer alanlar (aşağıda) hatayla ilgili daha fazla bilgi sağlar.

BİRDEN ÇOK HATA: Birden çok hata olduğunda, doğrulama işlemi bunlardan birkaçının çıktısını almaya çalışır. Tıpkı bir derleyici gibi, bu da kusursuz bir süreç değildir. Bazı doğrulama hataları "önemli" olur. Bu, doğrulama işleminin tamamını durduracağı anlamına gelir. Bu durum, diğerlerinde olduğu gibi display_name="UNSPECIFIED" hataları için de geçerlidir. Bazıları, doğrulama sürecinde diğer hataların atlanmasına neden olabilir.

STability: code ve display_name son derece kararlı olmalıdır. Ancak zamanla yeni kodlar ve görünen adlar görünebilir. Bu da, yeni hata eskisini gizlediğinden belirli (geçersiz) isteğin farklı (code, display_name) bir çiftle sonuçlanmasına neden olabilir ("BİRDEN FAZLA HATA" bölümüne bakın).

REFERENCE: Tüm (kod, ad) çiftlerinin bir listesi:

  • UNSPECIFIED (BELİRTİLMEMİŞ) = 0;
  • VALIDATION_TIMEOUT_ERROR = 10; Doğrulama işlemi, verilen son tarih içinde tamamlanamadı.
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_MODE = 1201;
    • REQUEST_OPTIONS_INVALID_MAX_METRICATION_ERRORS = 1203;
    • REQUEST_OPTIONS_INVALID_GEODESIC_METERS_PER_SECOND = 1204;
    • REQUEST_OPTIONS_GEODESIC_METERS_PER_SECOND_TOO_SMALL = 1205;
    • REQUEST_OPTIONS_MISSING_GEODESIC_METERS_PER_SECOND = 1206;
    • REQUEST_OPTIONS_POPULATE_PATHFINDER_TRIPS_AND_GEODESIC_DISTANCE = 1207;
    • REQUEST_OPTIONS_COST_MODEL_OPTIONS_AND_GEODESIC_DISTANCE = 1208;
    • REQUEST_OPTIONS_TRAVEL_MODE_INCOMPATIBLE_WITH_TRAFFIC = 1211;
    • REQUEST_OPTIONS_MULTIPLE_TRAFFIC_FLAVORS = 1212;
    • REQUEST_OPTIONS_INVALID_TRAFFIC_FLAVOR = 1213;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITHOUT_GLOBAL_START_TIME = 1214;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITH_PRECEDENCES = 1215;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_MODE_INVALID = 1216;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_ENABLED_WITHOUT_TRAFFIC = 1217;
  • INJECTED_SOLUTION_ERROR = 20;
    • INJECTED_SOLUTION_MISSING_LABEL = 2000;
    • INJECTED_SOLUTION_DUPLICATE_LABEL = 2001;
    • INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
    • INJECTED_SOLUTION_INFEASIBLE_EXPIRATION_GETting_TRAVEL_TIMES = 2003;
    • INJECTED_SOLUTION_TRANSITION_INCONSISTENT_WITH_ACTUAL_TRAVEL = 2004;
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
    • INJECTED_SOLUTION_MORE_THAN_ONE_PER_TYPE = 2006;
    • INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • SHIPMENT_MODEL_ERROR = 22;
    • SHIPMENT_MODEL_TOO_LARGE = 2200;
    • SHIPMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_NEGATIVE_OR_NAN = 2202;
    • SHIPMENT_MODEL_GLOBAL_END_TIME_TOO_LARGE_OR_NAN = 2203;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_FALSE_GLOBAL_END_TIME = 2204;
    • SHIPMENT_MODEL_GLOBAL_DURATION_TOO_LONG = 2205;
    • SHIPMENT_MODEL_MAX_ACTIVE_VEHICLES_NOT_POSITIVE = 2206;
    • SHIPMENT_MODEL_DURATION_MATRIX_TOO_LARGE = 2207;
  • INDEX_ERROR = 24;
  • TAG_ERROR = 26;
  • TIME_WINDOW_ERROR = 28;
    • TIME_WINDOW_INVALID_START_TIME = 2.800;
    • TIME_WINDOW_INVALID_END_TIME = 2801;
    • TIME_WINDOW_INVALID_SOFT_START_TIME = 2802;
    • TIME_WINDOW_INVALID_SOFT_END_TIME = 2803;
    • TIME_WINDOW_OUTSIDE_GLOBAL_TIME_WINDOW = 2804;
    • TIME_WINDOW_START_TIME_EXPIRATION_END_TIME = 2805;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
    • TIME_WINDOW_INVALID_COST_PER_HOURS_EXPIRATION_SOFT_END_TIME = 2807;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_WINDOW_COST_EXPIRATION_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • TIME_WINDOW_SOFT_START_TIME_WITHOUT_COST_BEFORE_SOFT_START_TIME = 2810;
    • TIME_WINDOW_SOFT_END_TIME_WITHOUT_COST_EVAL_SOFT_END_TIME = 2811;
    • TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2.812;
    • TIME_WINDOW_START_TIME_EXPIRATION_SOFT_START_TIME = 2813;
    • TIME_WINDOW_SOFT_START_TIME_FALSE_END_TIME = 2814;
    • TIME_WINDOW_START_TIME_EXPIRATION_SOFT_END_TIME = 2815;
    • TIME_WINDOW_SOFT_END_TIME_FALSE_END_TIME = 2816;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • TIME_WINDOW_COST_EXPIRATION_SOFT_END_TIME_SET_AND_MULTIPLE_WINDOWS = 2818;
    • TRANSITION_ATTRIBUTES_ERROR = 30;
    • TRANSITION_ATTRIBUTES_INVALID_COST = 3000;
    • TRANSITION_ATTRIBUTES_INVALID_COST_PER_KILOMETER = 3001;
    • TRANSITION_ATTRIBUTES_DUPLICATE_TAG_PAIR = 3002;
    • TRANSITION_ATTRIBUTES_DISTANCE_LIMIT_MAX_METERS_UNSUPPORTED = 3003;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • TRANSITION_ATTRIBUTES_CONFLIC bulunduğunuz_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_VAR_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_CONFLIC birinci_hedef_TAGS_FIELDS = 3007;
    • TRANSITION_ATTRIBUTES_EmailAddress_DURATION_NEGATIVE_OR_NAN = 3008;
    • TRANSITION_ATTRIBUTES_EmailAddress_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_NEGATIVE_VALUE = 3100;
  • LOAD_LIMIT_ERROR = 33;
    • LOAD_LIMIT_INVALID_COST_ABOVE_SOFT_MAX = 3303;
    • LOAD_LIMIT_SOFT_MAX_WITHOUT_COST_ABOVE_SOFT_MAX = 3304;
    • LOAD_LIMIT_COST_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3305;
    • LOAD_LIMIT_NEGATIVE_SOFT_MAX = 3306;
    • LOAD_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • LOAD_LIMIT_MAX_LOAD_NEGATIVE_VALUE = 3308;
    • LOAD_LIMIT_SOFT_MAX_ABOVE_MAX = 3309;
  • INTERVAL_ERROR = 34;
    • INTERVAL_MIN_EXCEEDS_MAX = 3401;
    • INTERVAL_NEGATIVE_MIN = 3402;
    • INTERVAL_NEGATIVE_MAX = 3403;
    • INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
    • INTERVAL_MAX_EXCEEDS_CAPACITY = 3405;
  • DISTANCE_LIMIT_ERROR = 36;
    • DISTANCE_LIMIT_INVALID_COST_FALSE_SOFT_MAX = 3601;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_EVAL_SOFT_MAX = 3602;
    • DISTANCE_LIMIT_COST_EXPIRATION_SOFT_MAX_WITHOUT_SOFT_MAX = 3603;
    • DISTANCE_LIMIT_NEGATIVE_MAX = 3604;
    • DISTANCE_LIMIT_NEGATIVE_SOFT_MAX = 3605;
    • DISTANCE_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3606;
  • DURATION_LIMIT_ERROR = 38;
    • DURATION_LIMIT_MAX_DURATION_NEGATIVE_OR_NAN = 3.800;
    • DURATION_LIMIT_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3801;
    • DURATION_LIMIT_INVALID_COST_PER_HOUR_EXPIRATION_SOFT_MAX = 3802;
    • DURATION_LIMIT_SOFT_MAX_WITHOUT_COST_FALSE_SOFT_MAX = 3803;
    • DURATION_LIMIT_COST_EVAL_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
    • DURATION_LIMIT_INVALID_COST_EXPIRATION_QUADRATIC_SOFT_MAX = 3806;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_COST_PER_SQUARE_HOUR = 3807;
    • DURATION_LIMIT_COST_PER_SQUARE_HOUR_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • DURATION_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3810;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_LARGER_THAN_MAX = 3811;
    • DURATION_LIMIT_IDFA_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • DURATION_LIMIT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3813;
    • DURATION_LIMIT_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3814;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3815;
  • SHIPMENT_ERROR = 40;
    • SHIPMENT_PD_LIMIT_WITHOUT_PICKUP_AND_DELIVERY = 4014;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4000;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4001;
    • SHIPMENT_PD_RELATIVE_DETOUR_LIMIT_INVALID = 4015;
    • SHIPMENT_PD_DETOUR_LIMIT_AND_Extra_VISIT_DURATION = 4016;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_NEGATIVE_OR_NAN = 4002;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4003;
    • SHIPMENT_EMPTY_SHIPMENT_TYPE = 4004 [gönderim_EMPTY_SHIPMENT_TYPE] = 4004;
    • SHIPMENT_NO_PICKUP_NO_DELIVERY = 4005;
    • SHIPMENT_INVALID_PENALTY_COST = 4006;
    • SHIPMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
    • SHIPMENT_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • SHIPMENT_INVALID_COST_FOR_VEHICLE = 4011;
    • SHIPMENT_COST_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • SHIPMENT_DUPLICATE_COST_FOR_VEHICLE_INDEX = 4013;
  • VEHICLE_ERROR = 42;
    • VEHICLE_EMPTY_REQUIRED_OPERATOR_TYPE = 4200;
    • VEHICLE_DUPLICATE_REQUIRED_OPERATOR_TYPE = 4201;
    • VEHICLE_NO_OPERATOR_WITH_REQUIRED_OPERATOR_TYPE = 4202;
    • VEHICLE_EMPTY_START_TAG = 4203;
    • VEHICLE_DUPLICATE_START_TAG = 4204;
    • VEHICLE_EMPTY_END_TAG = 4205;
    • VEHICLE_DUPLICATE_END_TAG = 4206;
    • VEHICLE_Extra_VISIT_DURATION_NEGATIVE_OR_NAN = 4207;
    • VEHICLE_Extra_VISIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4208;
    • VEHICLE_Extra_VISIT_DURATION_EMPTY_KEY = 4209;
    • VEHICLE_FIRST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4210;
    • VEHICLE_FIRST_SHIPMENT_IGNORED = 4211;
    • VEHICLE_FIRST_SHIPMENT_NOT_BOUND = 4212;
    • VEHICLE_LAST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4213;
    • VEHICLE_LAST_SHIPMENT_IGNORED = 4214;
    • VEHICLE_LAST_SHIPMENT_NOT_BOUND = 4215;
    • VEHICLE_IGNORED_WITH_USE_IF_ROUTE_IS_EMPTY = 4216;
    • VEHICLE_INVALID_COST_PER_KILOMETER = 4217;
    • VEHICLE_INVALID_COST_PER_HOUR = 4218;
    • VEHICLE_INVALID_COST_PER_TRAVELED_HOUR = 4219;
    • VEHICLE_INVALID_FIXED_COST = 4220;
    • VEHICLE_INVALID_TRAVEL_DURATION_MULTIPLE = 4221;
    • VEHICLE_TRAVEL_DURATION_MULTIPLE_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4223;
    • VEHICLE_MATRIX_INDEX_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4224;
    • VEHICLE_bin_DURATION_LONGER_THAN_DURATION_LIMIT = 4222;
  • VISIT_REQUEST_ERROR = 44;
    • VISIT_REQUEST_EMPTY_TAG = 4400;
    • VISIT_REQUEST_DUPLICATE_TAG = 4401;
    • VISIT_REQUEST_DURATION_NEGATIVE_OR_NAN = 4404;
    • VISIT_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4405;
  • PRECEDENCE_ERROR = 46;
  • BREAK_ERROR = 48;
    • BREAK_RULE_EMPTY = 4800;
    • BREAK_REQUEST_UNSPECIFIED_DURATION = 4801;
    • BREAK_REQUEST_UNSPECIFIED_EARLIEST_START_TIME = 4802;
    • BREAK_REQUEST_UNSPECIFIED_LATEST_START_TIME = 4803;
    • BREAK_REQUEST_DURATION_NEGATIVE_OR_NAN = 4804; = 4804;
    • BREAK_REQUEST_LATEST_START_TIME_BEFORE_EARLIEST_START_TIME = 4805;
    • BREAK_REQUEST_EARLIEST_START_TIME_BEFORE_GLOBAL_START_TIME = 4806;
    • BREAK_REQUEST_LATEST_END_TIME_EXPIRATION_GLOBAL_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4.809;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4.810;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4.811;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4.812;
    • BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
    • BREAK_FREQUENCY_MISSING_MAX_INTER_BREAK_DURATION = 4814;
    • BREAK_FREQUENCY_MISSING_MIN_BREAK_DURATION = 4.815;
  • SHIPMENT_TYPE_INCOMPATIBILITY_ERROR = 50;
    • SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001;
    • SHIPMENT_TYPE_INCOMPATIBILITY_LESS_THAN_TWO_TYPES = 5002;
    • SHIPMENT_TYPE_INCOMPATIBILITY_DUPLICATE_TYPE = 5003;
    • SHIPMENT_TYPE_INCOMPATIBILITY_INVALID_INCOMPATIBILITY_MODE = 5004;
    • SHIPMENT_TYPE_INCOMPATIBILITY_TOO_MANY_INCOMPATIBILITIES = 5005;
  • SHIPMENT_TYPE_REQUIREMENT_ERROR = 52;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE = 52001;
    • SHIPMENT_TYPE_REQUIREMENT_NO_DEPENDENT_TYPE = 52002;
    • SHIPMENT_TYPE_REQUIREMENT_INVALID_REQUIREMENT_MODE = 52003;
    • SHIPMENT_TYPE_REQUIREMENT_TOO_MANY_REQUIREMENTS = 52004;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_REQUIRED_TYPE = 52005;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_REQUIRED_TYPE = 52006;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_DEPENDENT_TYPE = 52009;
    • SHIPMENT_TYPE_REQUIREMENT_SELF_DEPENDENT_TYPE = 52010;
    • SHIPMENT_TYPE_REQUIREMENT_GRAPH_HAS_CYCLES = 52011;
  • VEHICLE_OPERATOR_ERROR = 54;
    • VEHICLE_OPERATOR_EMPTY_TYPE = 5400;
    • VEHICLE_OPERATOR_MULTIPLE_START_TIME_WINDOWS = 5401;
    • VEHICLE_OPERATOR_SOFT_START_TIME_WINDOW = 5402;
    • VEHICLE_OPERATOR_MULTIPLE_END_TIME_WINDOWS = 5403;
    • VEHICLE_OPERATOR_SOFT_END_TIME_WINDOW = 5404;
  • DURATION_SECONDS_MATRIX_ERROR = 56;
    • DURATION_SECONDS_MATRIX_DURATION_NEGATIVE_OR_NAN = 5.600;
    • DURATION_SECONDS_MATRIX_DURATION_EXCEEDS_GLOBAL_DURATION = 5601;
display_name

string

Hatanın görünen adı.

fields[]

FieldReference

Bir hata bağlamı 0, 1 (çoğu zaman) veya daha fazla alan içerebilir. Örneğin, 4 numaralı araç ve 2 numaralı gönderimin ilk teslim alma işlemi aşağıdaki gibi yapılabilir:

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 sub_field {name: "pickups" index: 0} }

Bununla birlikte, belirli bir hata kodu için fields işlevinin kardinalitesinin değişmemesi gerektiğini unutmayın.

error_message

string

Hatayı açıklayan, kullanıcıların okuyabileceği dize. code ile error_message arasında 1:1 eşleme vardır (kod != "UNSPECIFIED" olduğunda).

STRATEJİ: Kararlı değil: Belirli bir code ile ilişkili hata mesajı zaman içinde değişebilir (açıklık getirilecektir). Bunun yerine lütfen display_name ve code kullanın.

offending_values

string

Alanların değerlerini içerebilir. Bu özellik her zaman kullanılamayabilir. Bu modele kesinlikle güvenmemeniz ve yalnızca manuel model hata ayıklaması için kullanmanız gerekir.

FieldReference

Doğrulama hatası için bağlamı belirtir. FieldReference, her zaman bu dosyada belirli bir alanı ifade eder ve aynı hiyerarşik yapıyı uygular. Örneğin, 5 numaralı aracın start_time_windows numaralı öğesini aşağıdakileri kullanarak belirtebiliriz:

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

Ancak mesajın kalabalık olmaması için OptimizeToursRequest veya ShipmentModel gibi üst düzey öğeler atlanır.

Alanlar
name

string

Alanın adı, ör. "taşıtlar".

sub_field

FieldReference

Gerekirse yinelemeli olarak iç içe yerleştirilmiş alt alan.

Birleştirme alanı index_or_key.

index_or_key şunlardan yalnızca biri olabilir:

index

int32

Tekrarlanırsa alanın dizini.

key

string

Alan bir haritaysa anahtar.

OutputConfig

[BatchOptimizeTours][google.maps.route Optimization.v1.RouteOptimizasyonService.BatchOptimizeTours] sonuçları için hedef belirtin.

Alanlar
data_format

DataFormat

Zorunlu. Çıkış verilerinin biçimi.

Birleştirme alanı destination. Zorunlu. destination şunlardan yalnızca biri olabilir:
gcs_destination

GcsDestination

Çıkışın yazılacağı Google Cloud Storage konumu.

Gönderim

Tek bir öğenin, teslim alma alanlarından birinden teslimatlarına kadar gönderilmesi. Gönderinin tamamlanmış olarak kabul edilmesi için benzersiz bir aracın teslim alma konumlarından birini ziyaret etmesi (ve buna göre yedek kapasiteyi azaltması), daha sonra teslimat konumlarından birini ziyaret etmesi (ve dolayısıyla yedek kapasitelerini buna göre yeniden artırması) gerekir.

Alanlar
display_name

string

Gönderinin kullanıcı tanımlı görünen adı. En fazla 63 karakter uzunluğunda olabilir ve UTF-8 karakterleri kullanabilir.

pickups[]

VisitRequest

Kargoyla ilişkili teslim alma alternatifleri grubu. Belirtilmemişse aracın yalnızca teslimatlarla ilgili bir konumu ziyaret etmesi gerekir.

deliveries[]

VisitRequest

Kargoyla ilişkili teslimat alternatifleri grubu. Belirtilmemişse aracın yalnızca teslim alma işlemleriyle ilgili bir konumu ziyaret etmesi gerekir.

load_demands

map<string, Load>

Gönderinin taleplerini yüklemek (ör. ağırlık, hacim, palet sayısı vb.). Haritadaki anahtarlar, karşılık gelen yükün türünü (tercihen birimleri de içeren) açıklayan tanımlayıcılar olmalıdır. Örneğin: "weight_kg", "quantity_galon", "pallet_count" vb. Belirli bir anahtar haritada görünmezse karşılık gelen yükleme null olarak kabul edilir.

allowed_vehicle_indices[]

int32

Bu sevkiyatı gerçekleştirebilecek araç grubu. Boşsa tüm araçlar bu işlemi gerçekleştirebilir. Araçlar, ShipmentModel vehicles listesinde kendi indekslerine göre gösterilir.

costs_per_vehicle[]

double

Bu gönderim her bir araç tarafından teslim edildiğinde tahakkuk eden maliyeti belirtir. Belirtilmişse:

  • costs_per_vehicle_indices ile aynı sayıda öğe. costs_per_vehicle[i], modelin costs_per_vehicle_indices[i] aracına karşılık gelir.
  • öğelerin sayısı modelde mevcuttur. i'inci öğe, modelin araç #i'sine karşılık gelir.

Bu maliyetler, penalty_cost ile aynı birimde olmalı ve negatif olmamalıdır. Bu tür bir maliyet yoksa bu alanı boş bırakın.

costs_per_vehicle_indices[]

int32

costs_per_vehicle özelliğinin geçerli olduğu araçların dizinleri. Boş değilse costs_per_vehicle ile aynı sayıda öğeye sahip olmalıdır. Bir araç dizini birden fazla kez belirtilemez. Bir araç costs_per_vehicle_indices kapsamından hariç tutulursa maliyeti sıfır olur.

pickup_to_delivery_absolute_detour_limit

Duration

Teslim alma ile teslimat arasındaki en kısa yola kıyasla maksimum mutlak sapma süresini belirtir. Belirtilmişse negatif olmamalıdır ve kargo en azından bir teslim alma ve teslimat içermelidir.

Örneğin, seçilen teslim alma alternatifinden doğrudan seçilen teslimat alternatifine geçmek için en kısa süre bu olmalıdır. Ardından pickup_to_delivery_absolute_detour_limit ayarlandığında şu yaptırımlar uygulanır:

start_time(delivery) - start_time(pickup) <=
t + pickup_to_delivery_absolute_detour_limit

Aynı gönderimde hem göreli hem de mutlak sınırlar belirtilirse olası her teslim alma/teslimat çifti için daha kısıtlayıcı sınır kullanılır. 2017/10 tarihi itibarıyla, yalnızca seyahat süreleri araçlara bağlı olmadığında rota değişikliği desteklenmektedir.

pickup_to_delivery_time_limit

Duration

Teslim almanın başlangıcından gönderimin başlangıcına kadar maksimum süreyi belirtir. Belirtilmişse negatif olmamalıdır ve kargo en azından bir teslim alma ve teslimat içermelidir. Bu, teslim alma ve teslimat için seçilen alternatiflerin veya aracın hızına bağlı değildir. Bu, maksimum sapma kısıtlamalarıyla birlikte belirtilebilir; çözüm her iki spesifikasyona da uyar.

shipment_type

string

Bir "type" belirten boş olmayan dize belirtin. Bu özellik, shipment_types arasındaki uyumsuzlukları veya gereksinimleri tanımlamak için kullanılabilir (ShipmentModel içinde shipment_type_incompatibilities ve shipment_type_requirements bölümüne bakın).

Tek bir ziyaret için belirtilen visit_types değerinden farklıdır: Aynı kargoya ait tüm teslim alma/teslimatlar aynı shipment_type öğesini paylaşır.

label

string

Bu gönderim için bir etiket belirtir. Bu etiket, ilgili ShipmentRoute.Visit öğesinin shipment_label bölümünde yer alan yanıtta bildirilmiştir.

ignore

bool

True (doğru) ise bu kargoyu atlayın, ancak penalty_cost uygulamayın.

Bir gönderimin göz ardı edilmesi, modelde herhangi bir shipment_type_requirements olduğunda doğrulama hatasına neden olur.

injected_first_solution_routes veya injected_solution_constraint içinde gerçekleştirilen bir gönderimi göz ardı etmeye izin verilir; çözücü, ilgili teslim alma/teslimat ziyaretlerini performans rotasından kaldırır. Yoksayılan gönderimlere referans veren precedence_rules de yoksayılır.

penalty_cost

double

Sevkiyat tamamlanmazsa bu ceza, rotaların toplam maliyetine eklenir. Teslim alma ve teslimat alternatiflerinden birinin ziyaret edilmesi durumunda kargo tamamlanmış olarak kabul edilir. Maliyet, modeldeki maliyetle ilgili diğer tüm alanlar için kullanılan birim içinde ifade edilebilir ve pozitif olmalıdır.

ÖNEMLİ: Bu ceza belirtilmezse sonsuz olarak kabul edilir, yani gönderimin tamamlanması gerekir.

pickup_to_delivery_relative_detour_limit

double

Teslim alma ile teslimat arasındaki en kısa yola kıyasla maksimum göreli sapma süresini belirtir. Belirtilmişse negatif olmamalıdır ve kargo en azından bir teslim alma ve teslimat içermelidir.

Örneğin, seçilen teslim alma alternatifinden doğrudan seçilen teslimat alternatifine geçmek için en kısa süre bu olmalıdır. Ardından pickup_to_delivery_relative_detour_limit ayarlandığında şu yaptırımlar uygulanır:

start_time(delivery) - start_time(pickup) <=
std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))

Aynı gönderimde hem göreli hem de mutlak sınırlar belirtilirse olası her teslim alma/teslimat çifti için daha kısıtlayıcı sınır kullanılır. 2017/10 tarihi itibarıyla, yalnızca seyahat süreleri araçlara bağlı olmadığında rota değişikliği desteklenmektedir.

Yükle

Bir ziyaret gerçekleştirirken, teslim alma için araç yüküne önceden tanımlanmış bir tutar eklenebilir, teslimatsa bu tutar çıkarılabilir. Bu mesaj söz konusu tutarı tanımlar. Şu sayfaya göz atın: load_demands.

Alanlar
amount

int64

İlgili ziyareti gerçekleştiren aracın yükü değişiklik gösterir. Bu bir tam sayı olduğundan, hassasiyet kaybını önlemek için kullanıcıların uygun bir birim seçmeleri önerilir. ≥ 0 olmalıdır.

VisitRequest

Araç tarafından yapılabilecek bir ziyaret isteği: Aracın coğrafi konumu (veya iki tanesi aşağıya bakın), zaman aralıklarıyla gösterilen açılış ve kapanış zamanları ve hizmet süresi (ürünlerin teslim alınması veya teslim edilmesi için vardığı araç tarafından harcanan süre) belirtilmelidir.

Alanlar
arrival_location

LatLng

Bu VisitRequest gerçekleştirilirken aracın vardığı coğrafi konum. Gönderim modelinin süre mesafe matrisleri varsa arrival_location belirtilmemelidir.

arrival_waypoint

Waypoint

Bu VisitRequest gerçekleştirilirken aracın vardığı ara nokta. Gönderim modelinin süre mesafe matrisleri varsa arrival_waypoint belirtilmemelidir.

departure_location

LatLng

Bu VisitRequest tamamlandıktan sonra aracın kalkacağı coğrafi konum. arrival_location ile aynıysa atlanabilir. Gönderim modelinin süre mesafe matrisleri varsa departure_location belirtilmemelidir.

departure_waypoint

Waypoint

Aracın bu VisitRequest tamamlandıktan sonra kalkış noktası. arrival_waypoint ile aynıysa atlanabilir. Gönderim modelinin süre mesafe matrisleri varsa departure_waypoint belirtilmemelidir.

tags[]

string

Ziyaret isteğine eklenen etiketleri belirtir. Boş veya yinelenen dizelere izin verilmez.

time_windows[]

TimeWindow

Ziyarete varış saatini sınırlayan zaman aralıkları. Araç, varış saati aralığının dışında kalkabilir. Diğer bir ifadeyle, varış saatinin ve sürenin bir zaman aralığının içinde olması gerekmez. Araç TimeWindow.start_time tarihinden önce gelirse bekleme süresine neden olabilir.

TimeWindow olmaması, aracın bu ziyareti her zaman gerçekleştirebileceği anlamına gelir.

Zaman aralıkları birbirinden ayrı olmalıdır. Yani, zaman aralıkları başka bir zaman aralığıyla çakışmamalı veya bitişik olmamalıdır ve artan sırada olmalıdır.

cost_per_hour_after_soft_end_time ve soft_end_time yalnızca tek bir zaman aralığı varsa ayarlanabilir.

duration

Duration

Ziyaret süresi, ör.varış ile kalkış arasında aracın harcadığı süre (olası bekleme süresine eklenir, bkz. time_windows).

cost

double

Araç rotasında bu ziyaret isteğini yerine getirmenin maliyeti. Bu seçenek, bir gönderinin her alternatif teslim alma veya teslimat seçeneği için farklı maliyetler ödemek amacıyla kullanılabilir. Bu maliyet, Shipment.penalty_cost ile aynı birimde olmalı ve negatif olmamalıdır.

load_demands

map<string, Load>

Bu ziyaret isteğinin isteklerini yükleyin. Bu, Shipment.load_demands alanına benzer, ancak tüm Shipment yerine yalnızca bu VisitRequest için geçerlidir. Burada listelenen talepler, Shipment.load_demands bölümünde listelenen taleplere eklenir.

visit_types[]

string

Ziyaretin türlerini belirtir. Bu süre, aracın bu ziyareti tamamlaması için gereken ek süreyi ayırmak amacıyla kullanılabilir (bkz. Vehicle.extra_visit_duration_for_visit_type).

Bir tür yalnızca bir kez görünebilir.

label

string

Bu VisitRequest için bir etiket belirtir. Bu etiket, yanıtta ilgili ShipmentRoute.Visit içinde visit_label olarak bildirilmiştir.

ShipmentModel

Gönderim modeli, bir grup araç tarafından gerçekleştirilmesi gereken bir dizi gönderim içerir ve toplam maliyeti en aza indirir. Bu durumda toplam maliyet, toplamda şu olur:

  • araçları yönlendirme maliyeti (toplam süre başına maliyet, seyahat süresi başına maliyet ve tüm araçlar üzerindeki sabit maliyet).
  • sorumlu tutulamaz.
  • Global sevkiyat süresinin maliyeti
Alanlar
shipments[]

Shipment

Modelde yapılması gereken gönderim grubu.

vehicles[]

Vehicle

Ziyaret gerçekleştirmek için kullanılabilecek araç grubu.

global_start_time

Timestamp

Modelin genel başlangıç ve bitiş zamanı: Bu aralığın dışındaki hiçbir zaman geçerli olarak kabul edilemez.

Modelin zaman aralığı bir yıldan kısa olmalıdır.Diğer bir deyişle, global_end_time ile global_start_time arasında en fazla 31536. 000 saniye olmalıdır.

cost_per_*hour alanlarını kullanırken performansı artırmak için bu aralığı daha kısa bir aralığa ayarlamak isteyebilirsiniz (ör. tek bir gün modelleme yapıyorsanız genel saat sınırlarını o güne ayarlamanız gerekir). Ayarlanmadan bırakılırsa 1 Ocak 1970, 00:00:00 UTC (yani saniye: 0, nanos: 0) varsayılan olarak kullanılır.

global_end_time

Timestamp

Ayarlanmadan bırakılırsa 1 Ocak 1971, 00:00:00 UTC (yani saniye: 31536000, nanos: 0) varsayılan olarak kullanılır.

global_duration_cost_per_hour

double

"Global süre" toplam planın en erken geçerli başlangıç zamanı ile tüm araçların geçerli en geç bitiş zamanı arasındaki farktır. Örneğin kullanıcılar, işin en kısa sürede tamamlanması için optimizasyon yapmak amacıyla bu miktara bir saat başına maliyet atayabilir. Bu maliyet, Shipment.penalty_cost ile aynı birimde olmalıdır.

duration_distance_matrices[]

DurationDistanceMatrix

Modelde kullanılan süre ve mesafe matrislerini belirtir. Bu alan boşsa, use_geodesic_distances alanının değerine bağlı olarak bunun yerine Google Haritalar veya jeodezik mesafeler kullanılır. Boş değilse use_geodesic_distances doğru olamaz ve duration_distance_matrix_src_tags veya duration_distance_matrix_dst_tags boş olamaz.

Kullanım örnekleri:

  • İki konum vardır: locA ve locB.
  • Rotasını locA adresinde başlatıp locA'da sonlandıran 1 araç.
  • locB adresinde 1 teslim alma ziyaret isteği isteği.
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Üç konum vardır: locA, locB ve locC.
  • Rotasını loA'da başlatıp locB'de sonlandıran "hızlı" matrisi kullanan 1 araç.
  • Rotasını locB'de başlatıp locB'de sonlandıran "yavaş" matrisini kullanan 1 araç.
  • Rotasını locB'de başlatıp locB'de sonlandıran "hızlı" matrisi kullanan 1 araç.
  • locC'de 1 teslim alma ziyaret isteği isteği.
model {
  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
duration_distance_matrix_src_tags[]

string

Süre ve mesafe matrislerinin kaynaklarını tanımlayan etiketler; duration_distance_matrices(i).rows(j), duration_distance_matrix_src_tags(j) etiketine sahip olan ziyaretlerden matris i'deki diğer ziyaretlere kadar olan süreleri ve mesafeleri tanımlar.

Etiketler VisitRequest.tags veya Vehicle.start_tags'a karşılık gelir. Belirli bir VisitRequest veya Vehicle, bu alandaki bir etiketle tam olarak eşleşmelidir. Vehicle etiketinin kaynak, hedef ve matris etiketlerinin aynı olabileceğini unutmayın; benzer şekilde, VisitRequest öğesinin kaynak ve hedef etiketleri aynı olabilir. Tüm etiketler farklı olmalıdır ve boş dize olamaz. Bu alan boş değilse duration_distance_matrices boş olmamalıdır.

duration_distance_matrix_dst_tags[]

string

Süre ve mesafe matrislerinin hedeflerini tanımlayan etiketler duration_distance_matrices(i).rows(j).durations(k) (sorumlu duration_distance_matrices(i).rows(j).meters(k)), matris i'de duration_distance_matrix_src_tags(j) etiketine sahip olan ziyaretlerden duration_distance_matrix_dst_tags(k) etiketine sahip ziyaretlere kadar olan seyahatin süresini (mesafe) tanımlar.

Etiketler VisitRequest.tags veya Vehicle.start_tags'a karşılık gelir. Belirli bir VisitRequest veya Vehicle, bu alandaki bir etiketle tam olarak eşleşmelidir. Vehicle etiketinin kaynak, hedef ve matris etiketlerinin aynı olabileceğini unutmayın; benzer şekilde, VisitRequest öğesinin kaynak ve hedef etiketleri aynı olabilir. Tüm etiketler farklı olmalıdır ve boş dize olamaz. Bu alan boş değilse duration_distance_matrices boş olmamalıdır.

transition_attributes[]

TransitionAttributes

Modele geçiş özellikleri eklendi.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Uyumsuz delivery_types grupları (bkz. ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

shipment_type gereksinimleri grupları (bkz. ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

Modelde uygulanması gereken öncelik kuralları kümesi.

max_active_vehicles

int32

Maksimum etkin araç sayısını kısıtlar. Rotasında en az bir gönderim olan araçlar etkin durumda demektir. Bu özellik, araçlardan daha az sürücünün bulunduğu ve araç filosunun heterojen olduğu durumlarda rota sayısını sınırlandırmak için kullanılabilir. Ardından optimizasyon, kullanılacak en iyi araç alt kümesini seçer. Tamamen olumlu olmalıdır.

DurationDistanceMatrix

Ziyaret süresi ile aracın başlangıç yerlerinden ziyaret edilecek ve aracın bitiş konumlarına kadar olan süre ve mesafe matrisini belirtir.

Alanlar
rows[]

Row

Süre ve mesafe matrisinin satırlarını belirtir. ShipmentModel.duration_distance_matrix_src_tags kadar öğe içermelidir.

vehicle_start_tag

string

Bu süre ve mesafe matrisinin hangi araçlar için geçerli olduğunu tanımlayan etiket. Boşsa bu tüm araçlar için geçerli olur ve yalnızca tek bir matris olabilir.

Her araç başlangıcı tam olarak bir matrisle eşleşmelidir. Diğer bir deyişle, start_tags alanındaki tam olarak bir tanesi, bir matrisin (ve sadece o matrisin) vehicle_start_tag değeri ile eşleşmelidir.

Tüm matrisler farklı bir vehicle_start_tag değerine sahip olmalıdır.

Satır

Süre ve mesafe matrisinin satırını belirtir.

Alanlar
durations[]

Duration

Belirli bir satır için süre değerleri. ShipmentModel.duration_distance_matrix_dst_tags kadar öğe içermelidir.

meters[]

double

Belirli bir satır için mesafe değerleri. Herhangi bir maliyet veya kısıtlama, modeldeki mesafelere işaret etmiyorsa bu alan boş bırakılabilir; Aksi takdirde durations kadar öğeye sahip olması gerekir.

PrecedenceRule

İki etkinlik arasındaki öncelik kuralı (her etkinlik, bir gönderinin teslim alınması veya teslim edilmesidir): "ikinci" etkinlik "first"ten en az offset_duration sonra başlamalıdır başladı.

Birden fazla öncelik aynı (veya ilgili) etkinliklere işaret edebilir, ör. "B teslimi, A tesliminden sonra gerçekleşir" ve "C teslimi, B tesliminden sonra gerçekleşir".

Ayrıca, öncelikler yalnızca her iki gönderim de gerçekleştirildiğinde uygulanır ve aksi takdirde göz ardı edilir.

Alanlar
first_is_delivery

bool

"İlk"in bir teslimattır.

second_is_delivery

bool

"Saniye"nin bir teslimattır.

offset_duration

Duration

"İlk" arasındaki fark ve "second" (ikincil) unutmayın. Negatif olabilir.

first_index

int32

"İlk"in gönderim dizini unutmayın. Bu alan belirtilmelidir.

second_index

int32

"Saniye"nin gönderim dizini unutmayın. Bu alan belirtilmelidir.

ShipmentRoute

Bir aracın rotası, zaman ekseninde aşağıdaki gibi ayrıştırılabilir (n ziyaret olduğunu varsayarız):

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

Aşağıdakiler arasında bir fark yaptığımızı unutmayın:

  • Aracın başlangıç ve bitişi ile her ziyaretin başlangıcı ve bitişi (diğer bir deyişle varış ve gidiş) gibi "dakik etkinlikler". Belirli bir saniyede gerçekleşir.
  • "zaman aralıkları" (ör. ziyaretler ve ziyaretler arasındaki geçiş). Zaman aralıkları bazen sıfır süreye sahip olabilse de (ör. aynı saniyede başlangıç ve bitişte) ancak genellikle pozitif bir süreye sahiptirler.

Sabit değerler:

  • n ziyaret varsa n+1 geçişi vardır.
  • Bir ziyaret her zaman kendisinden önce bir geçiş (aynı dizin) ve ondan sonra bir geçiş (dizin + 1) ile çevrilidir.
  • Araç başlangıcından sonra her zaman #0 geçişi gelir.
  • Araç sonundan önce her zaman #n geçişi gelir.

Yakınlaştırıldığında, Transition ve Visit sırasında neler olur?

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

Son olarak, geçiş sırasında SEYAHAT, PARÇALAR, GECİKME ve BEKLEME işlevlerinin nasıl ayarlanabileceği burada açıklanmaktadır.

  • Bunlar çakışmaz.
  • Gecikme benzersizdir ve bir sonraki ziyaretten (veya araç sonundan) hemen önceki kesintisiz bir süre olmalıdır. Dolayısıyla, gecikme süresinin başlangıç ve bitiş zamanını bilmek yeterli olacaktır.
  • ARALAR ardışık ve örtüşmeyen zaman aralıklarıdır. Yanıt, her aranın başlangıç zamanını ve süresini belirtir.
  • TRAVEL ve WAIT değerleri "öncelikli"dir: Bu geçiş sırasında birkaç kez kesintiye uğrayabilirler. Müşteriler, seyahatin "mümkün olan en kısa sürede" gerçekleşeceğini varsayabilir ve bu "bekleyen" kalan süreyi doldurur.

Bir (karmaşık) örnek:

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Alanlar
vehicle_index

int32

Rotayı gerçekleştiren araç (ShipmentModel kaynağındaki diziniyle tanımlanır).

vehicle_label

string

Bu rotayı gerçekleştiren aracın etiketi (belirtilmişse ShipmentModel.vehicles(vehicle_index).label).

vehicle_start_time

Timestamp

Aracın rotasına başladığı zaman.

vehicle_end_time

Timestamp

Aracın rotasını tamamladığı zaman.

visits[]

Visit

Bir rotayı temsil eden sıralı ziyaret dizisi. ziyaret[i], rotadaki i. ziyarettir. Bu alan boşsa araç kullanılmıyor olarak kabul edilir.

transitions[]

Transition

Rotanın sıralı geçiş listesi.

has_traffic_infeasibilities

bool

OptimizeToursRequest.consider_road_traffic doğru değerine ayarlandığında bu alan, rota zamanlamalarındaki tutarsızlıkların trafiğe dayalı seyahat süresi tahminleri kullanılarak tahmin edildiğini gösterir. Ziyaretler arasında, ilk ziyaretten önce veya son ziyaretten sonra, trafiğe göre ayarlanmış seyahat, gecikme ve molaları tamamlamak ve yine de ziyaret ve araç süresi aralıklarından memnun kalmak için yeterli zaman olmayabilir. Örneğin,

  start_time(previous_visit) + duration(previous_visit) +
  travel_duration(previous_visit, next_visit) > start_time(next_visit)

Trafik nedeniyle travel_duration(previous_visit, next_visit) oranındaki seyahat süresi tahmini arttığından, next_visit'e varış, muhtemelen mevcut zaman aralığından daha geç olacak. Ayrıca, seyahat süresi tahminlerindeki artış ve ziyaret ya da ara verme zaman aralığı kısıtlamalarındaki artış nedeniyle, aranın ziyaretle çakışması zorunlu olabilir.

route_polyline

EncodedPolyline

Rotanın kodlanmış çoklu çizgi gösterimi. Bu alan yalnızca OptimizeToursRequest.populate_polylines doğru değerine ayarlanırsa doldurulur.

breaks[]

Break

Bu rotayı gerçekleştiren araç için planlanan molalar. breaks dizisi, her biri karşılık gelen start_time ile başlayan ve duration saniye süren zaman aralıklarını temsil eder.

metrics

AggregatedMetrics

Bu rota için süre, mesafe ve yük metrikleri. AggregatedMetrics alanları, bağlama bağlı olarak tüm ShipmentRoute.transitions veya ShipmentRoute.visits üzerinden toplanır.

route_costs

map<string, double>

Maliyetle ilgili istek alanlarına göre ayrılmış rota maliyeti. Anahtarlar, OptimizeToursRequest girişine göre proto yollarıdır (ör. "model.shipments.pickups.cost"tur. Değerler, ilgili maliyet alanı tarafından oluşturulan ve tüm rota boyunca toplanan toplam maliyettir. Başka bir deyişle maliyet["model.shipments.pickups.cost"], rota üzerindeki tüm teslim alma maliyetlerinin toplamıdır. 01.01.2022 itibarıyla yalnızca toplu şekilde raporlanan TransitionAttributes ile ilgili maliyetler hariç olmak üzere, modelde tanımlanan tüm maliyetler burada ayrıntılı olarak raporlanmaktadır.

route_total_cost

double

Rotanın toplam maliyeti. Maliyet haritasındaki tüm maliyetlerin toplamı.

Ara

Aranın yürütülmesini temsil eden veriler.

Alanlar
start_time

Timestamp

Aranın başlangıç zamanı.

duration

Duration

Ara süresi.

EncodedPolyline

Çoklu çizginin kodlanmış gösterimi. Çoklu çizgi kodlaması hakkında daha fazla bilgiyi şu adreste bulabilirsiniz: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

Alanlar
points

string

Çoklu çizginin kodlanmış noktalarını temsil eden dize.

Geçiş

Rota üzerindeki iki etkinlik arasındaki geçiş. ShipmentRoute açıklamasına bakın.

Araçta start_location ve/veya end_location yoksa ilgili seyahat metrikleri 0'dır.

Alanlar
travel_duration

Duration

Bu geçiş sırasındaki seyahat süresi.

travel_distance_meters

double

Geçiş sırasında katedilen mesafe.

traffic_info_unavailable

bool

OptimizeToursRequest.consider_road_traffic üzerinden trafik istendiğinde ve Transition için trafik bilgileri alınamadığında bu boole değeri "true" olarak ayarlanır. Bu durum geçici (gerçek zamanlı trafik sunucularında nadir görülen bir aksaklık) veya kalıcı (bu konum için veri yok) olabilir.

delay_duration

Duration

Bu geçişe uygulanan gecikme sürelerinin toplamı. Varsa bir sonraki etkinlikten (ziyaret veya araç sonu) tam olarak delay_duration saniye önce gecikme başlar. Şu sayfaya göz atın: TransitionAttributes.delay.

break_duration

Duration

Bu geçiş sırasında oluşan araların süre toplamı (varsa). Her aranın başlangıç zamanı ve süresiyle ilgili ayrıntılar ShipmentRoute.breaks içinde depolanır.

wait_duration

Duration

Bu geçiş sırasında harcanan süre. Bekleme süresi, boşta kalma süresine karşılık gelir ve mola süresini içermez. Ayrıca bu bekleme süresinin ardışık olmayan birkaç aralığa bölünebileceğini unutmayın.

total_duration

Duration

Kolaylık sağlamak amacıyla belirtilen geçişin toplam süresi. Eşittir:

  • sonraki ziyaret start_time (veya bu son geçişse vehicle_end_time): Bu geçişin start_time;
  • ShipmentRoute.has_traffic_infeasibilities yanlışsa şu da geçerli olur: `total_duration = travel_duration + delay_duration
  • break_duration + Wait_duration".
start_time

Timestamp

Bu geçişin başlangıç zamanı.

route_polyline

EncodedPolyline

Geçiş sırasında izlenen rotanın kodlanmış çoklu çizgi gösterimi. Bu alan yalnızca populate_transition_polylines doğru değerine ayarlanırsa doldurulur.

vehicle_loads

map<string, VehicleLoad>

Araç, bu geçiş sırasında bu aracın Vehicle.load_limits aracında görünen veya bu rotada gerçekleştirilen bazı gönderimlerde sıfır olmayan Shipment.load_demands değerine sahip her tür için yüklenir.

İlk geçiş sırasındaki yüklemeler, araç rotasının başlangıç yüklemeleridir. Ardından her ziyaretten sonra, ziyaretin teslim alma mı yoksa teslimat mı olduğuna bağlı olarak sonraki geçişin yüklemelerini elde etmek için ziyarete ait load_demands eklenir veya çıkarılır.

VehicleLoad

Belirli bir tür için rotanın bir noktasında aracın gerçek yükünü bildirir (bkz. Transition.vehicle_loads).

Alanlar
amount

int64

Belirli bir tür için araçtaki yük miktarı. Yük birimi genellikle türe göre gösterilir. Şu sayfaya göz atın: Transition.vehicle_loads.

Ziyaret edin

Bir rotada gerçekleştirilen ziyaret. Bu ziyaret, Shipment adlı müşterinin teslim alınmasına veya teslimatına karşılık gelir.

Alanlar
shipment_index

int32

ShipmentModel kaynağındaki shipments alanının dizini.

is_pickup

bool

Doğruysa ziyaret, Shipment teslim alma işlemine karşılık gelir. Aksi takdirde, bir yayınlama anlamına gelir.

visit_request_index

int32

Shipment öğesinin teslim alma veya teslimat alanındaki VisitRequest dizini (bkz. is_pickup).

start_time

Timestamp

Ziyaretin başladığı zaman. Aracın ziyaret konumuna bundan daha erken gelebileceğini unutmayın. Saatler ShipmentModel ile tutarlı.

load_demands

map<string, Load>

Gönderim ve ziyaret isteğinin toplamı olarak load_demands toplam ziyaret yükü talebi. Ziyaret bir yayınlamaysa değerler negatif olur. Transition.loads ile aynı türler için talepler raporlanır (bu alana bakın).

detour

Duration

Ziyaretten önce rotada ziyaret edilen gönderimler ve zaman aralıklarının neden olduğu olası bekleme süresi nedeniyle ek rota izleme süresi. Ziyaret bir teslimatsa ek rota, ilgili teslim alma ziyaretine göre hesaplanır ve şuna eşittir:

start_time(delivery) - start_time(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

Aksi takdirde start_location aracından hesaplanır ve şuna eşittir:

start_time - vehicle_start_time - travel duration from
the vehicle's `start_location` to the visit.
shipment_label

string

Shipment içinde belirtilmişse ilgili Shipment.label öğesinin kopyası.

visit_label

string

VisitRequest içinde belirtilmişse ilgili VisitRequest.label öğesinin kopyası.

ShipmentTypeIncompatibility

delivery_type [gönderim_tür] bağlı olarak gönderimler arasındaki uyumsuzlukları belirtir. Aynı rotadaki uyumsuz gönderimlerin görünümü, uyumsuzluk moduna göre kısıtlanır.

Alanlar
types[]

string

Uyumsuz türlerin listesi. Listelenenler arasından farklı shipment_types değerine sahip iki gönderi "uyumsuz".

incompatibility_mode

IncompatibilityMode

Uyumsuzluğa mod uygulandı.

IncompatibilityMode

Uyumsuz gönderimlerin aynı rotada nasıl kısıtlanacağını tanımlayan modlar.

Sıralamalar
INCOMPATIBILITY_MODE_UNSPECIFIED Belirtilmemiş uyumsuzluk modu. Bu değer hiçbir zaman kullanılmamalıdır.
NOT_PERFORMED_BY_SAME_VEHICLE Bu modda, uyumsuz türlere sahip iki gönderim hiçbir zaman aynı aracı paylaşamaz.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY uyumsuzluk moduyla uyumlu olmayan türlere sahip iki gönderim için:

  • Her ikisi de yalnızca teslim alma hizmeti sunuyorsa (teslimat içermiyorsa) veya teslimat ise (teslim alma hariç) aynı aracı paylaşamazlar.
  • Sevkiyatlardan birinde teslimat, diğerinde teslim alma varsa iki gönderi, ikincisi teslim alınmadan önce teslim edilmişse aynı aracı paylaşabilir.

ShipmentTypeRequirement

shipping_type [gönderim_türü] temelinde gönderimler arasındaki şartları belirtir. Şartın ayrıntıları, gereksinim modu ile tanımlanır.

Alanlar
required_shipment_type_alternatives[]

string

dependent_shipment_types tarafından zorunlu kılınan alternatif kargo türlerinin listesi.

dependent_shipment_types[]

string

dependent_shipment_types alanında türü olan tüm gönderilerin, aynı rotada en az required_shipment_type_alternatives türünde ziyaret edilmesi gerekir.

NOT: shipment_type öğesinin kendisine bağlı olduğu gibi koşul zincirlerine izin verilmez.

requirement_mode

RequirementMode

Mod, koşula uygulandı.

RequirementMode

Bağımlı gönderilerin rota üzerindeki görünümünü tanımlayan modlar.

Sıralamalar
REQUIREMENT_MODE_UNSPECIFIED Belirtilmemiş gereksinim modu. Bu değer hiçbir zaman kullanılmamalıdır.
PERFORMED_BY_SAME_VEHICLE Bu modda, tüm "bağımlı" Gönderiler, "gerekli" koşullardan en az biriyle aynı aracı paylaşmalıdır sevkiyatlar.
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME modu kullanıldığında tüm "bağımlı" içerikler gönderimlerde en az bir "zorunlu" olmalıdır teslim alma sırasında aracındaki sevkıyatı ifade eder.

"Bağımlı" kuruluş Dolayısıyla kargodan teslim alma şunlardan birine sahip olmalıdır:

  • Yalnızca teslimat "zorunlu" kargodan sonra rotada teslim edilir veya
  • "Gerekli" kargodan önce rotadan alınmıştır ve "gerekliyse" gönderimin teslimatı varsa, bu teslimat "bağımlı" belirlemek için kullanılır.
IN_SAME_VEHICLE_AT_DELIVERY_TIME "Bağımlı" olanlar hariç öncekiyle aynı gönderimlerde "zorunlu" teslimat sırasında araçlarına gönderim yapmış olmaları.

SkippedShipment

Çözümdeki başarılı olmayan gönderimlerin ayrıntılarını belirtir. Önemsiz durumlar için ve/veya atlama nedenini belirleyebiliyorsak nedenini burada bildiririz.

Alanlar
index

int32

Dizin, ShipmentModel kaynağındaki gönderinin dizinine karşılık gelir.

label

string

Shipment içinde belirtilmişse ilgili Shipment.label öğesinin kopyası.

reasons[]

Reason

Gönderimin neden atlandığını açıklayan nedenlerin listesi. Reason üzerindeki yoruma bakın.

Neden

Gönderimin neden atlandığını açıklayabilirsek nedenler burada listelenir. Neden tüm araçlar için aynı değilse reason, 1'den fazla öğe içerir. Atlanan bir gönderinin yinelenen nedenleri olamaz (example_vehicle_index dışında tüm alanların aynı olduğu). Örnek:

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}

Atlanan gönderi, tüm araçlarla uyumlu değil. Nedenler tüm araçlarda farklı olabilir ancak en az bir aracın "Elma" değeri kapasite aşılırsa (1. araç dahil), en az bir aracın "Armutlar" değeri kapasite aşılır (3. araç dahil) ve en az bir aracın mesafe sınırı aşılır (1. araç dahil).

Alanlar
code

Code

Kod'daki açıklamalara bakın.

example_exceeded_capacity_type

string

Neden kodu DEMAND_EXCEEDS_VEHICLE_CAPACITY ise aşılan bir kapasite türünü belirtir.

example_vehicle_index

int32

Neden sevkiyat-araç uyumsuzluğuyla ilgiliyse bu alan ilgili bir aracın dizinini sağlar.

Kod

Neden türünü tanımlayan kod. Buradaki sıra anlamsızdır. Özellikle, belirli bir nedenin (her ikisi de geçerliyse) çözümde bir diğer nedenden önce görünüp görünmeyeceğini belirtmez.

Sıralamalar
CODE_UNSPECIFIED Bu ifade hiçbir zaman kullanılmamalıdır. Bir gönderinin neden atlandığını anlayamazsak boş nedenler döndürürüz.
NO_VEHICLE Modelde, tüm sevkiyatları uygulanamaz hale getiren bir araç bulunmuyor.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Kargo talebi, biri example_exceeded_capacity_type olan bazı kapasite türleri için aracın kapasitesini aşıyor.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

Bu sevkiyatı gerçekleştirmek için gereken minimum mesafe (ör. aracın start_location konumundan gönderinin teslim alma ve/veya teslimat konumlarına) aracın bitiş konumuna kadar olan minimum mesafe, aracın route_distance_limit değerini aşıyor.

Bu hesaplamada jeodezik mesafeleri kullandığımıza dikkat edin.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

Seyahat süresi, bekleme süresi ve servis süresi dahil olmak üzere bu gönderimi gerçekleştirmek için gereken minimum süre, aracın route_duration_limit değerini aşıyor.

Not: Seyahat süresi en iyi senaryo, yani jeodezik mesafe x 36 m/sn (yaklaşık 130 km/saat) şeklinde hesaplanır.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT Yukarıdakiyle aynı ancak yalnızca minimum seyahat süresi ile aracın travel_duration_limit değerini karşılaştırıyoruz.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS Araç en erken başlangıç zamanında başlıyorsa en iyi durum senaryosunda (zaman hesaplaması için CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT) bu gönderimi gerçekleştiremez: Toplam süre, aracın en son bitiş zamanından sonra bitmesine neden olur.
VEHICLE_NOT_ALLOWED Gönderimin allowed_vehicle_indices alanı boş değil ve bu araç ona ait değil.

TimeWindow

Zaman aralıkları, ziyaretin varış saati veya bir aracın başlangıç ve bitiş zamanı gibi bir etkinliğin zamanını kısıtlar.

start_time ve end_time sabit zaman aralığı sınırları, etkinliğin en erken ve en geç zamanını (start_time <= event_time <= end_time) uygular. Esnek zaman aralığı alt sınırı (soft_start_time), etkinliğin gerçekleşmesinden ne kadar süre önce gerçekleştiğine bağlı olarak maliyet oluşturarak etkinliğin soft_start_time tarihinde veya sonrasında gerçekleşmesine yönelik tercihi ifade eder. Esnek zaman aralığı üst sınırı (soft_end_time), etkinliğin gerçekleşmesinden soft_end_time sonra ne kadar süreyle orantılı bir maliyet oluşturarak etkinliğin soft_end_time tarihinde veya öncesinde gerçekleşmesi tercihini ifade eder. start_time, end_time, soft_start_time ve soft_end_time, genel zaman sınırları içinde olmalı (bkz. ShipmentModel.global_start_time ve ShipmentModel.global_end_time) ve şunlara uymalıdır:

  0 <= `start_time` <= `soft_start_time` <= `end_time` and
  0 <= `start_time` <= `soft_end_time` <= `end_time`.
Alanlar
start_time

Timestamp

Zor zaman aralığı başlangıç zamanı. Belirtilmemişse ShipmentModel.global_start_time olarak ayarlanır.

end_time

Timestamp

Zor zaman aralığı bitiş zamanı. Belirtilmemişse ShipmentModel.global_end_time olarak ayarlanır.

soft_start_time

Timestamp

Zaman aralığının esnek başlangıç zamanı.

soft_end_time

Timestamp

Zaman aralığının geçici bitiş zamanı.

cost_per_hour_before_soft_start_time

double

Etkinlik soft_start_time tarihinden önce gerçekleşirse modeldeki diğer maliyetlere eklenen saat başına maliyet. Bu değer şu şekilde hesaplanır:

   max(0, soft_start_time - t.seconds)
                          * cost_per_hour_before_soft_start_time / 3600,
t being the time of the event.

Bu maliyet pozitif bir değer olmalıdır ve alan yalnızca soft_start_time ayarlanmışsa ayarlanabilir.

cost_per_hour_after_soft_end_time

double

Etkinlik soft_end_time tarihinden sonra gerçekleşirse modeldeki diğer maliyetlere eklenen saat başına maliyet. Şu şekilde hesaplanır:

   max(0, t.seconds - soft_end_time.seconds)
                    * cost_per_hour_after_soft_end_time / 3600,
t being the time of the event.

Bu maliyet pozitif olmalıdır ve alan yalnızca soft_end_time ayarlanmışsa ayarlanabilir.

TransitionAttributes

Bir rota üzerinde art arda iki ziyaret arasındaki geçişlerin özelliklerini belirtir. Aynı geçiş için birkaç TransitionAttributes geçerli olabilir: Bu durumda, tüm ek maliyetler toplanır ve en katı kısıtlama veya sınır geçerli olur (doğal "VE" anlamının gereği).

Alanlar
src_tag

string

Bu özelliklerin geçerli olduğu (src->dst) geçiş grubunu tanımlayan etiketler.

Kaynak ziyareti veya araç başlangıcı, VisitRequest.tags veya Vehicle.start_tags src_tag içeriyorsa ya da excluded_src_tag içermiyorsa (bu iki alandan hangisinin boş olmadığına bağlı olarak) eşleşir.

excluded_src_tag

string

Şu sayfaya göz atın: src_tag. Tam olarak src_tag ve excluded_src_tag değerlerinden biri boş bırakılamaz.

dst_tag

string

Hedef ziyareti veya araç sonu, VisitRequest.tags veya Vehicle.end_tags dst_tag içeriyorsa ya da excluded_dst_tag içermiyorsa (bu iki alandan hangisinin boş olmadığına bağlı olarak) eşleşir.

excluded_dst_tag

string

Şu sayfaya göz atın: dst_tag. Tam olarak dst_tag ve excluded_dst_tag değerlerinden biri boş bırakılamaz.

cost

double

Bu geçişi gerçekleştirmenin maliyetini belirtir. Bu değer, modeldeki diğer tüm maliyetlerle aynı birimdir ve negatif olmamalıdır. Diğer tüm mevcut maliyetlerin üzerine uygulanır.

cost_per_kilometer

double

Bu geçiş gerçekleştirilirken katedilen mesafeye uygulanan kilometre başına maliyeti belirtir. Araçlarda belirtilen tüm Vehicle.cost_per_kilometer ile toplanır.

distance_limit

DistanceLimit

Bu geçiş gerçekleştirilirken katedilen mesafeyle ilgili bir sınırı belirtir.

06.06.2021 itibarıyla yalnızca geçici sınırlar desteklenmektedir.

delay

Duration

Bu geçiş gerçekleştirilirken oluşan gecikmeyi belirtir.

Bu gecikme her zaman kaynak ziyareti bittikten sonra ve hedef ziyaretin başlamasından önce gerçekleşir.

Araç

Gönderim sorunu olan bir aracı modelleme. Gönderim sorunu çözüldüğünde bu araç için start_location ile başlayıp end_location itibarıyla biten bir rota oluşturulur. Rota, ziyaretlerden oluşan bir dizidir (bkz. ShipmentRoute).

Alanlar
display_name

string

Aracın kullanıcı tarafından tanımlanan görünen adı. En fazla 63 karakter uzunluğunda olabilir ve UTF-8 karakterleri kullanabilir.

travel_mode

TravelMode

Aracın kullanabileceği yolları ve hızını etkileyen ulaşım şekli. Ayrıca bkz. travel_duration_multiple.

start_location

LatLng

Aracın herhangi bir gönderimi teslim almadan önce başladığı coğrafi konum. Belirtilmezse araç ilk teslim alındığında başlar. Gönderim modelinin süre ve mesafe matrisleri varsa start_location belirtilmemelidir.

start_waypoint

Waypoint

Aracın herhangi bir gönderimi teslim almadan önce çalışmaya başladığı coğrafi konumu temsil eden ara nokta. start_waypoint veya start_location belirtilmezse araç ilk teslim alındığında başlar. Gönderim modelinin süre ve mesafe matrisleri varsa start_waypoint belirtilmemelidir.

end_location

LatLng

Aracın son VisitRequest işlemini tamamladıktan sonra sona erdiği coğrafi konum. Belirtilmezse aracın ShipmentRoute özelliği son VisitRequest işlemini tamamladığında sona erer. Gönderim modelinin süre ve mesafe matrisleri varsa end_location belirtilmemelidir.

end_waypoint

Waypoint

Aracın son VisitRequest adımını tamamladıktan sonra sona erdiği coğrafi konumu temsil eden ara nokta. end_waypoint veya end_location belirtilmezse aracın ShipmentRoute cihazı son VisitRequest işlemini tamamladığında hemen sona erer. Gönderim modelinin süre ve mesafe matrisleri varsa end_waypoint belirtilmemelidir.

start_tags[]

string

Aracın rotasının başlangıcına eklenen etiketleri belirtir.

Boş veya yinelenen dizelere izin verilmez.

end_tags[]

string

Aracın rotasının sonuna eklenen etiketleri belirtir.

Boş veya yinelenen dizelere izin verilmez.

start_time_windows[]

TimeWindow

Aracın başlangıç konumundan ayrılabileceği zaman aralıkları. Genel zaman sınırları dahilinde olmalıdırlar (ShipmentModel.global_* alanlarına bakın). Belirtilmemişse bu genel zaman sınırları dışında herhangi bir sınırlama yoktur.

Aynı tekrarlanan alana ait zaman aralıkları ayrı olmalıdır. Yani zaman aralığı başka bir zaman aralığıyla çakışamaz ya da bitişik olamaz ve kronolojik sırada olmalıdır.

cost_per_hour_after_soft_end_time ve soft_end_time yalnızca tek bir zaman aralığı varsa ayarlanabilir.

end_time_windows[]

TimeWindow

Aracın bitiş konumuna varabileceği zaman aralıkları. Genel zaman sınırları dahilinde olmalıdırlar (ShipmentModel.global_* alanlarına bakın). Belirtilmemişse bu genel zaman sınırları dışında herhangi bir sınırlama yoktur.

Aynı tekrarlanan alana ait zaman aralıkları ayrı olmalıdır. Yani zaman aralığı başka bir zaman aralığıyla çakışamaz ya da bitişik olamaz ve kronolojik sırada olmalıdır.

cost_per_hour_after_soft_end_time ve soft_end_time yalnızca tek bir zaman aralığı varsa ayarlanabilir.

unloading_policy

UnloadingPolicy

Araçta uygulanan kaldırma politikası.

load_limits

map<string, LoadLimit>

Aracın kapasiteleri (ör. ağırlık, hacim, palet sayısı). Haritadaki anahtarlar, Shipment.load_demands alanındaki anahtarlarla tutarlı olarak yük türünün tanımlayıcılarıdır. Bu haritada belirli bir anahtar eksikse karşılık gelen kapasitenin sınırsız olduğu kabul edilir.

cost_per_hour

double

Araç maliyetleri: Tüm maliyetler toplanır ve Shipment.penalty_cost ile aynı birimde olmalıdır.

Araç rotasının saatlik maliyeti. Bu maliyet, rotanın toplam süresine uygulanır ve seyahat süresi, bekleme süresi ve ziyaret süresini içerir. Yalnızca cost_per_traveled_hour yerine cost_per_hour kullanılması ek gecikmeye neden olabilir.

cost_per_traveled_hour

double

Araç rotasında katedilen saat başına maliyet. Bu maliyet, yalnızca rotanın aldığı seyahat süresine (ShipmentRoute.transitions cinsinden bildirilen) uygulanır ve bekleme süresi ile ziyaret süresi hariç tutulur.

cost_per_kilometer

double

Araç rotasının kilometre başına maliyeti. Bu maliyet, ShipmentRoute.transitions cinsinden bildirilen mesafeye uygulanır ve tek bir VisitRequest aracının arrival_location konumundan departure_location konumuna dolaylı olarak seyahat edilen mesafeler için geçerli değildir.

fixed_cost

double

Bu araç bir gönderimi yönetmek için kullanılıyorsa sabit maliyet uygulanır.

used_if_route_is_empty

bool

Bu alan, yalnızca rotalarında herhangi bir sevkiyat hizmeti sunulmayan araçlar için geçerlidir. Bu durumda aracın kullanılmış olarak kabul edilip edilmeyeceğini belirtir.

True (doğru) ise araç, herhangi bir sevkiyat hizmeti vermese bile başlangıç konumundan bitiş konumuna kadar gider ve başlangıcından itibaren oluşan süre ve mesafe maliyetleriyle birlikte gider --> dikkate alınır.

Aksi takdirde, bu araç için başlangıç noktasından bitiş konumuna kadar gitmez ve bu araç için break_rule veya gecikme (TransitionAttributes kalkışlı) planlanmaz. Bu durumda aracın ShipmentRoute özelliği, araç dizini ve etiketi dışında herhangi bir bilgi içermez.

route_duration_limit

DurationLimit

Sınır, aracın rotasının toplam süresine uygulanır. Belirli bir OptimizeToursResponse için aracın rota süresi, vehicle_end_time ile vehicle_start_time arasındaki farktır.

travel_duration_limit

DurationLimit

Sınır, aracın rotasının seyahat süresine uygulanır. Belirli bir OptimizeToursResponse için rota seyahat süresi, tüm transitions.travel_duration değerlerinin toplamıdır.

route_distance_limit

DistanceLimit

Aracın rotasının toplam mesafesine uygulanan sınır. Belirli bir OptimizeToursResponse için rota mesafesi, tüm transitions.travel_distance_meters noktalarının toplamıdır.

extra_visit_duration_for_visit_type

map<string, Duration>

Visit_types dizelerinden sürelere kadar olan bir haritayı belirtir. Süre, belirtilen visit_types ile ziyaretlerde VisitRequest.duration öğesine ek olarak alınacak süredir. Bu ek ziyaret süresi, cost_per_hour belirtilirse maliyet ekler. Anahtarlar (ör. visit_types) boş dize olamaz.

Bir ziyaret isteğinin birden fazla türü varsa haritadaki her tür için bir süre eklenir.

break_rule

BreakRule

Bu araçta uygulanacak ara programını açıklar. Boşsa bu araç için ara verilmez.

label

string

Bu araç için bir etiket belirtir. Bu etiket, yanıtta karşılık gelen ShipmentRoute öğesinin vehicle_label öğesi olarak bildirildi.

ignore

bool

Değer true ise used_if_route_is_empty false (yanlış) değerine ayarlanmalıdır ve bu araç kullanılmadan kalır.

injected_first_solution_routes bölgesinde yoksayılan araç tarafından bir gönderim yapılırsa bu işlem ilk çözümde atlanır ancak yanıtta ücretsiz olarak gerçekleştirilebilir.

injected_solution_constraint içinde yoksayılan bir araç tarafından bir gönderim yapılırsa ve ilgili teslim alma/teslimat araçta kalacak şekilde kısıtlanırsa (ör. RELAX_ALL_AFTER_THRESHOLD seviyesine gevşetilmezse) yanıtta atlanır. Bir gönderide allowed_vehicle_indices alanı boş değilse ve izin verilen tüm araçlar yok sayılırsa yanıtta atlanır.

travel_duration_multiple

double

Bu aracın seyahat sürelerini artırmak veya azaltmak için kullanılabilen çarpma faktörünü belirtir. Örneğin bu değerin 2.0 olarak ayarlanması, bu aracın daha yavaş olduğu ve seyahat sürelerinin standart araçlardakinin iki katı olduğu anlamına gelir. Bu katsayı, ziyaret sürelerini etkilemez. cost_per_hour veya cost_per_traveled_hour belirtilirse maliyeti etkiler. [0,001, 1000.0] aralığında olmalıdır. Politika ayarlanmadan bırakılırsa araç standarttır, bu katsayı ise 1, 0 olarak kabul edilir.

UYARI: Bu katsayı uygulandıktan sonra herhangi bir sayısal işlem yapılmadan önce seyahat süreleri en yakın saniyeye yuvarlanır. Bu nedenle, küçük bir sayının katsayısı hassasiyet kaybına neden olabilir.

Ayrıca aşağıdaki extra_visit_duration_for_visit_type bölümüne bakın.

DurationLimit

Bir aracın rotanın maksimum süresini tanımlayan sınır. Sert veya yumuşak olabilir.

Bir esnek sınır alanı tanımlandığında, hem esnek maksimum eşiği hem de ilişkili maliyeti birlikte tanımlanmalıdır.

Alanlar
max_duration

Duration

Süreyi en fazla max_duration olacak şekilde sınırlayan kesin bir sınır.

soft_max_duration

Duration

Maksimum süre sınırı uygulanmayan, ancak ihlal edildiğinde rotanın ücretlendirilen bir sınırı olan sabit bir sınır. Bu maliyet, aynı birimle modelde tanımlanan diğer maliyetlere eklenir.

Tanımlanmışsa soft_max_duration negatif olmayan bir sayı olmalıdır. max_duration da tanımlıysa soft_max_duration, max_duration'dan kısa olmalıdır.

quadratic_soft_max_duration

Duration

Maksimum süre sınırı uygulanmayan, ancak ihlal edildiğinde rotanın süresiyle ikinci dereceden bir maliyet doğurduğu hafif bir sınır. Bu maliyet, aynı birimle modelde tanımlanan diğer maliyetlere eklenir.

Tanımlanmışsa quadratic_soft_max_duration negatif olmayan bir sayı olmalıdır. max_duration de tanımlıysa quadratic_soft_max_duration, max_duration değerinden küçük ve fark bir günden fazla olmamalıdır:

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

soft_max_duration eşiğinin ihlal edilmesi durumunda oluşan saat başına maliyet. Süre eşiğin altındaysa ek maliyet 0 olur. Aksi takdirde maliyet, süreye aşağıdaki şekilde bağlı olur:

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

Maliyet negatif olmamalıdır.

cost_per_square_hour_after_quadratic_soft_max

double

quadratic_soft_max_duration eşiğinin ihlal edilmesi durumunda oluşan saat başına maliyet.

Süre eşiğin altındaysa ek maliyet 0 olur. Aksi takdirde maliyet, süreye aşağıdaki şekilde bağlı olur:

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

Maliyet negatif olmamalıdır.

LoadLimit

Bir araca uygulanan yük sınırını tanımlar (ör. "bu kamyon en fazla 3.500 kg taşıyabilir". Şu sayfaya göz atın: load_limits.

Alanlar
soft_max_load

int64

Düşük bir yük sınırı. Şu sayfaya göz atın: cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Yük, bu aracın rotasında soft_max_load değerini aşarsa şu maliyet cezası uygulanır (araç başına yalnızca bir kez): (yük - soft_max_load) * cost_per_unit_above_soft_max. Tüm maliyetler toplanır ve Shipment.penalty_cost ile aynı birimde olmalıdır.

start_load_interval

Interval

Rotanın başlangıcında aracın kabul edilebilir yük aralığı.

end_load_interval

Interval

Rotanın sonundaki aracın kabul edilebilir yük aralığı.

max_load

int64

Kabul edilebilir maksimum yük miktarı.

Aralık

Kabul edilebilir yükleme miktarlarının aralığı.

Alanlar
min

int64

Minimum kabul edilebilir yük. ≥ 0 olmalıdır. İkisi de belirtilmişse min değeri ≤ max olmalıdır.

max

int64

Maksimum kabul edilebilir yük. ≥ 0 olmalıdır. Belirtilmemişse maksimum yükleme bu ileti tarafından kısıtlanmaz. İkisi de belirtilmişse min değeri ≤ max olmalıdır.

TravelMode

Araçlar tarafından kullanılabilen ulaşım şekilleri.

Bunlar, Google Haritalar Platformu Routes Preferred API seyahat modlarının bir alt kümesi olmalıdır. Şu sayfaya göz atın: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Sıralamalar
TRAVEL_MODE_UNSPECIFIED Belirtilmemiş ulaşım şekli, DRIVING ile eşdeğerdir.
DRIVING Arabayla yol tariflerine karşılık gelen ulaşım şekli (araba, ...).
WALKING Yaya yol tarifine karşılık gelen ulaşım modu.

UnloadingPolicy

Araçların nasıl indirilebileceğiyle ilgili politika. Yalnızca hem teslim alma hem de teslimat seçeneği bulunan gönderiler için geçerlidir.

Diğer gönderimler, unloading_policy tarihinden bağımsız olarak rotanın herhangi bir yerinde ücretsiz olacaktır.

Sıralamalar
UNLOADING_POLICY_UNSPECIFIED Belirtilmemiş kaldırma politikası; teslimatlar da ilgili teslim almalarından sonra gerçekleşmelidir.
LAST_IN_FIRST_OUT Teslimatlar, teslim alma sırası tersten yapılmalıdır
FIRST_IN_FIRST_OUT Teslimatlar, teslim alma siparişleriyle aynı sırayla yapılmalıdır

Ara nokta

Bir referans noktasını içerir. Referans noktaları, Ziyaret İstekleri'nin varış ve kalkış konumları ile Araçların başlangıç ve bitiş konumlarını gösterir.

Alanlar
side_of_road

bool

İsteğe bağlı. Bu ara noktanın konumunun, aracın yolun belirli bir tarafında durmasına yönelik bir tercih olduğunu belirtir. Bu değeri ayarladığınızda rota, yerden geçer. Böylece araç, konumun merkezine doğru ağırlık verdiği yol kenarında durabilir. Bu seçenek 'WALKING' (YAPIYOR) için çalışmaz yardımcı olur.

Birleştirme alanı location_type. Bir konumu temsil etmenin farklı yolları. location_type şunlardan yalnızca biri olabilir:
location

Location

İsteğe bağlı bir başlık da dahil olmak üzere, coğrafi koordinatlar kullanılarak belirtilen bir nokta.

place_id

string

Referans noktasıyla ilişkilendirilen ÖY yer kimliği.