Package google.maps.routeoptimization.v1

Indeks

RouteOptimization

Layanan untuk mengoptimalkan tur kendaraan.

Validitas jenis kolom tertentu:

  • google.protobuf.Timestamp
    • Waktu dalam waktu Unix: detik sejak 1970-01-01T00:00:00+00:00.
    • detik harus dalam [0, 253402300799], yaitu dalam [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • nanos harus tidak ditetapkan atau ditetapkan ke 0.
  • google.protobuf.Duration
    • detik harus dalam [0, 253402300799], yaitu dalam [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • nanos harus tidak ditetapkan atau ditetapkan ke 0.
  • google.type.LatLng
    • latitude harus dalam [-90.0, 90.0].
    • bujur harus dalam [-180.0, 180.0].
    • setidaknya salah satu dari lintang dan bujur harus bukan nol.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

Mengoptimalkan tur kendaraan untuk satu atau beberapa pesan OptimizeToursRequest sebagai batch.

Metode ini adalah Operasi yang Berjalan Lama (LRO). Input untuk pengoptimalan (pesan OptimizeToursRequest) dan output (pesan OptimizeToursResponse) dibaca dari dan ditulis ke Cloud Storage dalam format yang ditentukan pengguna. Seperti metode OptimizeTours, setiap OptimizeToursRequest berisi ShipmentModel dan menampilkan OptimizeToursResponse yang berisi kolom ShipmentRoute, yang merupakan kumpulan rute yang akan dilakukan oleh kendaraan untuk meminimalkan biaya keseluruhan.

Pengguna dapat melakukan polling operations.get untuk memeriksa status LRO:

Jika kolom done LRO bernilai false, berarti setidaknya satu permintaan masih diproses. Permintaan lain mungkin telah berhasil diselesaikan dan hasilnya tersedia di Cloud Storage.

Jika kolom done LRO bernilai benar, berarti semua permintaan telah diproses. Setiap permintaan yang berhasil diproses akan memiliki hasil yang tersedia di Cloud Storage. Hasil permintaan yang gagal tidak akan tersedia di Cloud Storage. Jika kolom error LRO ditetapkan, kolom tersebut akan berisi error dari salah satu permintaan yang gagal.

Cakupan otorisasi

Memerlukan cakupan OAuth berikut:

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

Memerlukan izin IAM berikut pada resource parent:

  • routeoptimization.operations.create

Untuk mengetahui informasi selengkapnya, baca dokumentasi IAM.

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

Mengirim OptimizeToursRequest yang berisi ShipmentModel dan menampilkan OptimizeToursResponse yang berisi ShipmentRoute, yang merupakan kumpulan rute yang akan dilakukan oleh kendaraan untuk meminimalkan biaya keseluruhan.

Model ShipmentModel terutama terdiri dari Shipment yang perlu dilakukan dan Vehicle yang dapat digunakan untuk mengangkut Shipment. ShipmentRoute menetapkan Shipment ke Vehicle. Lebih spesifiknya, mereka menetapkan serangkaian Visit ke setiap kendaraan, dengan Visit yang sesuai dengan VisitRequest, yang merupakan pengambilan atau pengiriman untuk Shipment.

Tujuannya adalah untuk memberikan penetapan ShipmentRoute ke Vehicle yang meminimalkan total biaya, dengan biaya yang memiliki banyak komponen yang ditentukan dalam ShipmentModel.

Cakupan otorisasi

Memerlukan cakupan OAuth berikut:

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

Memerlukan izin IAM berikut pada resource parent:

  • routeoptimization.locations.use

Untuk mengetahui informasi selengkapnya, baca dokumentasi IAM.

OptimizeToursLongRunning

rpc OptimizeToursLongRunning(OptimizeToursRequest) returns (Operation)

Ini adalah varian metode OptimizeTours yang dirancang untuk pengoptimalan dengan nilai waktu tunggu yang besar. Metode ini lebih disarankan daripada metode OptimizeTours untuk pengoptimalan yang memerlukan waktu lebih dari beberapa menit.

long-running operation (LRO) yang ditampilkan akan memiliki nama dengan format <parent>/operations/<operation_id> dan dapat digunakan untuk melacak progres komputasi. Jenis kolom metadata adalah OptimizeToursLongRunningMetadata. Jenis kolom response adalah OptimizeToursResponse, jika berhasil.

Cakupan otorisasi

Memerlukan cakupan OAuth berikut:

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

Memerlukan izin IAM berikut pada resource parent:

  • routeoptimization.operations.create

Untuk mengetahui informasi selengkapnya, baca dokumentasi IAM.

OptimizeToursUri

rpc OptimizeToursUri(OptimizeToursUriRequest) returns (Operation)

Ini adalah varian metode OptimizeToursLongRunning yang dirancang untuk pengoptimalan dengan nilai waktu tunggu yang besar dan ukuran input/output yang besar.

Klien menentukan URI OptimizeToursRequest yang disimpan di Google Cloud Storage dan server menulis OptimizeToursResponse ke URI Google Cloud Storage yang ditentukan klien.

Metode ini lebih disarankan daripada metode OptimizeTours untuk pengoptimalan yang memerlukan waktu lebih dari beberapa menit dan ukuran input/output yang lebih besar dari 8 MB, meskipun metode ini juga dapat digunakan untuk pengoptimalan yang lebih singkat dan lebih kecil.

long-running operation (LRO) yang ditampilkan akan memiliki nama dengan format <parent>/operations/<operation_id> dan dapat digunakan untuk melacak progres komputasi. Jenis kolom metadata adalah OptimizeToursUriMetadata. Jenis kolom response adalah OptimizeToursUriResponse, jika berhasil.

Cakupan otorisasi

Memerlukan cakupan OAuth berikut:

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

Memerlukan izin IAM berikut pada resource parent:

  • routeoptimization.operations.create

Untuk mengetahui informasi selengkapnya, baca dokumentasi IAM.

AggregatedMetrics

Metrik gabungan untuk ShipmentRoute (resp. untuk OptimizeToursResponse) di semua elemen Transition dan/atau Visit (resp. di semua elemen ShipmentRoute).

Kolom
performed_shipment_count

int32

Jumlah pengiriman yang dilakukan. Perhatikan bahwa pasangan pengambilan dan pengiriman hanya dihitung satu kali.

travel_duration

Duration

Total durasi perjalanan untuk rute atau solusi.

wait_duration

Duration

Total durasi tunggu untuk rute atau solusi.

delay_duration

Duration

Total durasi penundaan untuk rute atau solusi.

break_duration

Duration

Total durasi istirahat untuk rute atau solusi.

visit_duration

Duration

Total durasi kunjungan untuk rute atau solusi.

total_duration

Duration

Total durasi harus sama dengan jumlah semua durasi di atas. Untuk rute, hal ini juga sesuai dengan:

[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

Total jarak perjalanan untuk rute atau solusi.

max_loads

map<string, VehicleLoad>

Muatan maksimum yang dicapai di seluruh rute (resp. solusi), untuk setiap jumlah di rute ini (resp. solusi), dihitung sebagai maksimum di semua Transition.vehicle_loads (resp. ShipmentRoute.metrics.max_loads.

performed_mandatory_shipment_count

int32

Jumlah pengiriman wajib yang dilakukan.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

performed_shipment_penalty_cost_sum

double

Jumlah Shipment.penalty_cost pengiriman yang dilakukan.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

BatchOptimizeToursMetadata

Jenis ini tidak memiliki kolom.

Metadata operasi untuk panggilan BatchOptimizeToursRequest.

BatchOptimizeToursRequest

Meminta pengoptimalan tur batch sebagai operasi asinkron. Setiap file input harus berisi satu OptimizeToursRequest, dan setiap file output akan berisi satu OptimizeToursResponse. Permintaan tersebut berisi informasi untuk membaca/menulis dan mengurai file. Semua file input dan output harus berada dalam project yang sama.

Kolom
parent

string

Wajib. Project target dan lokasi untuk melakukan panggilan.

Format:

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

Nilai {location-id} regional tidak didukung.

model_configs[]

AsyncModelConfig

Wajib. Informasi Input/Output setiap model pembelian, seperti jalur file dan format data.

AsyncModelConfig

Informasi untuk menyelesaikan satu model pengoptimalan secara asinkron.

Kolom
display_name

string

Opsional. Nama model yang ditentukan pengguna, dapat digunakan sebagai alias oleh pengguna untuk melacak model.

input_config

InputConfig

Wajib. Informasi tentang model input.

output_config

OutputConfig

Wajib. Informasi lokasi output yang diinginkan.

BatchOptimizeToursResponse

Jenis ini tidak memiliki kolom.

Respons terhadap BatchOptimizeToursRequest. Ini ditampilkan dalam Operasi yang Berjalan Lama setelah operasi selesai.

BreakRule

Aturan untuk membuat waktu istirahat bagi kendaraan (misalnya, istirahat makan siang). Istirahat adalah jangka waktu yang berurutan saat kendaraan tetap tidak ada aktivitas di posisinya saat ini dan tidak dapat melakukan kunjungan apa pun. Kerusakan dapat terjadi:

  • selama perjalanan antara dua kunjungan (yang mencakup waktu tepat sebelum atau tepat setelah kunjungan, tetapi tidak di tengah kunjungan), dalam hal ini waktu transit yang sesuai antara kunjungan akan diperpanjang,
  • atau sebelum kendaraan mulai (kendaraan tidak boleh mulai di tengah-tengah istirahat), sehingga tidak memengaruhi waktu mulai kendaraan.
  • atau setelah akhir kendaraan (sama, dengan waktu akhir kendaraan).
Kolom
break_requests[]

BreakRequest

Urutan jeda. Lihat pesan BreakRequest.

frequency_constraints[]

FrequencyConstraint

Beberapa FrequencyConstraint mungkin berlaku. Semuanya harus dipenuhi oleh BreakRequest dari BreakRule ini. Lihat FrequencyConstraint.

BreakRequest

Urutan istirahat (yaitu jumlah dan urutannya) yang berlaku untuk setiap kendaraan harus diketahui terlebih dahulu. BreakRequest berulang menentukan urutan tersebut, sesuai urutan kemunculannya. Jendela waktu mereka (earliest_start_time / latest_start_time) mungkin tumpang-tindih, tetapi harus kompatibel dengan pesanan (hal ini diperiksa).

Kolom
earliest_start_time

Timestamp

Wajib. Batas bawah (inklusif) pada awal istirahat.

latest_start_time

Timestamp

Wajib. Batas atas (inklusif) pada awal istirahat.

min_duration

Duration

Wajib. Durasi minimum jeda. Harus positif.

FrequencyConstraint

Seseorang dapat lebih membatasi frekuensi dan durasi istirahat yang ditentukan di atas, dengan menerapkan frekuensi istirahat minimum, seperti "Harus ada istirahat minimal 1 jam setiap 12 jam". Dengan asumsi bahwa ini dapat ditafsirkan sebagai "Dalam periode waktu geser 12 jam, harus ada setidaknya satu istirahat minimal satu jam", contoh tersebut akan diterjemahkan ke FrequencyConstraint berikut:

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

Waktu dan durasi istirahat dalam solusi akan mematuhi semua batasan tersebut, selain periode waktu dan durasi minimum yang telah ditentukan dalam BreakRequest.

FrequencyConstraint dalam praktiknya dapat berlaku untuk jeda yang tidak berurutan. Misalnya, jadwal berikut mengikuti contoh "1 jam setiap 12 jam":

  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
Kolom
min_break_duration

Duration

Wajib. Durasi istirahat minimum untuk batasan ini. Nonnegatif. Lihat deskripsi FrequencyConstraint.

max_inter_break_duration

Duration

Wajib. Rentang maksimum yang diizinkan untuk interval waktu apa pun dalam rute yang tidak menyertakan setidaknya sebagian istirahat duration >= min_break_duration. Harus positif.

DataFormat

Format data untuk file input dan output.

Enum
DATA_FORMAT_UNSPECIFIED Nilai tidak valid, format tidak boleh UNSPECIFIED.
JSON JavaScript Object Notation.
PROTO_TEXT Format teks Buffering Protokol. Lihat https://protobuf.dev/reference/protobuf/textformat-spec/

DistanceLimit

Batas yang menentukan jarak maksimum yang dapat ditempuh. Batas ini dapat berupa batas ketat atau longgar.

Jika batas fleksibel ditentukan, soft_max_meters dan cost_per_kilometer_above_soft_max harus ditentukan dan tidak boleh negatif.

Kolom
max_meters

int64

Batas ketat yang membatasi jarak hingga maksimum max_meters. Batas tidak boleh negatif.

soft_max_meters

int64

Batas yang dapat dilewati tidak menerapkan batas jarak maksimum, tetapi jika dilanggar, akan menghasilkan biaya yang ditambahkan ke biaya lain yang ditentukan dalam model, dengan unit yang sama.

Jika ditentukan, soft_max_meters harus kurang dari max_meters dan harus non-negatif.

cost_per_kilometer_below_soft_max

double

Biaya per kilometer yang dikenakan, meningkat hingga soft_max_meters, dengan formula:

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

Biaya ini tidak didukung di route_distance_limit.

cost_per_kilometer_above_soft_max

double

Biaya per kilometer yang dikenakan jika jarak melebihi batas soft_max_meters. Biaya tambahannya adalah 0 jika jaraknya di bawah batas, jika tidak, formula yang digunakan untuk menghitung biaya adalah sebagai berikut:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

Biaya tidak boleh negatif.

GcsDestination

Lokasi Google Cloud Storage tempat file output akan ditulis.

Kolom
uri

string

Wajib. URI Google Cloud Storage.

GcsSource

Lokasi Google Cloud Storage tempat file input akan dibaca.

Kolom
uri

string

Wajib. URI objek Google Cloud Storage dengan format gs://bucket/path/to/object.

InjectedSolutionConstraint

Solusi yang dimasukkan dalam permintaan, termasuk informasi tentang kunjungan mana yang harus dibatasi dan bagaimana kunjungan tersebut harus dibatasi.

Kolom
routes[]

ShipmentRoute

Rute solusi yang akan dimasukkan. Beberapa rute mungkin dihilangkan dari solusi awal. Rute dan pengiriman yang dilewati harus memenuhi asumsi validitas dasar yang tercantum untuk injected_first_solution_routes.

skipped_shipments[]

SkippedShipment

Pengiriman solusi yang dilewati untuk diinjeksikan. Beberapa mungkin dihilangkan dari solusi aslinya. Lihat kolom routes.

constraint_relaxations[]

ConstraintRelaxation

Untuk nol atau beberapa grup kendaraan, menentukan kapan dan seberapa banyak batasan harus dilonggarkan. Jika kolom ini kosong, semua rute kendaraan yang tidak kosong akan dibatasi sepenuhnya.

ConstraintRelaxation

Untuk sekelompok kendaraan, menentukan batas yang akan melonggarkan batasan pada kunjungan dan ke tingkat mana. Pengiriman yang tercantum dalam kolom skipped_shipment dibatasi untuk dilewati; yaitu, pengiriman tersebut tidak dapat dilakukan.

Kolom
relaxations[]

Relaxation

Semua pelonggaran batasan kunjungan yang akan berlaku untuk kunjungan pada rute dengan kendaraan di vehicle_indices.

vehicle_indices[]

int32

Menentukan indeks kendaraan yang akan menerapkan batasan kunjungan relaxations. Jika kosong, ini dianggap sebagai default dan relaxations berlaku untuk semua kendaraan yang tidak ditentukan dalam constraint_relaxations lain. Maksimal hanya boleh ada satu default, yaitu maksimal satu kolom relaksasi batasan yang boleh kosong vehicle_indices. Indeks kendaraan hanya dapat dicantumkan sekali, bahkan dalam beberapa constraint_relaxations.

Indeks kendaraan dipetakan sama seperti ShipmentRoute.vehicle_index, jika interpret_injected_solutions_using_labels bernilai benar (lihat komentar fields).

Relaksasi

Jika relaxations kosong, waktu mulai dan urutan semua kunjungan pada routes sepenuhnya dibatasi dan tidak ada kunjungan baru yang dapat disisipkan atau ditambahkan ke rute tersebut. Selain itu, waktu mulai dan berakhir kendaraan di routes sepenuhnya dibatasi, kecuali jika kendaraan kosong (yaitu, tidak memiliki kunjungan dan used_if_route_is_empty ditetapkan ke salah dalam model).

relaxations(i).level menentukan tingkat relaksasi batasan yang diterapkan ke kunjungan #j yang memenuhi:

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

Demikian pula, waktu mulai kendaraan dilonggarkan menjadi relaxations(i).level jika memenuhi:

  • vehicle_start_time >= relaxations(i).threshold_time DAN
  • relaxations(i).threshold_visit_count == 0 dan akhir kendaraan dilonggarkan menjadi relaxations(i).level jika memenuhi:
  • vehicle_end_time >= relaxations(i).threshold_time DAN
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Untuk menerapkan tingkat relaksasi jika kunjungan memenuhi threshold_visit_count ATAU threshold_time, tambahkan dua relaxations dengan level yang sama: satu dengan hanya threshold_visit_count yang ditetapkan dan yang lainnya dengan hanya threshold_time yang ditetapkan. Jika kunjungan memenuhi kondisi beberapa relaxations, tingkat yang paling longgar akan berlaku. Akibatnya, dari awal kendaraan melalui kunjungan rute secara berurutan hingga akhir kendaraan, tingkat relaksasi menjadi lebih santai: yaitu, tingkat relaksasi tidak menurun seiring berjalannya rute.

Waktu dan urutan kunjungan rute yang tidak memenuhi kondisi nilai minimum relaxations mana pun sepenuhnya dibatasi dan tidak ada kunjungan yang dapat dimasukkan ke dalam urutan ini. Selain itu, jika awal atau akhir kendaraan tidak memenuhi kondisi relaksasi apa pun, waktunya akan tetap, kecuali jika kendaraan kosong.

Kolom
level

Level

Tingkat relaksasi batasan yang berlaku saat kondisi pada atau setelah threshold_time DAN setidaknya threshold_visit_count terpenuhi.

threshold_time

Timestamp

Waktu saat atau setelah pelonggaran level dapat diterapkan.

threshold_visit_count

int32

Jumlah kunjungan saat atau setelah pelonggaran level dapat diterapkan. Jika threshold_visit_count adalah 0 (atau tidak ditetapkan), level dapat diterapkan langsung di awal kendaraan.

Jika route.visits_size() + 1, level hanya dapat diterapkan ke ujung kendaraan. Jika lebih dari route.visits_size() + 1, level tidak akan diterapkan sama sekali untuk rute tersebut.

Level

Menyatakan berbagai tingkat relaksasi batasan, yang diterapkan untuk kunjungan dan kunjungan berikutnya saat memenuhi kondisi nilai minimum.

Enumerasi di bawah ini diurutkan berdasarkan tingkat relaksasi yang meningkat.

Enum
LEVEL_UNSPECIFIED

Tingkat relaksasi default implisit: tidak ada batasan yang direlaksasi, yaitu semua kunjungan dibatasi sepenuhnya.

Nilai ini tidak boleh digunakan secara eksplisit di level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Waktu mulai kunjungan dan waktu mulai/akhir kendaraan akan dilonggarkan, tetapi setiap kunjungan tetap terikat pada kendaraan yang sama dan urutan kunjungan harus diperhatikan: tidak ada kunjungan yang dapat disisipkan di antara atau sebelum kunjungan tersebut.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Sama seperti RELAX_VISIT_TIMES_AFTER_THRESHOLD, tetapi urutan kunjungan juga dilonggarkan: kunjungan hanya dapat dilakukan oleh kendaraan ini, tetapi berpotensi tidak dilakukan.
RELAX_ALL_AFTER_THRESHOLD Sama seperti RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, tetapi kendaraan juga dilonggarkan: kunjungan sepenuhnya gratis pada atau setelah waktu batas dan berpotensi tidak dilakukan.

InputConfig

Tentukan input untuk [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].

Kolom
data_format

DataFormat

Wajib. Format data input.

Kolom union source. Wajib. source hanya dapat berupa salah satu dari berikut:
gcs_source

GcsSource

Lokasi Google Cloud Storage. Objek ini harus berupa satu objek (file).

Lokasi

Menggabungkan lokasi (titik geografis, dan judul opsional).

Kolom
lat_lng

LatLng

Koordinat geografis titik jalan.

heading

int32

Arah kompas yang terkait dengan arah arus lalu lintas. Nilai ini digunakan untuk menentukan sisi jalan yang akan digunakan untuk penjemputan dan pengantaran. Nilai arah dapat berkisar antara 0 hingga 360, dengan 0 menentukan arah ke Utara, 90 menentukan arah ke Timur, dll.

OptimizeToursLongRunningMetadata

Jenis ini tidak memiliki kolom.

Metadata operasi untuk panggilan OptimizeToursLongRunning.

OptimizeToursRequest

Permintaan yang akan diberikan ke pemecah masalah pengoptimalan tur yang menentukan model pengiriman yang akan dipecahkan serta parameter pengoptimalan.

Kolom
parent

string

Wajib. Project atau lokasi target untuk melakukan panggilan.

Format:

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

Nilai {location-id} regional tidak didukung.

timeout

Duration

Jika waktu tunggu ini ditetapkan, server akan menampilkan respons sebelum periode waktu tunggu berlalu atau batas waktu server untuk permintaan sinkron tercapai, mana saja yang lebih cepat.

Untuk permintaan asinkron, server akan menghasilkan solusi (jika memungkinkan) sebelum waktu tunggu habis.

model

ShipmentModel

Model pengiriman yang akan diselesaikan.

solving_mode

SolvingMode

Secara default, mode penyelesaiannya adalah DEFAULT_SOLVE (0).

search_mode

SearchMode

Mode penelusuran yang digunakan untuk menyelesaikan permintaan.

injected_first_solution_routes[]

ShipmentRoute

Memandu algoritma pengoptimalan dalam menemukan solusi pertama yang mirip dengan solusi sebelumnya.

Model dibatasi saat solusi pertama dibuat. Setiap pengiriman yang tidak dilakukan pada rute akan dilewati secara implisit dalam solusi pertama, tetapi dapat dilakukan dalam solusi berikutnya.

Solusi harus memenuhi beberapa asumsi validitas dasar:

  • untuk semua rute, vehicle_index harus berada dalam rentang dan tidak diduplikasi.
  • untuk semua kunjungan, shipment_index dan visit_request_index harus berada dalam rentang.
  • pengiriman hanya dapat direferensikan pada satu rute.
  • pengambilan pengiriman pengambilan-pengantaran harus dilakukan sebelum pengantaran.
  • tidak lebih dari satu alternatif pengambilan atau alternatif pengiriman yang dapat dilakukan.
  • untuk semua rute, waktu meningkat (yaitu, vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • pengiriman hanya dapat dilakukan pada kendaraan yang diizinkan. Kendaraan diizinkan jika Shipment.allowed_vehicle_indices kosong atau vehicle_index-nya disertakan dalam Shipment.allowed_vehicle_indices.

Jika solusi yang dimasukkan tidak layak, error validasi tidak selalu ditampilkan dan error yang menunjukkan ketidaklayakan dapat ditampilkan.

injected_solution_constraint

InjectedSolutionConstraint

Batasi algoritma pengoptimalan untuk menemukan solusi akhir yang mirip dengan solusi sebelumnya. Misalnya, ini dapat digunakan untuk membekukan bagian rute yang telah selesai atau yang akan diselesaikan, tetapi tidak boleh diubah.

Jika solusi yang dimasukkan tidak layak, error validasi tidak selalu ditampilkan dan error yang menunjukkan ketidaklayakan dapat ditampilkan.

refresh_details_routes[]

ShipmentRoute

Jika tidak kosong, rute yang diberikan akan diperbarui, tanpa mengubah urutan kunjungan atau waktu perjalanan yang mendasarinya: hanya detail lain yang akan diperbarui. Tindakan ini tidak menyelesaikan model.

Mulai 11/2020, kolom ini hanya mengisi polyline rute yang tidak kosong dan mengharuskan populate_polylines bernilai benar (true).

Kolom route_polyline dari rute yang diteruskan mungkin tidak konsisten dengan rute transitions.

Kolom ini tidak boleh digunakan bersama dengan injected_first_solution_routes atau injected_solution_constraint.

Shipment.ignore dan Vehicle.ignore tidak berpengaruh pada perilaku. Polyline masih diisi di antara semua kunjungan di semua rute yang tidak kosong, terlepas dari apakah pengiriman atau kendaraan terkait diabaikan atau tidak.

interpret_injected_solutions_using_labels

bool

Jika benar:

Penafsiran ini berlaku untuk kolom injected_first_solution_routes, injected_solution_constraint, dan refresh_details_routes. Solusi ini dapat digunakan saat indeks pengiriman atau kendaraan dalam permintaan telah berubah sejak solusi dibuat, mungkin karena pengiriman atau kendaraan telah dihapus dari atau ditambahkan ke permintaan.

Jika benar, label dalam kategori berikut harus muncul maksimal satu kali dalam kategorinya:

Jika vehicle_label dalam solusi yang dimasukkan tidak sesuai dengan kendaraan permintaan, rute yang sesuai akan dihapus dari solusi beserta perjalanannya. Jika shipment_label dalam solusi yang dimasukkan tidak sesuai dengan pengiriman permintaan, kunjungan yang sesuai akan dihapus dari solusi. Jika SkippedShipment.label dalam solusi yang dimasukkan tidak sesuai dengan pengiriman permintaan, SkippedShipment akan dihapus dari solusi.

Menghapus kunjungan rute atau seluruh rute dari solusi yang dimasukkan dapat berdampak pada batasan tersirat, yang dapat menyebabkan perubahan pada solusi, error validasi, atau ketidaklayakan.

CATATAN: Pemanggil harus memastikan bahwa setiap Vehicle.label (resp. Shipment.label) mengidentifikasi secara unik entitas kendaraan (resp. pengiriman) yang digunakan di dua permintaan yang relevan: permintaan sebelumnya yang menghasilkan OptimizeToursResponse yang digunakan dalam solusi yang dimasukkan dan permintaan saat ini yang menyertakan solusi yang dimasukkan. Pemeriksaan keunikan yang dijelaskan di atas tidak cukup untuk menjamin persyaratan ini.

consider_road_traffic

bool

Pertimbangkan estimasi traffic dalam menghitung kolom ShipmentRoute Transition.travel_duration, Visit.start_time, dan vehicle_end_time; dalam menetapkan kolom ShipmentRoute.has_traffic_infeasibilities, dan dalam menghitung kolom OptimizeToursResponse.total_cost.

populate_polylines

bool

Jika benar, polyline akan diisi dalam ShipmentRoute respons.

populate_transition_polylines

bool

Jika true, polyline dan token rute akan diisi dalam respons ShipmentRoute.transitions.

allow_large_deadline_despite_interruption_risk

bool

Jika ini ditetapkan, permintaan dapat memiliki batas waktu (lihat https://grpc.io/blog/deadlines) hingga 60 menit. Jika tidak, batas waktu maksimumnya hanya 30 menit. Perhatikan bahwa permintaan yang berjalan lama memiliki risiko gangguan yang jauh lebih besar (tetapi masih kecil).

use_geodesic_distances

bool

Jika benar (true), jarak perjalanan akan dihitung menggunakan jarak geodesi, bukan jarak Google Maps, dan waktu perjalanan akan dihitung menggunakan jarak geodesi dengan kecepatan yang ditentukan oleh geodesic_meters_per_second.

label

string

Label yang dapat digunakan untuk mengidentifikasi permintaan ini, yang dilaporkan kembali di OptimizeToursResponse.request_label.

geodesic_meters_per_second

double

Jika use_geodesic_distances bernilai benar (true), kolom ini harus ditetapkan dan menentukan kecepatan yang diterapkan untuk menghitung waktu perjalanan. Nilainya harus minimal 1,0 meter/detik.

max_validation_errors

int32

Memotong jumlah error validasi yang ditampilkan. Error ini biasanya dilampirkan ke payload error INVALID_ARGUMENT sebagai detail error BadRequest (https://cloud.google.com/apis/design/errors#error_details), kecuali jika solving_mode=VALIDATE_ONLY: lihat kolom OptimizeToursResponse.validation_errors. Nilai defaultnya adalah 100 dan dibatasi hingga 10.000.

SearchMode

Mode yang menentukan perilaku penelusuran, yang menyeimbangkan latensi versus kualitas solusi. Di semua mode, batas waktu permintaan global diterapkan.

Enum
SEARCH_MODE_UNSPECIFIED Mode penelusuran yang tidak ditentukan, setara dengan RETURN_FAST.
RETURN_FAST Hentikan penelusuran setelah menemukan solusi pertama yang baik.
CONSUME_ALL_AVAILABLE_TIME Menghabiskan semua waktu yang tersedia untuk mencari solusi yang lebih baik.

SolvingMode

Menentukan cara pemecah masalah menangani permintaan. Dalam semua mode kecuali VALIDATE_ONLY, jika permintaan tidak valid, Anda akan menerima error INVALID_REQUEST. Lihat max_validation_errors untuk membatasi jumlah error yang ditampilkan.

Enum
DEFAULT_SOLVE Selesaikan model. Peringatan dapat dikeluarkan di [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors].
VALIDATE_ONLY Hanya memvalidasi model tanpa menyelesaikannya: mengisi OptimizeToursResponse.validation_errors sebanyak mungkin.
DETECT_SOME_INFEASIBLE_SHIPMENTS

Hanya mengisi OptimizeToursResponse.validation_errors atau OptimizeToursResponse.skipped_shipments, dan tidak benar-benar menyelesaikan permintaan lainnya (status dan routes tidak ditetapkan dalam respons). Jika ketidakmungkinan dalam rute injected_solution_constraint terdeteksi, ketidakmungkinan tersebut akan diisi di kolom OptimizeToursResponse.validation_errors dan OptimizeToursResponse.skipped_shipments akan dibiarkan kosong.

PENTING: tidak semua pengiriman yang tidak memungkinkan ditampilkan di sini, tetapi hanya pengiriman yang terdeteksi sebagai tidak memungkinkan selama pra-pemrosesan.

TRANSFORM_AND_RETURN_REQUEST

Mode ini hanya berfungsi jika ShipmentModel.objectives tidak kosong. Permintaan tidak diselesaikan. Data ini hanya divalidasi dan diisi dengan biaya yang sesuai dengan tujuan yang diberikan. Lihat juga dokumentasi ShipmentModel.objectives. Permintaan yang dihasilkan ditampilkan sebagai OptimizeToursResponse.processed_request.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request untuk mengetahui detail selengkapnya.

OptimizeToursResponse

Respons setelah menyelesaikan masalah pengoptimalan tur yang berisi rute yang diikuti oleh setiap kendaraan, pengiriman yang telah dilewati, dan biaya keseluruhan solusi.

Kolom
routes[]

ShipmentRoute

Rute yang dihitung untuk setiap kendaraan; rute ke-i sesuai dengan kendaraan ke-i dalam model.

request_label

string

Salinan OptimizeToursRequest.label, jika label ditentukan dalam permintaan.

skipped_shipments[]

SkippedShipment

Daftar semua pengiriman yang dilewati.

validation_errors[]

OptimizeToursValidationError

Daftar semua error validasi yang dapat kami deteksi secara independen. Lihat penjelasan "MULTIPLE ERRORS" untuk pesan OptimizeToursValidationError. Alih-alih error, ini akan menyertakan peringatan jika solving_mode adalah DEFAULT_SOLVE.

processed_request

OptimizeToursRequest

Dalam beberapa kasus, kami mengubah permintaan yang masuk sebelum menyelesaikannya, yaitu menambahkan biaya. Jika solving_mode == TRANSFORM_AND_RETURN_REQUEST, permintaan yang diubah akan ditampilkan di sini.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request untuk mengetahui detail selengkapnya.

metrics

Metrics

Metrik durasi, jarak, dan penggunaan untuk solusi ini.

Metrik

Metrik keseluruhan, yang digabungkan di semua rute.

Kolom
aggregated_route_metrics

AggregatedMetrics

Digabungkan di seluruh rute. Setiap metrik adalah jumlah (atau maksimum, untuk beban) di semua kolom ShipmentRoute.metrics dengan nama yang sama.

skipped_mandatory_shipment_count

int32

Jumlah pengiriman wajib yang dilewati.

used_vehicle_count

int32

Jumlah kendaraan yang digunakan. Catatan: jika rute kendaraan kosong dan Vehicle.used_if_route_is_empty bernilai benar, kendaraan dianggap digunakan.

earliest_vehicle_start_time

Timestamp

Waktu mulai paling awal untuk kendaraan yang digunakan, dihitung sebagai nilai minimum dari semua kendaraan yang digunakan sebesar ShipmentRoute.vehicle_start_time.

latest_vehicle_end_time

Timestamp

Waktu berakhir terbaru untuk kendaraan yang digunakan, dihitung sebagai nilai maksimum dari semua kendaraan yang digunakan sebesar ShipmentRoute.vehicle_end_time.

costs

map<string, double>

Biaya solusi, yang dikelompokkan berdasarkan kolom permintaan terkait biaya. Kuncinya adalah jalur proto, yang relatif terhadap OptimizeToursRequest input, misalnya "model.shipments.pickups.cost", dan nilainya adalah total biaya yang dihasilkan oleh kolom biaya yang sesuai, yang digabungkan di seluruh solusi. Dengan kata lain, costs["model.shipments.pickups.cost"] adalah jumlah semua biaya pengambilan di seluruh solusi. Semua biaya yang ditentukan dalam model dilaporkan secara mendetail di sini, kecuali biaya yang terkait dengan TransitionAttributes yang hanya dilaporkan secara gabungan mulai 01/2022.

total_cost

double

Total biaya solusi. Jumlah semua nilai dalam peta biaya.

OptimizeToursUriMetadata

Jenis ini tidak memiliki kolom.

Metadata operasi untuk panggilan OptimizeToursUri.

OptimizeToursUriRequest

Permintaan yang digunakan oleh metode OptimizeToursUri.

Kolom
parent

string

Wajib. Project atau lokasi target untuk melakukan panggilan.

Format:

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

Nilai {location-id} regional tidak didukung.

input

Uri

Wajib. URI objek Cloud Storage yang berisi OptimizeToursRequest.

output

Uri

Wajib. URI objek Cloud Storage yang akan berisi OptimizeToursResponse.

OptimizeToursUriResponse

Respons yang ditampilkan oleh metode OptimizeToursUri.

Kolom
output

Uri

Opsional. URI objek Cloud Storage yang berisi OptimizeToursResponse yang dienkode sebagai JSON atau textproto. Jika objek dienkode sebagai JSON, ekstensi nama objek akan menjadi .json. Jika objek dienkode sebagai textproto, ekstensi nama objek akan menjadi .txtpb.

crc32_checksum resource dapat digunakan untuk memverifikasi bahwa konten resource belum diubah.

OptimizeToursValidationError

Menjelaskan error atau peringatan yang terjadi saat memvalidasi OptimizeToursRequest.

Kolom
code

int32

Error validasi ditentukan oleh pasangan (code, display_name) yang selalu ada.

Kolom setelah bagian ini memberikan lebih banyak konteks tentang error.

MULTIPLE ERRORS: Jika ada beberapa error, proses validasi akan mencoba menampilkan beberapa di antaranya. Sama seperti compiler, ini adalah proses yang tidak sempurna. Beberapa error validasi akan bersifat "fatal", yang berarti error tersebut menghentikan seluruh proses validasi. Hal ini berlaku untuk error display_name="UNSPECIFIED", dan lain-lain. Beberapa error dapat menyebabkan proses validasi melewati error lainnya.

STABILITAS: code dan display_name harus sangat stabil. Namun, kode dan nama tampilan baru dapat muncul seiring waktu, yang dapat menyebabkan permintaan (tidak valid) tertentu menghasilkan pasangan (code, display_name) yang berbeda karena error baru menyembunyikan error lama. Misalnya, lihat "MULTIPLE ERRORS".

display_name

string

Nama tampilan error.

fields[]

FieldReference

Konteks error dapat melibatkan 0, 1 (sering kali), atau beberapa kolom. Misalnya, merujuk ke kendaraan #4 dan pengambilan pertama pengiriman #2 dapat dilakukan sebagai berikut:

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

Namun, perhatikan bahwa kardinalitas fields tidak boleh berubah untuk kode error tertentu.

error_message

string

String yang dapat dibaca manusia yang menjelaskan error. Terdapat pemetaan 1:1 antara code dan error_message (jika kode != "UNSPECIFIED").

STABILITAS: Tidak stabil: pesan error yang terkait dengan code tertentu dapat berubah (semoga untuk memperjelasnya) seiring waktu. Sebagai gantinya, gunakan display_name dan code.

offending_values

string

Dapat berisi nilai kolom. Opsi ini tidak selalu tersedia. Anda sama sekali tidak boleh mengandalkannya dan hanya menggunakannya untuk proses debug model manual.

FieldReference

Menentukan konteks untuk error validasi. FieldReference selalu merujuk ke kolom tertentu dalam file ini dan mengikuti struktur hierarkis yang sama. Misalnya, kita dapat menentukan elemen #2 dari start_time_windows kendaraan #5 menggunakan:

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

Namun, kami menghilangkan entitas tingkat teratas seperti OptimizeToursRequest atau ShipmentModel agar pesan tidak terlalu panjang.

Kolom
name

string

Nama kolom, misalnya, "vehicles".

sub_field

FieldReference

Subkolom bertingkat secara rekursif, jika diperlukan.

Kolom union index_or_key.

index_or_key hanya dapat berupa salah satu dari hal berikut:

index

int32

Indeks kolom jika diulang.

key

string

Kunci jika kolom adalah peta.

OutputConfig

Tentukan tujuan untuk hasil [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].

Kolom
data_format

DataFormat

Wajib. Format data output.

Kolom union destination. Wajib. destination hanya dapat berupa salah satu dari berikut:
gcs_destination

GcsDestination

Lokasi Google Cloud Storage yang menjadi tujuan penulisan output.

RouteModifiers

Menggabungkan serangkaian kondisi opsional yang harus dipenuhi saat menghitung rute kendaraan. Hal ini mirip dengan RouteModifiers di Routes Preferred API Google Maps Platform; lihat: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Kolom
avoid_tolls

bool

Menentukan apakah akan menghindari jalan tol jika memungkinkan. Preferensi akan diberikan ke rute yang tidak berisi jalan tol. Hanya berlaku untuk mode perjalanan bermotor.

avoid_highways

bool

Menentukan apakah akan menghindari jalan raya jika memungkinkan. Preferensi akan diberikan ke rute yang tidak berisi jalan raya. Hanya berlaku untuk mode perjalanan bermotor.

avoid_ferries

bool

Menentukan apakah akan menghindari kapal feri jika memungkinkan. Preferensi akan diberikan ke rute yang tidak berisi perjalanan dengan kapal feri. Hanya berlaku untuk mode perjalanan bermotor.

avoid_indoor

bool

Opsional. Menentukan apakah akan menghindari navigasi di dalam ruangan jika memungkinkan. Preferensi akan diberikan ke rute yang tidak berisi navigasi dalam ruangan. Hanya berlaku untuk mode perjalanan WALKING.

Pengiriman

Pengiriman satu item, dari salah satu pengambilan ke salah satu pengirimannya. Agar pengiriman dianggap telah dilakukan, kendaraan unik harus mengunjungi salah satu lokasi pengambilan (dan mengurangi kapasitas cadangannya), lalu mengunjungi salah satu lokasi pengiriman di lain waktu (sehingga meningkatkan kembali kapasitas cadangannya).

Kolom
display_name

string

Nama tampilan pengiriman yang ditentukan pengguna. Panjangnya dapat mencapai 63 karakter dan dapat menggunakan karakter UTF-8.

pickups[]

VisitRequest

Kumpulan alternatif pengambilan yang terkait dengan pengiriman. Jika tidak ditentukan, kendaraan hanya perlu mengunjungi lokasi yang sesuai dengan pengiriman.

deliveries[]

VisitRequest

Kumpulan alternatif pengiriman yang terkait dengan pengiriman. Jika tidak ditentukan, kendaraan hanya perlu mengunjungi lokasi yang sesuai dengan pengambilan.

load_demands

map<string, Load>

Permintaan muatan pengiriman (misalnya berat, volume, jumlah palet, dll.). Kunci dalam peta harus berupa ID yang menjelaskan jenis beban yang sesuai, idealnya juga menyertakan unit. Misalnya: "weight_kg", "volume_gallons", "pallet_count", dll. Jika kunci tertentu tidak muncul di peta, muatan yang sesuai akan dianggap sebagai null.

allowed_vehicle_indices[]

int32

Kumpulan kendaraan yang dapat melakukan pengiriman ini. Jika kosong, semua kendaraan dapat melakukannya. Kendaraan diberikan berdasarkan indeksnya dalam daftar vehicles ShipmentModel.

costs_per_vehicle[]

double

Menentukan biaya yang dikeluarkan saat pengiriman ini dikirimkan oleh setiap kendaraan. Jika ditentukan, parameter ini harus memiliki SALAH SATU:

  • jumlah elemen yang sama dengan costs_per_vehicle_indices. costs_per_vehicle[i] sesuai dengan kendaraan costs_per_vehicle_indices[i] dari model.
  • jumlah elemen yang sama dengan jumlah kendaraan dalam model. Elemen ke-i sesuai dengan kendaraan ke-#i dari model.

Biaya ini harus dalam unit yang sama dengan penalty_cost dan tidak boleh negatif. Kosongkan kolom ini jika tidak ada biaya tersebut.

costs_per_vehicle_indices[]

int32

Indeks kendaraan yang menerapkan costs_per_vehicle. Jika tidak kosong, elemen ini harus memiliki jumlah elemen yang sama dengan costs_per_vehicle. Indeks kendaraan tidak boleh ditentukan lebih dari sekali. Jika kendaraan dikecualikan dari costs_per_vehicle_indices, biayanya adalah nol.

pickup_to_delivery_absolute_detour_limit

Duration

Menentukan waktu memutar absolut maksimum dibandingkan dengan jalur terpendek dari pengambilan hingga pengiriman. Jika ditentukan, nilainya harus non-negatif, dan pengiriman harus berisi setidaknya satu pengambilan dan satu pengiriman.

Misalnya, t adalah waktu tersingkat yang diperlukan untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, setelan pickup_to_delivery_absolute_detour_limit akan menerapkan:

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

Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih ketat akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai 10/2017, rute memutar hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan.

pickup_to_delivery_time_limit

Duration

Menentukan durasi maksimum dari awal pengambilan hingga awal pengiriman kiriman. Jika ditentukan, nilainya harus non-negatif, dan pengiriman harus berisi setidaknya satu pengambilan dan satu pengiriman. Hal ini tidak bergantung pada alternatif yang dipilih untuk pengambilan dan pengiriman, atau pada kecepatan kendaraan. Hal ini dapat ditentukan bersama dengan batasan rute memutar maksimum: solusi akan mematuhi kedua spesifikasi tersebut.

shipment_type

string

String tidak kosong yang menentukan "jenis" untuk pengiriman ini. Fitur ini dapat digunakan untuk menentukan inkompatibilitas atau persyaratan antara shipment_types (lihat shipment_type_incompatibilities dan shipment_type_requirements di ShipmentModel).

Berbeda dengan visit_types yang ditentukan untuk satu kunjungan: Semua pengambilan/pengiriman yang termasuk dalam pengiriman yang sama memiliki shipment_type yang sama.

label

string

Menentukan label untuk pengiriman ini. Label ini dilaporkan dalam respons di shipment_label dari ShipmentRoute.Visit yang sesuai.

ignore

bool

Jika benar, lewati pengiriman ini, tetapi jangan terapkan penalty_cost.

Mengabaikan pengiriman akan menyebabkan error validasi jika ada shipment_type_requirements dalam model.

Mengabaikan pengiriman yang dilakukan di injected_first_solution_routes atau injected_solution_constraint diizinkan; pemecah masalah akan menghapus kunjungan pengambilan/pengiriman terkait dari rute yang melakukan pengiriman. precedence_rules yang merujuk pada pengiriman yang diabaikan juga akan diabaikan.

penalty_cost

double

Jika pengiriman tidak selesai, penalti ini akan ditambahkan ke biaya keseluruhan rute. Pengiriman dianggap selesai jika salah satu alternatif pengambilan dan pengirimannya dikunjungi. Biaya dapat dinyatakan dalam unit yang sama dengan yang digunakan untuk semua kolom terkait biaya lainnya dalam model dan harus positif.

PENTING: Jika denda ini tidak ditentukan, denda akan dianggap tidak terbatas, yaitu pengiriman harus diselesaikan.

pickup_to_delivery_relative_detour_limit

double

Menentukan waktu memutar relatif maksimum dibandingkan dengan jalur terpendek dari pengambilan hingga pengiriman. Jika ditentukan, nilainya harus non-negatif, dan pengiriman harus berisi setidaknya satu pengambilan dan satu pengiriman.

Misalnya, t adalah waktu tersingkat yang diperlukan untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, setelan pickup_to_delivery_relative_detour_limit akan menerapkan:

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

Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih ketat akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai 10/2017, rute memutar hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan.

Muat

Saat melakukan kunjungan, jumlah yang telah ditentukan dapat ditambahkan ke muatan kendaraan jika berupa pengambilan, atau dikurangi jika berupa pengiriman. Pesan ini menentukan jumlah tersebut. Lihat load_demands.

Kolom
amount

int64

Jumlah muatan kendaraan yang melakukan kunjungan yang sesuai akan bervariasi. Karena ini adalah bilangan bulat, pengguna disarankan untuk memilih unit yang sesuai agar tidak kehilangan presisi. Harus ≥ 0.

VisitRequest

Permintaan kunjungan yang dapat dilakukan oleh kendaraan: memiliki geolokasi (atau dua, lihat di bawah), waktu buka dan tutup yang diwakili oleh periode waktu, dan waktu durasi layanan (waktu yang dihabiskan oleh kendaraan setelah tiba untuk mengambil atau mengantarkan barang).

Kolom
arrival_location

LatLng

Lokasi geografis tempat kendaraan tiba saat melakukan VisitRequest ini. Jika model pengiriman memiliki matriks jarak durasi, arrival_location tidak boleh ditentukan.

arrival_waypoint

Waypoint

Titik jalan tempat kendaraan tiba saat melakukan VisitRequest ini. Jika model pengiriman memiliki matriks jarak durasi, arrival_waypoint tidak boleh ditentukan.

departure_location

LatLng

Lokasi geografis tempat kendaraan berangkat setelah menyelesaikan VisitRequest ini. Dapat dihilangkan jika sama dengan arrival_location. Jika model pengiriman memiliki matriks jarak durasi, departure_location tidak boleh ditentukan.

departure_waypoint

Waypoint

Titik jalan tempat kendaraan berangkat setelah menyelesaikan VisitRequest ini. Dapat dihilangkan jika sama dengan arrival_waypoint. Jika model pengiriman memiliki matriks jarak durasi, departure_waypoint tidak boleh ditentukan.

tags[]

string

Menentukan tag yang dilampirkan ke permintaan kunjungan. String kosong atau duplikat tidak diizinkan.

time_windows[]

TimeWindow

Jendela waktu yang membatasi waktu tiba pada kunjungan. Perhatikan bahwa kendaraan dapat berangkat di luar periode waktu kedatangan, yaitu waktu kedatangan + durasi tidak harus berada dalam periode waktu. Hal ini dapat menyebabkan waktu tunggu jika kendaraan tiba sebelum TimeWindow.start_time.

Tidak adanya TimeWindow berarti kendaraan dapat melakukan kunjungan ini kapan saja.

Jangka waktu harus terpisah, yaitu tidak boleh ada jangka waktu yang tumpang-tindih atau berdekatan dengan jangka waktu lain, dan harus dalam urutan menaik.

cost_per_hour_after_soft_end_time dan soft_end_time hanya dapat ditetapkan jika ada satu periode waktu.

duration

Duration

Durasi kunjungan, yaitu waktu yang dihabiskan kendaraan antara kedatangan dan keberangkatan (akan ditambahkan ke kemungkinan waktu tunggu; lihat time_windows).

cost

double

Biaya untuk melayani permintaan kunjungan ini pada rute kendaraan. Hal ini dapat digunakan untuk membayar biaya yang berbeda untuk setiap alternatif pengambilan atau pengiriman paket. Biaya ini harus dalam unit yang sama dengan Shipment.penalty_cost dan tidak boleh negatif.

load_demands

map<string, Load>

Permintaan muatan dari permintaan kunjungan ini. Kolom ini sama seperti kolom Shipment.load_demands, tetapi hanya berlaku untuk VisitRequest ini, bukan seluruh Shipment. Permintaan yang tercantum di sini ditambahkan ke permintaan yang tercantum di Shipment.load_demands.

visit_types[]

string

Menentukan jenis kunjungan. Hal ini dapat digunakan untuk mengalokasikan waktu tambahan yang diperlukan kendaraan untuk menyelesaikan kunjungan ini (lihat Vehicle.extra_visit_duration_for_visit_type).

Jenis hanya dapat muncul sekali.

label

string

Menentukan label untuk VisitRequest ini. Label ini dilaporkan dalam respons sebagai visit_label di ShipmentRoute.Visit yang sesuai.

avoid_u_turns

bool

Menentukan apakah putar balik harus dihindari di rute mengemudi di lokasi ini. Penghindaran putar balik adalah upaya terbaik dan penghindaran sepenuhnya tidak dijamin. Fitur ini bersifat eksperimental dan perilakunya dapat berubah.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request untuk mengetahui detail selengkapnya.

ShipmentModel

Model pengiriman berisi serangkaian pengiriman yang harus dilakukan oleh serangkaian kendaraan, sekaligus meminimalkan biaya keseluruhan, yang merupakan jumlah dari:

  • biaya pemilihan rute kendaraan (jumlah biaya per total waktu, biaya per waktu perjalanan, dan biaya tetap untuk semua kendaraan).
  • denda pengiriman yang tidak dilakukan.
  • biaya durasi global pengiriman
Kolom
shipments[]

Shipment

Kumpulan pengiriman yang harus dilakukan dalam model.

vehicles[]

Vehicle

Kumpulan kendaraan yang dapat digunakan untuk melakukan kunjungan.

objectives[]

Objective

Kumpulan tujuan untuk model ini, yang akan kita ubah menjadi biaya. Jika tidak kosong, model input harus tanpa biaya. Untuk mendapatkan permintaan yang diubah, gunakan solving_mode = TRANSFORM_AND_RETURN_REQUEST. Perhatikan bahwa permintaan tidak akan diselesaikan dalam kasus ini. Lihat dokumentasi yang sesuai.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request untuk mengetahui detail selengkapnya.

global_start_time

Timestamp

Waktu mulai dan berakhir global model: tidak ada waktu di luar rentang ini yang dapat dianggap valid.

Rentang waktu model harus kurang dari satu tahun, yaitu global_end_time dan global_start_time harus berada dalam rentang 31.536. 000 detik satu sama lain.

Saat menggunakan kolom cost_per_*hour, Anda mungkin ingin menetapkan periode ini ke interval yang lebih kecil untuk meningkatkan performa (misalnya, jika Anda membuat model satu hari, Anda harus menetapkan batas waktu global ke hari tersebut). Jika tidak ditetapkan, 00:00:00 UTC, 1 Januari 1970 (yaitu detik: 0, nano: 0) akan digunakan sebagai default.

global_end_time

Timestamp

Jika tidak ditetapkan, 00:00:00 UTC, 1 Januari 1971 (yaitu detik: 31536000, nano: 0) akan digunakan sebagai default.

global_duration_cost_per_hour

double

"Durasi global" dari keseluruhan rencana adalah perbedaan antara waktu mulai efektif paling awal dan waktu akhir efektif paling lambat dari semua kendaraan. Pengguna dapat menetapkan biaya per jam untuk jumlah tersebut guna mencoba dan mengoptimalkan penyelesaian tugas paling awal, misalnya. Biaya ini harus dalam unit yang sama dengan Shipment.penalty_cost.

duration_distance_matrices[]

DurationDistanceMatrix

Menentukan matriks durasi dan jarak yang digunakan dalam model. Jika kolom ini kosong, Google Maps atau jarak geodesi akan digunakan, bergantung pada nilai kolom use_geodesic_distances. Jika tidak kosong, use_geodesic_distances tidak boleh benar dan duration_distance_matrix_src_tags maupun duration_distance_matrix_dst_tags tidak boleh kosong.

Contoh penggunaan:

  • Ada dua lokasi: locA dan locB.
  • 1 kendaraan memulai rutenya di locA dan mengakhirinya di locA.
  • 1 permintaan kunjungan pengambilan di locB.
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
    }
  }
}
  • Ada tiga lokasi: locA, locB, dan locC.
  • 1 kendaraan memulai rutenya di locA dan mengakhirinya di locB, menggunakan matriks "fast".
  • 1 kendaraan memulai rutenya di locB dan mengakhirinya di locB, menggunakan matriks "slow".
  • 1 kendaraan memulai rutenya di locB dan mengakhirinya di locB, menggunakan matriks "fast".
  • 1 permintaan kunjungan pengambilan di locC.
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

Tag yang menentukan sumber matriks durasi dan jarak; duration_distance_matrices(i).rows(j) menentukan durasi dan jarak dari kunjungan dengan tag duration_distance_matrix_src_tags(j) ke kunjungan lain dalam matriks i.

Tag sesuai dengan VisitRequest.tags atau Vehicle.start_tags. VisitRequest atau Vehicle tertentu harus sama persis dengan satu tag di kolom ini. Perhatikan bahwa tag sumber, tujuan, dan matriks Vehicle mungkin sama; demikian pula, tag sumber dan tujuan VisitRequest mungkin sama. Semua tag harus berbeda dan tidak boleh berupa string kosong. Jika kolom ini tidak kosong, duration_distance_matrices tidak boleh kosong.

duration_distance_matrix_dst_tags[]

string

Tag yang menentukan tujuan matriks durasi dan jarak; duration_distance_matrices(i).rows(j).durations(k) (resp. duration_distance_matrices(i).rows(j).meters(k)) menentukan durasi (atau jarak) perjalanan dari kunjungan dengan tag duration_distance_matrix_src_tags(j) ke kunjungan dengan tag duration_distance_matrix_dst_tags(k) dalam matriks i.

Tag sesuai dengan VisitRequest.tags atau Vehicle.start_tags. VisitRequest atau Vehicle tertentu harus sama persis dengan satu tag di kolom ini. Perhatikan bahwa tag sumber, tujuan, dan matriks Vehicle mungkin sama; demikian pula, tag sumber dan tujuan VisitRequest mungkin sama. Semua tag harus berbeda dan tidak boleh berupa string kosong. Jika kolom ini tidak kosong, duration_distance_matrices tidak boleh kosong.

transition_attributes[]

TransitionAttributes

Atribut transisi ditambahkan ke model.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Kumpulan shipment_types yang tidak kompatibel (lihat ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

Kumpulan persyaratan shipment_type (lihat ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

Serangkaian aturan prioritas yang harus diterapkan dalam model.

PENTING: Penggunaan aturan prioritas membatasi ukuran masalah yang dapat dioptimalkan. Permintaan yang menggunakan aturan prioritas yang menyertakan banyak pengiriman mungkin akan ditolak.

max_active_vehicles

int32

Membatasi jumlah maksimum kendaraan aktif. Kendaraan aktif jika rutenya melakukan setidaknya satu pengiriman. Hal ini dapat digunakan untuk membatasi jumlah rute jika jumlah pengemudi lebih sedikit daripada kendaraan dan armada kendaraannya heterogen. Pengoptimalan kemudian akan memilih subset kendaraan terbaik untuk digunakan. Harus benar-benar positif.

DurationDistanceMatrix

Menentukan matriks durasi dan jarak dari lokasi awal kunjungan dan kendaraan ke lokasi akhir kunjungan dan kendaraan.

Kolom
rows[]

Row

Menentukan baris matriks durasi dan jarak. Elemennya harus sebanyak ShipmentModel.duration_distance_matrix_src_tags.

vehicle_start_tag

string

Tag yang menentukan kendaraan yang akan menerapkan matriks durasi dan jarak ini. Jika kosong, ini berlaku untuk semua kendaraan, dan hanya boleh ada satu matriks.

Setiap titik awal kendaraan harus cocok dengan tepat satu matriks, yaitu tepat satu kolom start_tags-nya harus cocok dengan vehicle_start_tag dari satu matriks (dan hanya matriks tersebut).

Semua matriks harus memiliki vehicle_start_tag yang berbeda.

Baris

Menentukan baris matriks durasi dan jarak.

Kolom
durations[]

Duration

Nilai durasi untuk baris tertentu. Elemennya harus sebanyak ShipmentModel.duration_distance_matrix_dst_tags.

meters[]

double

Nilai jarak untuk baris tertentu. Jika tidak ada biaya atau batasan yang mengacu pada jarak dalam model, kolom ini dapat dibiarkan kosong; jika tidak, kolom ini harus memiliki elemen sebanyak durations.

Tujuan

Tujuan menggantikan model biaya sepenuhnya, sehingga tidak kompatibel dengan biaya yang sudah ada sebelumnya. Setiap tujuan dipetakan ke sejumlah biaya yang telah ditentukan, misalnya, kendaraan, pengiriman, atau atribut transisi.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request untuk mengetahui detail selengkapnya.

Kolom
type

Type

Jenis tujuan.

weight

double

Seberapa besar tujuan ini harus diperhitungkan dibandingkan dengan tujuan lainnya. Bobot ini dapat berupa angka non-negatif, dan jumlah bobot tidak harus sama dengan 1. Bobot ditetapkan secara default ke 1,0.

Jenis

Jenis tujuan yang akan dipetakan ke serangkaian biaya.

Enum
DEFAULT Kumpulan biaya default akan digunakan untuk memastikan solusi yang wajar. Catatan: tujuan ini dapat digunakan sendiri, tetapi juga akan selalu ditambahkan dengan bobot 1,0, sebagai dasar pengukuran, ke tujuan yang ditentukan oleh pengguna, jika belum ada.
MIN_DISTANCE Tujuan "MIN". Meminimalkan total jarak tempuh.
MIN_WORKING_TIME Meminimalkan total waktu kerja, yang dijumlahkan untuk semua kendaraan.
MIN_TRAVEL_TIME Sama seperti di atas, tetapi hanya berfokus pada waktu perjalanan.
MIN_NUM_VEHICLES Meminimalkan jumlah kendaraan yang digunakan.

PrecedenceRule

Aturan prioritas antara dua peristiwa (setiap peristiwa adalah pengambilan atau pengiriman kiriman): peristiwa "kedua" harus dimulai setidaknya offset_duration setelah peristiwa "pertama" dimulai.

Beberapa prioritas dapat merujuk ke peristiwa yang sama (atau terkait), misalnya, "pengambilan B terjadi setelah pengiriman A" dan "pengambilan C terjadi setelah pengambilan B".

Selain itu, prioritas hanya berlaku jika kedua pengiriman dilakukan dan akan diabaikan jika tidak.

Kolom
first_is_delivery

bool

Menunjukkan apakah peristiwa "pertama" adalah pengiriman.

second_is_delivery

bool

Menunjukkan apakah peristiwa "kedua" adalah pengiriman.

offset_duration

Duration

Offset antara peristiwa "pertama" dan "kedua". Nilainya bisa negatif.

first_index

int32

Indeks pengiriman peristiwa "pertama". Kolom ini harus ditentukan.

second_index

int32

Indeks pengiriman peristiwa "kedua". Kolom ini harus ditentukan.

ShipmentRoute

Rute kendaraan dapat diuraikan, di sepanjang sumbu waktu, seperti ini (kita asumsikan ada n kunjungan):

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

Perhatikan bahwa kami membedakan antara:

  • "peristiwa tepat waktu", seperti awal dan akhir kendaraan serta awal dan akhir setiap kunjungan (alias kedatangan dan keberangkatan). Peristiwa ini terjadi pada detik tertentu.
  • "interval waktu", seperti kunjungan itu sendiri, dan transisi antar-kunjungan. Meskipun interval waktu terkadang dapat memiliki durasi nol, yaitu dimulai dan diakhiri pada detik yang sama, interval waktu tersebut sering kali memiliki durasi positif.

Invarian:

  • Jika ada n kunjungan, akan ada n+1 transisi.
  • Kunjungan selalu dikelilingi oleh transisi sebelum kunjungan (indeks yang sama) dan transisi setelah kunjungan (indeks + 1).
  • Keberangkatan kendaraan selalu diikuti dengan transisi #0.
  • Akhir kendaraan selalu didahului oleh transisi #n.

Jika diperbesar, berikut yang terjadi selama Transition dan Visit:

---+-------------------------------------+-----------------------------+-->
   |           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

Terakhir, berikut cara mengatur PERJALANAN, ISTIRAHAT, PENUNDAAN, dan MENUNGGU selama transisi.

  • Keduanya tidak tumpang-tindih.
  • DELAY bersifat unik dan harus berupa jangka waktu yang berdekatan tepat sebelum kunjungan berikutnya (atau akhir kendaraan). Jadi, Anda cukup mengetahui durasi penundaan untuk mengetahui waktu mulai dan berakhirnya.
  • BREAKS adalah jangka waktu yang berurutan dan tidak tumpang-tindih. Respons menentukan waktu mulai dan durasi setiap istirahat.
  • TRAVEL dan WAIT dapat "di-preempt": keduanya dapat diinterupsi beberapa kali selama transisi ini. Klien dapat berasumsi bahwa perjalanan terjadi "secepat mungkin" dan bahwa "menunggu" mengisi waktu yang tersisa.

Contoh (kompleks):

                               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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Kolom
vehicle_index

int32

Kendaraan yang melakukan rute, yang diidentifikasi berdasarkan indeksnya di ShipmentModel sumber.

vehicle_label

string

Label kendaraan yang melakukan rute ini, sama dengan ShipmentModel.vehicles(vehicle_index).label, jika ditentukan.

vehicle_start_time

Timestamp

Waktu saat kendaraan memulai rutenya.

vehicle_end_time

Timestamp

Waktu saat kendaraan menyelesaikan rutenya.

visits[]

Visit

Urutan kunjungan yang diurutkan yang mewakili rute. visits[i] adalah kunjungan ke-i dalam rute. Jika kolom ini kosong, kendaraan dianggap tidak digunakan.

transitions[]

Transition

Daftar transisi yang diurutkan untuk rute.

has_traffic_infeasibilities

bool

Jika OptimizeToursRequest.consider_road_traffic ditetapkan ke true, kolom ini menunjukkan bahwa inkonsistensi dalam pengaturan waktu rute diprediksi menggunakan estimasi durasi perjalanan berbasis lalu lintas. Waktu mungkin tidak cukup untuk menyelesaikan perjalanan yang disesuaikan dengan lalu lintas, penundaan, dan istirahat di antara kunjungan, sebelum kunjungan pertama, atau setelah kunjungan terakhir, sambil tetap memenuhi periode waktu kunjungan dan kendaraan. Misalnya,

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

Kedatangan di next_visit kemungkinan akan terjadi lebih lambat dari periode waktu saat ini karena peningkatan estimasi waktu perjalanan travel_duration(previous_visit, next_visit) akibat lalu lintas. Selain itu, istirahat mungkin terpaksa tumpang-tindih dengan kunjungan karena peningkatan estimasi waktu perjalanan dan batasan periode waktu kunjungan atau istirahat.

route_polyline

EncodedPolyline

Representasi polyline yang dienkode dari rute. Kolom ini hanya diisi jika OptimizeToursRequest.populate_polylines ditetapkan ke true.

breaks[]

Break

Istirahat yang dijadwalkan untuk kendaraan yang menjalankan rute ini. Urutan breaks mewakili interval waktu, yang masing-masing dimulai pada start_time yang sesuai dan berlangsung selama duration detik.

metrics

AggregatedMetrics

Metrik durasi, jarak, dan beban untuk rute ini. Kolom AggregatedMetrics dijumlahkan di semua ShipmentRoute.transitions atau ShipmentRoute.visits, bergantung pada konteksnya.

vehicle_fullness

VehicleFullness

Kolom VehicleFullness untuk menghitung seberapa dekat metrik yang dibatasi dengan batas kendaraan masing-masing. Kolomnya adalah rasio antara kolom metrik yang dibatasi (misalnya, AggregatedMetrics.travel_distance_meters) dan batas kendaraan terkait (misalnya, Vehicle.route_distance_limit).

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

route_costs

map<string, double>

Biaya rute, yang dikelompokkan berdasarkan kolom permintaan terkait biaya. Kuncinya adalah jalur proto, yang relatif terhadap OptimizeToursRequest input, misalnya "model.shipments.pickups.cost", dan nilainya adalah total biaya yang dihasilkan oleh kolom biaya yang sesuai, yang digabungkan di seluruh rute. Dengan kata lain, costs["model.shipments.pickups.cost"] adalah jumlah semua biaya pengambilan di sepanjang rute. Semua biaya yang ditentukan dalam model dilaporkan secara mendetail di sini, kecuali biaya yang terkait dengan TransitionAttributes yang hanya dilaporkan secara gabungan mulai 01/2022.

route_total_cost

double

Total biaya rute. Jumlah semua biaya dalam peta biaya.

Istirahat

Data yang mewakili eksekusi jeda.

Kolom
start_time

Timestamp

Waktu mulai istirahat.

duration

Duration

Durasi istirahat.

EncodedPolyline

Representasi polyline yang dienkode. Informasi selengkapnya tentang encoding polyline dapat ditemukan di sini: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

Kolom
points

string

String yang mewakili titik polyline yang dienkode.

Transisi

Transisi antara dua peristiwa di rute. Lihat deskripsi ShipmentRoute.

Jika kendaraan tidak memiliki start_location dan/atau end_location, metrik perjalanan yang sesuai adalah 0.

Kolom
travel_duration

Duration

Durasi perjalanan selama transisi ini.

travel_distance_meters

double

Jarak yang ditempuh selama transisi.

traffic_info_unavailable

bool

Jika traffic diminta melalui OptimizeToursRequest.consider_road_traffic, dan info traffic tidak dapat diambil untuk Transition, boolean ini ditetapkan ke true. Hal ini mungkin bersifat sementara (gangguan yang jarang terjadi di server lalu lintas real-time) atau permanen (tidak ada data untuk lokasi ini).

delay_duration

Duration

Jumlah durasi penundaan yang diterapkan ke transisi ini. Jika ada, penundaan akan dimulai tepat delay_duration detik sebelum peristiwa berikutnya (kunjungan atau akhir kendaraan). Lihat TransitionAttributes.delay.

break_duration

Duration

Jumlah durasi istirahat yang terjadi selama transisi ini, jika ada. Detail tentang waktu mulai dan durasi setiap jeda iklan disimpan di ShipmentRoute.breaks.

wait_duration

Duration

Waktu yang dihabiskan untuk menunggu selama transisi ini. Durasi tunggu sesuai dengan waktu tidak ada aktivitas dan tidak termasuk waktu istirahat. Perhatikan juga bahwa waktu tunggu ini dapat dibagi menjadi beberapa interval yang tidak berurutan.

total_duration

Duration

Total durasi transisi, yang disediakan untuk memudahkan. Nilainya sama dengan:

  • kunjungan berikutnya start_time (atau vehicle_end_time jika ini adalah transisi terakhir) - start_time transisi ini;
  • jika ShipmentRoute.has_traffic_infeasibilities salah, hal berikut juga berlaku: `total_duration = travel_duration + delay_duration
  • break_duration + wait_duration`.
start_time

Timestamp

Waktu mulai transisi ini.

route_polyline

EncodedPolyline

Representasi polyline yang dienkode dari rute yang diikuti selama transisi. Kolom ini hanya diisi jika populate_transition_polylines ditetapkan ke true.

route_token

string

Hanya output. Token buram yang dapat diteruskan ke Navigation SDK untuk merekonstruksi rute selama navigasi, dan, jika terjadi pengalihan rute, mempertahankan tujuan awal saat rute dibuat. Perlakukan token ini sebagai blob buram. Jangan bandingkan nilainya di seluruh permintaan karena nilainya dapat berubah meskipun layanan menampilkan rute yang sama persis. Kolom ini hanya diisi jika populate_transition_polylines ditetapkan ke true.

vehicle_loads

map<string, VehicleLoad>

Muatan kendaraan selama transisi ini, untuk setiap jenis yang muncul di Vehicle.load_limits kendaraan ini, atau yang memiliki Shipment.load_demands bukan nol pada beberapa pengiriman yang dilakukan di rute ini.

Muatan selama transisi pertama adalah muatan awal rute kendaraan. Kemudian, setelah setiap kunjungan, load_demands kunjungan akan ditambahkan atau dikurangi untuk mendapatkan muatan transisi berikutnya, bergantung pada apakah kunjungan tersebut merupakan pengambilan atau pengiriman.

VehicleLoad

Melaporkan muatan aktual kendaraan di beberapa titik di sepanjang rute, untuk jenis tertentu (lihat Transition.vehicle_loads).

Kolom
amount

int64

Jumlah muatan pada kendaraan, untuk jenis yang ditentukan. Unit beban biasanya ditunjukkan oleh jenisnya. Lihat Transition.vehicle_loads.

Kunjungi

Kunjungan yang dilakukan selama rute. Kunjungan ini sesuai dengan pengambilan atau pengiriman Shipment.

Kolom
shipment_index

int32

Indeks kolom shipments di ShipmentModel sumber.

is_pickup

bool

Jika benar, kunjungan tersebut sesuai dengan pengambilan Shipment. Jika tidak, hal ini sesuai dengan pengiriman.

visit_request_index

int32

Indeks VisitRequest di kolom pengambilan atau pengiriman Shipment (lihat is_pickup).

start_time

Timestamp

Waktu saat kunjungan dimulai. Perhatikan bahwa kendaraan mungkin tiba lebih awal dari waktu ini di lokasi kunjungan. Waktu konsisten dengan ShipmentModel.

load_demands

map<string, Load>

Total permintaan muatan kunjungan sebagai jumlah pengiriman dan permintaan kunjungan load_demands. Nilainya negatif jika kunjungan adalah pengiriman. Permintaan dilaporkan untuk jenis yang sama dengan Transition.loads (lihat kolom ini).

detour

Duration

Waktu tambahan untuk memutar karena pengiriman yang dikunjungi pada rute sebelum kunjungan dan potensi waktu tunggu yang disebabkan oleh periode waktu. Jika kunjungan adalah pengiriman, rute memutar dihitung dari kunjungan pengambilan yang sesuai dan sama dengan:

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

Jika tidak, nilai ini akan dihitung dari start_location kendaraan dan sama dengan:

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

string

Salinan Shipment.label yang sesuai, jika ditentukan dalam Shipment.

visit_label

string

Salinan VisitRequest.label yang sesuai, jika ditentukan dalam VisitRequest.

visit_type

VisitType

Opsional. Menentukan jenis kunjungan. Mengganti kolom Visit.is_pickup.

injected_solution_location_token

int32

Token buram yang mewakili informasi tentang lokasi kunjungan.

Kolom ini dapat diisi dalam kunjungan rute hasil jika VisitRequest.avoid_u_turns ditetapkan ke true untuk kunjungan ini atau jika ShipmentModel.avoid_u_turns ditetapkan ke true dalam permintaan OptimizeToursRequest.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request untuk mengetahui detail selengkapnya.

VisitType

Menunjukkan apakah kunjungan tersebut adalah pengambilan, pengiriman, atau kunjungan ke Stop. Kunjungan ke perhentian hanya digunakan jika pengoptimalan multimodal diaktifkan.

Enum
VISIT_TYPE_UNSPECIFIED Jenis kunjungan tidak ditentukan.
PICKUP_SHIPMENT Kunjungan sesuai dengan pengambilan pengiriman.
DELIVER_SHIPMENT Kunjungan sesuai dengan pengiriman paket.

ShipmentTypeIncompatibility

Menentukan ketidakcocokan antara pengiriman bergantung pada shipment_type-nya. Kemunculan pengiriman yang tidak kompatibel pada rute yang sama dibatasi berdasarkan mode ketidakkompatibelan.

Kolom
types[]

string

Daftar jenis yang tidak kompatibel. Dua pengiriman yang memiliki shipment_types berbeda di antara yang tercantum adalah "tidak kompatibel".

incompatibility_mode

IncompatibilityMode

Mode yang diterapkan pada ketidaksesuaian.

IncompatibilityMode

Mode yang menentukan cara pembatasan pengiriman yang tidak kompatibel pada rute yang sama.

Enum
INCOMPATIBILITY_MODE_UNSPECIFIED Mode ketidakcocokan yang tidak ditentukan. Nilai ini tidak boleh digunakan.
NOT_PERFORMED_BY_SAME_VEHICLE Dalam mode ini, dua pengiriman dengan jenis yang tidak kompatibel tidak akan pernah dapat menggunakan kendaraan yang sama.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Dalam mode ini, dua pengiriman dengan jenis yang tidak kompatibel tidak boleh berada di kendaraan yang sama pada waktu yang sama:

  • Mereka dapat berbagi kendaraan yang sama hanya jika satu pesanan dikirim sebelum pesanan lainnya diambil.
  • Jika kedua pengiriman hanya berupa pengambilan (tanpa pengiriman) atau hanya pengiriman (tanpa pengambilan), keduanya tidak dapat menggunakan kendaraan yang sama sama sekali.

ShipmentTypeRequirement

Menentukan persyaratan antar-pengiriman berdasarkan shipment_type-nya. Detail persyaratan ditentukan oleh mode persyaratan.

Kolom
required_shipment_type_alternatives[]

string

Daftar jenis pengiriman alternatif yang diperlukan oleh dependent_shipment_types.

dependent_shipment_types[]

string

Semua pengiriman dengan jenis di kolom dependent_shipment_types memerlukan setidaknya satu pengiriman jenis required_shipment_type_alternatives untuk dikunjungi di rute yang sama.

CATATAN: Rantai persyaratan yang membuat shipment_type bergantung pada dirinya sendiri tidak diizinkan.

requirement_mode

RequirementMode

Mode yang diterapkan ke persyaratan.

RequirementMode

Mode yang menentukan tampilan pengiriman dependen pada rute.

Enum
REQUIREMENT_MODE_UNSPECIFIED Mode persyaratan yang tidak ditentukan. Nilai ini tidak boleh digunakan.
PERFORMED_BY_SAME_VEHICLE Dalam mode ini, semua pengiriman "dependen" harus menggunakan kendaraan yang sama dengan setidaknya salah satu pengiriman "wajib".
IN_SAME_VEHICLE_AT_PICKUP_TIME

Dengan mode IN_SAME_VEHICLE_AT_PICKUP_TIME, semua pengiriman "dependen" harus memiliki setidaknya satu pengiriman "wajib" di kendaraan pada saat pengambilan.

Oleh karena itu, pengambilan pengiriman "dependen" harus memiliki:

  • Pengiriman "wajib" khusus pengiriman yang dikirimkan pada rute setelahnya, atau
  • Pengiriman "wajib" diambil di rute sebelum pengiriman "dependen", dan jika pengiriman "wajib" memiliki pengantaran, pengantaran ini harus dilakukan setelah pengambilan pengiriman "dependen".
IN_SAME_VEHICLE_AT_DELIVERY_TIME Sama seperti sebelumnya, kecuali bahwa pengiriman "dependen" harus memiliki pengiriman "wajib" di kendaraan pada saat pengiriman.

SkippedShipment

Menentukan detail pengiriman yang tidak dilakukan dalam solusi. Untuk kasus yang sepele dan/atau jika kami dapat mengidentifikasi penyebab pengabaian, kami akan melaporkan alasannya di sini.

Kolom
index

int32

Indeks sesuai dengan indeks pengiriman di ShipmentModel sumber.

label

string

Salinan Shipment.label yang sesuai, jika ditentukan dalam Shipment.

reasons[]

Reason

Daftar alasan yang menjelaskan mengapa pengiriman dilewati. Lihat komentar di atas Reason. Jika kami tidak dapat memahami alasan pengiriman dilewati, alasan tidak akan ditetapkan.

penalty_cost

double

Ini adalah salinan Shipment.penalty_cost, yang disertakan di sini untuk mempermudah melihat tingkat keparahan pengiriman yang dilewati.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

estimated_incompatible_vehicle_ratio

double

Estimasi rasio kendaraan yang tidak dapat melakukan pengiriman ini karena setidaknya salah satu alasan di bawah. Catatan: ini hanya diisi jika alasannya melibatkan kendaraan.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

Alasan

Jika kami dapat menjelaskan alasan pengiriman dilewati, alasannya akan dicantumkan di sini. Jika alasannya tidak identik untuk semua kendaraan, reason akan memiliki lebih dari 1 elemen. Pengiriman yang dilewati tidak boleh memiliki alasan duplikat, yaitu semua kolom sama kecuali untuk example_vehicle_index. Contoh:

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
}

Pengiriman yang dilewati tidak kompatibel dengan semua kendaraan. Alasannya mungkin berbeda untuk semua kendaraan, tetapi setidaknya satu kapasitas "Apel" kendaraan akan terlampaui (termasuk kendaraan 1), setidaknya satu kapasitas "Pir" kendaraan akan terlampaui (termasuk kendaraan 3), dan setidaknya satu batas jarak kendaraan akan terlampaui (termasuk kendaraan 1).

Kolom
code

Code

Lihat komentar Kode.

example_vehicle_indices[]

int32

Sama seperti example_vehicle_index, kecuali bahwa kami menyediakan daftar beberapa kendaraan yang diidentifikasi. Daftar ini tidak selalu lengkap. Kolom ini hanya diisi jika [fill_example_vehicle_indices_in_skipped_reasons][] bernilai benar (true).

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

example_exceeded_capacity_type

string

Jika kode alasannya adalah DEMAND_EXCEEDS_VEHICLE_CAPACITY, dokumentasikan satu jenis kapasitas yang terlampaui.

example_vehicle_index

int32

Jika alasannya terkait dengan ketidakcocokan pengiriman-kendaraan, kolom ini memberikan indeks satu kendaraan yang relevan.

Kode

Kode yang mengidentifikasi jenis alasan. Urutan di sini tidak berarti. Secara khusus, hal ini tidak memberikan indikasi apakah alasan tertentu akan muncul sebelum alasan lain dalam solusi, jika keduanya berlaku.

Enum
CODE_UNSPECIFIED Metode ini tidak boleh digunakan.
NO_VEHICLE Tidak ada kendaraan dalam model yang membuat semua pengiriman tidak dapat dilakukan.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Permintaan pengiriman melebihi kapasitas kendaraan untuk beberapa jenis kapasitas, salah satunya adalah example_exceeded_capacity_type.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

Jarak minimum yang diperlukan untuk melakukan pengiriman ini, yaitu dari start_location kendaraan ke lokasi pengambilan dan/atau pengiriman, serta ke lokasi akhir kendaraan melebihi route_distance_limit kendaraan.

Perhatikan bahwa untuk komputasi ini, kami menggunakan jarak geodesi.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

Waktu minimum yang diperlukan untuk melakukan pengiriman ini, termasuk waktu perjalanan, waktu tunggu, dan waktu layanan, melebihi route_duration_limit kendaraan.

Catatan: waktu perjalanan dihitung dalam skenario terbaik, yaitu sebagai jarak geodesi x 36 m/dtk (sekitar 130 km/jam).

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT Sama seperti di atas, tetapi kami hanya membandingkan waktu perjalanan minimum dan travel_duration_limit kendaraan.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS Kendaraan tidak dapat melakukan pengiriman ini dalam skenario terbaik (lihat CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT untuk penghitungan waktu) jika dimulai pada waktu mulai paling awal: total waktu akan membuat kendaraan berakhir setelah waktu berakhir paling lambat.
VEHICLE_NOT_ALLOWED Kolom allowed_vehicle_indices pengiriman tidak kosong dan kendaraan ini tidak termasuk di dalamnya.
VEHICLE_IGNORED

Kolom ignore kendaraan bernilai benar.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

SHIPMENT_IGNORED

Kolom ignore pengiriman bernilai benar.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

Pengiriman dilewati di injected_solution_constraint.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

Relaksasi rute kendaraan yang ditentukan dalam injected_solution_constraint tidak mengizinkan penyisipan kunjungan apa pun.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

ZERO_PENALTY_COST

Pengiriman memiliki biaya penalti nol. Meskipun hal ini dapat berguna sebagai pilihan pemodelan lanjutan, hal ini juga dapat menjelaskan setelahnya mengapa pengiriman dilewati.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

TimeWindow

Periode waktu membatasi waktu peristiwa, seperti waktu kedatangan saat kunjungan, atau waktu mulai dan berakhir kendaraan.

Batas rentang waktu yang ketat, start_time dan end_time, menerapkan waktu paling awal dan paling akhir dari peristiwa, sehingga start_time <= event_time <= end_time. Batas bawah periode waktu fleksibel, soft_start_time, menyatakan preferensi agar peristiwa terjadi pada atau setelah soft_start_time dengan menimbulkan biaya yang sebanding dengan berapa lama sebelum soft_start_time peristiwa terjadi. Batas atas periode waktu fleksibel, soft_end_time, menyatakan preferensi agar peristiwa terjadi pada atau sebelum soft_end_time dengan menimbulkan biaya yang sebanding dengan durasi setelah soft_end_time peristiwa terjadi. start_time, end_time, soft_start_time, dan soft_end_time harus berada dalam batas waktu global (lihat ShipmentModel.global_start_time dan ShipmentModel.global_end_time) serta harus mematuhi:

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

Timestamp

Waktu mulai periode waktu tetap. Jika tidak ditentukan, nilai ini akan ditetapkan ke ShipmentModel.global_start_time.

end_time

Timestamp

Waktu berakhir periode waktu tetap. Jika tidak ditentukan, nilai ini akan ditetapkan ke ShipmentModel.global_end_time.

soft_start_time

Timestamp

Waktu mulai fleksibel untuk periode waktu.

soft_end_time

Timestamp

Waktu berakhir fleksibel untuk periode waktu.

cost_per_hour_before_soft_start_time

double

Biaya per jam yang ditambahkan ke biaya lain dalam model jika peristiwa terjadi sebelum soft_start_time, yang dihitung sebagai:

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

Biaya ini harus positif, dan kolom hanya dapat ditetapkan jika soft_start_time telah ditetapkan.

cost_per_hour_after_soft_end_time

double

Biaya per jam yang ditambahkan ke biaya lain dalam model jika peristiwa terjadi setelah soft_end_time, dihitung sebagai:

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

Biaya ini harus positif, dan kolom hanya dapat ditetapkan jika soft_end_time telah ditetapkan.

TransitionAttributes

Menentukan atribut transisi antara dua kunjungan berturut-turut pada rute. Beberapa TransitionAttributes dapat berlaku untuk transisi yang sama: dalam hal ini, semua biaya tambahan akan dijumlahkan dan batasan atau batas yang paling ketat akan berlaku (mengikuti semantik "AND" alami).

Kolom
src_tag

string

Tag yang menentukan kumpulan transisi (src->dst) yang menerapkan atribut ini.

Kunjungan sumber atau awal kendaraan cocok jika dan hanya jika VisitRequest.tags atau Vehicle.start_tags-nya berisi src_tag atau tidak berisi excluded_src_tag (bergantung pada kolom mana dari kedua kolom ini yang tidak kosong).

excluded_src_tag

string

Lihat src_tag. Salah satu dari src_tag dan excluded_src_tag tidak boleh kosong.

dst_tag

string

Kunjungan tujuan atau akhir kendaraan cocok jika dan hanya jika VisitRequest.tags atau Vehicle.end_tags-nya berisi dst_tag atau tidak berisi excluded_dst_tag (bergantung pada kolom mana dari kedua kolom ini yang tidak kosong).

excluded_dst_tag

string

Lihat dst_tag. Salah satu dari dst_tag dan excluded_dst_tag tidak boleh kosong.

cost

double

Menentukan biaya untuk melakukan transisi ini. Biaya ini menggunakan unit yang sama dengan semua biaya lain dalam model dan tidak boleh negatif. Biaya ini diterapkan di atas semua biaya lain yang ada.

cost_per_kilometer

double

Menentukan biaya per kilometer yang diterapkan ke jarak yang ditempuh saat melakukan transisi ini. Nilai ini ditambahkan ke Vehicle.cost_per_kilometer yang ditentukan pada kendaraan.

distance_limit

DistanceLimit

Menentukan batas jarak yang ditempuh saat melakukan transisi ini.

Mulai Juni 2021, hanya batas sementara yang didukung.

delay

Duration

Menentukan penundaan yang terjadi saat melakukan transisi ini.

Penundaan ini selalu terjadi setelah menyelesaikan kunjungan sumber dan sebelum memulai kunjungan tujuan.

URI

Universal Resource Identifier yang mengarah ke resource yang dapat dibaca dan ditulis oleh Route Optimization API.

Kolom
uri

string

URI resource. Resource mungkin belum ada.

Konten resource dienkode sebagai JSON atau textproto. Hanya resource Google Cloud Storage yang didukung. Jika resource dienkode sebagai JSON, nama resource harus diakhiri dengan .json. Jika resource dienkode sebagai textproto, nama resource harus diakhiri dengan .txtpb. Misalnya, URI Google Cloud Storage ke file berenkode JSON mungkin terlihat seperti: gs://bucket/path/input/object.json.

Kendaraan

Memodelkan kendaraan dalam masalah pengiriman. Menyelesaikan masalah pengiriman akan membuat rute yang dimulai dari start_location dan berakhir di end_location untuk kendaraan ini. Rute adalah urutan kunjungan (lihat ShipmentRoute).

Kolom
display_name

string

Nama tampilan kendaraan yang ditentukan pengguna. Panjangnya dapat mencapai 63 karakter dan dapat menggunakan karakter UTF-8.

travel_mode

TravelMode

Mode perjalanan yang memengaruhi jalan yang dapat digunakan oleh kendaraan dan kecepatannya. Lihat juga travel_duration_multiple.

route_modifiers

RouteModifiers

Serangkaian kondisi yang harus dipenuhi yang memengaruhi cara rute dihitung untuk kendaraan tertentu.

start_location

LatLng

Lokasi geografis tempat kendaraan memulai sebelum mengambil pengiriman. Jika tidak ditentukan, kendaraan akan memulai rute dari lokasi penjemputan pertamanya. Jika model pengiriman memiliki matriks durasi dan jarak, start_location tidak boleh ditentukan.

start_waypoint

Waypoint

Titik jalan yang mewakili lokasi geografis tempat kendaraan memulai sebelum mengambil pengiriman. Jika start_waypoint maupun start_location tidak ditentukan, kendaraan akan memulai perjalanan dari penjemputan pertamanya. Jika model pengiriman memiliki matriks durasi dan jarak, start_waypoint tidak boleh ditentukan.

end_location

LatLng

Lokasi geografis tempat kendaraan berhenti setelah menyelesaikan VisitRequest terakhirnya. Jika tidak ditentukan, ShipmentRoute kendaraan akan segera berakhir setelah menyelesaikan VisitRequest terakhirnya. Jika model pengiriman memiliki matriks durasi dan jarak, end_location tidak boleh ditentukan.

end_waypoint

Waypoint

Titik jalan yang mewakili lokasi geografis tempat kendaraan berhenti setelah menyelesaikan VisitRequest terakhirnya. Jika end_waypoint dan end_location tidak ditentukan, ShipmentRoute kendaraan akan segera berakhir setelah menyelesaikan VisitRequest terakhirnya. Jika model pengiriman memiliki matriks durasi dan jarak, end_waypoint tidak boleh ditentukan.

start_tags[]

string

Menentukan tag yang dilampirkan ke awal rute kendaraan.

String kosong atau duplikat tidak diizinkan.

end_tags[]

string

Menentukan tag yang dilampirkan ke akhir rute kendaraan.

String kosong atau duplikat tidak diizinkan.

start_time_windows[]

TimeWindow

Periode waktu saat kendaraan dapat berangkat dari lokasi awalnya. Kendaraan harus berada dalam batas waktu global (lihat kolom ShipmentModel.global_*). Jika tidak ditentukan, tidak ada batasan selain batas waktu global tersebut.

Periode waktu yang termasuk dalam kolom berulang yang sama harus terpisah, yaitu tidak boleh ada periode waktu yang tumpang-tindih atau berdekatan dengan periode waktu lain, dan harus dalam urutan kronologis.

cost_per_hour_after_soft_end_time dan soft_end_time hanya dapat ditetapkan jika ada satu periode waktu.

end_time_windows[]

TimeWindow

Periode waktu saat kendaraan dapat tiba di lokasi akhirnya. Kendaraan harus berada dalam batas waktu global (lihat kolom ShipmentModel.global_*). Jika tidak ditentukan, tidak ada batasan selain batas waktu global tersebut.

Periode waktu yang termasuk dalam kolom berulang yang sama harus terpisah, yaitu tidak boleh ada periode waktu yang tumpang-tindih atau berdekatan dengan periode waktu lain, dan harus dalam urutan kronologis.

cost_per_hour_after_soft_end_time dan soft_end_time hanya dapat ditetapkan jika ada satu periode waktu.

unloading_policy

UnloadingPolicy

Kebijakan pembongkaran yang diterapkan pada kendaraan.

load_limits

map<string, LoadLimit>

Kapasitas kendaraan (misalnya, berat, volume, jumlah palet). Kunci dalam peta adalah ID jenis muatan, yang konsisten dengan kunci kolom Shipment.load_demands. Jika kunci tertentu tidak ada dalam peta ini, kapasitas yang sesuai dianggap tidak terbatas.

cost_per_hour

double

Biaya kendaraan: semua biaya dijumlahkan dan harus dalam satuan yang sama dengan Shipment.penalty_cost.

Biaya per jam rute kendaraan. Biaya ini diterapkan ke total waktu yang dibutuhkan oleh rute, dan mencakup waktu perjalanan, waktu tunggu, dan waktu kunjungan. Menggunakan cost_per_hour, bukan hanya cost_per_traveled_hour, dapat menyebabkan latensi tambahan.

cost_per_traveled_hour

double

Biaya per jam perjalanan rute kendaraan. Biaya ini hanya diterapkan pada waktu perjalanan yang ditempuh oleh rute (yaitu, yang dilaporkan dalam ShipmentRoute.transitions), dan tidak termasuk waktu tunggu dan waktu kunjungan.

cost_per_kilometer

double

Biaya per kilometer rute kendaraan. Biaya ini diterapkan ke jarak yang dilaporkan dalam ShipmentRoute.transitions dan tidak berlaku untuk jarak yang ditempuh secara implisit dari arrival_location ke departure_location dari satu VisitRequest.

fixed_cost

double

Biaya tetap yang diterapkan jika kendaraan ini digunakan untuk menangani pengiriman.

used_if_route_is_empty

bool

Kolom ini hanya berlaku untuk kendaraan jika rutenya tidak melayani pengiriman apa pun. Menunjukkan apakah kendaraan harus dianggap sebagai kendaraan bekas atau tidak dalam kasus ini.

Jika benar, kendaraan akan berpindah dari lokasi awal ke lokasi akhir meskipun tidak melayani pengiriman apa pun, dan biaya waktu serta jarak yang dihasilkan dari perjalanan awal --> akhir akan diperhitungkan.

Jika tidak, kendaraan tidak akan melakukan perjalanan dari lokasi awal ke lokasi akhir, dan tidak ada break_rule atau penundaan (dari TransitionAttributes) yang dijadwalkan untuk kendaraan ini. Dalam hal ini, ShipmentRoute kendaraan tidak berisi informasi apa pun kecuali indeks dan label kendaraan.

route_duration_limit

DurationLimit

Batas yang diterapkan pada total durasi rute kendaraan. Dalam OptimizeToursResponse tertentu, durasi rute kendaraan adalah perbedaan antara vehicle_end_time dan vehicle_start_time.

travel_duration_limit

DurationLimit

Batas yang diterapkan pada durasi perjalanan rute kendaraan. Dalam OptimizeToursResponse tertentu, durasi perjalanan rute adalah jumlah dari semua transitions.travel_duration-nya.

route_distance_limit

DistanceLimit

Batas yang diterapkan pada total jarak rute kendaraan. Dalam OptimizeToursResponse tertentu, jarak rute adalah jumlah semua transitions.travel_distance_meters-nya.

extra_visit_duration_for_visit_type

map<string, Duration>

Menentukan peta dari string visit_types ke durasi. Durasi adalah waktu selain VisitRequest.duration yang akan diambil pada kunjungan dengan visit_types yang ditentukan. Durasi kunjungan tambahan ini menambah biaya jika cost_per_hour ditentukan. Kunci (yaitu visit_types) tidak boleh berupa string kosong.

Jika permintaan kunjungan memiliki beberapa jenis, durasi akan ditambahkan untuk setiap jenis di peta.

break_rule

BreakRule

Menjelaskan jadwal istirahat yang akan diterapkan pada kendaraan ini. Jika kosong, tidak ada istirahat yang akan dijadwalkan untuk kendaraan ini.

label

string

Menentukan label untuk kendaraan ini. Label ini dilaporkan dalam respons sebagai vehicle_label dari ShipmentRoute yang sesuai.

ignore

bool

Jika benar, used_if_route_is_empty harus salah, dan kendaraan ini tidak akan digunakan.

Jika pengiriman dilakukan oleh kendaraan yang diabaikan di injected_first_solution_routes, pengiriman tersebut akan dilewati di solusi pertama, tetapi bebas dilakukan dalam respons.

Jika pengiriman dilakukan oleh kendaraan yang diabaikan di injected_solution_constraint dan pengambilan/pengiriman terkait dibatasi untuk tetap berada di kendaraan (yaitu, tidak dilonggarkan ke tingkat RELAX_ALL_AFTER_THRESHOLD), pengiriman tersebut akan dilewati dalam respons. Jika pengiriman memiliki kolom allowed_vehicle_indices yang tidak kosong dan semua kendaraan yang diizinkan diabaikan, pengiriman tersebut akan dilewati dalam respons.

travel_duration_multiple

double

Menentukan faktor perkalian yang dapat digunakan untuk menambah atau mengurangi waktu perjalanan kendaraan ini. Misalnya, menetapkan nilai ini ke 2,0 berarti kendaraan ini lebih lambat dan memiliki waktu perjalanan dua kali lipat dari kendaraan standar. Kelipatan ini tidak memengaruhi durasi kunjungan. Hal ini akan memengaruhi biaya jika cost_per_hour atau cost_per_traveled_hour ditentukan. Nilai ini harus berada dalam rentang [0,001, 1000,0]. Jika tidak ditetapkan, kendaraan akan dianggap standar, dan kelipatan ini dianggap 1,0.

PERINGATAN: Waktu perjalanan akan dibulatkan ke detik terdekat setelah kelipatan ini diterapkan, tetapi sebelum melakukan operasi numerik apa pun. Oleh karena itu, kelipatan kecil dapat mengakibatkan hilangnya presisi.

Lihat juga extra_visit_duration_for_visit_type di bawah.

DurationLimit

Batas yang menentukan durasi maksimum rute kendaraan. Batas ini dapat berupa batas ketat atau longgar.

Jika kolom batas fleksibel ditentukan, nilai minimum maksimum fleksibel dan biaya terkaitnya harus ditentukan bersama.

Kolom
max_duration

Duration

Batas ketat yang membatasi durasi hingga maksimal max_duration.

soft_max_duration

Duration

Batas fleksibel tidak menerapkan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya. Biaya ini ditambahkan ke biaya lain yang ditentukan dalam model, dengan unit yang sama.

Jika ditentukan, soft_max_duration tidak boleh negatif. Jika max_duration juga ditentukan, soft_max_duration harus lebih kecil dari max_duration.

quadratic_soft_max_duration

Duration

Batas yang dapat dilewati tidak menerapkan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya, kuadrat dalam durasi. Biaya ini ditambahkan ke biaya lain yang ditentukan dalam model, dengan unit yang sama.

Jika quadratic_soft_max_duration ditetapkan, kondisi berikut harus dipenuhi:

  • Nilai ini tidak boleh negatif.
  • max_duration harus ditentukan.
  • quadratic_soft_max_duration harus lebih kecil dari max_duration.
  • Perbedaannya tidak boleh lebih dari satu hari: max_duration - quadratic_soft_max_duration <= 86400 seconds
cost_per_hour_after_soft_max

double

Biaya per jam yang dikenakan jika nilai minimum soft_max_duration dilanggar. Biaya tambahan adalah 0 jika durasi berada di bawah nilai minimum, jika tidak, biaya bergantung pada durasi sebagai berikut:

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

Biaya tidak boleh negatif.

cost_per_square_hour_after_quadratic_soft_max

double

Biaya per jam kuadrat yang dikenakan jika batas quadratic_soft_max_duration dilanggar.

Biaya tambahan adalah 0 jika durasi berada di bawah nilai minimum, jika tidak, biaya bergantung pada durasi sebagai berikut:

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

Biaya tidak boleh negatif.

LoadLimit

Menentukan batas muatan yang berlaku untuk kendaraan, misalnya, "truk ini hanya boleh mengangkut hingga 3.500 kg". Lihat load_limits.

Kolom
soft_max_load

int64

Batas lunak beban. Lihat cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Jika muatan melebihi soft_max_load di sepanjang rute kendaraan ini, penalti biaya berikut akan berlaku (hanya sekali per kendaraan): (muatan - soft_max_load) * cost_per_unit_above_soft_max. Semua biaya dijumlahkan dan harus dalam unit yang sama dengan Shipment.penalty_cost. Batas fleksibel hanya dapat ditentukan pada jenis yang berlaku untuk pengambilan saja atau pengiriman saja di seluruh model.

start_load_interval

Interval

Interval muatan kendaraan yang dapat diterima di awal rute.

end_load_interval

Interval

Interval muatan kendaraan yang dapat diterima di akhir rute.

max_load

int64

Jumlah beban maksimum yang dapat diterima.

cost_per_kilometer

LoadCost

Biaya pemindahan satu unit muatan sejauh satu kilometer untuk kendaraan ini. Hal ini dapat digunakan sebagai proxy untuk konsumsi bahan bakar: jika muatan adalah berat (dalam Newton), maka muatan*kilometer memiliki dimensi energi.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request untuk mengetahui detail selengkapnya.

cost_per_traveled_hour

LoadCost

Biaya perjalanan dengan satu unit muatan selama satu jam untuk kendaraan ini.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request untuk mengetahui detail selengkapnya.

Interval

Interval jumlah beban yang dapat diterima.

Kolom
min

int64

Beban minimum yang dapat diterima. Harus ≥ 0. Jika keduanya ditentukan, min harus ≤ max.

max

int64

Beban maksimum yang dapat diterima. Harus ≥ 0. Jika tidak ditentukan, beban maksimum tidak dibatasi oleh pesan ini. Jika keduanya ditentukan, min harus ≤ max.

LoadCost

Biaya pemindahan satu unit muatan selama Transition. Untuk beban tertentu, biaya adalah jumlah dari dua bagian:

  • min(load, load_threshold) * cost_per_unit_below_threshold
  • max(0, load - load_threshold) * cost_per_unit_above_threshold

Dengan biaya ini, solusi lebih memilih untuk mengirimkan permintaan tinggi terlebih dahulu, atau mengambil permintaan tinggi terakhir. Misalnya, jika kendaraan memiliki

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
    }
  }
}

dan rutenya adalah start,pickup,pickup,delivery,delivery,end dengan transisi:

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 }

maka biaya yang dikeluarkan oleh LoadCost ini adalah (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • transisi 0: 0,0
  • transisi 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • transisi 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
  • transisi 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • transisi 4: 0,0

Jadi, LoadCost di sepanjang rute adalah 120,0.

Namun, jika rutenya adalah mulai,pengambilan,pengiriman,pengambilan,pengiriman,selesai dengan transisi:

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 }

maka biaya yang dikeluarkan oleh LoadCost ini adalah

  • transisi 0: 0,0
  • transisi 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • transisi 2: 0,0
  • transisi 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • transisi 4: 0,0

Di sini, LoadCost di sepanjang rute adalah 40,0.

LoadCost membuat solusi dengan transisi yang berat menjadi lebih mahal.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request untuk mengetahui detail selengkapnya.

Kolom
load_threshold

int64

Jumlah muatan yang melebihi biaya pemindahan unit muatan berubah dari cost_per_unit_below_threshold menjadi cost_per_unit_above_threshold. Harus >= 0.

cost_per_unit_below_threshold

double

Biaya pemindahan unit muatan, untuk setiap unit antara 0 dan nilai minimum. Harus berupa nilai terbatas, dan >= 0.

cost_per_unit_above_threshold

double

Biaya pemindahan unit muatan, untuk setiap unit di atas batas. Dalam kasus khusus nilai minimum = 0, ini adalah biaya tetap per unit. Harus berupa nilai terbatas, dan >= 0.

TravelMode

Mode perjalanan yang dapat digunakan oleh kendaraan.

Mode ini harus merupakan subset dari mode perjalanan Routes API Google Maps Platform, lihat: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

Catatan: Rute WALKING masih dalam versi beta dan terkadang mungkin tidak memiliki trotoar atau jalur pejalan kaki yang jelas. Anda harus menampilkan peringatan ini kepada pengguna untuk semua rute jalan kaki yang Anda tampilkan di aplikasi.

Enum
TRAVEL_MODE_UNSPECIFIED Mode perjalanan yang tidak ditentukan, setara dengan DRIVING.
DRIVING Mode perjalanan yang sesuai dengan rute mobil (mobil, ...).
WALKING Moda transportasi yang sesuai dengan rute jalan kaki.

UnloadingPolicy

Kebijakan tentang cara kendaraan dapat dibongkar. Hanya berlaku untuk pengiriman yang memiliki pengambilan dan pengantaran.

Pengiriman lain dapat dilakukan di mana saja di rute tersebut, terlepas dari unloading_policy.

Enum
UNLOADING_POLICY_UNSPECIFIED Kebijakan pembongkaran yang tidak ditentukan; pengiriman hanya boleh dilakukan setelah pengambilan yang sesuai.
LAST_IN_FIRST_OUT Pengiriman harus dilakukan dalam urutan terbalik dari pengambilan
FIRST_IN_FIRST_OUT Pengiriman harus dilakukan dalam urutan yang sama dengan pengambilan

VehicleFullness

VehicleFullness adalah metrik yang menghitung seberapa penuh kendaraan. Setiap kolom VehicleFullness bernilai antara 0 dan 1, yang dihitung sebagai rasio antara kolom metrik yang dibatasi (misalnya, AggregatedMetrics.travel_distance_meters) dan batas kendaraan terkait (misalnya, Vehicle.route_distance_limit), jika ada. Jika tidak, rasio kepenuhan tidak akan ditetapkan. Jika batasnya adalah 0, kolom akan ditetapkan ke 1. Catatan: jika rute mengalami ketidakmungkinan traffic, beberapa rasio kepenuhan mentah mungkin melebihi 1,0, misalnya kendaraan mungkin melebihi batas jaraknya. Dalam kasus ini, kami membatasi nilai kepenuhan pada 1,0.

Kolom
max_fullness

double

Maksimum semua kolom lainnya dalam pesan ini.

distance

double

Rasio antara AggregatedMetrics.travel_distance_meters dan Vehicle.route_distance_limit. Jika Vehicle.route_distance_limit tidak ditetapkan, kolom ini tidak akan ditetapkan.

travel_duration

double

Rasio antara [AggregatedMetrics.travel_duration_seconds][] dan Vehicle.travel_duration_limit. Jika Vehicle.travel_duration_limit tidak ditetapkan, kolom ini tidak akan ditetapkan.

active_duration

double

Rasio antara [AggregatedMetrics.total_duration_seconds][] dan Vehicle.route_duration_limit. Jika Vehicle.route_duration_limit tidak ditetapkan, kolom ini tidak akan ditetapkan.

max_load

double

Rasio maksimum di antara semua jenis [AggregatedMetrics.max_load][] dan Vehicle.load_limits masing-masing. Jika semua kolom Vehicle.load_limits tidak ditetapkan, kolom ini tidak akan ditetapkan.

active_span

double

Rasio (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time) untuk kendaraan tertentu. Jika penyebut tidak ada, (ShipmentModel.global_end_time - ShipmentModel.global_start_time) akan digunakan.

Waypoint

Mengenkapsulasi titik jalan. Titik jalan menandai lokasi kedatangan dan keberangkatan VisitRequest, serta lokasi awal dan akhir Kendaraan.

Kolom
side_of_road

bool

Opsional. Menunjukkan bahwa lokasi titik jalan ini dimaksudkan untuk memiliki preferensi agar kendaraan berhenti di sisi jalan tertentu. Saat Anda menetapkan nilai ini, rute akan melewati lokasi tersebut sehingga kendaraan dapat berhenti di sisi jalan yang menjadi bias lokasi dari tengah jalan. Opsi ini tidak berfungsi untuk mode perjalanan 'WALKING'.

vehicle_stopover

bool

Menunjukkan bahwa titik jalan dimaksudkan sebagai tempat kendaraan berhenti, dengan tujuan untuk menjemput atau menurunkan penumpang. Opsi ini hanya berfungsi untuk mode perjalanan 'DRIVING', dan jika 'location_type' adalah 'location'.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah pada masa mendatang.

Kolom union location_type. Berbagai cara untuk merepresentasikan lokasi. location_type hanya dapat berupa salah satu dari berikut:
location

Location

Titik yang ditentukan menggunakan koordinat geografis, termasuk judul opsional.

place_id

string

ID tempat POI yang terkait dengan titik jalan.

Saat menggunakan ID tempat untuk menentukan lokasi kedatangan atau keberangkatan VisitRequest, gunakan ID tempat yang cukup spesifik untuk menentukan lokasi LatLng untuk navigasi ke tempat tersebut. Misalnya, ID tempat yang mewakili bangunan cocok, tetapi ID tempat yang mewakili jalan tidak direkomendasikan.