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 tarihinden itibaren saniyeler.
    • saniye değeri [0, 253402300799], yani [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] biçiminde olmalıdır.
    • nanos ayarlanmalı veya 0 olarak ayarlanmalıdır.
  • google.protobuf.Duration
    • saniye değeri [0, 253402300799], yani [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] biçiminde olmalıdır.
    • nanos ayarlanmalı veya 0 olarak ayarlanmalıdır.
  • google.type.LatLng
    • enlem [-90.0, 90.0] biçiminde olmalıdır.
    • boylam [-180.0, 180.0] içinde olmalıdır.
    • enlem ve boylamlardan en az biri sıfır olmamalıdır.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

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

Bu yöntem Uzun Süreli İşlem'dir (LRO). Optimizasyon girişleri (OptimizeToursRequest mesaj) ve çıkışlar (OptimizeToursResponse mesaj) Cloud Storage'a kullanıcı tarafından belirtilen biçimde 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. Bu, toplam maliyeti en aza indiren araçlar tarafından gerçekleştirilecek 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, toplam maliyeti en aza indiren araçlar tarafından gerçekleştirilecek bir rota grubudur.

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

Amaç, maliyetin ShipmentModel içinde birçok bileşeni olduğu durumlarda toplam maliyeti en aza indiren Vehicle öğelerine ShipmentRoute ataması sağlamaktır.

Yetkilendirme kapsamları

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

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

AggregatedMetrics

