Package google.maps.routeoptimization.v1

Dizin

RouteOptimization

Araç turlarını optimize etme hizmeti.

Belirli alan türlerinin geçerliliği:

  • google.protobuf.Timestamp
    • Saatler Unix saati biçimindedir: 1970-01-01T00:00:00+00:00 tarihinden itibaren geçen saniye sayısı.
    • Saniye [0, 253402300799] aralığında olmalıdır. Yani [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] aralığında olmalıdır.
    • Nanosaniye ayarlanmamış olmalı veya 0 olarak ayarlanmalıdır.
  • google.protobuf.Duration
    • Saniye [0, 253402300799] aralığında olmalıdır. Yani [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] aralığında olmalıdır.
    • Nanosaniye ayarlanmamış olmalı veya 0 olarak ayarlanmalıdır.
  • google.type.LatLng
    • enlem [-90.0, 90.0] aralığında olmalıdır.
    • Boylam [-180.0, 180.0] aralığında olmalıdır.
    • Enlem ve boylamdan en az biri sıfır olmamalıdır.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

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

Bu yöntem, uzun süreli bir işlemdir (LRO). Optimizasyon için girişler (OptimizeToursRequest mesajları) ve çıkışlar (OptimizeToursResponse mesajları), kullanıcı tarafından belirtilen biçimde Cloud Storage'dan okunur ve Cloud Storage'a yazılır. OptimizeTours yöntemi gibi, her OptimizeToursRequest bir ShipmentModel içerir ve ShipmentRoute alanlarını içeren bir OptimizeToursResponse döndürür. Bu alanlar, genel maliyeti en aza indiren araçlar tarafından gerçekleştirilecek bir dizi rotadır.

Kullanıcı, LRO'nun durumunu kontrol etmek için operations.get öğesini yoklayabilir:

LRO done alanı yanlışsa en az bir istek işlenmeye devam ediyordur. Diğer istekler başarıyla tamamlanmış olabilir ve sonuçları Cloud Storage'da kullanılabilir.

LRO'nun done alanı doğruysa tüm istekler işlenmiştir. Başarıyla işlenen tüm isteklerin sonuçları Cloud Storage'da kullanılabilir. Başarısız olan isteklerin sonuçları Cloud Storage'da kullanılamaz. LRO'nun error alanı ayarlanmışsa başarısız olan isteklerden birinin hatasını içerir.

Yetkilendirme kapsamları

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

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

parent kaynağında aşağıdaki IAM iznini gerektirir:

  • routeoptimization.operations.create

Daha fazla bilgi için IAM belgelerini inceleyin.

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

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

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

Amaç, maliyetin ShipmentModel içinde tanımlanan birçok bileşeni olduğu durumlarda toplam maliyeti en aza indiren ShipmentRoute'ların Vehicle'lara atanmasını sağlamaktır.

Yetkilendirme kapsamları

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

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

parent kaynağında aşağıdaki IAM iznini gerektirir:

  • routeoptimization.locations.use

Daha fazla bilgi için IAM belgelerini inceleyin.

OptimizeToursLongRunning

rpc OptimizeToursLongRunning(OptimizeToursRequest) returns (Operation)

Bu, büyük zaman aşımı değerleriyle optimizasyonlar için tasarlanmış OptimizeTours yönteminin bir varyantıdır. Birkaç dakikadan uzun süren optimizasyonlar için OptimizeTours yöntemi yerine tercih edilmelidir.

Döndürülen long-running operation (LRO), <parent>/operations/<operation_id> biçiminde bir ada sahip olur ve hesaplamanın ilerleme durumunu izlemek için kullanılabilir. metadata alan türü OptimizeToursLongRunningMetadata. Başarılı olursa response alan türü OptimizeToursResponse olur.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request adresini ziyaret edin.

Yetkilendirme kapsamları

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

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

parent kaynağında aşağıdaki IAM iznini gerektirir:

  • routeoptimization.operations.create

Daha fazla bilgi için IAM belgelerini inceleyin.

OptimizeToursUri

rpc OptimizeToursUri(OptimizeToursUriRequest) returns (Operation)

Bu, büyük zaman aşımı değerleri ve büyük giriş/çıkış boyutlarıyla optimizasyonlar için tasarlanmış OptimizeToursLongRunning yönteminin bir varyantıdır.

İstemci, Google Cloud Storage'da depolanan OptimizeToursRequest URI'sını belirtir ve sunucu, OptimizeToursResponse öğesini istemci tarafından belirtilen bir Google Cloud Storage URI'sine yazar.

Bu yöntem, birkaç dakikadan uzun süren ve giriş/çıkış boyutları 8 MB'tan büyük olan optimizasyonlar için OptimizeTours yöntemine tercih edilmelidir. Bununla birlikte, daha kısa ve daha küçük optimizasyonlar için de kullanılabilir.

Döndürülen long-running operation (LRO), <parent>/operations/<operation_id> biçiminde bir ada sahip olur ve hesaplamanın ilerleme durumunu izlemek için kullanılabilir. metadata alan türü OptimizeToursLongRunningMetadata. Başarılı olursa response alan türü OptimizeToursUriResponse olur.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request adresini ziyaret edin.

Yetkilendirme kapsamları

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

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

parent kaynağında aşağıdaki IAM iznini gerektirir:

  • routeoptimization.operations.create

Daha fazla bilgi için IAM belgelerini inceleyin.

AggregatedMetrics

ShipmentRoute (sırasıyla tüm Transition ve/veya Visit (sırasıyla tüm ShipmentRoute) öğeleri için OptimizeToursResponse) için toplu metrikler.

Alanlar
performed_shipment_count

int32

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

travel_duration

Duration

Bir rota veya çözümün 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 mola 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 de şunlara karşılık gelir:

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

double

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

max_loads

map<string, VehicleLoad>

