Indeks
RouteOptimization
(antar muka)AggregatedMetrics
(pesan)BatchOptimizeToursMetadata
(pesan)BatchOptimizeToursRequest
(pesan)BatchOptimizeToursRequest.AsyncModelConfig
(pesan)BatchOptimizeToursResponse
(pesan)BreakRule
(pesan)BreakRule.BreakRequest
(pesan)BreakRule.FrequencyConstraint
(pesan)DataFormat
(enum)DistanceLimit
(pesan)GcsDestination
(pesan)GcsSource
(pesan)InjectedSolutionConstraint
(pesan)InjectedSolutionConstraint.ConstraintRelaxation
(pesan)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation
(pesan)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level
(enum)InputConfig
(pesan)Location
(pesan)OptimizeToursRequest
(pesan)OptimizeToursRequest.SearchMode
(enum)OptimizeToursRequest.SolvingMode
(enum)OptimizeToursResponse
(pesan)OptimizeToursResponse.Metrics
(pesan)OptimizeToursValidationError
(pesan)OptimizeToursValidationError.FieldReference
(pesan)OutputConfig
(pesan)Shipment
(pesan)Shipment.Load
(pesan)Shipment.VisitRequest
(pesan)ShipmentModel
(pesan)ShipmentModel.DurationDistanceMatrix
(pesan)ShipmentModel.DurationDistanceMatrix.Row
(pesan)ShipmentModel.PrecedenceRule
(pesan)ShipmentRoute
(pesan)ShipmentRoute.Break
(pesan)ShipmentRoute.EncodedPolyline
(pesan)ShipmentRoute.Transition
(pesan)ShipmentRoute.VehicleLoad
(pesan)ShipmentRoute.Visit
(pesan)ShipmentTypeIncompatibility
(pesan)ShipmentTypeIncompatibility.IncompatibilityMode
(enum)ShipmentTypeRequirement
(pesan)ShipmentTypeRequirement.RequirementMode
(enum)SkippedShipment
(pesan)SkippedShipment.Reason
(pesan)SkippedShipment.Reason.Code
(enum)TimeWindow
(pesan)TransitionAttributes
(pesan)Vehicle
(pesan)Vehicle.DurationLimit
(pesan)Vehicle.LoadLimit
(pesan)Vehicle.LoadLimit.Interval
(pesan)Vehicle.TravelMode
(enum)Vehicle.UnloadingPolicy
(enum)Waypoint
(pesan)
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].
- nano harus dibatalkan penetapannya atau disetel 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].
- nano harus dibatalkan penetapannya atau disetel ke 0.
google.type.LatLng
- lintang harus dalam [-90.0, 90.0].
- bujur harus dalam [-180,0, 180,0].
- setidaknya salah satu lintang dan bujur tidak boleh nol.
BatchOptimizeTours |
---|
Mengoptimalkan tur kendaraan untuk satu atau beberapa pesan Metode ini adalah Long Running Operation (LRO). Input untuk pengoptimalan (pesan
|
OptimizeTours |
---|
Mengirim Model Tujuannya adalah untuk memberikan penetapan
|
AggregatedMetrics
Metrik gabungan untuk ShipmentRoute
(respons untuk OptimizeToursResponse
atas semua elemen Transition
dan/atau Visit
(respons atas semua ShipmentRoute
).
Kolom | |
---|---|
performed_shipment_count |
Jumlah pengiriman yang dilakukan. Perhatikan bahwa pasangan pengambilan dan pengantaran hanya dihitung satu kali. |
travel_duration |
Total durasi perjalanan untuk rute atau solusi. |
wait_duration |
Total durasi tunggu untuk rute atau solusi. |
delay_duration |
Total durasi keterlambatan untuk rute atau solusi. |
break_duration |
Total durasi jeda untuk rute atau solusi. |
visit_duration |
Total durasi kunjungan untuk rute atau solusi. |
total_duration |
Total durasi harus sama dengan jumlah dari semua durasi di atas. Untuk rute, parameter ini juga sesuai dengan:
|
travel_distance_meters |
Total jarak perjalanan untuk rute atau solusi. |
max_loads |
Beban maksimum yang dicapai pada seluruh rute (solusi responsif), untuk setiap kuantitas pada rute ini (solusi reservasi), dihitung sebagai beban maksimum untuk seluruh |
BatchOptimizeToursMetadata
Jenis ini tidak memiliki kolom.
Metadata operasi untuk panggilan BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
Permintaan untuk mengoptimalkan tur dalam batch sebagai operasi asinkron. Setiap file input harus berisi satu OptimizeToursRequest
, dan setiap file output akan berisi satu OptimizeToursResponse
. Permintaan berisi informasi untuk membaca/menulis dan mengurai file. Semua file input dan output harus berada di project yang sama.
Kolom | |
---|---|
parent |
Wajib. Project target dan lokasi untuk melakukan panggilan. Format: * Jika tidak ada lokasi yang ditentukan, wilayah akan dipilih secara otomatis. |
model_configs[] |
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 |
Opsional. Nama model yang ditetapkan pengguna, dapat digunakan sebagai alias oleh pengguna untuk melacak model. |
input_config |
Wajib. Informasi tentang model input. |
output_config |
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 memberikan waktu istirahat bagi kendaraan (misalnya istirahat makan siang). Istirahat adalah periode waktu yang berdampingan saat kendaraan tetap tidak ada aktivitas pada posisinya saat ini dan tidak dapat melakukan kunjungan apa pun. Jeda data dapat terjadi:
- selama perjalanan di antara dua kunjungan (yang mencakup waktu sebelum atau tepat setelah kunjungan, tetapi tidak di tengah kunjungan), yang akan memperpanjang waktu transit di antara kunjungan tersebut,
- atau sebelum kendaraan dimulai (kendaraan tidak boleh menyala di tengah istirahat), dalam hal ini tidak memengaruhi waktu mulai kendaraan.
- atau setelah kendaraan berakhir (ditto, dengan waktu berakhir kendaraan).
Kolom | |
---|---|
break_requests[] |
Urutan jeda. Lihat pesan |
frequency_constraints[] |
Beberapa |
BreakRequest
Urutan jeda (yaitu jumlah dan urutannya) yang berlaku untuk setiap kendaraan harus diketahui sebelumnya. BreakRequest
berulang menentukan urutan tersebut, sesuai dengan urutan kemunculannya. Rentang waktu (earliest_start_time
/ latest_start_time
) mungkin tumpang tindih, tetapi harus kompatibel dengan urutan (ini dicentang).
Kolom | |
---|---|
earliest_start_time |
Wajib. Batas bawah (inklusif) pada awal jeda. |
latest_start_time |
Wajib. Batas atas (inklusif) pada awal batas. |
min_duration |
Wajib. Durasi jeda minimum. Harus positif. |
FrequencyConstraint
Salah satunya dapat lebih membatasi frekuensi dan durasi jeda yang ditentukan di atas, dengan menerapkan frekuensi jeda minimum, seperti "Harus ada jeda minimal 1 jam setiap 12 jam". Dengan asumsi bahwa hal ini dapat ditafsirkan sebagai "Dalam rentang waktu geser ke 12 jam, harus ada setidaknya satu jeda setidaknya 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 jeda dalam solusi akan mengikuti semua batasan tersebut, selain jangka waktu dan durasi minimum yang telah ditentukan dalam BreakRequest
.
Dalam praktiknya, FrequencyConstraint
dapat berlaku untuk jeda yang tidak berturut-turut. Misalnya, jadwal berikut mengikuti contoh "1j setiap 12j":
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 |
Wajib. Durasi jeda minimum untuk batasan ini. Tidak negatif. Lihat deskripsi |
max_inter_break_duration |
Wajib. Rentang maksimum yang diizinkan pada interval waktu apa pun dalam rute yang tidak menyertakan setidaknya sebagian jeda |
DataFormat
Format data untuk file input dan output.
Enum | |
---|---|
DATA_FORMAT_UNSPECIFIED |
Nilai tidak valid, format tidak boleh UNSPECIFIED. |
JSON |
Notasi Objek JavaScript. |
PROTO_TEXT |
Format teks Protocol Buffers. Lihat https://protobuf.dev/reference/protobuf/textformat-spec/ |
DistanceLimit
Batas yang menentukan jarak maksimum yang dapat ditempuh. Sinyalnya bisa keras atau lunak.
Jika batas yang dapat dilewati ditentukan, soft_max_meters
dan cost_per_kilometer_above_soft_max
harus ditentukan dan tidak negatif.
Kolom | |
---|---|
max_meters |
Batas keras yang membatasi jarak maksimal_max_meters. Batasnya tidak boleh negatif. |
soft_max_meters |
Batas lunak tidak menerapkan batas jarak maksimum, tetapi jika dilanggar, Anda akan dikenai biaya yang berjumlah total biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika soft_max_meters yang ditentukan harus kurang dari max_meters dan tidak boleh negatif. |
cost_per_kilometer_above_soft_max |
Biaya per kilometer yang dikenakan jika jarak melebihi batas
Biayanya tidak boleh negatif. |
GcsDestination
Lokasi Google Cloud Storage tempat file output akan ditulis.
Kolom | |
---|---|
uri |
Wajib. URI Google Cloud Storage. |
GcsSource
Lokasi Google Cloud Storage tempat file input akan dibaca.
Kolom | |
---|---|
uri |
Wajib. URI objek Google Cloud Storage dengan format |
InjectedSolutionConstraint
Solusi yang dimasukkan dalam permintaan termasuk informasi tentang kunjungan mana yang harus dibatasi dan bagaimana kunjungan tersebut harus dibatasi.
Kolom | |
---|---|
routes[] |
Rute solusi yang akan diinjeksi. Beberapa rute mungkin dihilangkan dari solusi asli. Rute dan pengiriman yang dilewati harus memenuhi asumsi validitas dasar yang tercantum untuk |
skipped_shipments[] |
Melewati pengiriman solusi yang akan dimasukkan. Beberapa solusi mungkin dihilangkan dari solusi asli. Lihat kolom |
constraint_relaxations[] |
Untuk nol kelompok kendaraan atau lebih, tentukan waktu dan frekuensi untuk melonggarkan batasan. Jika kolom ini kosong, semua rute kendaraan yang tidak kosong akan sepenuhnya dibatasi. |
ConstraintRelaxation
Untuk grup kendaraan, tentukan pada batas minimum berapakah batasan kunjungan akan dilonggarkan dan pada tingkat mana. Pengiriman yang tercantum dalam kolom skipped_shipment
dibatasi untuk dilewati; artinya, pengiriman tersebut tidak dapat dilakukan.
Kolom | |
---|---|
relaxations[] |
Semua relaksasi membatasi kunjungan yang akan berlaku untuk kunjungan pada rute dengan kendaraan di |
vehicle_indices[] |
Menentukan indeks kendaraan yang menerapkan batasan kunjungan Indeks kendaraan dipetakan sama seperti |
Relaksasi
Jika relaxations
kosong, waktu mulai dan urutan semua kunjungan di routes
akan 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 memiliki used_if_route_is_empty
yang ditetapkan ke salah pada model).
relaxations(i).level
menentukan tingkat relaksasi batasan yang diterapkan pada kunjungan #j yang memenuhi:
route.visits(j).start_time >= relaxations(i).threshold_time
DANj + 1 >= relaxations(i).threshold_visit_count
Demikian pula, start kendaraan akan dilonggarkan ke relaxations(i).level
jika memenuhi:
vehicle_start_time >= relaxations(i).threshold_time
DANrelaxations(i).threshold_visit_count == 0
dan ujung kendaraan dilonggarkan menjadirelaxations(i).level
jika memenuhi:vehicle_end_time >= relaxations(i).threshold_time
DANroute.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 threshold_time
yang ditetapkan. Jika kunjungan memenuhi kondisi beberapa relaxations
, tingkat yang paling longgar akan berlaku. Akibatnya, dari awal kendaraan hingga kunjungan rute hingga ke akhir kendaraan, tingkat relaksasi menjadi lebih santai: yaitu, tingkat relaksasi tidak menurun saat rute berlangsung.
Waktu dan urutan kunjungan rute yang tidak memenuhi ketentuan ambang batas relaxations
sepenuhnya dibatasi dan tidak ada kunjungan yang dapat disisipkan ke dalam urutan ini. Selain itu, jika titik awal atau akhir kendaraan tidak memenuhi kondisi relaksasi apa pun, waktu akan tetap, kecuali jika kendaraan kosong.
Kolom | |
---|---|
level |
Tingkat relaksasi batasan yang berlaku saat kondisi pada atau setelah |
threshold_time |
Waktu saat atau setelah relaksasi |
threshold_visit_count |
Jumlah kunjungan saat atau setelah relaksasi Jika yang ditetapkan adalah |
Tingkat
Menunjukkan berbagai tingkat relaksasi batasan, yang diterapkan untuk kunjungan dan yang mengikuti saat memenuhi kondisi batas.
Enumerasi di bawah ini bertujuan untuk meningkatkan relaksasi.
Enum | |
---|---|
LEVEL_UNSPECIFIED |
Tingkat relaksasi default implisit: tidak ada batasan yang dilonggarkan, artinya, semua kunjungan sepenuhnya dibatasi. Nilai ini tidak boleh digunakan secara eksplisit di |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Waktu mulai kunjungan dan waktu mulai/berakhir kendaraan akan santai, tetapi setiap kunjungan tetap terikat pada kendaraan yang sama dan urutan kunjungan harus diperhatikan: tidak ada kunjungan yang dapat disisipkan di antara keduanya atau sebelumnya. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Sama seperti RELAX_VISIT_TIMES_AFTER_THRESHOLD , tetapi urutan kunjungan juga longgar: kunjungan tetap terikat dengan kendaraan mereka. |
RELAX_ALL_AFTER_THRESHOLD |
Sama seperti RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , tetapi kendaraan juga santai: kunjungan sepenuhnya gratis pada atau setelah waktu ambang batas dan berpotensi tidak dapat dilakukan. |
InputConfig
Tentukan input untuk [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Kolom | |
---|---|
data_format |
Wajib. Format data input. |
Kolom union source . Wajib. source hanya ada berupa salah satu diantara berikut: |
|
gcs_source |
Lokasi Google Cloud Storage. Objek ini harus berupa objek tunggal (file). |
Lokasi
Mengenkapsulasi lokasi (titik geografis, dan judul opsional).
Kolom | |
---|---|
lat_lng |
Koordinat geografis titik jalan. |
heading |
Judul kompas yang terkait dengan arah arus lalu lintas. Nilai ini digunakan untuk menentukan sisi jalan yang akan digunakan untuk pengambilan dan penurunan. Nilai arah dapat berkisar dari 0 hingga 360, di mana 0 menunjukkan arah tujuan Utara, 90 menunjukkan arah Timur, dll. |
OptimizeToursRequest
Permintaan untuk diberikan kepada pemecah pengoptimalan tur yang menentukan model pengiriman yang akan dipecahkan, serta parameter pengoptimalannya.
Kolom | |
---|---|
parent |
Wajib. Targetkan project atau lokasi untuk melakukan panggilan. Format: * Jika tidak ada lokasi yang ditentukan, wilayah akan dipilih secara otomatis. |
timeout |
Jika waktu tunggu ini disetel, 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 membuat solusi (jika memungkinkan) sebelum waktu tunggu berlalu. |
model |
Model pengiriman yang harus diselesaikan. |
solving_mode |
Secara default, mode penyelesaiannya adalah |
search_mode |
Mode penelusuran yang digunakan untuk menyelesaikan permintaan. |
injected_first_solution_routes[] |
Memandu algoritma pengoptimalan dalam menemukan solusi pertama yang mirip dengan solusi sebelumnya. Model dibatasi saat solusi pertama dibuat. Setiap pengiriman yang tidak dilakukan di suatu rute secara implisit dilewati pada solusi pertama, tetapi pengiriman tersebut dapat dilakukan secara berturut-turut. Solusi ini harus memenuhi beberapa asumsi validitas dasar:
Jika solusi yang dimasukkan tidak memungkinkan, error validasi belum tentu ditampilkan dan error yang menunjukkan ketidaklayakan dapat ditampilkan. |
injected_solution_constraint |
Membatasi algoritma pengoptimalan untuk menemukan solusi akhir yang mirip dengan solusi sebelumnya. Misalnya, perintah ini dapat digunakan untuk membekukan bagian rute yang telah selesai atau yang harus diselesaikan tetapi tidak boleh diubah. Jika solusi yang dimasukkan tidak memungkinkan, error validasi belum tentu ditampilkan dan error yang menunjukkan ketidaklayakan dapat ditampilkan. |
refresh_details_routes[] |
Jika tidak kosong, rute yang ditentukan akan diperbarui, tanpa mengubah urutan kunjungan atau waktu perjalanan yang mendasarinya: hanya detail lain yang akan diperbarui. Ini tidak menyelesaikan model. Mulai 2020/11, kode ini hanya mengisi polyline rute yang tidak kosong dan mengharuskan Kolom Kolom ini tidak boleh digunakan bersama dengan
|
interpret_injected_solutions_using_labels |
Jika true (benar):
Penafsiran ini berlaku untuk kolom Jika benar, label dalam kategori berikut harus muncul paling banyak sekali dalam kategorinya:
Jika Menghapus kunjungan rute atau seluruh rute dari solusi yang dimasukkan dapat berpengaruh pada batasan tersirat, yang dapat menyebabkan perubahan pada solusi, error validasi, atau ketidaklayakan. CATATAN: Pemanggil harus memastikan bahwa setiap |
consider_road_traffic |
Pertimbangkan estimasi lalu lintas saat menghitung kolom |
populate_polylines |
Jika true (benar), polyline akan diisi dalam |
populate_transition_polylines |
Jika true (benar), polyline akan diisi dalam |
allow_large_deadline_despite_interruption_risk |
Jika kebijakan ini disetel, permintaan dapat memiliki batas waktu (lihat https://grpc.io/blog/deadlines) hingga 60 menit. Jika tidak, batas waktu maksimum hanya 30 menit. Perlu diketahui bahwa permintaan yang telah berlangsung lama memiliki risiko gangguan yang lebih besar (tetapi masih kecil) secara signifikan. |
use_geodesic_distances |
Jika benar, jarak perjalanan akan dihitung menggunakan jarak geodesi, bukan jarak Google Maps, dan waktu perjalanan akan dihitung menggunakan jarak geodesi dengan kecepatan yang ditentukan oleh |
label |
Label yang dapat digunakan untuk mengidentifikasi permintaan ini, dilaporkan kembali di |
geodesic_meters_per_second |
Jika |
max_validation_errors |
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 |
SearchMode
Mode yang menentukan perilaku penelusuran, yang mengorbankan latensi versus kualitas solusi. Di semua mode, batas waktu permintaan global diterapkan.
Enum | |
---|---|
SEARCH_MODE_UNSPECIFIED |
Mode penelusuran tidak ditentukan, setara dengan RETURN_FAST . |
RETURN_FAST |
Hentikan penelusuran setelah menemukan solusi pertama yang tepat. |
CONSUME_ALL_AVAILABLE_TIME |
Luangkan semua waktu yang tersedia untuk menelusuri solusi yang lebih baik. |
SolvingMode
Menentukan cara pemecah masalah akan menangani permintaan. Di 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 modelnya. |
VALIDATE_ONLY |
Hanya memvalidasi model tanpa menyelesaikannya: mengisi OptimizeToursResponse.validation_errors sebanyak mungkin. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Hanya mengisi PENTING: tidak semua pengiriman yang tidak memungkinkan akan dikembalikan di sini, namun hanya pengiriman yang terdeteksi tidak memungkinkan selama pra-pemrosesan. |
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[] |
Rute dihitung untuk setiap kendaraan; rute ke-i sesuai dengan kendaraan ke-i pada model. |
request_label |
Salinan |
skipped_shipments[] |
Daftar semua pengiriman dilewati. |
validation_errors[] |
Daftar semua error validasi yang dapat kami deteksi secara independen. Lihat penjelasan "MULTIPLE ERRORS" untuk pesan |
metrics |
Metrik durasi, jarak, dan penggunaan untuk solusi ini. |
Metrik
Metrik keseluruhan, yang digabungkan dari semua rute.
Kolom | |
---|---|
aggregated_route_metrics |
Digabungkan berdasarkan rute. Setiap metrik adalah jumlah (atau jumlah maksimum, untuk pemuatan) di seluruh kolom |
skipped_mandatory_shipment_count |
Jumlah pengiriman wajib dilewati. |
used_vehicle_count |
Jumlah kendaraan yang digunakan. Catatan: jika rute kendaraan kosong dan |
earliest_vehicle_start_time |
Waktu mulai paling awal untuk kendaraan bekas, dihitung sebagai waktu minimum untuk semua kendaraan bekas |
latest_vehicle_end_time |
Waktu berakhir terbaru untuk kendaraan bekas, dihitung sebagai waktu berakhir maksimum untuk semua kendaraan bekas sebesar |
costs |
Biaya solusi, dikelompokkan berdasarkan kolom permintaan terkait biaya. Kuncinya adalah jalur proto, relatif terhadap input OptimizeToursRequest, misalnya "model.shipments.pickups.cost", dan nilainya adalah total biaya yang dihasilkan oleh kolom biaya yang sesuai, yang digabungkan dari keseluruhan solusi. Dengan kata lain, biaya["model.shipments.pickups.cost"] adalah jumlah semua biaya pengambilan atas solusi tersebut. Semua biaya yang ditentukan dalam model dilaporkan secara mendetail di sini, kecuali biaya yang terkait dengan TransitionAttributes yang hanya dilaporkan secara agregat mulai 2022/01. |
total_cost |
Total biaya solusi. Jumlah semua nilai di peta biaya. |
OptimizeToursValidationError
Menjelaskan error yang terjadi saat memvalidasi OptimizeToursRequest
.
Kolom | |
---|---|
code |
Error validasi ditentukan oleh pasangan ( Kolom lain (di bawah) memberikan konteks selengkapnya tentang error. BEBERAPA KESALAHAN: Jika ada beberapa error, proses validasi akan mencoba menghasilkan beberapa error. Mirip seperti compiler, ini adalah proses yang tidak sempurna. Beberapa error validasi akan bersifat "fatal", yang berarti error tersebut menghentikan seluruh proses validasi. Hal ini antara lain berlaku untuk error Stabilitas: REFERENSI: Daftar semua pasangan (kode, nama):
|
display_name |
Nama tampilan error. |
fields[] |
Konteks error dapat melibatkan 0, 1 (sering kali) atau beberapa kolom. Misalnya, mengacu pada kendaraan #4 dan pengambilan pertama pengiriman #2 dapat dilakukan sebagai berikut:
Namun, perlu diperhatikan bahwa kardinalitas |
error_message |
String yang menjelaskan error dan dapat dibaca manusia. Ada pemetaan 1:1 antara Stabilitas: Tidak stabil: pesan error yang terkait dengan |
offending_values |
Dapat berisi nilai kolom. Fitur ini tidak selalu tersedia. Anda tidak boleh mengandalkannya dan hanya menggunakannya untuk proses debug model manual. |
FieldReference
Menentukan konteks untuk error validasi. FieldReference
selalu merujuk pada kolom tertentu dalam file ini dan mengikuti struktur hierarki yang sama. Misalnya, kami 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 entity level teratas seperti OptimizeToursRequest
atau ShipmentModel
untuk menghindari pesan berdesakan.
Kolom | |
---|---|
name |
Nama kolom, misalnya, "kendaraan". |
sub_field |
Sub-kolom bertingkat secara rekursif, jika diperlukan. |
Kolom union
|
|
index |
Indeks kolom jika diulang. |
key |
Kunci jika kolom adalah peta. |
OutputConfig
Tentukan tujuan untuk hasil [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Kolom | |
---|---|
data_format |
Wajib. Format data output. |
Kolom union destination . Wajib. destination hanya ada berupa salah satu diantara berikut: |
|
gcs_destination |
Lokasi Google Cloud Storage yang akan menjadi tujuan penulisan output. |
Pengiriman
Pengiriman satu item, dari salah satu pengambilannya hingga salah satu pengirimannya. Agar pengiriman dianggap dilakukan, kendaraan unik harus mengunjungi salah satu lokasi pengambilannya (dan mengurangi kapasitas cadangannya), lalu mengunjungi salah satu lokasi pengirimannya di kemudian hari (dan oleh karena itu meningkatkan kembali kapasitas cadangannya sesuai).
Kolom | |
---|---|
display_name |
Nama tampilan pengiriman yang ditentukan pengguna. Panjang teks dapat mencapai 63 karakter dan dapat menggunakan karakter UTF-8. |
pickups[] |
Kumpulan alternatif pengambilan yang terkait dengan pengiriman. Jika tidak ditentukan, kendaraan hanya perlu mengunjungi lokasi yang sesuai dengan pengiriman. |
deliveries[] |
Kumpulan alternatif pengiriman yang terkait dengan pengiriman. Jika tidak ditentukan, kendaraan hanya perlu mengunjungi lokasi yang sesuai dengan pengambilan. |
load_demands |
Memuat permintaan 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 yang diberikan tidak muncul di peta, beban yang sesuai dianggap sebagai null. |
allowed_vehicle_indices[] |
Kumpulan kendaraan yang dapat melakukan pengiriman ini. Jika kosong, semua kendaraan dapat melakukannya. Kendaraan diberikan berdasarkan indeksnya dalam daftar |
costs_per_vehicle[] |
Menentukan biaya yang timbul saat pengiriman ini dikirimkan oleh setiap kendaraan. Jika ditentukan, ID harus memiliki SALAH SATU:
Biaya ini harus berada dalam unit yang sama dengan |
costs_per_vehicle_indices[] |
Indeks kendaraan tempat |
pickup_to_delivery_absolute_detour_limit |
Menentukan waktu putar balik absolut maksimum dibandingkan dengan jalur terpendek dari pengambilan hingga pengantaran. Jika ditentukan, ID ini harus positif, dan pengiriman harus berisi setidaknya layanan pengambilan dan pengantaran. Misalnya, t menjadi waktu tersingkat yang dibutuhkan untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, menyetel
Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih ketat akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai tahun 2017/10, putar balik hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan. |
pickup_to_delivery_time_limit |
Menentukan durasi maksimum dari awal pengambilan hingga awal pengiriman pengiriman. Jika ditentukan, ID ini harus positif, dan pengiriman harus berisi setidaknya layanan pengambilan dan pengantaran. Hal ini tidak bergantung pada alternatif yang dipilih untuk pengambilan dan pengiriman, atau kecepatan kendaraan. Nilai ini dapat ditentukan di samping batasan putar balik maksimum: solusi akan mengikuti kedua spesifikasi tersebut. |
shipment_type |
String tidak kosong yang menentukan "jenis" untuk pengiriman ini. Fitur ini dapat digunakan untuk menentukan inkompatibilitas atau persyaratan antara Berbeda dari |
label |
Menentukan label untuk pengiriman ini. Label ini dilaporkan dalam respons dalam |
ignore |
Jika benar, lewati pengiriman ini, tetapi jangan terapkan Mengabaikan pengiriman akan menghasilkan error validasi jika ada Mengabaikan pengiriman yang dilakukan di |
penalty_cost |
Jika pengiriman tidak selesai, penalti ini akan ditambahkan ke biaya keseluruhan rute. Pengiriman dianggap selesai jika salah satu alternatif pengambilan dan pengantaran dikunjungi. Biaya dapat dinyatakan dalam unit yang sama yang digunakan untuk semua kolom terkait biaya lainnya dalam model dan harus positif. PENTING: Jika penalti ini tidak ditentukan, maka dianggap tidak terbatas, yaitu pengiriman harus diselesaikan. |
pickup_to_delivery_relative_detour_limit |
Menentukan waktu putar balik relatif maksimum dibandingkan dengan jalur terpendek dari pengambilan hingga pengantaran. Jika ditentukan, ID ini harus positif, dan pengiriman harus berisi setidaknya layanan pengambilan dan pengantaran. Misalnya, t menjadi waktu tersingkat yang dibutuhkan untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, menyetel
Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih ketat akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai tahun 2017/10, putar balik hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan. |
Muat
Saat melakukan kunjungan, jumlah yang telah ditentukan mungkin ditambahkan ke beban kendaraan jika berupa pengambilan, atau dikurangi jika layanan tersebut merupakan pengiriman. Pesan ini menjelaskan jumlah tersebut. Lihat load_demands
.
Kolom | |
---|---|
amount |
Jumlah beban kendaraan yang melakukan kunjungan yang sesuai akan bervariasi. Karena berupa bilangan bulat, pengguna disarankan untuk memilih unit yang sesuai untuk menghindari hilangnya presisi. Harus ≥ 0. |
VisitRequest
Permintaan kunjungan yang dapat dilakukan dengan kendaraan: memiliki geolokasi (atau dua, lihat di bawah), waktu buka dan tutup yang diwakili oleh jangka waktu, dan waktu durasi layanan (waktu yang dihabiskan oleh kendaraan saat tiba untuk mengambil atau menurunkan barang).
Kolom | |
---|---|
arrival_location |
Lokasi geografis tempat kendaraan tiba saat melakukan |
arrival_waypoint |
Titik jalan tempat kendaraan tiba saat melakukan |
departure_location |
Lokasi geografis tempat kendaraan berangkat setelah menyelesaikan |
departure_waypoint |
Titik jalan kendaraan berangkat setelah menyelesaikan |
tags[] |
Menentukan tag yang disertakan pada permintaan kunjungan. String kosong atau duplikat tidak diizinkan. |
time_windows[] |
Jendela waktu yang membatasi waktu kedatangan pada suatu kunjungan. Perhatikan bahwa kendaraan dapat berangkat di luar jangka waktu kedatangan. Dengan kata lain, waktu kedatangan + durasi tidak harus berada dalam jangka waktu kedatangan. Hal ini dapat menyebabkan waktu tunggu jika kendaraan tiba sebelum Tidak adanya Jendela waktu harus terpisah, artinya tidak ada jangka waktu yang harus tumpang tindih atau berdekatan dengan yang lain, dan harus dalam urutan yang meningkat.
|
duration |
Durasi kunjungan, yaitu waktu yang dihabiskan oleh kendaraan antara kedatangan dan keberangkatan (ditambahkan ke kemungkinan waktu tunggu; lihat |
cost |
Biaya untuk melayani permintaan kunjungan ini di rute kendaraan. Paket ini dapat digunakan untuk membayar biaya yang berbeda untuk setiap pengambilan atau pengiriman alternatif dari suatu pengiriman. Biaya ini harus berada dalam unit yang sama dengan |
load_demands |
Memuat permintaan dari permintaan kunjungan ini. Kolom ini sama seperti kolom |
visit_types[] |
Menentukan jenis kunjungan. Informasi ini dapat digunakan untuk mengalokasikan waktu tambahan yang diperlukan oleh kendaraan untuk menyelesaikan kunjungan ini (lihat Jenis hanya dapat muncul sekali. |
label |
Menentukan label untuk |
ShipmentModel
Model pengiriman berisi satu set pengiriman yang harus dilakukan oleh satu set kendaraan, sekaligus meminimalkan biaya keseluruhan, yaitu jumlah dari:
- biaya pemilihan rute kendaraan (jumlah biaya per total waktu, biaya per waktu perjalanan, dan biaya tetap untuk semua kendaraan).
- penalti pengiriman yang tidak dilakukan.
- biaya durasi global pengiriman
Kolom | |
---|---|
shipments[] |
Kumpulan pengiriman yang harus dilakukan dalam model. |
vehicles[] |
Kumpulan kendaraan yang dapat digunakan untuk melakukan kunjungan. |
global_start_time |
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 Saat menggunakan kolom |
global_end_time |
Jika tidak disetel, 00:00:00 UTC, 1 Januari 1971 (yaitu detik: 31536000, nanos: 0) akan digunakan sebagai default. |
global_duration_cost_per_hour |
"Durasi global" dari keseluruhan rencana adalah perbedaan antara waktu mulai efektif paling awal dan waktu berakhir efektif terbaru dari semua kendaraan. Pengguna dapat menetapkan biaya per jam untuk kuantitas tersebut, misalnya, untuk mencoba dan mengoptimalkan penyelesaian tugas paling awal. Biaya ini harus berada dalam unit yang sama dengan |
duration_distance_matrices[] |
Menentukan matriks durasi dan jarak yang digunakan dalam model. Jika kolom ini kosong, Google Maps atau jarak geodesi akan digunakan, bergantung pada nilai kolom Contoh penggunaan:
|
duration_distance_matrix_src_tags[] |
Tag yang menentukan sumber matriks durasi dan jarak; Tag sesuai dengan |
duration_distance_matrix_dst_tags[] |
Tag yang menentukan tujuan matriks durasi dan jarak; Tag sesuai dengan |
transition_attributes[] |
Atribut transisi ditambahkan ke model. |
shipment_type_incompatibilities[] |
Kumpulan pengiriman_types yang tidak kompatibel (lihat |
shipment_type_requirements[] |
Kumpulan persyaratan |
precedence_rules[] |
Kumpulan aturan prioritas yang harus diterapkan dalam model. |
max_active_vehicles |
Membatasi jumlah maksimum kendaraan aktif. Kendaraan tetap aktif jika rutenya melakukan setidaknya satu pengiriman. Solusi ini dapat digunakan untuk membatasi jumlah rute jika jumlah pengemudi lebih sedikit daripada kendaraan dan armada kendaraannya heterogen. Pengoptimalan tersebut kemudian akan memilih subset kendaraan terbaik untuk digunakan. Harus benar-benar positif. |
DurationDistanceMatrix
Menentukan matriks durasi dan jarak dari lokasi kunjungan dan awal kendaraan yang akan dikunjungi dan lokasi akhir kendaraan.
Kolom | |
---|---|
rows[] |
Menentukan baris matriks durasi dan jarak. Elemen ini harus memiliki sebanyak |
vehicle_start_tag |
Tag yang menentukan kendaraan mana yang menggunakan matriks jarak dan durasi ini. Jika kosong, ini berlaku untuk semua kendaraan, dan hanya boleh ada satu matriks. Setiap start kendaraan harus sama persis dengan satu matriks, yaitu tepat satu dari kolom Semua matriks harus memiliki |
Baris
Menentukan baris matriks durasi dan jarak.
Kolom | |
---|---|
durations[] |
Nilai durasi untuk baris tertentu. Elemen ini harus memiliki sebanyak |
meters[] |
Nilai jarak untuk baris tertentu. Jika tidak ada biaya atau batasan yang merujuk pada jarak dalam model, nilai ini dapat dibiarkan kosong; jika tidak, model harus memiliki sebanyak |
PrecedenceRule
Aturan prioritas antara dua peristiwa (setiap peristiwa adalah pengambilan atau pengiriman pengiriman): peristiwa "kedua" harus dimulai setidaknya offset_duration
setelah "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 jika tidak, diabaikan.
Kolom | |
---|---|
first_is_delivery |
Menunjukkan apakah peristiwa "pertama" adalah pengiriman. |
second_is_delivery |
Menunjukkan apakah peristiwa "kedua" adalah pengiriman. |
offset_duration |
Offset antara peristiwa "pertama" dan "kedua". Bisa negatif. |
first_index |
Indeks pengiriman peristiwa "pertama". Kolom ini harus ditentukan. |
second_index |
Indeks pengiriman peristiwa "kedua". Kolom ini harus ditentukan. |
ShipmentRoute
Rute kendaraan dapat diuraikan, di sepanjang sumbu waktu, seperti ini (kami berasumsi 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 membuat perbedaan antara:
- "peristiwa tepat waktu", seperti awal dan akhir kendaraan serta awal dan akhir setiap kunjungan (alias kedatangan dan keberangkatan). 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 berakhir pada detik yang sama, interval waktu sering kali memiliki durasi positif.
Invarian:
- Jika ada n kunjungan, berarti terdapat transisi n+1.
- Kunjungan selalu dikelilingi oleh transisi sebelum (indeks yang sama) dan transisi setelahnya (indeks + 1).
- Awal kendaraan selalu diikuti dengan transisi #0.
- Bagian akhir kendaraan selalu didahului oleh transisi #n.
Memperbesar, berikut adalah hal 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 ini cara PERJALANAN, JEDA, TUNDA, dan WAIT dapat diatur selama transisi.
- Mereka tidak tumpang tindih.
- Currents bersifat unik dan harus berupa jangka waktu yang berurutan tepat sebelum kunjungan berikutnya (atau waktu berakhir kendaraan). Dengan demikian, Anda cukup mengetahui durasi keterlambatan untuk mengetahui waktu mulai dan waktu berakhirnya.
- BREAKS adalah periode waktu yang berurutan dan tidak tumpang-tindih. Respons menentukan waktu mulai dan durasi setiap jeda.
- PERJALANAN dan WAIT "dapat di-preempt": keduanya dapat terganggu beberapa kali selama transisi ini. Klien dapat berasumsi bahwa perjalanan terjadi "sesegera mungkin" dan "menunggu" mengisi sisa waktu.
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 |
Kendaraan yang melakukan rute, yang diidentifikasi dengan indeksnya di sumber |
vehicle_label |
Label kendaraan yang melakukan rute ini, sama dengan |
vehicle_start_time |
Waktu saat kendaraan memulai rutenya. |
vehicle_end_time |
Waktu saat kendaraan menyelesaikan rutenya. |
visits[] |
Urutan kunjungan yang diurutkan mewakili rute. kunjungan[i] adalah kunjungan ke-i dalam rute. Jika kolom ini kosong, kendaraan dianggap tidak digunakan. |
transitions[] |
Daftar transisi yang diurutkan untuk rute. |
has_traffic_infeasibilities |
Jika
Kedatangan pada next_visit kemungkinan akan terjadi lebih lambat dari periode waktu saat ini karena estimasi waktu perjalanan |
route_polyline |
Representasi polyline rute yang dienkode. Kolom ini hanya diisi jika |
breaks[] |
Jeda kendaraan dijadwalkan untuk kendaraan yang melakukan rute ini. Urutan |
metrics |
Metrik durasi, jarak, dan beban untuk rute ini. Kolom |
route_costs |
Biaya rute, dikelompokkan berdasarkan kolom permintaan terkait biaya. Kuncinya adalah jalur proto, relatif terhadap input OptimizeToursRequest, 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, biaya["model.shipments.pickups.cost"] adalah jumlah semua biaya pengambilan selama perjalanan tersebut. Semua biaya yang ditentukan dalam model dilaporkan secara mendetail di sini, kecuali biaya yang terkait dengan TransitionAttributes yang hanya dilaporkan secara agregat mulai 2022/01. |
route_total_cost |
Total biaya rute. Jumlah semua biaya di peta biaya. |
Istirahat
Data yang mewakili eksekusi jeda.
Kolom | |
---|---|
start_time |
Waktu mulai istirahat. |
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 yang mewakili titik yang dienkode dari polyline. |
Transisi
Transisi antara dua peristiwa pada rute. Lihat deskripsi ShipmentRoute
.
Jika kendaraan tidak memiliki start_location
dan/atau end_location
, metrik perjalanan yang sesuai adalah 0.
Kolom | |
---|---|
travel_duration |
Durasi perjalanan selama transisi ini. |
travel_distance_meters |
Jarak yang ditempuh selama transisi. |
traffic_info_unavailable |
Jika traffic diminta melalui |
delay_duration |
Jumlah durasi penundaan yang diterapkan untuk transisi ini. Jika ada, keterlambatan akan dimulai tepat |
break_duration |
Jumlah durasi jeda yang terjadi selama transisi ini, jika ada. Detail tentang waktu mulai dan durasi setiap jeda disimpan di |
wait_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 berdekatan. |
total_duration |
Total durasi transisi, disediakan untuk memudahkan Anda. Sama dengan:
|
start_time |
Waktu mulai transisi ini. |
route_polyline |
Representasi polyline yang dienkode dari rute yang diikuti selama transisi. Kolom ini hanya diisi jika |
vehicle_loads |
Muatan kendaraan selama transisi ini, untuk setiap jenis yang muncul di Beban selama transisi pertama adalah beban awal rute kendaraan. Kemudian, setelah setiap kunjungan, |
VehicleLoad
Melaporkan beban kendaraan yang sebenarnya pada beberapa titik di sepanjang rute, untuk jenis tertentu (lihat Transition.vehicle_loads
).
Kolom | |
---|---|
amount |
Jumlah beban pada kendaraan, untuk jenis tertentu. Satuan beban biasanya ditunjukkan oleh jenisnya. Lihat |
Kunjungi
Kunjungan yang dilakukan selama rute. Kunjungan ini berkaitan dengan pengambilan atau pengiriman Shipment
.
Kolom | |
---|---|
shipment_index |
Indeks kolom |
is_pickup |
Jika benar, kunjungan tersebut sesuai dengan pengambilan |
visit_request_index |
Indeks |
start_time |
Waktu saat kunjungan dimulai. Perhatikan bahwa kendaraan mungkin tiba lebih awal dari waktu ini di lokasi kunjungan. Waktu konsisten dengan |
load_demands |
Total permintaan pemuatan kunjungan sebagai jumlah pengiriman dan permintaan kunjungan |
detour |
Waktu putar balik tambahan karena pengiriman yang dikunjungi di rute sebelum kunjungan dan potensi waktu tunggu yang disebabkan oleh rentang waktu. Jika kunjungan adalah pengiriman, putar balik dihitung dari kunjungan pengambilan yang sesuai dan sama dengan:
Jika tidak, data ini akan dihitung dari
|
shipment_label |
Salinan |
visit_label |
Salinan |
ShipmentTypeIncompatibility
Menentukan ketidaksesuaian antar-pengiriman bergantung pada delivery_type-nya. Pengiriman yang tidak kompatibel di rute yang sama dibatasi berdasarkan mode inkompatibilitas.
Kolom | |
---|---|
types[] |
Daftar jenis yang tidak kompatibel. Dua pengiriman yang memiliki |
incompatibility_mode |
Mode diterapkan ke inkompatibilitas. |
IncompatibilityMode
Mode yang menentukan bagaimana tampilan pengiriman yang tidak kompatibel dibatasi di rute yang sama.
Enum | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Mode inkompatibilitas tidak ditentukan. Nilai ini tidak boleh digunakan. |
NOT_PERFORMED_BY_SAME_VEHICLE |
Dalam mode ini, dua pengiriman dengan jenis yang tidak kompatibel tidak akan dapat menggunakan kendaraan yang sama. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
Untuk dua pengiriman dengan jenis yang tidak kompatibel serta mode inkompatibilitas
|
ShipmentTypeRequirement
Menentukan persyaratan antarpengiriman berdasarkan pengiriman_type-nya. Detail persyaratan ditentukan oleh mode persyaratan.
Kolom | |
---|---|
required_shipment_type_alternatives[] |
Daftar jenis pengiriman alternatif yang diwajibkan oleh |
dependent_shipment_types[] |
Semua pengiriman dengan jenis di kolom CATATAN: Rantai persyaratan yang sedemikian rupa sehingga |
requirement_mode |
Mode diterapkan sesuai persyaratan. |
RequirementMode
Mode yang menentukan tampilan pengiriman dependen di suatu rute.
Enum | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Mode persyaratan tidak ditentukan. Nilai ini tidak boleh digunakan. |
PERFORMED_BY_SAME_VEHICLE |
Dalam mode ini, semua pengiriman "dependen" harus berbagi kendaraan yang sama dengan setidaknya satu pengiriman "wajib". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Dengan mode Oleh karena itu, pengambilan dengan pengiriman "dependen" harus memiliki:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Sama seperti sebelumnya, kecuali pengiriman yang "dependen" harus memiliki pengiriman "wajib" di kendaraan mereka pada saat pengiriman. |
SkippedShipment
Menentukan detail pengiriman yang belum dilakukan dalam solusi. Untuk kasus kecil dan/atau jika kami dapat mengidentifikasi penyebab lewati, kami akan melaporkan alasannya di sini.
Kolom | |
---|---|
index |
Indeks sesuai dengan indeks pengiriman di sumber |
label |
Salinan |
reasons[] |
Daftar alasan yang menjelaskan mengapa pengiriman dilewati. Lihat komentar di atas |
Alasan
Jika kami dapat menjelaskan alasan pengiriman dilewati, alasannya akan dicantumkan di sini. Jika alasannya tidak sama 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 terlampaui (termasuk kendaraan 1), setidaknya satu kapasitas "Pears" kendaraan akan terlampaui (termasuk kendaraan 3), dan batas jarak minimal satu kendaraan akan terlampaui (termasuk kendaraan 1).
Kolom | |
---|---|
code |
Lihat komentar Kode. |
example_exceeded_capacity_type |
Jika kode alasannya adalah |
example_vehicle_index |
Jika alasannya terkait dengan inkompatibilitas kendaraan pengiriman, kolom ini memberikan indeks satu kendaraan yang relevan. |
Code
Kode yang mengidentifikasi jenis alasan. Urutan di sini tidak bermakna. Secara khusus, hasil 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. Jika kami tidak dapat memahami alasan pengiriman dilewati, kami hanya akan menampilkan kumpulan alasan kosong. |
NO_VEHICLE |
Tidak ada kendaraan dalam model tersebut yang membuat semua pengiriman menjadi tidak mungkin. |
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 Perhatikan bahwa untuk komputasi ini, kita 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 servis melebihi Catatan: waktu tempuh dihitung dalam skenario kasus terbaik, yaitu sebagai jarak geodesi x 36 m/s (sekitar 130 km/jam). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Sama seperti di atas, tetapi kita 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 kasus terbaik (lihat CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT untuk komputasi waktu) jika dimulai pada waktu mulai paling awal: waktu total akan membuat kendaraan berakhir setelah waktu berakhir yang terakhir. |
VEHICLE_NOT_ALLOWED |
Kolom allowed_vehicle_indices pengiriman tidak kosong dan kendaraan ini bukan bagian darinya. |
TimeWindow
Jendela waktu membatasi waktu peristiwa, seperti waktu kedatangan saat kunjungan, atau waktu mulai dan berakhir kendaraan.
Batas periode waktu sulit, start_time
dan end_time
, menerapkan waktu paling awal dan paling akhir untuk peristiwa, sehingga start_time <= event_time <=
end_time
. Batas bawah periode waktu lunak, soft_start_time
, menyatakan preferensi agar peristiwa terjadi pada atau setelah soft_start_time
dengan menimbulkan biaya yang sebanding dengan waktu sebelum soft_start_time peristiwa tersebut terjadi. Batas atas periode waktu lunak, soft_end_time
, menyatakan preferensi agar peristiwa terjadi pada atau sebelum soft_end_time
dengan menimbulkan biaya yang proporsional dengan durasi waktu setelah soft_end_time
peristiwa tersebut 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` <= `soft_start_time` <= `end_time` and
0 <= `start_time` <= `soft_end_time` <= `end_time`.
Kolom | |
---|---|
start_time |
Waktu mulai periode waktu yang sulit. Jika tidak ditentukan, atribut akan disetel ke |
end_time |
Waktu berakhir periode waktu yang sulit. Jika tidak ditentukan, atribut akan disetel ke |
soft_start_time |
Waktu mulai soft selama jangka waktu. |
soft_end_time |
Waktu soft end periode waktu. |
cost_per_hour_before_soft_start_time |
Biaya per jam yang ditambahkan ke biaya lain dalam model jika peristiwa terjadi sebelum soft_start_time, dihitung sebagai:
Biaya ini harus positif, dan kolom hanya dapat ditetapkan jika soft_start_time telah ditetapkan. |
cost_per_hour_after_soft_end_time |
Biaya per jam yang ditambahkan ke biaya lain dalam model jika peristiwa terjadi setelah
Biaya ini harus positif, dan kolom hanya dapat ditetapkan jika |
TransitionAttributes
Menentukan atribut transisi antara dua kunjungan berturut-turut di suatu rute. Beberapa TransitionAttributes
mungkin berlaku untuk transisi yang sama: dalam hal ini, semua biaya tambahan akan bertambah dan batasan atau batas paling ketat akan berlaku (mengikuti semantik "AND" alami).
Kolom | |
---|---|
src_tag |
Tag yang menentukan kumpulan transisi (src->dst) transisi yang menerapkan atribut ini. Kunjungan sumber atau awal kendaraan cocok jika |
excluded_src_tag |
Lihat |
dst_tag |
Kunjungan tujuan atau akhir kendaraan cocok jika |
excluded_dst_tag |
Lihat |
cost |
Menentukan biaya untuk melakukan transisi ini. Biaya ini berada di unit yang sama dengan semua biaya lain dalam model dan tidak boleh bernilai negatif. Biaya ini diterapkan di atas semua biaya lain yang sudah ada. |
cost_per_kilometer |
Menentukan biaya per kilometer yang diterapkan ke jarak yang ditempuh saat melakukan transisi ini. Ini menambahkan hingga |
distance_limit |
Menentukan batas jarak yang ditempuh saat melakukan transisi ini. Mulai 6/2021, hanya batas yang dapat dilewati yang didukung. |
delay |
Menentukan penundaan yang terjadi saat melakukan transisi ini. Penundaan ini selalu terjadi setelah menyelesaikan kunjungan sumber dan sebelum memulai kunjungan tujuan. |
Kendaraan
Membuat model kendaraan dalam masalah pengiriman. Menyelesaikan masalah pengiriman akan membuat rute mulai dari start_location
dan berakhir pukul end_location
untuk kendaraan ini. Rute adalah urutan kunjungan (lihat ShipmentRoute
).
Kolom | |
---|---|
display_name |
Nama tampilan kendaraan yang ditentukan pengguna. Panjang teks dapat mencapai 63 karakter dan dapat menggunakan karakter UTF-8. |
travel_mode |
Mode perjalanan yang memengaruhi jalan yang dapat digunakan oleh kendaraan dan kecepatannya. Lihat juga |
start_location |
Lokasi geografis tempat kendaraan dimulai sebelum mengambil pengiriman. Jika tidak ditentukan, kendaraan akan dimulai saat pengambilan pertamanya. Jika model pengiriman memiliki matriks durasi dan jarak, |
start_waypoint |
Titik jalan yang mewakili lokasi geografis tempat kendaraan dimulai sebelum mengambil pengiriman. Jika |
end_location |
Lokasi geografis tempat kendaraan berakhir setelah menyelesaikan |
end_waypoint |
Titik jalan yang mewakili lokasi geografis tempat kendaraan berakhir setelah menyelesaikan |
start_tags[] |
Menentukan tag yang dilampirkan ke awal rute kendaraan. String kosong atau duplikat tidak diizinkan. |
end_tags[] |
Menentukan tag yang dilampirkan ke akhir rute kendaraan. String kosong atau duplikat tidak diizinkan. |
start_time_windows[] |
Rentang waktu saat kendaraan dapat meninggalkan lokasi awal. Kolom tersebut harus berada dalam batas waktu global (lihat kolom Jendela waktu milik kolom berulang yang sama harus terpisah, yaitu tidak ada periode waktu yang dapat tumpang-tindih atau berdekatan dengan yang lain, dan harus dalam urutan kronologis.
|
end_time_windows[] |
Periode waktu saat kendaraan tiba di lokasi akhir. Kolom tersebut harus berada dalam batas waktu global (lihat kolom Jendela waktu milik kolom berulang yang sama harus terpisah, yaitu tidak ada periode waktu yang dapat tumpang-tindih atau berdekatan dengan yang lain, dan harus dalam urutan kronologis.
|
unloading_policy |
Kebijakan membongkar muatan diterapkan pada kendaraan. |
load_limits |
Kapasitas kendaraan (misalnya berat, volume, # palet). Kunci dalam peta adalah ID jenis beban, yang konsisten dengan kunci kolom |
cost_per_hour |
Biaya kendaraan: semua biaya akan ditambahkan dan harus berada dalam unit yang sama dengan Biaya per jam untuk rute kendaraan. Biaya ini diterapkan ke total waktu yang dibutuhkan oleh rute, dan mencakup waktu perjalanan, waktu tunggu, dan waktu kunjungan. Menggunakan |
cost_per_traveled_hour |
Biaya per jam perjalanan untuk rute kendaraan. Biaya ini hanya berlaku untuk waktu perjalanan yang diambil oleh rute (yaitu, yang dilaporkan dalam |
cost_per_kilometer |
Biaya per kilometer rute kendaraan. Biaya ini diterapkan untuk jarak yang dilaporkan di |
fixed_cost |
Biaya tetap diterapkan jika kendaraan ini digunakan untuk menangani pengiriman. |
used_if_route_is_empty |
Kolom ini hanya berlaku untuk kendaraan jika rutenya tidak melayani pengiriman apa pun. Kode ini menunjukkan apakah kendaraan harus dianggap digunakan atau tidak dalam kasus ini. Jika benar, kendaraan berangkat dari awal ke lokasi akhir meskipun tidak melayani pengiriman apa pun, dan biaya waktu dan jarak yang dihasilkan dari awal --> perjalanan akhir akan diperhitungkan. Jika tidak, kendaraan tidak akan melakukan perjalanan dari awal hingga lokasi akhirnya, dan tidak ada |
route_duration_limit |
Batas diterapkan pada total durasi rute kendaraan. Dalam |
travel_duration_limit |
Batas diterapkan pada durasi perjalanan rute kendaraan. Dalam |
route_distance_limit |
Batas diterapkan ke total jarak rute kendaraan. Dalam |
extra_visit_duration_for_visit_type |
Menentukan peta dari string visit_types hingga durasi. Durasi adalah waktu selain Jika permintaan kunjungan memiliki beberapa jenis, durasi akan ditambahkan untuk setiap jenis di peta. |
break_rule |
Menjelaskan jadwal istirahat yang akan ditegakkan pada kendaraan ini. Jika kosong, tidak ada jeda yang akan dijadwalkan untuk kendaraan ini. |
label |
Menentukan label untuk kendaraan ini. Label ini dilaporkan dalam respons sebagai |
ignore |
Jika benar, Jika pengiriman dilakukan oleh kendaraan yang diabaikan di Jika pengiriman dilakukan oleh kendaraan yang diabaikan di |
travel_duration_multiple |
Menentukan faktor multiplikatif yang dapat digunakan untuk menambah atau mengurangi waktu tempuh kendaraan ini. Misalnya, menyetel setelan ini ke 2,0 berarti kendaraan ini lebih lambat dan memiliki waktu tempuh yang dua kali lebih besar dari kendaraan standar. Jumlah tersebut tidak memengaruhi durasi kunjungan. Hal ini memengaruhi biaya jika PERINGATAN: Waktu perjalanan akan dibulatkan ke detik terdekat setelah kelipatan ini diterapkan, tetapi sebelum menjalankan operasi numerik apa pun, karena itu, kelipatan kecil dapat menyebabkan hilangnya presisi. Lihat juga |
DurationLimit
Batas yang menentukan durasi maksimum rute kendaraan. Sinyalnya bisa keras atau lunak.
Jika kolom soft limit ditentukan, nilai minimum soft max dan biaya yang terkait harus ditentukan bersama.
Kolom | |
---|---|
max_duration |
Batas pasti yang membatasi durasi agar maksimal max_duration. |
soft_max_duration |
Batas yang bisa dilewati tidak menerapkan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya. Biaya ini bertambah dengan biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika ditentukan, |
quadratic_soft_max_duration |
Batas yang bisa dilewati tidak menerapkan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya, berupa kuadrat dari durasi. Biaya ini bertambah dengan biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika ditentukan,
|
cost_per_hour_after_soft_max |
Biaya per jam yang timbul jika nilai minimum
Biayanya tidak boleh negatif. |
cost_per_square_hour_after_quadratic_soft_max |
Biaya per jam persegi yang timbul jika nilai minimum Biaya tambahan adalah 0 jika durasi berada di bawah nilai minimum, jika tidak, biaya akan bergantung pada durasi sebagai berikut:
Biayanya tidak boleh negatif. |
LoadLimit
Menentukan batas beban yang diterapkan pada kendaraan, mis. "truk ini hanya dapat membawa hingga 3.500 kg". Lihat load_limits
.
Kolom | |
---|---|
soft_max_load |
Batas lunak dari beban. Lihat |
cost_per_unit_above_soft_max |
Jika beban melebihi |
start_load_interval |
Interval beban kendaraan yang dapat diterima di awal rute. |
end_load_interval |
Interval beban kendaraan yang dapat diterima di akhir rute. |
max_load |
Jumlah beban maksimum yang dapat diterima. |
Interval
Interval jumlah muatan yang dapat diterima.
Kolom | |
---|---|
min |
Beban minimum yang dapat diterima. Harus ≥ 0. Jika keduanya ditentukan, |
max |
Beban maksimum yang dapat diterima. Harus ≥ 0. Jika tidak ditentukan, pemuatan maksimum tidak dibatasi oleh pesan ini. Jika keduanya ditentukan, |
TravelMode
Mode perjalanan yang dapat digunakan oleh kendaraan.
Ini harus merupakan bagian dari mode perjalanan Routes Preferred API Google Maps Platform, lihat: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enum | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Mode perjalanan tidak ditetapkan, setara dengan DRIVING . |
DRIVING |
Mode perjalanan yang sesuai dengan rute mobil (mobil, ...). |
WALKING |
Mode perjalanan yang sesuai dengan rute jalan kaki. |
UnloadingPolicy
Kebijakan tentang cara menurunkan muatan kendaraan. Hanya berlaku untuk pengiriman yang memiliki layanan pengambilan dan pengantaran.
Pengiriman lainnya gratis untuk dilakukan di mana saja di rute yang terpisah dari unloading_policy
.
Enum | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Kebijakan bongkar muat tidak ditentukan; pengiriman harus dilakukan setelah penjemputan yang sesuai. |
LAST_IN_FIRST_OUT |
Pengiriman harus dilakukan berdasarkan urutan pengambilan terbalik |
FIRST_IN_FIRST_OUT |
Pengiriman harus dilakukan dalam urutan yang sama dengan pengambilan |
Waypoint
Mengenkapsulasi titik jalan. Titik jalan menandai lokasi kedatangan dan keberangkatan VisitRequests, serta lokasi awal dan akhir Kendaraan.
Kolom | |
---|---|
side_of_road |
Opsional. Menunjukkan bahwa lokasi titik jalan ini dimaksudkan agar kendaraan berhenti di sisi jalan tertentu. Jika Anda menetapkan nilai ini, rute akan melewati lokasi sehingga kendaraan dapat berhenti di sisi jalan yang bias lokasinya dari tengah jalan. Opsi ini tidak berfungsi untuk mode perjalanan 'BERLANJUT'. |
Kolom union location_type . Berbagai cara untuk menampilkan lokasi. location_type hanya ada berupa salah satu diantara berikut: |
|
location |
Titik yang ditetapkan menggunakan koordinat geografis, termasuk judul opsional. |
place_id |
ID Tempat POI yang terkait dengan titik jalan. |