ShipmentRoute için toplam metrikler (tüm Transition ve/veya Visit (tüm ShipmentRoute öğelerinde) genelinde OptimizeToursResponse için gösterilir.

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 şuna 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>

Rotanın tamamında (sorumlu çözüm) bu rotadaki her miktar için (çözümlü çözelti) maksimum yük elde edilen maksimum yük, Transition.vehicle_loads değerinin tamamı üzerinde maksimum olarak hesaplanır (çözümlü ShipmentRoute.metrics.max_loads.

BatchOptimizeToursMetadata

Bu türde alan yok.

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

BatchOptimizeToursRequest

Turları eşzamansız bir işlem olarak toplu optimize etme isteği. Her giriş dosyası bir OptimizeToursRequest, 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 proje ve konumu hedefleyin.

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

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

model_configs[]

AsyncModelConfig

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

AsyncModelConfig

Bir optimizasyon modelini eşzamansız olarak çözme bilgileri.

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ş modeli hakkında bilgi.

output_config

OutputConfig

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

BatchOptimizeToursResponse

Bu türde alan yok.

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

BreakRule

Bir araç için zaman araları oluşturmaya yönelik kurallar (ör. öğle yemeği molaları). Mola, aracın mevcut konumunda boşta kaldığı ve herhangi bir ziyaret gerçekleştiremediği ardışık bir süredir. Aşağıdaki durumlarda mola verilebilir:

  • iki ziyaret arasındaki seyahat sırasında (bu, ziyaretten hemen önceki veya sonraki zamandır, ancak ziyaretin ortasında olmayan zamandır). Bu durumda, ziyaretler arasındaki nakliye süresini uzatır.
  • veya araç başlamadan önce (araç, bir molanın ortasında çalışmayabilir). Bu durumda aracın başlangıç zamanı etkilenmez.
  • araç bitiş zamanından sonra da yayınlayın (aynı şekilde, aracın bitiş zamanıyla birlikte).
Alanlar
break_requests[]

BreakRequest

Araların sırası. BreakRequest mesajını inceleyin.

frequency_constraints[]

FrequencyConstraint

Birkaç FrequencyConstraint geçerli olabilir. Bunların tümü, bu BreakRule öğesinin BreakRequest şartlarına uygun olmalıdır. İlgili konu: FrequencyConstraint.

BreakRequest

Her araç için geçerli olan mola sırası (yani numarası ve sırası) önceden bilinmelidir. Tekrarlanan BreakRequest öğeleri, diziyi oluşmaları gereken sırayla tanımlar. 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. Aranın minimum süresi. Pozitif olmalıdır.

FrequencyConstraint

Yukarıda belirtilen araların sıklığını ve süresini "Her 12 saatte en az 1 saatlik bir ara olmalıdır" gibi bir minimum ara sıklığını zorunlu kılarak daha da kısıtlayabilirsiniz. Bunun "12 saatlik herhangi bir kaydırma zaman aralığı içinde en az bir saatlik ara olmalıdır" şeklinde yorumlanabileceği varsayıldığında bu örnek şu şekilde çevrilir: FrequencyConstraint

{
   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 özelliğinde önceden belirtilmiş olan zaman aralıkları ve minimum sürelerin yanı sıra bu tür kısıtlamaların tümüne uyar.

Pratikte, art arda olmayan aralar için FrequencyConstraint geçerli olabilir. Örneğin, aşağıdaki program "1 saat her 12 saat" örneğini dikkate alır:

  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 olmayan. FrequencyConstraint açıklamasına bakın.

max_inter_break_duration

Duration

Zorunlu. Rotada, en azından kısmen mola içermeyen, izin verilen maksimum zaman aralığı duration >= min_break_duration. 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 olmamalıdır.
JSON JavaScript Nesne Gösterimi.
PROTO_TEXT Protokol Arabellekleri metin biçimi. Bkz. https://protobuf.dev/reference/protobuf/textformat-spec/

DistanceLimit

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

Bir hafif sınır tanımlanırsa hem soft_max_meters hem de cost_per_kilometer_above_soft_max tanımlanmalı ve negatif olmamalıdır.

Alanlar
max_meters

int64

Mesafeyi en fazla max_meters olacak şekilde sınırlayan katı bir sınır. Sınır negatif olmayan bir sayı olmalıdır.

soft_max_meters

int64

Maksimum mesafe sınırının zorunlu kılınmadığı ancak ihlal edildiğinde modelde tanımlanan diğer maliyetlerin toplamına ek olarak aynı birimle birlikte bir maliyetle ortaya çıkan yumuşak sınır.

Tanımlanmışsa soft_max_meters değeri max_meters değerinden 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 tahakkuk eder. Mesafe sınırın altındaysa ek maliyet 0 olur. Aksi takdirde maliyeti hesaplamak için kullanılan formül şu şekildedir:

  (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 bir Google Cloud Storage nesnesinin URI'si.

InjectedSolutionConstraint

Hangi ziyaretlerin sınırlanması ve nasıl sınırlanması gerektiği hakkındaki bilgileri içeren, isteğe yerleştirilen çözüm.

Alanlar
routes[]

ShipmentRoute

Yerleştirilecek çözümün yolları. Bazı rotalar orijinal çözümden çıkarılabilir. Rotalar ve atlanan gönderiler, injected_first_solution_routes için listelenen temel geçerlilik 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 kısıtlanır.

ConstraintRelaxation

Bir araç grubu için ziyaretlerin hangi eşik(ler) kısıtlamalarında hangi düzeyde rahatlatılacağını belirtir. skipped_shipment alanında listelenen gönderimler atlanacak şekilde sınırlandırılmıştır; diğer bir deyişle, gerçekleştirilemez.

Alanlar
relaxations[]

Relaxation

vehicle_indices sınırları içinde araç bulunan rotalardaki ziyaretlere uygulanacak tüm ziyaret kısıtlaması gevşemeleri.

vehicle_indices[]

int32

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

interpret_injected_solutions_using_labels doğruysa bir 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 kısıtlanır ve bu rotalara yeni ziyaret eklenemez veya eklenemez. Ayrıca, araç boşsa (ör. hiç ziyaret yoksa ve used_if_route_is_empty modelde false değerine ayarlıysa), aracın routes için başlangıç ve bitiş zamanı tamamen kısıtlanır.

relaxations(i).level, #j ziyaretine uygulanan kısıtlama gevşetme düzeyini belirtir:

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

Benzer şekilde, araç aşağıdaki koşulları karşılıyorsa araç başlangıcı relaxations(i).level rahatlığıyla ayarlanır:

  • vehicle_start_time >= relaxations(i).threshold_time VE
  • relaxations(i).threshold_visit_count == 0 ve araç uçu, aşağıdaki koşullar karşılanıyorsa relaxations(i).level olacak şekilde rahatlatılmıştır:
  • vehicle_end_time >= relaxations(i).threshold_time VE
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Bir ziyaret threshold_visit_count ile karşılanırsa VEYA threshold_time, aynı level değerine sahip iki relaxations ekler: biri yalnızca threshold_visit_count içeren, diğeri yalnızca threshold_time içeren iki relaxations. Bir ziyaret birden fazla relaxations koşulunu karşılıyorsa en rahat düzey geçerli olur. Sonuç olarak, araç başlangıcından rota ziyaretlerine kadar, aracın bitişine kadar, dinlenme seviyesi daha rahat hale gelir, yani rota ilerledikçe rahatlama seviyesi artmıyor.

Herhangi bir relaxations değerinin eşik koşullarını karşılamayan rota ziyaretlerinin zamanlaması ve dizisi tamamen kısıtlanır ve bu adım sıralarına ziyaret eklenemez. Ayrıca, araç başlangıcı veya bitişi 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 koşullarındaki veya sonraki koşullar karşılandığında geçerli kısıtlama gevşetme düzeyi.

threshold_time

Timestamp

level gevşetmenin uygulanabileceği zamanda veya sonrasında.

threshold_visit_count

int32

level gevşetmenin uygulanabileceği tarihte veya sonrasında uygulanabilecek ziyaret sayısı. threshold_visit_count değeri 0 ise (veya ayarlanmadan bırakılırsa) level doğrudan araç çalıştırıldığında uygulanabilir.

route.visits_size() + 1 ise level yalnızca araç tarafına uygulanabilir. route.visits_size() + 1 değerinden fazlaysa level bu rota için hiç uygulanmaz.

Seviye

Ziyarete uygulanan ve eşik koşullarını karşıladığında izleyenler için uygulanan farklı kısıtlama gevşetme düzeylerini ifade eder.

Aşağıdaki sıralama rahatlamayı artırma sırasına göre verilmiştir.

Sıralamalar
LEVEL_UNSPECIFIED

Örtülü varsayılan gevşeme düzeyi: Kısıtlamalar gevşetilmez, yani tüm ziyaretler tamamen kısıtlanır.

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

RELAX_VISIT_TIMES_AFTER_THRESHOLD Ziyaret başlangıç zamanları ve araç başlangıç/bitiş zamanları gevşetilir, ancak her ziyaret aynı araca bağlıdır ve ziyaret sırasına dikkat edilmelidir: Aralarına veya önceden ziyaretlere izin verilmez.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD ile aynıdır, ancak ziyaret sırası da gevşektir: Ziyaretler yalnızca kendi araçlarına bağlıdır.
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD ile aynıdır ancak araç rahattır: Eşik zamanında veya sonrasında ziyaretler tamamen ücretsizdir ve gerçekleştirilemeyebilir.

InputConfig

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizasyonService.BatchOptimizeTours] için bir giriş belirtin.

Alanlar
data_format

DataFormat

Zorunlu. Giriş verisi biçimi.

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

GcsSource

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

Konum

Bir konumu (coğrafi bir nokta ve isteğe bağlı bir başlık) içerir.

Alanlar
lat_lng

LatLng

Ara noktanın coğrafi koordinatları.

heading

int32

Trafiğin akış yönüyle ilişkili pusula istikameti. Bu değer, alma ve bırakma için kullanılacak yolun kenarını belirtmek için kullanılır. Başlık değerleri 0 ile 360 arasında olabilir (0 0 bitiş noktası yönünü, 90 ise teslim tarihi yaklaşan Doğu yönünü vb. belirtir.)

OptimizeToursRequest

Çözülecek gönderim modelini ve optimizasyon parametrelerini tanımlayan bir tur optimizasyonu çözücüye sunulma 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 otomatik olarak bir bölge seçilir.

timeout

Duration

Bu zaman aşımı ayarlanırsa, zaman aşımı süresi dolmadan veya eşzamanlı istekler için sunucu son tarihine (hangisi daha önceyse) ulaşılmadan sunucu bir yanıt döndürür.

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

model

ShipmentModel

Çözülmesi gereken gönderim modeli.

solving_mode

SolvingMode

Varsayılan olarak çözme modu 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ü bulması için optimizasyon algoritmasına rehberlik etme.

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

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

  • vehicle_index, tüm rotalar için kapsama alanında olmalı ve yinelenmemelidir.
  • shipment_index ve visit_request_index aralık dahilinde olmalıdır.
  • Bir gönderiye yalnızca tek bir rotada referans verilebilir.
  • gel-al gönderimin teslim alınması teslimattan önce gerçekleştirilmelidir.
  • bir gönderim için en fazla bir teslim alma veya teslimat alternatifi gerçekleştirilemez.
  • tüm rotalarda, süreler artmaktadır (yani, vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • Gönderim yalnızca izin verilen bir araç üzerinde gerçekleştirilebilir. Shipment.allowed_vehicle_indices boşsa veya vehicle_index, Shipment.allowed_vehicle_indices içinde yer alıyorsa araca izin verilir.

Eklenen çözüm uygun değilse doğrulama hatası döndürülmeyebilir ve bunun yerine uygulanabilir olmadığını belirten bir hata döndürülebilir.

injected_solution_constraint

InjectedSolutionConstraint

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

Eklenen çözüm uygun değilse doğrulama hatası döndürülmeyebilir ve bunun yerine uygulanabilir olmadığını belirten bir hata döndürülebilir.

refresh_details_routes[]

ShipmentRoute

Boş bırakılmamışsa belirtilen rotalar, temel ziyaret veya seyahat süresi sırası değiştirilmeden yenilenir: Yalnızca diğer ayrıntılar güncellenir. Bu işlem modeli çözmez.

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

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

interpret_injected_solutions_using_labels

bool

Doğruysa:

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

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

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

Rota ziyaretlerinin veya rotaların enjekte edilen çözümden tamamen kaldırılması, ima edilen kısıtlamaları etkileyebilir ve bu da çözümde, doğrulama hatalarında veya uygulanabilirlikte değişikliğe yol açabilir.

NOT: Arayan kişi, her Vehicle.label (yanıt Shipment.label), enjekte edilen solüsyonda kullanılan OptimizeToursResponse'yi üreten geçmiş istek ve yerleştirilen çözümü içeren mevcut istek olmak üzere iki ilgili istekte kullanılan araç (sorumlu gönderim) varlığını benzersiz şekilde tanımlar. Yukarıda açıklanan benzersizlik kontrolleri bu gereksinimi garanti etmek için yeterli değildir.

consider_road_traffic

bool

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

populate_polylines

bool

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

populate_transition_polylines

bool

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

allow_large_deadline_despite_interruption_risk

bool

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

use_geodesic_distances

bool

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

label

string

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

geodesic_meters_per_second

double

use_geodesic_distances doğru olduğunda bu alanın ayarlanması gerekir ve seyahat sürelerini hesaplamak için uygulanan hızı tanımlar. Değeri en az 1,0 metre/saniye olmalıdır.

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 INVALID_ARGUMENT hata yüküne iliştirilir. Ancak çözüm_mode=VALIDATE_ONLY olarak kabul edilmez: OptimizeToursResponse.validation_errors alanına bakın. Varsayılan olarak 100 değeri kullanılır ve 10.000 ile sınırlıdır.

SearchMode

Arama davranışını tanımlayan mod, gecikmenin veya çözüm kalitesinin karşılaştırmasını içerir. Tüm modlarda, genel istek son tarihi uygulanır.

Sıralamalar
SEARCH_MODE_UNSPECIFIED RETURN_FAST ile eşdeğer, belirtilmemiş arama modu.
RETURN_FAST İlk iyi çözümü bulduktan sonra aramayı durdurun.
CONSUME_ALL_AVAILABLE_TIME Daha iyi çözümler aramaya tüm vaktinizi harcayın.

SolvingMode

Çözücünün isteği nasıl ele alacağını tanımlar. VALIDATE_ONLY dışındaki tüm modlarda, istek geçersizse INVALID_REQUEST hatası alırsınız. Döndürülen hataların sayısını sınırlamak için max_validation_errors sayfasına bakın.

Sıralamalar
DEFAULT_SOLVE Modeli çözün.
VALIDATE_ONLY Modeli yalnızca çözmeden doğrular: Mümkün olduğunca çok 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 (yanıtta status ve routes ayarlanmamıştır). injected_solution_constraint rotalarında uygulanabilirlik olmadığı tespit edilirse OptimizeToursResponse.validation_errors alanı doldurulur ve OptimizeToursResponse.skipped_shipments boş bırakılır.

ÖNEMLİ: Buraya tüm uygun olmayan gönderiler değil, yalnızca ön işleme sırasında uygun olmadığı belirlenenler iade edilir.

OptimizeToursResponse

Her aracın takip ettiği rotaları, atlanan sevkiyatı ve çözümün toplam maliyetini içeren bir tur optimizasyonu problemi çözüldü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önderimlerin listesi.

validation_errors[]

OptimizeToursValidationError

Bağımsız olarak tespit edebildiğimiz tüm doğrulama hatalarının listesi. OptimizeToursValidationError iletisi için "BİRDEN FAZLA HATA" açıklamasına bakın.

metrics

Metrics

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

Metrikler

Tüm rotalardan toplanan genel metrikler.

Alanlar
aggregated_route_metrics

AggregatedMetrics

Rotalar üzerinde 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 gönderimlerin sayısı.

used_vehicle_count

int32

Kullanılan araç sayısı. Not: Bir araç rotası boşsa ve Vehicle.used_if_route_is_empty doğruysa araç kullanılmış olarak kabul edilir.

earliest_vehicle_start_time

Timestamp

İkinci el bir aracın en erken başlangıç zamanı. ShipmentRoute.vehicle_start_time tarihindeki 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 tarihindeki tüm ikinci el araçlar üzerinde maksimum değer olarak hesaplanır.

costs

map<string, double>

Çözümün maliyeti (maliyetle ilgili istek alanlarına göre ayrılır). Anahtarlar, OptimizeToursRequest girişine (ör. "model.shipments.pickups.cost") göre proto yollarıdır ve değerler, ilgili maliyet alanı tarafından oluşturulan ve tüm çözüm genelinde toplanan toplam maliyettir. Başka bir deyişle maliyetler, ["model.shipments.pickups.cost"] çözüm üzerindeki tüm teslim alma maliyetlerinin toplamıdır. TransitionAttributes ile ilgili olan ve 2022.01 itibarıyla yalnızca toplu şekilde raporlanan TransitionAttribute maliyetleri hariç, modelde tanımlanan tüm maliyetler burada ayrıntılı olarak raporlanı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 FAZLA HATA: Birden çok hata olduğunda, doğrulama işlemi bunlardan birkaçının çıktısını almaya çalışır. Tıpkı derleyici gibi, bu da kusursuz bir süreçtir. Bazı doğrulama hataları "önemli" olur, yani tüm doğrulama işlemini durdururlar. Bu durum, diğerlerinde olduğu gibi display_name="UNSPECIFIED" hataları için de geçerlidir. Bazıları doğrulama işleminin diğer hataları atlamasına neden olabilir.

KARARLILIK: code ve display_name son derece kararlı olacaktır. Ancak zaman içinde yeni kodlar ve görünen adlar görünebilir. Bu durum, yeni hata eskisini gizlediğinden belirli bir (geçersiz) isteğin farklı bir (code, display_name) çiftine neden olabilir (bkz. "BİRDEN ÇOK HATA").

REFERANS: Tüm (kod, ad) çiftlerin listesi:

  • UNSPECIFIED = 0;
  • VALIDATION_TIMEOUT_ERROR = 10; Doğrulama, verilen son tarihe kadar tamamlanamadı.
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_MODE = 1201;
    • REQUEST_OPTIONS_INVALID_MAX_VALIDATION_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_AFTER_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_AFTER_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 = 2800;
    • 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_AFTER_END_TIME = 2805;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_AFTER_SOFT_END_TIME = 2807;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_WINDOW_COST_AFTER_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_AFTER_SOFT_END_TIME = 2811;
    • TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2812;
    • TIME_WINDOW_START_TIME_AFTER_SOFT_START_TIME = 2813;
    • TIME_WINDOW_SOFT_START_TIME_AFTER_END_TIME = 2814;
    • TIME_WINDOW_START_TIME_AFTER_SOFT_END_TIME = 2815;
    • TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • TIME_WINDOW_COST_AFTER_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_CONFLICTING_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_DESTINATION_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_CONFLICTING_DESTINATION_TAGS_FIELDS = 3007;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_NEGATIVE_OR_NAN = 3008;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_NEGATIVE_VALUE = 3.100;
  • 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_AFTER_SOFT_MAX = 3601;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3602;
    • DISTANCE_LIMIT_COST_AFTER_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_AFTER_SOFT_MAX = 3802;
    • DURATION_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3803;
    • DURATION_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
    • DURATION_LIMIT_INVALID_COST_AFTER_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_DIFF_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;
    • 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_USED_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_MINIMUM_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_AFTER_GLOBAL_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4809;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4810;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4811;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4812;
    • BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
    • BREAK_FREQUENCY_MISSING_MAX_INTER_BREAK_DURATION = 4814;
    • BREAK_FREQUENCY_MISSING_MIN_BREAK_DURATION = 4815;
  • 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

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 alınması aşağıdaki şekilde yapılabilir:

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

Ancak belirli bir hata kodu için fields 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 bire bir eşleşme var (kod != "UNSPECIFIED" olduğunda).

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

offending_values

string

Alanların değerlerini içerebilir. Bu seçenek her zaman kullanılamayabilir. Bu aracı kesinlikle kullanmamalı ve yalnızca manuel model hata ayıklaması için kullanmalısınız.

FieldReference

Doğrulama hatası için bir bağlam belirtir. FieldReference, her zaman bu dosyadaki belirli bir alana başvuruda bulunur ve aynı hiyerarşik yapıyı izler. Örneğin, 5 numaralı aracın start_time_windows öğesinin 2. öğesini şunu kullanarak belirtebiliriz:

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

Ancak, mesajı karmaşık hale getirmemek için OptimizeToursRequest veya ShipmentModel gibi üst düzey öğeleri atlarız.

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.routeoptimization.v1.RouteOptimizasyonService.BatchOptimizeTours] sonuçları için bir hedef belirtin.

Alanlar
data_format

DataFormat

Zorunlu. Çıkış veri 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, bir teslim alma noktasından teslimatlarından birine gönderimi. Sevkiyatın tamamlanabilmesi için benzersiz bir aracın teslim alma konumlarından birini ziyaret etmesi (ve yedek kapasitelerini buna uygun şekilde azaltması), ardından daha sonra teslimat konumlarından birini ziyaret etmesi (ve dolayısıyla yedek kapasitelerini buna uygun şekilde artırması) gerekir.

Alanlar
display_name

string

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

pickups[]

VisitRequest

Gönderimle ilgili teslim alma alternatifleri grubu. Belirtilmezse aracın yalnızca teslimatlara karşılık gelen bir konumu ziyaret etmesi gerekir.

deliveries[]

VisitRequest

Gönderimle ilişkili teslimat alternatifleri grubu. Belirtilmezse aracın yalnızca teslim alma işlemlerine karşılık gelen bir konumu ziyaret etmesi gerekir.

load_demands

map<string, Load>

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

allowed_vehicle_indices[]

int32

Bu gönderimi gerçekleştirebilecek araç grubu. Boşsa tüm araçlar bunu yapabilir. Araçlar, ShipmentModel vehicles listesinde dizinlerine göre verilir.

costs_per_vehicle[]

double

Bu gönderim her araç tarafından teslim edildiğinde ortaya çıkan maliyeti belirtir. Belirtilmiş olması durumunda HERHANGİ BİRİNİ içermelidir:

  • 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.
  • modeldeki taşıtlarla aynı sayıda öğe bulunur. i'inci öğe, modelin i numaralı aracına 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 belgesinin geçerli olduğu araçların endeksleri. Boş değilse costs_per_vehicle ile aynı sayıda öğeye sahip olmalıdır. Araç dizini birden fazla kez belirtilemez. Bir araç costs_per_vehicle_indices kapsamı dışında bırakılırsa 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ı ve gönderimde en azından teslim alma ve teslimat bilgileri bulunmalıdır.

Örneğin, seçilen teslim alma alternatifinden doğrudan seçili teslimat alternatifine geçmek için geçen en kısa süreyi belirtin. Daha sonra pickup_to_delivery_absolute_detour_limit politikasının ayarlanması şu yaptırımları uygular:

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 belirtilmişse olası her teslim alma/teslimat çifti için daha kısıtlayıcı sınır kullanılır. 2017/10 tarihi itibarıyla, tali güzergahlar yalnızca seyahat süreleri araca bağlı olmadığında desteklenmektedir.

pickup_to_delivery_time_limit

Duration

Bir gönderinin teslim alınma tarihinden teslimatın başlamasına kadar olan maksimum süreyi belirtir. Belirtilmişse negatif olmamalı ve gönderimde en azından teslim alma ve teslimat bilgileri bulunmalıdır. Bu, teslim alma ve teslimat için hangi alternatiflerin seçildiğine veya aracın hızına bağlı değildir. Bu, maksimum sapma kısıtlamalarıyla birlikte belirtilebilir: Çözüm, her iki özelliği de dikkate alacaktır.

shipment_type

string

Bu gönderim için bir "tür" belirten boş olmayan dize. 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 konusuna bakın).

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

label

string

Bu gönderim için bir etiket belirtir. Bu etiket, ilgili ShipmentRoute.Visit öğesinin shipment_label içindeki yanıtta bildirilmektedir.

ignore

bool

Doğruysa bu gönderimi atlayın ancak penalty_cost uygulamayın.

Modelde shipment_type_requirements olduğunda gönderimin yoksayılması doğrulama hatasına neden olur.

injected_first_solution_routes veya injected_solution_constraint içinde gerçekleştirilen bir gönderimin yoksayılmasına 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

Gönderim tamamlanmazsa bu ceza rotaların toplam maliyetine eklenir. Bir gönderim, teslim alma ve teslimat alternatiflerinden biri ziyaret edildiyse tamamlanmış olarak kabul edilir. Maliyet, modeldeki maliyetle ilgili diğer tüm alanlar için kullanılan aynı birimle ifade edilebilir ve pozitif olmalıdır.

ÖNEMLİ: Bu ceza belirtilmezse süresiz olarak kabul edilir, yani gönderimin tamamlanmış olması 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ı ve gönderimde en azından teslim alma ve teslimat bilgileri bulunmalıdır.

Örneğin, seçilen teslim alma alternatifinden doğrudan seçili teslimat alternatifine geçmek için geçen en kısa süreyi belirtin. Daha sonra pickup_to_delivery_relative_detour_limit politikasının ayarlanması şu yaptırımları uygular:

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 belirtilmişse olası her teslim alma/teslimat çifti için daha kısıtlayıcı sınır kullanılır. 2017/10 tarihi itibarıyla, tali güzergahlar yalnızca seyahat süreleri araca bağlı olmadığında desteklenmektedir.

Yük

Ziyaret gerçekleştirirken, teslim almaysa araç yüküne önceden tanımlanmış bir tutar eklenebilir veya teslimat için bu tutar çıkarılabilir. Bu mesajda söz konusu tutar tanımlanır. Şu sayfaya göz atın: load_demands.

Alanlar
amount

int64

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

VisitRequest

Araç tarafından yapılabilecek bir ziyaret isteği: Coğrafi konumu (veya aşağıya bakın) iki tane olmak üzere, zaman aralıklarıyla gösterilen açılış ve kapanış saatleri ve hizmet süresi (aracın ürünleri almak veya bırakmak için araca ulaştıktan sonra harcadığı süre) vardır.

Alanlar
arrival_location

LatLng

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

arrival_waypoint

Waypoint

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

departure_location

LatLng

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

departure_waypoint

Waypoint

Bu VisitRequest tamamlandıktan sonra aracın hareket ettiği ara nokta. arrival_waypoint ile aynıysa atlanabilir. Gönderim modelinde 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 kısıtlayan zaman aralıkları. Aracın varış saati penceresinin dışında hareket edebileceğini, yani varış saatinin + sürenin bir zaman aralığının içinde olmasının gerekmediğini unutmayın. Bu durum, araç TimeWindow.start_time tarihinden önce gelirse bekleme süresine neden olabilir.

TimeWindow yoksa, araç bu ziyareti her zaman gerçekleştirebilir.

Zaman aralıkları ayrı olmalıdır, yani hiçbir zaman aralığı başka bir zaman aralığıyla çakışmamalı veya bitişik olmamalı ve artan düzende 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, yani aracın varış ve kalkış arasında harcadığı süre (olası bekleme süresine eklenmek üzere; bkz. time_windows).

cost

double

Bu ziyaret isteği için araç rotası üzerinden hizmet verme maliyeti. Bu özellik, bir gönderimin her bir alternatif teslim alma veya teslimatı 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 taleplerini yükle. Bu, Shipment.load_demands alanı gibidir ancak Shipment öğesinin tamamı yerine yalnızca bu VisitRequest için geçerlidir. Burada listelenen talepler, Shipment.load_demands politikasında listelenen taleplere eklenir.

visit_types[]

string

Ziyaret türlerini belirtir. Bu değer, bir aracın bu ziyareti tamamlaması için gereken ek süreyi ayırmak üzere 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 bildirilmektedir.

ShipmentModel

Gönderim modeli, bir araç grubu tarafından gerçekleştirilmesi gereken bir dizi gönderim içerir ve genel maliyeti en aza indirir. Bu da toplam maliyeti ifade eder:

  • araçların rota belirleme maliyeti (toplam süre başına maliyet, seyahat süresi başına maliyet ve tüm araçlar için sabit maliyet toplamı).
  • yerine getirilmemiş gönderim cezaları nedeniyle.
  • Sevkiyatların küresel süresinin maliyeti
Alanlar
shipments[]

Shipment

Modelde gerçekleştirilmesi gereken gönderim grubu.

vehicles[]

Vehicle

Ziyaretler için kullanılabilecek araç grubu.

global_start_time

Timestamp

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

Modelin zaman aralığı bir yıldan kısa olmalıdır. Yani global_end_time ve global_start_time, birbirinden 31536000 saniye içinde olmalıdır.

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

global_end_time

Timestamp

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

global_duration_cost_per_hour

double

Genel planın "global süresi", tüm araçların en erken geçerli başlangıç zamanı ile en geç geçerli bitiş zamanı arasındaki farktır. Kullanıcılar örneğin, işin en erken tamamlanmasına yönelik optimizasyon yapmak için bu miktara saatlik 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 ya da duration_distance_matrix_dst_tags boş olamaz.

Kullanım örnekleri:

  • İki konum vardır: locA ve locB.
  • 1 araç locA'da rotasına başlayıp locA konumunda sona erdiriyor.
  • locB'de 1 teslim alma ziyareti 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.
  • 1 araç, "hızlı" matrisi kullanarak locA'da rotasına başlayıp locB'de sona erdiriyor.
  • 1 araç, "yavaş" matrisini kullanarak locB'de rotasına başlayıp konum işaretinde sona erdiriyor.
  • 1 araç, "hızlı" matrisi kullanarak locB'de rotasına başlayıp locB'de sona erdirir.
  • locC'de 1 teslim alma ziyareti 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) etiketini içeren ziyaretlerle i matrisindeki diğer ziyaretlere olan ziyaretlerle olan süre ve mesafeleri tanımlar.

Etiketler, VisitRequest.tags veya Vehicle.start_tags değerine karşılık gelir. Belirli bir VisitRequest veya Vehicle, bu alandaki bir etiketle tam olarak eşleşmelidir. Bir Vehicle öğesinin kaynak, hedef ve matris etiketlerinin aynı olabileceğini, ayrıca VisitRequest etiketinin kaynak ve hedef etiketlerinin aynı olabileceğini unutmayın. Tüm etiketler farklı olmalı ve boş dize olmamalıdır. Bu alan boş değilse duration_distance_matrices boş bırakılmamalı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) (resp. duration_distance_matrices(i).rows(j).meters(k)), i matrisinde duration_distance_matrix_src_tags(j) etiketli ziyaretlerden duration_distance_matrix_dst_tags(k) etiketine sahip ziyaretlere kadar olan yolculuğun süresini (yani mesafe) tanımlar.

Etiketler, VisitRequest.tags veya Vehicle.start_tags değerine karşılık gelir. Belirli bir VisitRequest veya Vehicle, bu alandaki bir etiketle tam olarak eşleşmelidir. Bir Vehicle öğesinin kaynak, hedef ve matris etiketlerinin aynı olabileceğini, ayrıca VisitRequest etiketinin kaynak ve hedef etiketlerinin aynı olabileceğini unutmayın. Tüm etiketler farklı olmalı ve boş dize olmamalıdır. Bu alan boş değilse duration_distance_matrices boş bırakılmamalıdır.

transition_attributes[]

TransitionAttributes

Modele eklenen geçiş özellikleri.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Uyumsuz shipping_types grupları (bkz. ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

shipment_type gereksinimleri (bkz. ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

Modelde uygulanması gereken öncelik kuralları grubu.

max_active_vehicles

int32

Maksimum aktif araç sayısını kısıtlar. Rotasında en az bir gönderim yapılan bir araç aktiftir. Bu, araçtan daha az sürücünün olduğ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ı.

DurationDistanceMatrix

Ziyaret ve araç başlangıç konumlarından ziyaret edilene kadar süre ve mesafe matrisini, ayrıca aracın bitiş konumlarını belirtir.

Alanlar
rows[]

Row

Süre ve mesafe matrisinin satırlarını belirtir. ShipmentModel.duration_distance_matrix_src_tags kadar öğeye sahip olmalıdır.

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çerlidir ve yalnızca tek bir matris olabilir.

Her araç başlangıcı tam olarak bir matrisle eşleşmelidir. Yani, aracın start_tags alanından tam olarak bir tanesi, bir matrisin (ve yalnızca o matrisin) vehicle_start_tag ile eşleşmelidir.

Tüm matrislerin vehicle_start_tag değeri farklı olmalıdır.

Satır

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

Alanlar
durations[]

Duration

Belirli bir satır için süre değerleri. ShipmentModel.duration_distance_matrix_dst_tags kadar öğeye sahip olmalıdır.

meters[]

double

Belirli bir satır için mesafe değerleri. Modeldeki mesafelerle ilgili herhangi bir maliyet veya kısıtlama söz konusu değilse bu alan boş bırakılabilir; aksi takdirde, durations kadar öğe içermelidir.

PrecedenceRule

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

Çeşitli öncelikler, aynı (veya ilgili) etkinliklere, ör. "B'nin teslimi A'nın teslimatından sonra gerçekleşir" ve "C'nin teslim alınması B'nin tesliminden sonra gerçekleşir".

Ayrıca, öncelikler yalnızca her iki gönderim de gerçekleştirildiğinde ve başka bir şekilde yoksayıldığında geçerli olur.

Alanlar
first_is_delivery

bool

"İlk" etkinliğin bir yayın olup olmadığını gösterir.

second_is_delivery

bool

"İkinci" etkinliğin bir yayın olup olmadığını gösterir.

offset_duration

Duration

"İlk" ve "ikinci" etkinlik arasındaki göreli konum. Negatif olabilir.

first_index

int32

"İlk" etkinliğin gönderim dizini. Bu alan belirtilmelidir.

second_index

int32

"İkinci" etkinliğin gönderim dizini. Bu alan belirtilmelidir.

ShipmentRoute

Bir aracın rotası, zaman ekseni üzerinde şu şekilde ayrıştırılabilir (n ziyaret olduğu varsayılır):

  |            |            |          |       |  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 fark olduğunu unutmayın:

  • aracın başlangıç ve bitişi ile her ziyaretin başlangıcı ve bitişi (diğer adıyla varış ve gidiş) gibi "planlı etkinlikler". Bunlar belirli bir saniyede gerçekleşir.
  • "zaman aralıkları" (ör. ziyaretlerin kendisi ve ziyaretler arasındaki geçiş). Zaman aralıkları bazen sıfır süreye (aynı saniyede başlayıp biten) olabilse de genellikle pozitif bir süreye sahiptir.

Sabitler:

  • n ziyaret varsa n+1 geçişi vardır.
  • Bir ziyaretin çevresinde her zaman kendisinden önce gelen bir geçiş (aynı dizin) ve sonrasında bir geçiş bulunur (dizin + 1).
  • Aracın çalıştırılmasından sonra her zaman #0 geçiş yapılır.
  • Araç bitişinden önce her zaman #n geçişi bulunur.

Yakınlaştırdığınızda 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, BREAKS, DELAY ve BEKLEME işlevlerinin nasıl düzenlenebileceği aşağıda anlatılmıştır.

  • Birbiriyle çakışmaz.
  • DELAY benzersizdir ve bir sonraki ziyaretten (veya aracın bitişinden) hemen önce olan ardışık bir dönem olmalıdır. Dolayısıyla, başlangıç ve bitiş zamanını öğrenmek için gecikme süresini bilmek yeterlidir.
  • BREAKS birbirini takip eden ve çakışmayan zaman aralıklarıdır. Yanıt, her aranın başlangıç zamanını ve süresini belirtir.
  • TRAVEL ve WAIT "öncelikli" özelliklerdir: Bu geçişler sırasında birkaç kez kesintiye uğrayabilirler. Müşteriler seyahatin "mümkün olan en kısa sürede" gerçekleştiğini ve "bekleme"nin, kalan süreyi dolduracağını varsayabilir.

(Karmaşık) bir ö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

ShipmentModel kaynağındaki diziniyle tanımlanan, rotayı yürüten araç.

vehicle_label

string

Belirtilmişse bu rotayı yürüten aracın etiketi (belirtilirse ShipmentModel.vehicles(vehicle_index).label değerine eşit).

vehicle_start_time

Timestamp

Aracın rotaya başladığı saat.

vehicle_end_time

Timestamp

Aracın rotasını bitirdiği saat.

visits[]

Visit

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

transitions[]

Transition

Rota için sıralı geçiş listesi.

has_traffic_infeasibilities

bool

OptimizeToursRequest.consider_road_traffic, doğru değerine ayarlandığında bu alan, rota zamanları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, ziyarete ve araç sürelerine uygun şekilde hareket etmeye devam etmek için yeterli zaman olmayabilir. Örneğin,

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

Next_visit tarihinde varış, trafik nedeniyle travel_duration(previous_visit, next_visit) seyahat süresi tahmininin artması nedeniyle büyük olasılıkla geçerli zaman aralığından daha geç olacaktır. Ayrıca seyahat süresi tahminlerindeki ve ziyaret ya da mola zaman aralığı kısıtlamalarındaki artış nedeniyle aranın ziyaretle çakışmaya zorlanması da mümkündür.

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 rotada ilerleyen araç için molalar planlandı. 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 genelinde toplanır.

route_costs

map<string, double>

Rotanın, maliyetle ilgili istek alanlarına göre ayrılmış maliyeti. Anahtarlar, OptimizeToursRequest girişine (ör. "model.shipments.pickups.cost") göre proto yollarıdır ve değerler, ilgili maliyet alanı tarafından oluşturulan ve rotanın tamamında toplanan toplam maliyettir. Başka bir deyişle maliyetler, ["model.shipments.pickups.cost"] rota üzerindeki tüm teslim alma maliyetlerinin toplamıdır. TransitionAttributes ile ilgili olan ve 2022.01 itibarıyla yalnızca toplu şekilde raporlanan TransitionAttribute maliyetleri hariç, modelde tanımlanan tüm maliyetler burada ayrıntılı olarak raporlanı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

Bir ç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 üzerinde iki olay arasında geçiş. ShipmentRoute açıklamasına bakın.

Araçta start_location ve/veya end_location yoksa ilgili seyahat metrikleri 0 olur.

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ıysa bu boole doğru olarak ayarlanır. Bu, geçici (gerçek zamanlı trafik sunucularında nadir görülen) veya kalıcı (bu konum için veri yok) olabilir.

delay_duration

Duration

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

break_duration

Duration

Varsa bu geçiş sırasında meydana gelen araların süre toplamı. Her aranın başlangıç zamanı ve süresiyle ilgili ayrıntılar ShipmentRoute.breaks bölümünde depolanır.

wait_duration

Duration

Bu geçiş sırasında bekleme süresi. Bekleme süresi, boşta kalma süresine karşılık gelir ve ara zamanını 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 olması açısından 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 ek olarak geçerli olur: `total_duration = Travel_duration + delay_duration
  • ara_süresi + bekleme_süresi`.
start_time

Timestamp

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

route_polyline

EncodedPolyline

Geçiş sırasında takip edilen 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>

Bu geçiş sırasında araç yüklemeleri (bu aracın Vehicle.load_limits bölümünde görünen veya bu rotadaki bazı gönderimlerde sıfır dışında Shipment.load_demands olan her tür için).

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

VehicleLoad

Belirli bir tür için, yolun 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ç üzerindeki yük miktarı. Yük birimi, genellikle tür ile gösterilir. Şu sayfaya göz atın: Transition.vehicle_loads.

Şu adrese gidin:

Bir rota üzerinde gerçekleştirilen ziyaret. Bu ziyaret, bir Shipment teslim alma veya teslimata karşılık geliyor.

Alanlar
shipment_index

int32

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

is_pickup

bool

Doğruysa, ziyaret bir Shipment teslimine karşılık gelir. Aksi takdirde, teslimata karşılık gelir.

visit_request_index

int32

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

start_time

Timestamp

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

load_demands

map<string, Load>

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

detour

Duration

Güzergah, ziyaretten önce güzergâh üzerinde gidilen sevkiyatlar ve zaman aralıklarından kaynaklanan olası bekleme süreleri nedeniyle ek rotadan sapma süresi. Ziyaret teslimatsa, sapma, 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

shipping_type [gönderi_türü] özelliğine bağlı olarak gönderimler arasındaki uyumsuzlukları belirtir. Aynı rota üzerinde uyumsuz olan gönderimlerin gösterilmesi, uyumsuzluk moduna bağlı olarak kısıtlanır.

Alanlar
types[]

string

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

incompatibility_mode

IncompatibilityMode

Uyumsuzluğa mod uygulandı.

IncompatibilityMode

Uyumsuz gönderilerin görünümünün aynı rota üzerinde nasıl kısıtlandığını tanımlayan modlar.

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

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

  • İkisi de yalnızca gel-al (teslimat) veya yalnızca teslimat hizmeti (teslim alma seçeneği değil) şeklindeyse aynı aracı paylaşamazlar.
  • Bir gönderide teslimat, diğerinin teslim alınma işlemi varsa ve eski sevkiyat ikincisi teslim alınmadan önce teslim edilirse bu iki gönderi aynı aracı paylaşabilir.

ShipmentTypeRequirement

Gönderiler arasındaki gereklilikleri, shipping_type [gönderim_türü] değerine göre belirtir. Koşulun ayrıntıları, gereksinim modu ile tanımlanır.

Alanlar
required_shipment_type_alternatives[]

string

dependent_shipment_types uyarınca gerekli olan alternatif gönderim türlerinin listesi.

dependent_shipment_types[]

string

dependent_shipment_types alanında türü olan tüm gönderimler, aynı rota üzerinde required_shipment_type_alternatives türünde en az bir gönderimin ziyaret edilmesini gerektirir.

NOT: shipment_type öğesinin kendisine bağımlı olduğu gereklilik zincirlerine izin verilmez.

requirement_mode

RequirementMode

Koşula mod uygulandı.

RequirementMode

Rota üzerindeki bağımlı sevkiyatların görünümünü tanımlayan modlar.

Sıralamalar
REQUIREMENT_MODE_UNSPECIFIED Belirtilmemiş gereksinim modu. Bu değer asla kullanılmamalıdır.
PERFORMED_BY_SAME_VEHICLE Bu modda tüm "bağımlı" gönderiler, "gerekli" gönderimlerinden en az biriyle aynı aracı paylaşmalıdır.
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME modu sayesinde, tüm "bağımlı" gönderilerin teslim alma sırasında araçlarında en az bir tane "zorunlu" gönderim olması gerekir.

Bu nedenle, "bağımlı" gönderi teslim alma işleminde şunlardan biri olmalıdır:

  • Rota üzerinde teslim edilen yalnızca teslimatın gerekli olduğu "gerekli" bir sevkiyat varsa veya
  • "Gerekli" gönderiden önce rotadan teslim alınmış. "Gerekli" durumdaki gönderimin teslimatı varsa bu teslimat, "bağımlı" gönderimin teslim alınmasından sonra gerçekleştirilmelidir.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Aynı önceki gibi, "bağımlı" gönderilerin teslimat sırasında araçlarında "zorunlu" bir gönderimin bulunması gerekir.

SkippedShipment

Bir çözümdeki gerçekleştirilmemiş gönderimlerin ayrıntılarını belirtir. Önemsiz durumlar ve/veya atlama nedenini belirleyebiliyorsak bunun nedenini burada bildiririz.

Alanlar
index

int32

Dizin, ShipmentModel kaynağındaki gönderim 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 öğesinin üzerindeki yoruma bakın.

Neden

Gönderimin neden atlandığını açıklayabilirsek nedenleri burada listelenir. Neden tüm araçlar için aynı değilse reason 1'den fazla öğeye sahip olur. Atlanan gönderimin yinelenen nedenleri olamaz (example_vehicle_index dışında tüm alanlar aynı olmalıdır). Ö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önderim tüm araçlarla uyumlu değil. Nedenler tüm araçlar için farklı olabilir ancak en az bir aracın "Elma" kapasitesi aşılır (1. araç dahil), en az bir aracın "Armut" kapasitesi 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

Code'un yorumlarına bakın.

example_exceeded_capacity_type

string

Neden kodu DEMAND_EXCEEDS_VEHICLE_CAPACITY ise aşılmış bir kapasite türünü belgeler.

example_vehicle_index

int32

Sebep, 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 de, belirli bir nedenin çözümde diğerinden önce görünüp görünmeyeceğini (ikisinin birlikte geçerli olduğu durumlarda) göstermez.

Sıralamalar
CODE_UNSPECIFIED Bu ayar asla kullanılmamalıdır. Bir gönderinin neden atlandığını anlayamazsak boş neden grubu iade ederiz.
NO_VEHICLE Modelde tüm sevkiyatları olanaksız kılan bir araç yoktur.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Gönderi talebi, bir aracın bazı kapasite türleri için kapasitesini aşıyor. Bu kapasite türlerinden biri example_exceeded_capacity_type.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

Bu gönderimi gerçekleştirmek için gereken minimum mesafe (ör. aracın start_location ile kargonun teslim alma ve/veya teslimat konumlarına ve aracın nihai konumuna kadar) aracın route_distance_limit sınırını aşıyor.

Bu hesaplama için jeodezik mesafeleri kullandığımızı unutmayın.

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 senaryoda, 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ırız.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS Araç, en erken başlangıç zamanında başlıyorsa bu gönderimi gerçekleştiremez (süre hesaplaması için CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT bölümüne bakın): Bu süre, aracın en geç bitiş zamanından sonra bitmesini sağlar.
VEHICLE_NOT_ALLOWED Gönderimin allowed_vehicle_indices alanı boş değil ve bu araç söz konusu alana ait değil.

TimeWindow

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

Sert zaman aralığı sınırları (start_time ve end_time), etkinliğin en erken ve en geç zamanını (ör. start_time <= event_time <= end_time) uygular. Yumuşak zaman aralığı alt sınırı (soft_start_time), etkinliğin gerçekleşmesinden önceki soft_start_time ile orantılı bir maliyet oluşturarak etkinliğin soft_start_time tarihinde veya sonrasında gerçekleşmesiyle ilgili bir tercih belirtir. Yumuşak zaman aralığı üst sınırı (soft_end_time), etkinliğin soft_end_time tarihinden sonra ne kadar süreceğiyle orantılı bir maliyet belirleyerek etkinliğin soft_end_time tarihinde veya öncesinde gerçekleşmesiyle ilgili bir tercih belirtir. start_time, end_time, soft_start_time ve soft_end_time, genel zaman sınırları içinde olmalıdır (bkz. ShipmentModel.global_start_time ve ShipmentModel.global_end_time) ve aşağıdakilere 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ığının başlangıç zamanı. Belirtilmemesi durumunda ShipmentModel.global_start_time olarak ayarlanır.

end_time

Timestamp

Zor zaman aralığının bitiş zamanı. Belirtilmemesi durumunda ShipmentModel.global_end_time olarak ayarlanır.

soft_start_time

Timestamp

Zaman aralığının kontrollü başlangıç zamanı.

soft_end_time

Timestamp

Zaman aralığının yumuşak bitiş zamanı.

cost_per_hour_before_soft_start_time

double

Etkinlik soft_start_time öncesinde gerçekleşirse modeldeki diğer maliyetlere eklenen saat başına maliyet. Ş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 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ı sınırlama veya sınır geçerli olur (doğal "VE" anlamına göre).

Alanlar
src_tag

string

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

Bir kaynak ziyareti veya araç başlangıcı, VisitRequest.tags veya Vehicle.start_tags öğesi src_tag içeriyorsa ya da excluded_src_tag içermiyorsa (bu iki alanın boş olmadığına bağlı olarak) eşleşir.

excluded_src_tag

string

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

dst_tag

string

Bir hedef ziyareti veya araç sonu, VisitRequest.tags veya Vehicle.end_tags'si dst_tag içeriyorsa ya da excluded_dst_tag içermiyorsa (bu iki alanın boş olmadığına bağlı olarak) eşleşir.

excluded_dst_tag

string

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

cost

double

Bu geçişi gerçekleştirmenin maliyetini belirtir. Bu, modeldeki tüm diğer maliyetlerle aynı birimdedir 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 tutarına eklenir.

distance_limit

DistanceLimit

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

2021/06 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 ziyaretinin tamamlanmasından sonra ve hedef ziyaretin başlamasından önce meydana gelir.

Araç

Sevkiyat sorunundaki bir aracın modelini oluşturur. Gönderimle ilgili bir sorun çözülürse bu araç için start_location noktasından başlayıp end_location tarihinde sona eren bir rota oluşturulur. Rota, bir dizi ziyarettir (bkz. ShipmentRoute).

Alanlar
display_name

string

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

travel_mode

TravelMode

Aracın kullanılabildiği yolları ve hızını etkileyen ulaşım şekli. Ayrıca travel_duration_multiple politikasına bakın.

start_location

LatLng

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

start_waypoint

Waypoint

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

end_location

LatLng

Son VisitRequest çalışmasını tamamladıktan sonra aracın bittiği coğrafi konum. Belirtilmezse aracın ShipmentRoute, son VisitRequest tamamlandığında hemen sona erer. Gönderim modelinde süre ve mesafe matrisleri varsa end_location belirtilmemelidir.

end_waypoint

Waypoint

Aracın, son VisitRequest çalışmasını tamamladıktan sonra bittiği bir coğrafi konumu temsil eden ara nokta. end_waypoint veya end_location belirtilmezse aracın ShipmentRoute özelliği, son VisitRequest işlemini tamamladığında hemen sona erer. Gönderim modelinde süre ve mesafe matrisleri varsa end_waypoint belirtilmemelidir.

start_tags[]

string

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

Boş veya yinelenen dizelere izin verilmez.

end_tags[]

string

Araç 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 süre sınırları içinde olmalıdırlar (ShipmentModel.global_* alanlarına bakın). Belirtilmemişse bu genel süre sınırları dışında herhangi bir sınırlama yoktur.

Aynı tekrarlanan alana ait zaman aralıkları ayrı olmalıdır, yani hiçbir zaman aralığı başka bir zaman aralığıyla çakışamaz veya 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 süre sınırları içinde olmalıdırlar (ShipmentModel.global_* alanlarına bakın). Belirtilmemişse bu genel süre sınırları dışında herhangi bir sınırlama yoktur.

Aynı tekrarlanan alana ait zaman aralıkları ayrı olmalıdır, yani hiçbir zaman aralığı başka bir zaman aralığıyla çakışamaz veya 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 yükleme kaldırma politikası uygulandı.

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ı olan yük türünün tanımlayıcılarıdır. Belirli bir anahtar bu haritada yoksa ilgili 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ı birim olmalıdır.

Araç rotası için saatlik ücret. Bu maliyet, rotanın aldığı toplam süreye 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ı daha fazla gecikmeye neden olabilir.

cost_per_traveled_hour

double

Araç rotasında seyahat edilen saat başına maliyet. Bu maliyet yalnızca rota tarafından alınan seyahat süresine (ShipmentRoute.transitions içinde raporlanan) uygulanır, bekleme süresi ve ziyaret süresi dahil değildir.

cost_per_kilometer

double

Araç rotasının kilometre başına maliyeti. Bu maliyet ShipmentRoute.transitions metriğinde bildirilen mesafeye uygulanır ve tek bir VisitRequest ile arrival_location ile departure_location arasında dolaylı olarak katedilen mesafe için geçerli değildir.

fixed_cost

double

Bu araç gönderim için kullanılıyorsa uygulanan sabit maliyettir.

used_if_route_is_empty

bool

Bu alan, yalnızca rotalarında herhangi bir gönderime hizmet verilmeyen araçlar için geçerlidir. Bu durumda aracın ikinci el olarak kabul edilip edilmeyeceğini belirtir.

Doğruysa, araç herhangi bir sevkiyat hizmeti vermese bile başlangıç noktasından bitiş konumuna gider ve aracın başlangıcından itibaren zaman ve mesafe maliyetleri de hesaba katılır.

Aksi takdirde, başlangıç noktasından bitiş konumuna seyahat etmez ve bu araç için break_rule veya gecikme (TransitionAttributes kalkışlı) planlanmaz. Bu durumda, aracın ShipmentRoute numarası araç dizini ve etiketi dışında hiçbir bilgi içermez.

route_duration_limit

DurationLimit

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

travel_duration_limit

DurationLimit

Aracın rotasındaki seyahat süresine sınırlama uygulanır. Belirli bir OptimizeToursResponse içinde rota seyahat süresi tüm transitions.travel_duration toplamıdır.

route_distance_limit

DistanceLimit

Aracın rotasının toplam mesafesine sınır uygulanır. Belirli bir OptimizeToursResponse içinde rota mesafesi, kendisine ait tüm transitions.travel_distance_meters toplamıdır.

extra_visit_duration_for_visit_type

map<string, Duration>

Visit_types dizelerinden sürelere bir eşleme belirtir. Bu süre, VisitRequest.duration eklenerek, belirtilen visit_types içeren ziyaretlerde kullanılacak zamandır. Bu ek ziyaret süresi, cost_per_hour belirtilirse maliyet ekler. Anahtarlar (ör. visit_types) boş dizeler 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ş bırakılırsa bu araç için ara verilmeyecek.

label

string

Bu araç için bir etiket belirtir. Bu etiket, yanıtta karşılık gelen ShipmentRoute için vehicle_label olarak bildirilir.

ignore

bool

Doğru değerine ayarlanırsa used_if_route_is_empty yanlış değerine ayarlanır ve bu araç kullanılmaz.

Gönderim, injected_first_solution_routes içinde yoksayılan bir araç tarafından gerçekleştirilirse ilk çözümde atlanır ancak yanıtta ücretsiz olarak gerçekleştirilebilir.

Gönderim, injected_solution_constraint içinde yoksayılan bir araç tarafından yapılırsa ve ilgili teslim alma/teslimat işlemleri araçta kalacak şekilde kısıtlanırsa (yani RELAX_ALL_AFTER_THRESHOLD. seviyeye gelecek şekilde rahatlanmamışsa) yanıtta atlanır. Bir gönderide allowed_vehicle_indices alanı boş değilse ve izin verilen tüm araçlar yoksa yanıtta atlanır.

travel_duration_multiple

double

Bu aracın seyahat sürelerini artırmak veya azaltmak için kullanılabilecek çarpımsal bir faktör belirtir. Örneğin, bu değeri 2,0 olarak ayarlamak bu aracın daha yavaş olduğu ve standart araçlara göre iki kat daha uzun seyahat süreleri olduğu anlamına gelir. Bu katsayı, ziyaret sürelerini etkilemez. cost_per_hour veya cost_per_traveled_hour belirtilirse maliyeti etkiler. Bu değer, [0.001, 1000.0] aralığında olmalıdır. Ayarlanmadan bırakılırsa araç standart olur ve bu katsayı 1,0 olarak kabul edilir.

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

Ayrıca aşağıdaki extra_visit_duration_for_visit_type politikasına bakın.

DurationLimit

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

Bir hafif sınır alanı tanımlandığında hem esnek maksimum eşik hem de ilişkili maliyet 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ı uygulamayan ancak bu sınır ihlal edildiğinde minimum sınır uygulanır. Bu maliyet, aynı birimle modelde tanımlanan diğer maliyetlerin toplamıdır.

Tanımlanmışsa soft_max_duration negatif olmayan bir değer olmalıdır. max_duration da tanımlanmışsa soft_max_duration, max_duration'dan küçük olmalıdır.

quadratic_soft_max_duration

Duration

Maksimum süre sınırı uygulamayan ancak bir maksimum süre sınırı uygulamaya konulan yumuşak sınır, rotanın süre içinde ikinci dereceden bir maliyete neden olmasına neden olur. Bu maliyet, aynı birimle modelde tanımlanan diğer maliyetlerin toplamıdır.

Tanımlanmışsa quadratic_soft_max_duration negatif olmayan bir değer olmalıdır. max_duration de tanımlanmışsa quadratic_soft_max_duration değeri max_duration değerinden küçük olmalı 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ği ihlal edildiğinde tahakkuk eden saat başına maliyettir. Süre eşiğin altındaysa ek maliyet 0 olur. Aksi takdirde maliyet, aşağıdaki gibi süreye 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ği ihlal edilirse ücret alınan saat kare başına maliyet.

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

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

Maliyet negatif olmamalıdır.

LoadLimit

Bir araç için geçerli olan yük sınırını tanımlar (ör. "bu kamyon yalnızca 3.500 kg'a kadar yük taşıyabilir"). Şu sayfaya göz atın: load_limits.

Alanlar
soft_max_load

int64

Yükün yumuşak sınırı. Şu sayfaya göz atın: cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Bu aracın rotasında yük soft_max_load seviyesini aşıyorsa şu ücret 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ükleme aralığı.

end_load_interval

Interval

Rotanın sonunda aracın kabul edilebilir yükleme aralığı.

max_load

int64

Kabul edilebilir maksimum yük miktarı.

Aralık

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

Alanlar
min

int64

Kabul edilebilir minimum yük. ≥ 0 olmalıdır. Her ikisi de belirtilmişse min değeri ≤ max olmalıdır.

max

int64

Kabul edilebilir maksimum yük. ≥ 0 olmalıdır. Bir değer belirtilmezse bu mesajla maksimum yükleme kısıtlanmaz. Her ikisi de belirtilmişse min değeri ≤ max olmalıdır.

TravelMode

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

Bunlar, Google Haritalar Platformu Rotaları Tercih Edilen API seyahat modlarının bir alt kümesi olmalıdır. Bkz. https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Sıralamalar
TRAVEL_MODE_UNSPECIFIED DRIVING ile eşdeğer olan ulaşım şekli belirtilmemiş.
DRIVING Arabayla yol tariflerine (araba, ...) karşılık gelen ulaşım şekli.
WALKING Yaya yol tariflerine karşılık gelen ulaşım şekli.

UnloadingPolicy

Bir aracın nasıl boşaltılabileceğiyle ilgili politika. Yalnızca hem teslim alma hem de teslimat seçeneği bulunan gönderiler için geçerlidir.

unloading_policy haricinde rotanın herhangi bir yerinde başka gönderimler serbesttir.

Sıralamalar
UNLOADING_POLICY_UNSPECIFIED Kaldırma politikası belirtilmemiş. Teslimatlar yalnızca ilgili teslim alma işlemlerinden sonra yapılmalıdır.
LAST_IN_FIRST_OUT Teslimatlar, teslim almaların ters sırasına göre yapılmalıdır
FIRST_IN_FIRST_OUT Teslimatlar teslim alma işlemleri ile aynı sırayla gerçekleşmelidir

Ara nokta

Bir referans noktasını içerir. Referans noktaları, VisitRequests'in varış ve kalkış konumlarının yanı sıra Araçlar'ın başlangıç ve bitiş konumlarını işaretler.

Alanlar
side_of_road

bool

İsteğe bağlı. Bu ara noktanın konumunun, aracın yolun belirli bir tarafında durması için tercih edilmesinin amaçlandığını belirtir. Bu değeri ayarladığınızda, araç, konumun yolun merkezine doğru eğildiği bir yolda durabileceği şekilde rota, konumdan geçer. Bu seçenek "WALKING" ulaşım modunda kullanılamaz.

Birleştirme alanı location_type. Bir yeri 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

Ara noktayla ilişkili ÖY Yeri Kimliği.