Bu rotadaki (veya çözümdeki) her bir miktar için tüm rota (veya çözüm) boyunca elde edilen maksimum yük, tüm Transition.vehicle_loads (veya ShipmentRoute.metrics.max_loads.

performed_mandatory_shipment_count

int32

Gerçekleştirilen zorunlu gönderim sayısı.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

performed_shipment_penalty_cost_sum

double

Gerçekleştirilen gönderimlerin Shipment.penalty_cost toplamı.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

BatchOptimizeToursMetadata

Bu türde alan yok.

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

BatchOptimizeToursRequest

Turların eşzamansız işlem olarak toplu şekilde optimize edilmesi isteğinde bulunun. Her giriş dosyası bir OptimizeToursRequest içermeli ve her çıkış dosyası bir OptimizeToursResponse içermelidir. İstek, dosyaları okuma/yazma ve ayrıştırma bilgilerini içerir. Tüm giriş ve çıkış dosyaları aynı proje altında olmalıdır.

Alanlar
parent

string

Zorunlu. Arama yapmak için hedef projeyi ve konumu seçin.

Biçim:

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

Konum belirtilmemişse 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 çözmeye yönelik bilgiler.

Alanlar
display_name

string

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

input_config

InputConfig

Zorunlu. Giriş modeli hakkında bilgiler.

output_config

OutputConfig

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

BatchOptimizeToursResponse

Bu türde alan yok.

BatchOptimizeToursRequest yanıtı. Bu, işlem tamamlandıktan sonra uzun süren işlemde döndürülür.

BreakRule

Bir araç için zaman araları oluşturma kuralları (ör. öğle yemeği araları). Mola, aracın mevcut konumunda boşta kaldığı ve herhangi bir ziyaret gerçekleştiremediği kesintisiz bir zaman aralığıdır. Aşağıdaki durumlarda ara verilebilir:

  • İki ziyaret arasındaki seyahat sırasında (ziyaretten hemen önce veya hemen sonraki zamanı içerir ancak ziyaretin ortasındaki zamanı içermez). Bu durumda, ziyaretler arasındaki ilgili geçiş süresi uzatılır.
  • veya araç çalıştırılmadan önce (araç, mola sırasında çalışmayabilir) yapılabilir. Bu durumda, araç çalıştırma süresi etkilenmez.
  • veya araç bitişinden sonra (araç bitiş zamanı için de aynı durum geçerlidir).
Alanlar
break_requests[]

BreakRequest

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

frequency_constraints[]

FrequencyConstraint

Çeşitli FrequencyConstraint uygulanabilir. Bu BreakRule yılının BreakRequest ayına kadar tüm şartlar karşılanmalıdır. FrequencyConstraint sayfasına göz atın.

BreakRequest

Her araç için geçerli olan mola sırası (ör. sayıları ve sıraları) önceden bilinmelidir. Tekrarlanan BreakRequest simgeleri, gerçekleşmeleri gereken sırayla bu adım sırasını tanımlar. Zaman aralıkları (earliest_start_time / latest_start_time) çakışabilir ancak siparişle uyumlu olmaları gerekir (bu kontrol edilir).

Alanlar
earliest_start_time

Timestamp

Zorunlu. Aralığın başlangıcı için alt sınır (dahil).

latest_start_time

Timestamp

Zorunlu. Aranın başlangıç zamanı için üst sınır (dahil).

min_duration

Duration

Zorunlu. Aranın minimum süresi. Pozitif olmalıdır.

FrequencyConstraint

"Her 12 saatte en az 1 saat ara verilmelidir" gibi minimum ara sıklığı zorunlu kılınarak yukarıda belirtilen araların sıklığı ve süresi daha da sınırlandırılabilir. Bunun "12 saatlik herhangi bir kayan zaman aralığında en az bir saatlik en az bir mola olmalıdır" şeklinde yorumlanabileceğini varsayarsak bu örnek FrequencyConstraint şeklinde çevrilir:

{
   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 içinde belirtilen zaman aralıkları ve minimum sürelerin yanı sıra bu tür tüm kısıtlamalara uygun olacaktır.

FrequencyConstraint, uygulamada ardışık olmayan aralar için geçerli olabilir. Örneğin, aşağıdaki program "12 saatte bir 1 saat" örneğine uygundur:

  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 mola süresi. Negatif olmayan. FrequencyConstraint açıklamasına bakın.

max_inter_break_duration

Duration

Zorunlu. Rotadaki, duration >= min_break_duration molasını en azından kısmen içermeyen herhangi bir zaman aralığının izin verilen maksimum süresi. 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 Object Notation.
PROTO_TEXT Protocol Buffers metin biçimi. https://protobuf.dev/reference/protobuf/textformat-spec/ adresini ziyaret edin.

DistanceLimit

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

Esnek 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 ile sınırlayan kesin bir sınır. Sınır negatif olmamalıdır.

soft_max_meters

int64

Maksimum mesafe sınırını zorunlu kılmayan ancak ihlal edildiğinde maliyete neden olan ve modelde tanımlanan diğer maliyetlere aynı birimle eklenen bir yumuşak sınırdır.

Tanımlanırsa soft_max_meters, max_meters değerinden küçük ve negatif olmayan bir değer olmalıdır.

cost_per_kilometer_below_soft_max

double

Kilometre başına yapılan maliyet, soft_max_meters'ya kadar artar. Formül:

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

Bu maliyet, route_distance_limit'da desteklenmiyor.

cost_per_kilometer_above_soft_max

double

Mesafe soft_max_meters sınırının üzerindeyse kilometre başına maliyet uygulanır. Mesafe sınırın altındaysa ek ücret 0 olur. Aksi takdirde, maliyeti hesaplamak için kullanılan formül şöyledir:

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

InjectedSolutionConstraint

Hangi ziyaretlerin nasıl kısıtlanması gerektiğiyle ilgili bilgileri içeren, isteğe yerleştirilmiş çözüm.

Alanlar
routes[]

ShipmentRoute

Enjekte edilecek çözüm rotaları. 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

Çözümün yerleştirileceği gönderimler atlandı. Bazıları orijinal çözümde yer almayabilir. 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 ziyaretlerle ilgili kısıtlamaların hangi eşiklerde ve ne ölçüde gevşetileceğini belirtir. skipped_shipment alanında listelenen gönderiler atlanmak zorundadır. Yani bu gönderiler gerçekleştirilemez.

Alanlar
relaxations[]

Relaxation

vehicle_indices bölgesindeki araçlarla yapılan ziyaretler için geçerli olacak tüm ziyaret kısıtlaması gevşetmeleri.

vehicle_indices[]

int32

Ziyaret kısıtlamasının relaxations uygulanacağı araç indekslerini belirtir. Boş bırakılırsa varsayılan olarak kabul edilir ve diğer constraint_relaxations içinde belirtilmeyen tüm araçlar için relaxations uygulanır. En fazla bir varsayılan olabilir. Yani en fazla bir kısıtlama gevşetme alanının boş bırakılmasına izin verilir vehicle_indices. Bir araç indeksi, birden fazla constraint_relaxations içinde olsa bile yalnızca bir kez listelenebilir.

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

Dinlenme

relaxations boşsa routes üzerindeki tüm ziyaretlerin başlangıç saati ve sırası tamamen kısıtlanır ve bu rotalara yeni ziyaretler eklenemez. Ayrıca, araç boş değilse (yani ziyaretleri yoksa ve modelde used_if_route_is_empty değeri yanlışsa) routes içindeki bir aracın başlangıç ve bitiş zamanı tamamen sınırlanır.

relaxations(i).level, aşağıdakileri karşılayan #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, aşağıdaki koşulları karşılıyorsa araç çalıştırma işlemi relaxations(i).level olarak değerlendirilir:

  • vehicle_start_time >= relaxations(i).threshold_time VE
  • relaxations(i).threshold_visit_count == 0 ve araç ucu, aşağıdaki koşulları karşılıyorsa relaxations(i).level'ye kadar gevşetilir:
  • vehicle_end_time >= relaxations(i).threshold_time VE
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Bir ziyaret threshold_visit_count VEYA threshold_time koşulunu karşılıyorsa gevşetme düzeyi uygulamak için aynı level ile iki relaxations ekleyin: biri yalnızca threshold_visit_count ayarlanmış, diğeri ise yalnızca threshold_time ayarlanmış olsun. Bir ziyaret birden fazla relaxations koşullarını karşılıyorsa en esnek düzey uygulanır. Sonuç olarak, araç başlangıcından rotadaki ziyaretlere ve araç bitişine kadar rahatlama düzeyi artar. Diğer bir deyişle, rota ilerledikçe rahatlama düzeyi azalmaz.

Herhangi bir relaxations eşik koşulunu karşılamayan rota ziyaretlerinin zamanlaması ve sırası tamamen kısıtlanmıştır ve bu sıralara ziyaret eklenemez. Ayrıca, bir araç başlangıcı veya bitişi herhangi bir gevşeme koşulunu karşılamıyorsa araç boş olmadığı sürece süre sabittir.

Alanlar
level

Level

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

threshold_time

Timestamp

Gevşetmenin level uygulanabileceği veya uygulandığı zaman.

threshold_visit_count

int32

Gevşetmenin level uygulanabileceği ziyaret sayısı. threshold_visit_count 0 ise (veya ayarlanmamışsa) level doğrudan araç çalıştırıldığında uygulanabilir.

route.visits_size() + 1 ise level yalnızca araç ucuna uygulanabilir. route.visits_size() + 1 değerinden büyükse bu rota için level hiç uygulanmaz.

Seviye

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

Aşağıdaki numaralandırma, rahatlama düzeyinin artış sırasına göre yapılmıştır.

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ıç saatleri ve araç başlangıç/bitiş saatleri esnetilir ancak her ziyaret aynı araca bağlı kalır ve ziyaret sırasına uyulması gerekir: Ziyaretler araya veya öncesine eklenemez.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD ile aynıdır ancak ziyaret sırası da gevşetilir: Ziyaretler yalnızca bu araç tarafından gerçekleştirilebilir ancak gerçekleştirilmeyebilir.
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD ile aynıdır ancak araç da rahatlatılır: Eşik zamanında veya sonrasında ziyaretler tamamen ücretsizdir ve potansiyel olarak gerçekleştirilmeyebilir.

InputConfig

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

Alanlar
data_format

DataFormat

Zorunlu. Giriş verileri biçimi.

source birleşik alanı. Zorunlu. source aşağıdakilerden yalnızca biri olabilir:
gcs_source

GcsSource

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

Konum

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

Alanlar
lat_lng

LatLng

Ara noktanın coğrafi koordinatları.

heading

int32

Trafiğin akış yönüyle ilişkili pusula yönü. Bu değer, teslim alma ve bırakma için kullanılacak yol tarafını belirtmek üzere kullanılır. Yön değerleri 0 ile 360 arasında olabilir. 0 değeri tam kuzey yönünü, 90 değeri tam doğu yönünü belirtir.

OptimizeToursLongRunningMetadata

Bu türde alan yok.

OptimizeToursLongRunning çağrılarıyla ilgili işlem meta verileri.

OptimizeToursRequest

Çözülecek gönderim modelini ve optimizasyon parametrelerini tanımlayan bir tur optimizasyonu çözücüsüne verilecek istek.

Alanlar
parent

string

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

Biçim:

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

Konum belirtilmemişse otomatik olarak bir bölge seçilir.

timeout

Duration

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

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

model

ShipmentModel

Çözülecek gönderim modeli.

solving_mode

SolvingMode

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

search_mode

SearchMode

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

injected_first_solution_routes[]

ShipmentRoute

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

Model, ilk çözüm oluşturulduğunda kısıtlanır. Bir rota üzerinde gerçekleştirilmeyen gönderiler ilk çözümde örtülü olarak atlanır ancak sonraki çözümlerde gerçekleştirilebilir.

Çözüm, bazı temel geçerlilik varsayımlarını karşılamalıdır:

  • Tüm rotalar için vehicle_index aralıkta olmalı ve yinelenmemelidir.
  • Tüm ziyaretler için shipment_index ve visit_request_index değerleri aralıkta olmalıdır.
  • Bir gönderiye yalnızca bir rotada referans verilebilir.
  • Teslim alma-teslimat gönderisinin teslim alınması, teslimattan önce yapılmalıdır.
  • Bir gönderinin birden fazla teslim alma veya teslimat alternatifi gerçekleştirilemez.
  • Tüm rotalarda süreler artıyor (ör. vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • Yalnızca izin verilen bir araçta gönderim yapılabilir. Shipment.allowed_vehicle_indices boşsa veya vehicle_index değeri Shipment.allowed_vehicle_indices içinde yer alıyorsa araca izin verilir.

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

injected_solution_constraint

InjectedSolutionConstraint

Optimizasyon algoritmasını, önceki bir çözüme benzer nihai bir çözüm bulacak şekilde kısıtlayın. Örneğin, bu özellik, tamamlanmış veya tamamlanacak ancak değiştirilmemesi gereken rota bölümlerini dondurmak için kullanılabilir.

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

refresh_details_routes[]

ShipmentRoute

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

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

İletilen 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, davranış üzerinde herhangi bir etkiye sahip değildir. İlgili gönderiler veya araçlar yoksayılsa da çoklu çizgiler, boş olmayan tüm rotalardaki tüm ziyaretler arasında doldurulmaya devam eder.

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. İstek oluşturulduktan sonra çözüme dahil edilen kargo veya araç indeksleri değiştiyse (ör. kargo veya araçlar istekten kaldırıldıysa ya da isteğe eklendiyse) kullanılabilir.

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

Enjekte edilen çözüme eklenen bir vehicle_label, talep edilen bir araçla eşleşmiyorsa ilgili rota, ziyaretleriyle birlikte çözümden kaldırılır. Yerleştirilen çözümdeki bir shipment_label, istenen bir gönderime karşılık gelmiyorsa ilgili ziyaret çözümden kaldırılır. Yerleştirilen çözümdeki bir SkippedShipment.label, gönderi isteğine karşılık gelmiyorsa SkippedShipment çözüme eklenmez.

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

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

consider_road_traffic

bool

ShipmentRoute, Transition.travel_duration, Visit.start_time ve vehicle_end_time alanlarını hesaplarken, ShipmentRoute.has_traffic_infeasibilities alanını ayarlarken ve OptimizeToursResponse.total_cost alanını hesaplarken trafik tahminini dikkate alın.

populate_polylines

bool

Doğruysa yanıtlarda çoklu çizgiler doldurulur ShipmentRoute.

populate_transition_polylines

bool

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

allow_large_deadline_despite_interruption_risk

bool

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

use_geodesic_distances

bool

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

label

string

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

geodesic_meters_per_second

double

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

max_validation_errors

int32

Döndürülen doğrulama hatalarının sayısını kısaltır. Bu hatalar genellikle solving_mode=VALIDATE_ONLY olmadığı sürece BadRequest hata ayrıntısı (https://cloud.google.com/apis/design/errors#error_details) olarak bir INVALID_ARGUMENT hata yüküne eklenir: OptimizeToursResponse.validation_errors alanına bakın. Bu değer varsayılan olarak 100'dür ve 10.000 ile sınırlıdır.

SearchMode

Gecikme ile çözüm kalitesi arasında denge kurarak aramanın davranışını tanımlayan mod. Tüm modlarda genel istek son tarihi uygulanır.

Sıralamalar
SEARCH_MODE_UNSPECIFIED Belirtilmemiş arama modu, RETURN_FAST ile eşdeğerdir.
RETURN_FAST İlk iyi çözümü bulduktan sonra aramayı durdurun.
CONSUME_ALL_AVAILABLE_TIME Daha iyi çözümler aramak için mevcut tüm zamanı harcayın.

SolvingMode

Çözümleyicinin isteği nasıl ele alması gerektiğini tanımlar. VALIDATE_ONLY dışındaki tüm modlarda, istek geçersizse INVALID_REQUEST hatası alırsınız. Döndürülen hata sayısını sınırlamak için max_validation_errors bölümüne bakın.

Sıralamalar
DEFAULT_SOLVE Modeli çözün. [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors] içinde uyarılar verilebilir.
VALIDATE_ONLY Yalnızca modeli çözerken doğrular: Mümkün olduğunca çok sayıda 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ı (yanıtta status ve routes ayarlanmamıştır) çözmez. injected_solution_constraint rotalarında uygulanabilirlik sorunları tespit edilirse bunlar OptimizeToursResponse.validation_errors alanına doldurulur ve OptimizeToursResponse.skipped_shipments alanı boş bırakılır.

ÖNEMLİ: Burada, mümkün olmayan tüm gönderiler değil, yalnızca ön işleme sırasında mümkün olmadığı tespit edilenler döndürülür.

TRANSFORM_AND_RETURN_REQUEST

Bu mod yalnızca ShipmentModel.objectives boş değilse çalışır. İstek çözüme ulaştırılmadı. Yalnızca doğrulanır ve verilen hedeflere karşılık gelen maliyetlerle doldurulur. Ayrıca ShipmentModel.objectives dokümanlarına da göz atın. Elde edilen istek OptimizeToursResponse.processed_request olarak döndürülür.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request adresine bakın.

OptimizeToursResponse

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

Alanlar
routes[]

ShipmentRoute

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

request_label

string

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

skipped_shipments[]

SkippedShipment

Atlanan tüm gönderilerin listesi.

validation_errors[]

OptimizeToursValidationError

Bağımsız olarak tespit edebildiğimiz tüm doğrulama hatalarının listesi. OptimizeToursValidationError mesajıyla ilgili "BİRDEN FAZLA HATA" açıklamasına bakın. Bu, hatalar yerine solving_mode durumu DEFAULT_SOLVE olduğunda uyarıları içerir.

processed_request

OptimizeToursRequest

Bazı durumlarda, gelen isteği çözmeden önce değiştiririz (ör. maliyet ekleme). If solving_mode == TRANSFORM_AND_RETURN_REQUEST, the modified request is returned here.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request adresine bakın.

metrics

Metrics

Bu çözümün süresi, mesafesi ve kullanım metrikleri.

Metrikler

Tüm rotalarda toplanan genel metrikler.

Alanlar
aggregated_route_metrics

AggregatedMetrics

Rotalar genelinde toplanan verilerdir. Her metrik, aynı ada sahip tüm ShipmentRoute.metrics alanlarının toplamıdır (veya yüklemeler için maksimumdur).

skipped_mandatory_shipment_count

int32

Atlanan zorunlu gönderim 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 araçlar için en erken başlangıç zamanı, tüm ikinci el araçlar için minimum değer olan ShipmentRoute.vehicle_start_time olarak hesaplanır.

latest_vehicle_end_time

Timestamp

İkinci el araçlar için en son bitiş zamanı. Bu değer, tüm ikinci el araçlar için maksimum ShipmentRoute.vehicle_end_time olarak hesaplanır.

costs

map<string, double>

Maliyetle ilgili istek alanlarına göre dökümü alınmış çözüm maliyeti. Anahtarlar, giriş OptimizeToursRequest'e göre göreli olan proto yollarıdır (ör. "model.shipments.pickups.cost"). Değerler ise ilgili maliyet alanı tarafından oluşturulan ve çözümün tamamı için toplanan toplam maliyettir. Diğer bir deyişle, costs["model.shipments.pickups.cost"], çözümdeki tüm teslim alma maliyetlerinin toplamıdır. Modelde tanımlanan tüm maliyetler, 2022/01 itibarıyla yalnızca toplu olarak raporlanan TransitionAttributes ile ilgili maliyetler hariç olmak üzere burada ayrıntılı olarak raporlanır.

total_cost

double

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

OptimizeToursUriMetadata

Bu türde alan yok.

OptimizeToursUri çağrılarıyla ilgili işlem meta verileri.

OptimizeToursUriRequest

OptimizeToursUri yöntemi tarafından kullanılan bir istek.

Alanlar
parent

string

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

Biçim:

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

Konum belirtilmemişse otomatik olarak bir bölge seçilir.

input

Uri

Zorunlu. OptimizeToursRequest içeren Cloud Storage nesnesinin URI'si.

output

Uri

Zorunlu. OptimizeToursResponse öğesini içerecek Cloud Storage nesnesinin URI'si.

OptimizeToursUriResponse

OptimizeToursUri yöntemi tarafından döndürülen yanıt.

Alanlar
output

Uri

İsteğe bağlıdır. JSON veya textproto olarak kodlanmış OptimizeToursResponse öğesini içeren Cloud Storage nesnesinin URI'si. Nesne JSON olarak kodlanmışsa nesne adının uzantısı .json olur. Nesne textproto olarak kodlandıysa nesne adının uzantısı .txtpb olur.

Kaynağın içeriğinin değiştirilmediğini doğrulamak için kaynağın crc32_checksum kullanılabilir.

OptimizeToursValidationError

Bir OptimizeToursRequest doğrulanırken karşılaşılan hata veya uyarıyı açıklar.

Alanlar
code

int32

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

Bu bölümden sonraki alanlarda hata hakkında daha fazla bilgi verilmektedir.

BİRDEN FAZLA HATA: Birden fazla hata olduğunda doğrulama işlemi, bu hataların birkaçını vermeye çalışır. Derleyiciye benzer şekilde bu işlem de kusurludur. Bazı doğrulama hataları "kritik" olarak değerlendirilir. Bu hatalar, doğrulama sürecinin tamamını durdurur. Bu durum, diğerlerinin yanı sıra display_name="UNSPECIFIED" hataları için de geçerlidir. Bazı hatalar, doğrulama sürecinin diğer hataları atlamasına neden olabilir.

KARARLILIK: code ve display_name çok kararlı olmalıdır. Ancak zaman içinde yeni kodlar ve görünen adlar görünebilir. Bu durum, yeni hata eski hatayı gizlediği için belirli bir (geçersiz) isteğin farklı bir (code, display_name) çift oluşturmasına neden olabilir. Örneğin, "BİRDEN FAZLA HATA" bölümüne bakın.

display_name

string

Hatayı gösteren ad.

fields[]

FieldReference

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

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

Ancak fields öğesinin kardinalitesinin belirli bir hata kodu için değişmemesi gerektiğini unutmayın.

error_message

string

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

KARARLILIK: Kararlı değil: Belirli bir code ile ilişkili hata mesajı zaman içinde değişebilir (umarız ki daha net bir hale gelir). Bunun yerine lütfen display_name ve code politikalarını kullanın.

offending_values

string

Alanların değerlerini içerebilir. Bu özellik her zaman kullanılamaz. Bu özelliği kesinlikle kullanmamalı ve yalnızca manuel model hata ayıklama için kullanmalısınız.

FieldReference

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

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

Ancak iletinin kalabalık görünmesini önlemek için OptimizeToursRequest veya ShipmentModel gibi üst düzey öğeleri atlıyoruz.

Alanlar
name

string

Alan adı (ör. "vehicles".

sub_field

FieldReference

Gerekirse alt alanları yinelemeli olarak iç içe yerleştirin.

index_or_key birleşik alanı.

index_or_key aşağıdakilerden yalnızca biri olabilir:

index

int32

Tekrarlanıyorsa alanın dizini.

key

string

Alan bir haritaysa anahtar.

OutputConfig

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] sonuçları için bir hedef belirtin.

Alanlar
data_format

DataFormat

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

destination birleşik alanı. Zorunlu. destination aşağıdakilerden yalnızca biri olabilir:
gcs_destination

GcsDestination

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

RouteModifiers

Araç rotaları hesaplanırken karşılanması gereken bir dizi isteğe bağlı koşulu kapsar. Bu, Google Haritalar Platformu Rotalar Tercih Edilen API'sindeki RouteModifiers ile benzerdir. Bkz: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Alanlar
avoid_tolls

bool

Makul olduğu durumlarda ücretli yollardan kaçınılıp kaçınılmayacağını belirtir. Ücretli yolların olmadığı rotalar tercih edilir. Yalnızca motorlu ulaşım modları için geçerlidir.

avoid_highways

bool

Makul olan durumlarda otoyolların kullanılmaması gerektiğini belirtir. Otoyol içermeyen rotalar tercih edilir. Yalnızca motorlu ulaşım modları için geçerlidir.

avoid_ferries

bool

Makul olduğu durumlarda feribotların kullanılmamasını belirtir. Feribotla seyahat içermeyen rotalara öncelik verilir. Yalnızca motorlu ulaşım modları için geçerlidir.

avoid_indoor

bool

İsteğe bağlıdır. Mümkün olduğunda kapalı alanlarda gezinmekten kaçınılıp kaçınılmayacağını belirtir. Kapalı alan navigasyonu içermeyen rotalara öncelik verilir. Yalnızca WALKING seyahat modu için geçerlidir.

Kargo

Tek bir öğenin, teslim alınma noktalarından birinden teslimat noktalarından birine gönderilmesi. Gönderinin gerçekleştirilmiş olarak kabul edilmesi için benzersiz bir aracın teslim alma konumlarından birini ziyaret etmesi (ve yedek kapasitelerini buna göre azaltması), ardından teslimat konumlarından birini ziyaret etmesi (ve bu nedenle yedek kapasitelerini buna göre yeniden artırması) gerekir.

Alanlar
display_name

string

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

pickups[]

VisitRequest

Kargoyla ilişkili teslim alma alternatifleri grubu. Belirtilmemişse aracın yalnızca teslimatlara karşılık gelen bir konumu ziyaret etmesi gerekir.

deliveries[]

VisitRequest

Gönderimle ilişkili bir dizi teslimat alternatifi. Belirtilmemişse aracın yalnızca teslim alma noktalarına karşılık gelen bir konumu ziyaret etmesi gerekir.

load_demands

map<string, Load>

Kargonun yük talepleri (ör. ağırlık, hacim, palet sayısı vb.) Haritadaki anahtarlar, ilgili yükün türünü açıklayan tanımlayıcılar olmalıdır. İdeal olarak birimler de dahil edilmelidir. Ö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 yapabilecek araçlar grubu. Boş bırakılırsa tüm araçlar bu işlemi gerçekleştirebilir. Araçlar, ShipmentModel'nın vehicles listesindeki indekslerine göre verilir.

costs_per_vehicle[]

double

Bu gönderinin her araçla teslim edildiğinde oluşan maliyeti belirtir. Belirtilmişse ŞUNLARDAN BİRİNİ içermelidir:

  • costs_per_vehicle_indices ile aynı sayıda öğe içermelidir. costs_per_vehicle[i], modelin costs_per_vehicle_indices[i] aracına karşılık gelir.
  • modeldeki araç sayısı kadar öğe. i. öğe, modelin i. aracına karşılık gelir.

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

costs_per_vehicle_indices[]

int32

costs_per_vehicle'nın 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. costs_per_vehicle_indices kapsamı dışında bırakılan araçların maliyeti sıfırdır.

pickup_to_delivery_absolute_detour_limit

Duration

Teslim alma noktasından teslimat noktasına en kısa mesafeye kıyasla maksimum mutlak sapma süresini belirtir. Belirtilmişse negatif olmayan bir değer olmalıdır ve kargoda en az bir teslim alma ve bir teslimat işlemi olmalıdır.

Örneğin, t, seçilen teslim alma alternatifinden doğrudan seçilen teslimat alternatifine gitmek için gereken en kısa süre olsun. Ardından pickup_to_delivery_absolute_detour_limit ayarı zorunlu kılınır:

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

Aynı gönderide hem göreceli hem de mutlak sınırlar belirtilmişse olası her teslim alma/teslimat çifti için daha kısıtlayıcı olan sınır kullanılır. 2017/10 itibarıyla, alternatif yollar yalnızca seyahat süreleri araçlara bağlı olmadığında desteklenir.

pickup_to_delivery_time_limit

Duration

Bir gönderinin teslim alınmasının başlangıcından teslimatının başlangıcına kadar geçen maksimum süreyi belirtir. Belirtilmişse negatif olmayan bir değer olmalıdır ve kargoda en az bir teslim alma ve bir teslimat işlemi olmalı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 spesifikasyona da uyar.

shipment_type

string

Bu gönderinin "türünü" belirten boş olmayan bir dize. Bu özellik, shipment_types arasındaki uyumsuzlukları veya gereksinimleri tanımlamak için kullanılabilir (ShipmentModel sürümündeki shipment_type_incompatibilities ve shipment_type_requirements bölümlerine bakın).

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

label

string

Bu gönderi için bir etiket belirtir. Bu etiket, ilgili ShipmentRoute.Visit öğesinin shipment_label bölümündeki yanıtta bildirilir.

ignore

bool

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

Bir gönderinin yoksayılması, modelde shipment_type_requirements olduğunda doğrulama hatasına neden olur.

injected_first_solution_routes veya injected_solution_constraint içinde gerçekleştirilen bir gönderinin yoksayılmasına izin verilir. Çözücü, ilgili teslim alma/teslimat ziyaretlerini gerçekleştirilen rotadan kaldırır. precedence_rules gönderimlere referans verenler de yoksayılır.

penalty_cost

double

Gönderim tamamlanmazsa bu ceza, rotaların toplam maliyetine eklenir. Teslim alma ve teslimat alternatiflerinden biri ziyaret edilirse kargo tamamlanmış sayılır. Maliyet, modeldeki diğer tüm maliyetle ilgili alanlarda kullanılan birimle ifade edilebilir ve pozitif olmalıdır.

ÖNEMLİ: Bu ceza belirtilmezse sonsuz olarak kabul edilir. Yani gönderim tamamlanmalıdır.

pickup_to_delivery_relative_detour_limit

double

Teslim alma noktasından teslimat noktasına giden en kısa yola kıyasla maksimum göreceli sapma süresini belirtir. Belirtilmişse negatif olmayan bir değer olmalıdır ve kargoda en az bir teslim alma ve bir teslimat işlemi olmalıdır.

Örneğin, t, seçilen teslim alma alternatifinden doğrudan seçilen teslimat alternatifine gitmek için gereken en kısa süre olsun. Ardından pickup_to_delivery_relative_detour_limit ayarı zorunlu kılınır:

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

Aynı gönderide hem göreceli hem de mutlak sınırlar belirtilmişse olası her teslim alma/teslimat çifti için daha kısıtlayıcı olan sınır kullanılır. 2017/10 itibarıyla, alternatif yollar yalnızca seyahat süreleri araçlara bağlı olmadığında desteklenir.

Yükleme

Ziyaret gerçekleştirilirken teslim alma işlemi yapılıyorsa araç yüküne önceden tanımlanmış bir miktar eklenebilir, teslimat işlemi yapılıyorsa bu miktar çı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şeceği miktar. Bu bir tam sayı olduğundan, kullanıcıların hassasiyet kaybını önlemek için uygun bir birim seçmeleri önerilir. ≥ 0 olmalıdır.

VisitRequest

Araçla yapılabilecek ziyaret isteği: Coğrafi konumu (veya iki, aşağıya bakın), zaman aralıklarıyla gösterilen açılış ve kapanış saatleri ve hizmet süresi (araç, malları almak veya bırakmak için geldiğinde harcanan süre) vardır.

Alanlar
arrival_location

LatLng

Bu VisitRequest işlemi gerçekleştirilirken aracın ulaştığı coğrafi konum. Gönderim modelinde süre mesafesi matrisleri varsa arrival_location belirtilmemelidir.

arrival_waypoint

Waypoint

Bu VisitRequest işlemi gerçekleştirilirken aracın ulaştığı yol noktası. Gönderim modelinde süre mesafesi matrisleri varsa arrival_waypoint belirtilmemelidir.

departure_location

LatLng

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

departure_waypoint

Waypoint

Aracın bu VisitRequest tamamlandıktan sonra ayrıldığı yol noktası. arrival_waypoint ile aynıysa atlanabilir. Gönderim modelinde süre mesafesi matrisleri varsa departure_waypoint belirtilmemelidir.

tags[]

string

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

time_windows[]

TimeWindow

Ziyaret sırasında varış zamanını kısıtlayan zaman aralıkları. Bir aracın, varış zamanı aralığının dışında (ör. varış zamanı + süre bir zaman aralığında olmak zorunda değildir) hareket edebileceğini unutmayın. Araç TimeWindow.start_time tarihinden önce gelirse bekleme süresi oluşabilir.

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

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

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

duration

Duration

Ziyaret süresi (yani aracın varış ve ayrılış arasında geçirdiği süre) (olası bekleme süresine eklenir; bkz. time_windows).

cost

double

Bu ziyaret isteğinin bir araç rotasında karşılanmasının maliyeti. Bu özellik, bir gönderinin her alternatif teslim alma veya teslimat işlemi için farklı maliyetler ödemek üzere 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 yük talepleri. Bu, Shipment.load_demands alanına benzer ancak Shipment'nin tamamı yerine yalnızca bu VisitRequest için geçerlidir. Burada listelenen talepler, Shipment.load_demands bölümünde listelenen taleplere eklenir.

visit_types[]

string

Ziyaret türlerini belirtir. Bu, bir aracın ziyareti tamamlaması için gereken ek süreyi ayırmak amacıyla kullanılabilir (Vehicle.extra_visit_duration_for_visit_type bölümüne bakın).

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

avoid_u_turns

bool

Bu konumdaki sürüş rotalarında U dönüşlerinin önlenip önlenmeyeceğini belirtir. U dönüşü engelleme özelliği, en iyi sonuçları elde etmeye çalışır ancak tam engelleme garanti edilmez. Bu deneysel bir özelliktir ve davranış değişikliğe tabidir.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request adresini ziyaret edin.

ShipmentModel

Bir kargo modeli, bir dizi araç tarafından gerçekleştirilmesi gereken bir dizi kargo içerir. Bu sırada, toplam maliyet (aşağıdakilerin toplamı) en aza indirilir:

  • Araçları yönlendirmenin maliyeti (toplam süre başına maliyet, seyahat süresi başına maliyet ve tüm araçlardaki sabit maliyetin toplamı).
  • gerçekleştirilmeyen kargo cezaları.
  • Gönderilerin küresel süresinin maliyeti
Alanlar
shipments[]

Shipment

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

vehicles[]

Vehicle

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

objectives[]

Objective

Bu model için maliyetlere dönüştüreceğimiz hedef grubu. Boş değilse giriş modeli ücretsiz olmalıdır. Değiştirilmiş isteği almak için lütfen solving_mode = TRANSFORM_AND_RETURN_REQUEST işlevini kullanın. Bu durumda isteğin çözüme ulaştırılmayacağını unutmayın. İlgili belgelere bakın.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request adresine bakın.

global_start_time

Timestamp

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

Modelin zaman aralığı bir yıldan kısa olmalıdır. Yani global_end_time ve global_start_time değerleri arasında 31.536.000 saniyeden fazla olmamalıdır.

cost_per_*hour alanlarını kullanırken performansı artırmak için bu dönemi daha küçük bir aralığa ayarlamak isteyebilirsiniz (ör. tek bir günü modelliyorsanız genel zaman sınırlarını o güne ayarlamanız gerekir). Ayarlanmamışsa varsayılan olarak 1 Ocak 1970, 00:00:00 UTC (yani saniye: 0, nanos: 0) kullanılır.

global_end_time

Timestamp

Ayarlanmamışsa varsayılan olarak 1 Ocak 1971 00:00:00 UTC (yani saniye: 31536000, nanos: 0) kullanılır.

global_duration_cost_per_hour

double

Genel planın "toplam 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ı için optimizasyon yapmaya çalışmak amacıyla bu miktara saatlik bir 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 ile duration_distance_matrix_dst_tags boş olamaz.

Kullanım örnekleri:

  • İki konum var: locA ve locB.
  • Rotasına A konumunda başlayıp A konumunda son veren 1 araç.
  • locB konumunda 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.
  • Rotasına locA konumunda başlayıp locB konumunda son veren ve "hızlı" matrisini kullanan 1 araç.
  • Rotasına konumB'de başlayıp konumB'de son veren ve "yavaş" matrisini kullanan 1 araç.
  • Rotasına konumB'de başlayan ve konumB'de biten, "hızlı" matrisini kullanan 1 araç.
  • locC konumunda 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), matris i'deki diğer ziyaretlere duration_distance_matrix_src_tags(j) etiketiyle yapılan ziyaretlerin sürelerini ve mesafelerini tanımlar.

Etiketler, VisitRequest.tags veya Vehicle.start_tags ile eşleşir. Belirli bir VisitRequest veya Vehicle, bu alandaki tam olarak bir etiketle eşleşmelidir. Vehicle kaynağı, hedefi ve matris etiketlerinin aynı olabileceğini unutmayın. Benzer şekilde, VisitRequest kaynağı ve hedef etiketleri de aynı olabilir. Tüm etiketler farklı olmalı ve boş dize olmamalıdır. Bu alan boş değilse duration_distance_matrices boş olmamalıdır.

duration_distance_matrix_dst_tags[]

string

Süre ve mesafe matrislerinin hedeflerini tanımlayan etiketler; duration_distance_matrices(i).rows(j).durations(k) (sırasıyla duration_distance_matrices(i).rows(j).meters(k)), i matrisinde duration_distance_matrix_src_tags(j) etiketli ziyaretlerden duration_distance_matrix_dst_tags(k) etiketli ziyaretlere yapılan seyahatin süresini (sırasıyla mesafesini) tanımlar.

Etiketler, VisitRequest.tags veya Vehicle.start_tags ile eşleşir. Belirli bir VisitRequest veya Vehicle, bu alandaki tam olarak bir etiketle eşleşmelidir. Vehicle kaynağı, hedefi ve matris etiketlerinin aynı olabileceğini unutmayın. Benzer şekilde, VisitRequest kaynağı ve hedef etiketleri de aynı olabilir. Tüm etiketler farklı olmalı ve boş dize olmamalıdır. Bu alan boş değilse duration_distance_matrices boş olmamalıdır.

transition_attributes[]

TransitionAttributes

Modele geçiş özellikleri eklendi.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Uyumsuz shipment_types (kargo_türleri) kümeleri (ShipmentTypeIncompatibility bölümüne bakın).

shipment_type_requirements[]

ShipmentTypeRequirement

shipment_type şartları (ShipmentTypeRequirement bölümüne bakın).

precedence_rules[]

PrecedenceRule

Modelde uygulanması gereken öncelik kuralları grubu.

ÖNEMLİ: Öncelik kurallarının kullanılması, optimize edilebilecek sorunun boyutunu sınırlar. Çok sayıda gönderim içeren öncelik kurallarının kullanıldığı istekler reddedilebilir.

max_active_vehicles

int32

Maksimum etkin araç sayısını sınırlar. Rotası en az bir gönderi taşıyan araçlar etkin olarak kabul edilir. Bu özellik, araç sayısının sürücü sayısından fazla olduğu ve araç filosunun heterojen olduğu durumlarda rota sayısını sınırlamak için kullanılabilir. Optimizasyon daha sonra kullanılacak en iyi araç alt grubunu seçer. Kesinlikle pozitif olmalıdır.

DurationDistanceMatrix

Ziyaret ve araç başlangıç konumlarından ziyaret ve araç bitiş konumlarına kadar olan süre ve mesafe matrisini belirtir.

Alanlar
rows[]

Row

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

vehicle_start_tag

string

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

Her araç başlangıcı tam olarak bir matrisle eşleşmelidir. Yani start_tags alanlarından tam olarak biri bir matrisin vehicle_start_tag alanıyla (ve yalnızca o matrisle) eşleşmelidir.

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

Satır

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

Alanlar
durations[]

Duration

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

meters[]

double

Belirli bir satır için mesafe değerleri. Modelde mesafelerle ilgili maliyet veya kısıtlama yoksa bu alan boş bırakılabilir. Aksi takdirde, durations kadar öğe içermelidir.

Hedef

Hedefler, maliyet modelinin yerini tamamen aldığından önceden var olan maliyetlerle uyumlu değildir. Her hedef; örneğin araçlar, gönderiler veya geçiş özellikleri için önceden tanımlanmış bir dizi maliyetle eşlenir.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request adresine bakın.

Alanlar
type

Type

Hedefin türü.

weight

double

Bu hedefin diğerlerine kıyasla ne kadar önemli olduğu. Bu, negatif olmayan herhangi bir sayı olabilir. Ağırlıkların toplamı 1 olmak zorunda değildir. Ağırlıklar varsayılan olarak 1,0'dır.

Tür

Bir dizi maliyetle eşlenecek hedef türü.

Sıralamalar
DEFAULT Makul bir çözüm sunmak için varsayılan bir maliyet kümesi kullanılır. Not: Bu hedef tek başına kullanılabilir ancak halihazırda mevcut değilse her zaman ağırlık 1.0 ile temel olarak kullanıcının belirttiği hedeflere eklenir.
MIN_DISTANCE "MIN" hedefleri. Katedilen toplam mesafeyi en aza indirin.
MIN_WORKING_TIME Tüm araçlar için toplam çalışma süresini en aza indirin.
MIN_TRAVEL_TIME Yukarıdakiyle aynıdır ancak yalnızca seyahat süresine odaklanır.
MIN_NUM_VEHICLES Kullanılan araç sayısını en aza indirin.

PrecedenceRule

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

Aynı (veya ilgili) etkinliklere birden fazla öncelik verilebilir. Örneğin: "B'nin teslim alınması, A'nın teslim edilmesinden sonra gerçekleşir" ve "C'nin teslim alınması, B'nin teslim alınmasından sonra gerçekleşir".

Ayrıca, öncelikler yalnızca her iki gönderim de yapıldığında geçerli olur, aksi takdirde yoksayılır.

Alanlar
first_is_delivery

bool

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

second_is_delivery

bool

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

offset_duration

Duration

"Birinci" ve "ikinci" etkinlik arasındaki fark. Negatif olabilir.

first_index

int32

"İlk" etkinliğin kargo dizini. Bu alan belirtilmelidir.

second_index

int32

"İkinci" etkinliğin kargo dizini. Bu alan belirtilmelidir.

ShipmentRoute

Bir aracın rotası, zaman ekseni boyunca ş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ğıdaki durumlar arasında ayrım yaptığımızı unutmayın:

  • Aracın başlangıcı ve bitişi ile her ziyaretin başlangıcı ve bitişi (varış ve ayrılış olarak da bilinir) gibi "dakik etkinlikler". Belirli bir saniyede gerçekleşirler.
  • Ziyaretlerin kendisi ve ziyaretler arasındaki geçiş gibi "zaman aralıkları". Zaman aralıkları bazen sıfır süreli olabilir (ör. aynı saniyede başlayıp biter) ancak genellikle pozitif sürelidir.

Sabitler:

  • n ziyaret varsa n+1 geçiş vardır.
  • Bir ziyaretin öncesinde (aynı dizin) ve sonrasında (dizin + 1) her zaman bir geçiş olur.
  • Araç başlatma işlemi her zaman 0 numaralı geçişle takip edilir.
  • Aracın sonu her zaman #n geçişiyle başlar.

Yakınlaştırdığımızda Transition ve Visit sırasında gerçekleşen olaylar aşağıda açıklanmaktadır:

---+-------------------------------------+-----------------------------+-->
   |           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 TRAVEL, BREAKS, DELAY ve WAIT'in nasıl düzenlenebileceğini aşağıda bulabilirsiniz.

  • Çakışmazlar.
  • GECİKME benzersizdir ve bir sonraki ziyaretten (veya araç sonundan) hemen önce gelen kesintisiz bir süre olmalıdır. Bu nedenle, başlangıç ve bitiş zamanını bilmek için gecikme süresini bilmek yeterlidir.
  • ARALAR, kesintisiz 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"dir: Bu geçiş sırasında birkaç kez kesintiye uğrayabilirler. Müşteriler, seyahatin "en kısa sürede" gerçekleşeceğini ve kalan sürenin "bekleme" ile geçeceğini 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

Kaynaktaki diziniyle tanımlanan, rotayı gerçekleştiren araç ShipmentModel.

vehicle_label

string

Belirtilmişse bu rotayı gerçekleştiren aracın ShipmentModel.vehicles(vehicle_index).label değerine eşit etiketi.

vehicle_start_time

Timestamp

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

vehicle_end_time

Timestamp

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

visits[]

Visit

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

transitions[]

Transition

Rotadaki geçişlerin sıralı listesi.

has_traffic_infeasibilities

bool

OptimizeToursRequest.consider_road_traffic doğru olarak ayarlandığında bu alan, rota zamanlamalarındaki tutarsızlıkların trafik tabanlı seyahat süresi tahminleri kullanılarak tahmin edildiğini gösterir. Ziyaret ve araç zaman aralıklarını karşılamaya devam ederken, ilk ziyaretten önce veya son ziyaretten sonra trafiğe göre ayarlanmış seyahati, ziyaretler arasındaki gecikmeleri ve molaları tamamlamak için yeterli zaman olmayabilir. Örneğin,

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

Trafik nedeniyle seyahat süresinin travel_duration(previous_visit, next_visit) kadar artması, next_visit konumuna varışın mevcut zaman aralığından daha geç olacağını gösteriyor. Ayrıca, seyahat süresi tahminlerindeki artış ve ziyaret veya mola zaman aralığı kısıtlamaları nedeniyle bir molanın ziyaretle çakışması zorunlu olabilir.

route_polyline

EncodedPolyline

Rotanın kodlanmış çoklu çizgi gösterimi. Bu alan yalnızca OptimizeToursRequest.populate_polylines doğru olarak ayarlanmışsa doldurulur.

breaks[]

Break

Bu rotayı gerçekleştiren araç için planlanan molalar. breaks dizisi, her biri ilgili start_time'de başlayıp duration saniye süren zaman aralıklarını gösterir.

metrics

AggregatedMetrics

Bu rotanın süresi, mesafesi ve yük metrikleri. AggregatedMetrics alanları, bağlama bağlı olarak tüm ShipmentRoute.transitions veya ShipmentRoute.visits için toplanır.

vehicle_fullness

VehicleFullness

VehicleFullness alanı, sınırlı metriklerin ilgili araç sınırlarına ne kadar yakın olduğunu hesaplamak için kullanılır. Bu alanlar, sınırlı bir metrik alanı (ör. AggregatedMetrics.travel_distance_meters) ile ilgili araç sınırı (ör. Vehicle.route_distance_limit) arasındaki oranlardır.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

route_costs

map<string, double>

Rota maliyeti, maliyetle ilgili istek alanlarına göre dökümü alınmış şekilde. Anahtarlar, giriş OptimizeToursRequest'e göre proto yollarıdır (ör. "model.shipments.pickups.cost"). Değerler ise ilgili maliyet alanı tarafından oluşturulan ve rotanın tamamında toplanan toplam maliyettir. Başka bir deyişle, costs["model.shipments.pickups.cost"], rota üzerindeki tüm teslim alma maliyetlerinin toplamıdır. Modelde tanımlanan tüm maliyetler, 2022/01 itibarıyla yalnızca toplu olarak raporlanan TransitionAttributes ile ilgili maliyetler hariç olmak üzere burada ayrıntılı olarak raporlanır.

route_total_cost

double

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

Ara

Bir mola yürütülmesini temsil eden veriler.

Alanlar
start_time

Timestamp

Aranın başlangıç zamanı.

duration

Duration

Mola süresi.

EncodedPolyline

Çoklu çizginin kodlanmış temsili. Çoklu çizgi kodlama hakkında daha fazla bilgiyi şu adreslerde 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ş

Rotadaki iki etkinlik arasında geçiş yapma. 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ında seyahat süresi.

travel_distance_meters

double

Geçiş sırasında kat edilen mesafe.

traffic_info_unavailable

bool

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

delay_duration

Duration

Bu geçişe uygulanan gecikme sürelerinin toplamı. Varsa 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

Bu geçiş sırasında meydana gelen araların süresinin toplamı (varsa). Her molanın başlangıç zamanı ve süresiyle ilgili ayrıntılar ShipmentRoute.breaks içinde saklanı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 mola süresini içermez. Bu bekleme süresinin, birbirini izlemeyen aralıklar halinde bölünebileceğini de unutmayın.

total_duration

Duration

Geçişin toplam süresi (kolaylık olması açısından sağlanır). Şuna 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 ayrıca şunlar geçerlidir: "total_duration = travel_duration + delay_duration
  • break_duration + wait_duration`.
start_time

Timestamp

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

route_polyline

EncodedPolyline

Geçiş sırasında izlenen rotanın kodlanmış çoklu çizgi gösterimi. Bu alan yalnızca populate_transition_polylines doğru olarak ayarlanmışsa doldurulur.

route_token

string

Yalnızca çıkış. Rotayı izleme sırasında rotayı yeniden oluşturmak için Navigation SDK'ya iletilebilen ve yeniden yönlendirme durumunda rota oluşturulurkenki orijinal amacı karşılayan opak bir jeton. Bu jetonu opak bir blob olarak değerlendirin. Hizmet tam olarak aynı rotayı döndürse bile değeri değişebileceğinden, istekler arasında değerini karşılaştırmayın. Bu alan yalnızca populate_transition_polylines doğru olarak ayarlanmışsa doldurulur.

vehicle_loads

map<string, VehicleLoad>

Bu geçiş sırasında araç yükleri, bu aracın Vehicle.load_limits içinde görünen veya bu rotada yapılan bazı gönderilerde sıfır olmayan Shipment.load_demands olan her tür için.

İlk geçiş sırasındaki yükler, araç rotasının başlangıç yükleridir. Ardından, her ziyaretten sonra, ziyaretin load_demands, ziyaretin teslim alma veya teslimat olmasına bağlı olarak bir sonraki geçişin yüklerini elde etmek için eklenir ya da çıkarılır.

VehicleLoad

Belirli bir tür için rota üzerindeki bir noktada aracın gerçek yükünü bildirir (Transition.vehicle_loads bölümüne bakın).

Alanlar
amount

int64

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

Ziyaret edin

Bir rota sırasında gerçekleştirilen ziyaret. Bu ziyaret, Shipment teslim alma veya teslim etme işlemine karşılık gelir.

Alanlar
shipment_index

int32

Kaynak ShipmentModel içindeki shipments alanının dizini.

is_pickup

bool

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

visit_request_index

int32

VisitRequest'nın Shipment'daki teslim alma veya teslimat alanındaki dizini (bkz. is_pickup).

start_time

Timestamp

Ziyaretin başladığı zaman. Aracın, ziyaret konumuna bu süreden daha önce ulaşabileceğini unutmayın. Saatler ShipmentModel ile tutarlıdır.

load_demands

map<string, Load>

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

detour

Duration

Ziyaretten önce rotada ziyaret edilen gönderiler ve zaman aralıklarının neden olduğu olası bekleme süresi nedeniyle ek sapma süresi. Ziyaret bir teslimatsa sapma, ilgili teslim alma ziyaretinden hesaplanır ve şu şekilde belirlenir:

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

Aksi takdirde, araç start_location değerinden hesaplanır ve şu değere 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 kopyası.

visit_label

string

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

injected_solution_location_token

int32

Ziyaret edilen konumla ilgili bilgileri temsil eden opak bir jeton.

Bu alan, bu ziyaret için VisitRequest.avoid_u_turns doğru olarak ayarlandığında veya OptimizeToursRequest isteğinde ShipmentModel.avoid_u_turns doğru olarak ayarlandığında sonuç rotalarının ziyaretlerinde doldurulabilir.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request adresini ziyaret edin.

ShipmentTypeIncompatibility

Kargo türüne bağlı olarak kargolar arasındaki uyumsuzlukları belirtir. Aynı rotadaki uyumsuz gönderilerin görünümü, uyumsuzluk moduna göre kısıtlanır.

Alanlar
types[]

string

Uyumsuz türlerin listesi. Listelenenler arasında farklı shipment_types değerlerine sahip iki gönderi "uyumsuz" olarak kabul edilir.

incompatibility_mode

IncompatibilityMode

Uyumsuzluğa uygulanan mod.

IncompatibilityMode

Uyumsuz gönderilerin aynı rotada görünümünün nasıl kısıtlanacağını tanımlayan modlar.

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

Bu modda, uyumsuz türlere sahip iki gönderi aynı anda aynı araçta bulunamaz:

  • Aynı aracı yalnızca biri teslim edilmeden diğeri alınırsa paylaşabilirler.
  • Her iki gönderim de yalnızca teslimat veya yalnızca teslim alma içinse aynı aracı hiç kullanamazlar.

ShipmentTypeRequirement

Kargo_türüne göre kargolar arasındaki koşulları belirtir. Koşulun ayrıntıları, koşul modu tarafından tanımlanır.

Alanlar
required_shipment_type_alternatives[]

string

dependent_shipment_types tarafından gerekli olan alternatif kargo türlerinin listesi.

dependent_shipment_types[]

string

dependent_shipment_types alanında türü belirtilmiş tüm gönderiler için aynı rota üzerinde en az bir required_shipment_type_alternatives türünde gönderinin ziyaret edilmesi gerekir.

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

requirement_mode

RequirementMode

Koşula uygulanan mod.

RequirementMode

Bir rotadaki bağımlı gönderilerin görünümünü tanımlayan modlar.

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

IN_SAME_VEHICLE_AT_PICKUP_TIME modunda, tüm "bağımlı" gönderimlerin teslim alınma sırasında araçlarında en az bir "gerekli" gönderim bulunmalıdır.

Bu nedenle, "bağımlı" bir kargo teslim alma işlemi için aşağıdakilerden biri gerekir:

  • Yalnızca teslimat için "gerekli" bir gönderi, rotada daha sonra teslim edildiyse veya
  • Kendinden önce rotada "gerekli" bir gönderi alınmışsa ve "gerekli" gönderinin teslimatı varsa bu teslimat, "bağımlı" gönderinin alınmasından sonra yapılmalıdır.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Öncekiyle aynıdır. Ancak "bağımlı" gönderilerin, teslimatları sırasında araçlarında "gerekli" bir gönderi bulunması gerekir.

SkippedShipment

Bir çözüme dahil edilmeyen gönderilerin ayrıntılarını belirtir. Önemsiz durumlarda ve/veya atlama nedenini belirleyebildiğimizde nedeni burada bildiririz.

Alanlar
index

int32

Dizin, kaynak ShipmentModel içindeki gönderinin dizinine karşılık gelir.

label

string

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

reasons[]

Reason

Gönderinin neden atlandığını açıklayan nedenlerin listesi. Yukarıdaki Reason yorumuna bakın. Bir gönderinin neden atlandığını anlayamazsak nedenler ayarlanmaz.

penalty_cost

double

Bu, Shipment.penalty_cost kopyasıdır. Atlanan bir gönderinin ciddiyetini daha kolay görebilmeniz için buraya eklenmiştir.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

estimated_incompatible_vehicle_ratio

double

Aşağıdaki nedenlerden en az biriyle bu gönderimi gerçekleştiremeyen araçların tahmini oranı. Not: Bu alan yalnızca nedenler araçla ilgili olduğunda doldurulur.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

Neden

Gönderinin neden atlandığını açıklayabiliyorsak nedenler burada listelenir. Nedeni tüm araçlar için aynı değilse reason 1'den fazla öğe içerir. Atlanan bir gönderide, example_vehicle_index dışındaki tüm alanların aynı olduğu, yani yinelenen nedenler olamaz. Ö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 hiçbir araçla uyumlu değil. Nedenler tüm araçlar için farklı olabilir ancak en az bir aracın "Elma" kapasitesi (1. araç dahil), en az bir aracın "Armut" kapasitesi (3. araç dahil) ve en az bir aracın mesafe sınırı (1. araç dahil) aşılacaktır.

Alanlar
code

Code

Kodun yorumlarına bakın.

example_vehicle_indices[]

int32

example_vehicle_index ile aynıdır. Tek fark, tanımlanan birden fazla aracın listesini sağlamamızdır. Bu liste tam kapsamlı olmayabilir. Bu alan yalnızca [fill_example_vehicle_indices_in_skipped_reasons][] doğruysa doldurulur.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

example_exceeded_capacity_type

string

Neden kodu DEMAND_EXCEEDS_VEHICLE_CAPACITY ise bir kapasite türünün aşıldığını gösterir.

example_vehicle_index

int32

Neden, kargo-araç uyumsuzluğuyla ilgiliyse bu alanda alakalı bir aracın indeksi sağlanır.

Kod

Neden türünü tanımlayan kod. Buradaki sıra anlamsızdır. Özellikle, her ikisi de geçerliyse belirli bir nedenin çözümde diğerinden önce görünüp görünmeyeceği hakkında bilgi vermez.

Sıralamalar
CODE_UNSPECIFIED Bu asla kullanılmamalıdır.
NO_VEHICLE Modelde, tüm gönderileri imkansız kılan bir araç yok.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Gönderi talebi, bir aracın kapasitesini bazı kapasite türleri için aşıyor. Bu türlerden 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 konumundan gönderimin teslim alınacağı ve/veya teslim edileceği konumlara ve aracın son konumuna kadar) aracın route_distance_limit değerini aşıyor.

Bu hesaplamada jeodezik mesafelerin kullanıldığını unutmayın.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

Seyahat süresi, bekleme süresi ve hizmet 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 durum senaryosunda (jeodezik mesafe x 36 m/sn, yaklaşık 130 km/saat) hesaplanır.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT Yukarıdakiyle aynıdır ancak yalnızca minimum seyahat süresini ve aracın travel_duration_limit karşılaştırırız.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS Araç, en erken başlangıç zamanında başlasa bile bu gönderimi en iyi senaryoda gerçekleştiremez (zaman hesaplaması için CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT bölümüne bakın): Toplam süre, aracın en geç bitiş zamanından sonra bitmesine neden olur.
VEHICLE_NOT_ALLOWED Gönderinin allowed_vehicle_indices alanı boş değil ve bu araç bu alana ait değil.
VEHICLE_IGNORED

Aracın ignore alanı doğru olmalıdır.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

SHIPMENT_IGNORED

Gönderinin ignore alanı doğru olmalıdır.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

Gönderim, injected_solution_constraint içinde atlandı.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

injected_solution_constraint içinde belirtilen araç rotası gevşetmesi, herhangi bir ziyaretin eklenmesine izin vermiyor.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

ZERO_PENALTY_COST

Gönderinin ceza maliyeti sıfır olmalıdır. Bu, gelişmiş bir modelleme seçeneği olarak yararlı olsa da sonradan bir gönderinin neden atlandığını da açıklayabilir.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

TimeWindow

Zaman aralıkları, bir etkinliğin zamanını (ör. ziyaret sırasında varış zamanı veya bir aracın başlangıç ve bitiş zamanı) kısıtlar.

Sert zaman aralığı sınırları, start_time ve end_time, etkinliğin en erken ve en geç zamanını zorunlu kılar. Bu durumda start_time <= event_time <= end_time. Esnek zaman aralığının alt sınırı olan soft_start_time, etkinliğin soft_start_time tarihinde veya sonrasında gerçekleşmesi için bir tercih olduğunu ifade eder. Bu tercih, etkinliğin soft_start_time'dan ne kadar önce gerçekleştiğiyle orantılı bir maliyetle sonuçlanır. Esnek zaman aralığının üst sınırı olan soft_end_time, etkinliğin soft_end_time tarihinde veya öncesinde gerçekleşmesi için bir tercih ifade eder. Bu tercih, etkinliğin soft_end_time tarihinden ne kadar sonra gerçekleştiğiyle orantılı bir maliyetle sonuçlanır. start_time, end_time, soft_start_time ve soft_end_time, genel zaman sınırları içinde olmalı (ShipmentModel.global_start_time ve ShipmentModel.global_end_time) ve şunlara uymalıdır:

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

Timestamp

Kesin zaman aralığının başlangıç zamanı. Belirtilmezse ShipmentModel.global_start_time olarak ayarlanır.

end_time

Timestamp

Kesin zaman aralığının bitiş zamanı. Belirtilmezse ShipmentModel.global_end_time olarak ayarlanır.

soft_start_time

Timestamp

Zaman aralığının kontrollü başlatma zamanı.

soft_end_time

Timestamp

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

cost_per_hour_before_soft_start_time

double

Etkinlik soft_start_time'dan önce gerçekleşirse modele diğer maliyetlere eklenen saatlik 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 belirlenebilir.

cost_per_hour_after_soft_end_time

double

Etkinlik soft_end_time tarihinden sonra gerçekleşirse modele eklenen saatlik 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 belirlenebilir.

TransitionAttributes

Bir rotadaki iki ardışık ziyaret arasındaki geçişlerin özelliklerini belirtir. Aynı geçiş için birden fazla TransitionAttributes geçerli olabilir. Bu durumda, tüm ek maliyetler toplanır ve en katı kısıtlama veya sınır uygulanır (doğal "VE" semantiği izlenerek).

Alanlar
src_tag

string

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

Bir kaynak ziyareti veya araç başlatma, VisitRequest.tags ya da Vehicle.start_tags alanlarından biri src_tag içeriyorsa veya excluded_src_tag içermiyorsa (bu iki alandan hangisinin boş olmadığına bağlı olarak) eşleşir.

excluded_src_tag

string

Şu sayfaya göz atın: src_tag. Tam olarak src_tag ve excluded_src_tag özelliklerinden biri boş olmamalıdır.

dst_tag

string

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

excluded_dst_tag

string

Şu sayfaya göz atın: dst_tag. Tam olarak dst_tag ve excluded_dst_tag özelliklerinden biri boş olmamalıdır.

cost

double

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

cost_per_kilometer

double

Bu geçiş gerçekleştirilirken gidilen mesafeye uygulanan kilometre başına maliyeti belirtir. Araçlarda belirtilen Vehicle.cost_per_kilometer değerine eklenir.

distance_limit

DistanceLimit

Bu geçiş yapılırken kat edilen mesafeyle ilgili bir sınır belirtir.

Haziran 2021 itibarıyla yalnızca esnek sınırlar desteklenmektedir.

delay

Duration

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

Bu gecikme her zaman kaynak ziyareti tamamlandıktan sonra ve hedef ziyareti başlatmadan önce gerçekleşir.

Uri

Route Optimization API tarafından okunup yazılabilen bir kaynağı işaret eden evrensel kaynak tanımlayıcı.

Alanlar
uri

string

Kaynağın URI'si. Kaynak henüz mevcut olmayabilir.

Kaynağın içeriği JSON veya textproto olarak kodlanır. Yalnızca Google Cloud Storage kaynakları desteklenir. Kaynak JSON olarak kodlanmışsa kaynak adının sonuna .json eklenmelidir. Kaynak, Textproto olarak kodlanmışsa kaynak adının sonuna .txtpb eklenmelidir. Örneğin, JSON kodlu bir dosyaya yönelik Google Cloud Storage URI'si gs://bucket/path/input/object.json gibi görünebilir.

Araç

Kargo sorununda bir aracı modelliyor. Kargo sorununu çözdüğünüzde bu araç için start_location ile end_location arasında bir rota oluşturulur. Rota, ziyaretlerin sırasıdır (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 kullanılabilir.

travel_mode

TravelMode

Aracın kullanabileceği yolları ve hızını etkileyen ulaşım şekli. Ayrıca travel_duration_multiple başlıklı makaleyi inceleyin.

route_modifiers

RouteModifiers

Belirli bir araç için rotaların hesaplanma şeklini etkileyen bir dizi koşul.

start_location

LatLng

Aracın herhangi bir gönderi almadan önce başladığı coğrafi konum. Belirtilmezse araç ilk teslim alma noktasından başlar. Kargo modelinde süre ve mesafe matrisleri varsa start_location belirtilmemelidir.

start_waypoint

Waypoint

Aracın herhangi bir gönderi almadan önce başladığı coğrafi konumu temsil eden yol noktası. Ne start_waypoint ne de start_location belirtilirse araç ilk teslim alma noktasından başlar. Kargo modelinde süre ve mesafe matrisleri varsa start_waypoint belirtilmemelidir.

end_location

LatLng

Aracın son VisitRequest tamamlandıktan sonra bulunduğu coğrafi konum. Belirtilmediği takdirde aracın ShipmentRoute, son VisitRequest tamamlandığında hemen sona erer. Kargo modelinde süre ve mesafe matrisleri varsa end_location belirtilmemelidir.

end_waypoint

Waypoint

Aracın son VisitRequest tamamlandıktan sonra sona erdiği coğrafi konumu temsil eden yol noktası. Ne end_waypoint ne de end_location belirtilirse aracın ShipmentRoute, son VisitRequest tamamlandığında hemen sona erer. Kargo modelinde süre ve mesafe matrisleri varsa end_waypoint belirtilmemelidir.

start_tags[]

string

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

Boş veya yinelenen dizelere izin verilmez.

end_tags[]

string

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

Boş veya yinelenen dizelere izin verilmez.

start_time_windows[]

TimeWindow

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

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

Aynı tekrarlanan alana ait zaman aralıkları ayrık olmalıdır. Yani hiçbir zaman aralığı başka bir zaman aralığıyla çakışamaz veya ona 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 boşaltma politikası uygulanır.

load_limits

map<string, LoadLimit>

Aracın kapasiteleri (örneğin, ağırlık, hacim, palet sayısı). Haritadaki anahtarlar, Shipment.load_demands alanının anahtarlarıyla tutarlı olacak şekilde yük türünün tanımlayıcılarıdır. Belirli bir anahtar bu haritada yoksa ilgili kapasite sınırsız olarak kabul edilir.

cost_per_hour

double

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

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

cost_per_traveled_hour

double

Araç rotasının gidilen saat başına maliyeti. Bu maliyet yalnızca rota tarafından alınan seyahat süresi için geçerlidir (yani ShipmentRoute.transitions içinde bildirilen) ve bekleme süresi ile ziyaret süresini içermez.

cost_per_kilometer

double

Araç rotasının kilometre başına maliyeti. Bu maliyet, ShipmentRoute.transitions içinde bildirilen mesafe için geçerlidir ve tek bir VisitRequest'nin arrival_location ile departure_location arasında örtülü olarak gidilen mesafeler için geçerli değildir.

fixed_cost

double

Bu araç bir gönderiyi işlemek için kullanılıyorsa sabit maliyet uygulanır.

used_if_route_is_empty

bool

Bu alan yalnızca rotası herhangi bir gönderiye hizmet etmeyen araçlar için geçerlidir. Bu durumda aracın kullanılmış olarak kabul edilip edilmeyeceğini belirtir.

Doğruysa araç, herhangi bir gönderiye hizmet etmese bile başlangıç konumundan bitiş konumuna gider ve başlangıçtan bitişe yolculuktan kaynaklanan süre ve mesafe maliyetleri dikkate alınır.

Aksi takdirde, başlangıç konumundan bitiş konumuna gitmez ve bu araç için break_rule veya TransitionAttributes kaynaklı gecikme planlanmaz. Bu durumda, aracın ShipmentRoute, araç dizini ve etiketi dışında herhangi bir bilgi içermez.

route_duration_limit

DurationLimit

Sınır, aracın rotasının toplam süresine uygulanır. Belirli bir OptimizeToursResponse iç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ının seyahat süresine uygulanan sınır. Belirli bir OptimizeToursResponse içinde, rota seyahat süresi tüm transitions.travel_duration toplamıdır.

route_distance_limit

DistanceLimit

Sınır, aracın rotasının toplam mesafesine uygulanır. Belirli bir OptimizeToursResponse içinde rota mesafesi, tüm transitions.travel_distance_meters toplamıdır.

extra_visit_duration_for_visit_type

map<string, Duration>

visit_types dizelerinden süreye kadar olan bir haritayı belirtir. Süre, belirtilen visit_types ile yapılan ziyaretlerde VisitRequest.duration'ya ek olarak alınacak süredir. Bu ek ziyaret süresi, cost_per_hour belirtilmişse maliyeti artırır. Anahtarlar (ör. visit_types) boş dizeler olamaz.

Ziyaret isteğinde birden fazla tür varsa haritaya her tür için bir süre eklenir.

break_rule

BreakRule

Bu araçta uygulanacak mola programını açıklar. Boş bırakılırsa bu araç için mola planlanmaz.

label

string

Bu araç için bir etiket belirtir. Bu etiket, yanıtta ilgili ShipmentRoute öğesinin vehicle_label olarak bildirilir.

ignore

bool

Doğruysa used_if_route_is_empty yanlış olmalıdır ve bu araç kullanılmaz.

injected_first_solution_routes içinde yoksayılan bir araç tarafından yapılan gönderim, ilk çözümde atlanır ancak yanıtta yapılabilir.

injected_solution_constraint içinde yoksayılan bir araçla kargo gönderimi yapılırsa ve ilgili teslim alma/teslimat işlemleri araçta kalmakla sınırlıysa (ör. RELAX_ALL_AFTER_THRESHOLD düzeyine düşürülmezse) yanıtta atlanır. Bir gönderinin allowed_vehicle_indices alanı boş değilse ve izin verilen tüm araçlar yoksayılıyorsa bu gönderi yanıtta atlanır.

travel_duration_multiple

double

Bu aracın seyahat sürelerini artırmak veya azaltmak için kullanılabilecek bir çarpma faktörünü belirtir. Örneğin, bu değeri 2,0 olarak ayarladığınızda bu aracın daha yavaş olduğu ve standart araçlara kıyasla iki kat daha uzun seyahat sürelerine sahip olduğu anlaşılır. Bu kat, ziyaret sürelerini etkilemez. cost_per_hour veya cost_per_traveled_hour belirtilmişse maliyeti etkiler. Bu değer [0.001, 1000.0] aralığında olmalıdır. Ayarlanmamışsa araç standarttır ve bu kat, 1, 0 olarak kabul edilir.

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

Ayrıca extra_visit_duration_for_visit_type bölümüne de bakın.

DurationLimit

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

Esnek 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 ile sınırlayan kesin bir sınır.

soft_max_duration

Duration

Maksimum süre sınırını zorunlu kılmayan ancak ihlal edildiğinde rotanın maliyete tabi olmasına neden olan esnek bir sınırdır. Bu maliyet, modelde tanımlanan diğer maliyetlere aynı birimle eklenir.

Tanımlanırsa soft_max_duration negatif olmamalıdır. max_duration da tanımlanmışsa soft_max_duration, max_duration değerinden küçük olmalıdır.

quadratic_soft_max_duration

Duration

Maksimum süre sınırını zorunlu kılmayan ancak ihlal edildiğinde rotanın süreye göre ikinci dereceden bir maliyete neden olduğu esnek bir sınır. Bu maliyet, modelde tanımlanan diğer maliyetlere aynı birimle eklenir.

Tanımlanırsa quadratic_soft_max_duration negatif olmamalıdır. max_duration da tanımlanmışsa quadratic_soft_max_duration değeri max_duration değerinden küçük olmalı ve aradaki 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 edilirse saatlik maliyet. Süre eşiğin altındaysa ek maliyet 0 olur. Aksi takdirde maliyet, süreye bağlı olarak aşağıdaki şekilde belirlenir:

  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 oluşan kare saat başına maliyet.

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

  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 sanal sınırı. Şu sayfaya göz atın: cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Yük, bu aracın rotası boyunca soft_max_load değerini aşarsa aşağıdaki maliyet cezası uygulanır (araç başına yalnızca bir kez): (yük - soft_max_load) * cost_per_unit_above_soft_max. Tüm maliyetler toplanır ve Shipment.penalty_cost ile aynı birimde olmalıdır. Esnek sınırlar yalnızca model genelinde yalnızca teslim alma veya yalnızca teslimat için geçerli olan türlerde tanımlanabilir.

start_load_interval

Interval

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

end_load_interval

Interval

Aracın rota sonunda kabul edilebilir yükleme aralığı.

max_load

int64

Kabul edilebilir maksimum yük miktarı.

cost_per_kilometer

LoadCost

Bu araç için bir birim yükün bir kilometre taşınmasının maliyeti. Bu, yakıt tüketimi için bir vekil olarak kullanılabilir: Yük bir ağırlıksa (Newton cinsinden), yük*kilometre bir enerji boyutuna sahiptir.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request adresini ziyaret edin.

cost_per_traveled_hour

LoadCost

Bu araçla bir saat boyunca bir yük birimiyle seyahat etmenin maliyeti.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request adresini ziyaret edin.

Aralık

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

Alanlar
min

int64

Kabul edilebilir minimum yük ≥ 0 olmalıdır. İkisi de belirtilmişse min değeri max değerinden küçük veya eşit olmalıdır.

max

int64

Kabul edilebilir maksimum yük. ≥ 0 olmalıdır. Belirtilmemesi durumunda, maksimum yük bu mesajla sınırlanmaz. İkisi de belirtilmişse min değeri max değerinden küçük veya eşit olmalıdır.

LoadCost

Transition sırasında bir birim yükü taşımanın maliyeti. Belirli bir yük için maliyet iki bölümün toplamıdır:

  • min(yük, load_threshold) * cost_per_unit_below_threshold
  • maks(0, yük - load_threshold) * cost_per_unit_above_threshold

Bu maliyetle çözümler, yüksek talepleri önce karşılamayı veya benzer şekilde yüksek talepleri en son karşılamayı tercih eder. Örneğin, bir araçta

load_limit {
  key: "weight"
  value {
    cost_per_kilometer {
      load_threshold: 15
      cost_per_unit_below_threshold: 2.0
      cost_per_unit_above_threshold: 10.0
    }
  }
}

ve rotası, geçişlerle birlikte başlangıç, teslim alma, teslim alma, teslimat, teslimat, bitiş şeklindedir:

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

bu LoadCost tarafından yapılan maliyet (cost_below * load_below * kilometers + cost_above * load_above * kms) olur.

  • geçiş 0: 0,0
  • 1. geçiş: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • geçiş 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
  • 3. geçiş: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • geçiş 4: 0,0

Bu nedenle, rota üzerindeki LoadCost değeri 120,0'dır.

Ancak rota, geçişlerle birlikte start,pickup,delivery,pickup,delivery,end ise:

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

bu LoadCost tarafından karşılanan maliyet

  • geçiş 0: 0,0
  • 1. geçiş: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • geçiş 2: 0,0
  • 3. geçiş: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • geçiş 4: 0,0

Burada rotadaki LoadCost değeri 40,0'dır.

LoadCost, yoğun geçişli çözümleri daha pahalı hale getirir.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request adresini ziyaret edin.

Alanlar
load_threshold

int64

Yük biriminin taşıma maliyetinin eşiğin altındaki birim başına maliyetten eşiğin üzerindeki birim başına maliyete değiştiği yük miktarı. 0 veya daha büyük olmalıdır.

cost_per_unit_below_threshold

double

Yük biriminin taşınmasının maliyeti (0 ile eşik arasındaki her birim için). Sonlu bir değer olmalı ve 0'dan büyük veya 0'a eşit olmalıdır.

cost_per_unit_above_threshold

double

Eşiğin üzerindeki her birim için yük birimini taşıma maliyeti. Eşik = 0 olan özel durumda bu, birim başına sabit bir maliyettir. Sonlu bir değer olmalı ve 0'dan büyük veya 0'a eşit olmalıdır.

TravelMode

Araçların kullanabileceği ulaşım şekilleri.

Bunlar, Google Haritalar Platformu Rotalar API'si seyahat modlarının bir alt kümesi olmalıdır. Bkz: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

Not: WALKING rotaları beta sürümündedir ve bazen net kaldırımlar veya yaya yolları içermeyebilir. Uygulamanızda gösterdiğiniz tüm yürüme rotaları için bu uyarıyı kullanıcıya göstermeniz gerekir.

Sıralamalar
TRAVEL_MODE_UNSPECIFIED Belirtilmemiş ulaşım şekli, DRIVING ile eşdeğerdir.
DRIVING Yol tariflerine karşılık gelen ulaşım şekli (araba, ...).
WALKING Yürüyüş rotalarına karşılık gelen ulaşım şekli.

UnloadingPolicy

Araçların nasıl boşaltılabileceğiyle ilgili politika. Yalnızca hem teslim alma hem de teslimat içeren gönderiler için geçerlidir.

Diğer gönderiler, unloading_policy'dan bağımsız olarak rota üzerinde herhangi bir yerde ücretsiz olarak gerçekleşebilir.

Sıralamalar
UNLOADING_POLICY_UNSPECIFIED Belirtilmemiş boşaltma politikası; teslimatlar yalnızca ilgili teslim alma işlemlerinden sonra yapılmalıdır.
LAST_IN_FIRST_OUT Teslimatlar, teslim alma işlemlerinin tersi sırayla yapılmalıdır.
FIRST_IN_FIRST_OUT Teslimatlar, teslim alma işlemleriyle aynı sırada yapılmalıdır.

VehicleFullness

VehicleFullness, bir aracın ne kadar dolu olduğunu hesaplayan bir metriktir. Her VehicleFullness alanı 0 ile 1 arasındadır ve varsa sınırlı bir metrik alanı (ör. AggregatedMetrics.travel_distance_meters) ile ilgili araç sınırı (ör. Vehicle.route_distance_limit) arasındaki oran olarak hesaplanır. Aksi takdirde doluluk oranı ayarlanmamış olarak kalır. Sınır 0 ise alan 1 olarak ayarlanır. Not: Bir rota trafik nedeniyle uygunsuz olduğunda bazı ham doluluk oranları 1, 0'ı aşabilir. Örneğin, araç mesafe sınırını aşabilir. Bu gibi durumlarda doluluk değerlerini 1, 0 ile sınırlarız.

Alanlar
max_fullness

double

Bu iletideki diğer tüm alanların maksimum değeri.

distance

double

AggregatedMetrics.travel_distance_meters ile Vehicle.route_distance_limit arasındaki oran. Vehicle.route_distance_limit ayarlanmamışsa bu alan da ayarlanmamış olur.

travel_duration

double

[AggregatedMetrics.travel_duration_seconds][] ile Vehicle.travel_duration_limit arasındaki oran. Vehicle.travel_duration_limit ayarlanmamışsa bu alan da ayarlanmamış olur.

active_duration

double

[AggregatedMetrics.total_duration_seconds][] ile Vehicle.route_duration_limit arasındaki oran. Vehicle.route_duration_limit ayarlanmamışsa bu alan da ayarlanmamış olur.

max_load

double

Tüm [AggregatedMetrics.max_load][] türleri ve ilgili Vehicle.load_limits arasındaki maksimum oran. Tüm Vehicle.load_limits alanları ayarlanmamışsa bu alan da ayarlanmaz.

active_span

double

Belirli bir araç için (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time) oranı. Payda yoksa bunun yerine (ShipmentModel.global_end_time - ShipmentModel.global_start_time) kullanılır.

Ara nokta

Bir ara noktayı kapsar. Ara noktalar, VisitRequest'lerin varış ve ayrılış konumlarını, araçların ise başlangıç ve bitiş konumlarını işaretler.

Alanlar
side_of_road

bool

İsteğe bağlıdır. Bu yol noktasının konumunun, aracın yolun belirli bir tarafında durmasını tercih etmek için kullanıldığını gösterir. Bu değeri ayarladığınızda rota, konumdan geçecek şekilde belirlenir. Böylece araç, yolun merkezinden konuma doğru olan tarafında durabilir. Bu seçenek "YÜRÜME" seyahat modunda kullanılamaz.

vehicle_stopover

bool

Araçların yolcu almak veya bırakmak için durması gereken yol noktası olduğunu belirtir. Bu seçenek yalnızca "ARABA" seyahat modunda ve "location_type" değeri "location" olduğunda çalışır.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

location_type birleşik alanı. Bir konumu temsil etmenin farklı yolları. location_type aşağıdakilerden 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 nokta ile ilişkili ÖY yer kimliği.

Bir VisitRequest'in varış veya ayrılış konumunu belirtmek için yer kimliği kullanırken, yere gitmek için navigasyonun LatLng konumunu belirlemeye yetecek kadar spesifik bir yer kimliği kullanın. Örneğin, bir binayı temsil eden bir yer kimliği uygundur ancak bir yolu temsil eden bir yer kimliği önerilmez.