Dokumen ini menunjukkan cara membuat permintaan pertama ke Route Optimization API menggunakan skenario kasus penggunaan dunia nyata.
Untuk mempermudah, contoh ini menggunakan HTTP dan JSON untuk mendemonstrasikan REST API. Namun, untuk lingkungan produksi Anda, rekomendasi umumnya adalah menggunakan gRPC karena manfaat performanya. Namun, gRPC memerlukan beberapa penginstalan. Untuk mengetahui informasi selengkapnya, lihat Library klien Route Optimization API.
Skenario
Anda menjalankan layanan penitipan dari pukul 07.00 hingga 19.00 di San Francisco. Pagi ini, Anda perlu menjemput dua dari lokasi yang berbeda di kota. Kedua pemilik memberi Anda periode penjemputan antara pukul 07.30 dan 09.30.
Anda memiliki satu mobil van untuk pekerjaan ini, dan Anda membayar pengemudi 27 dolar per jam. Pengemudi dan van memulai hari di pusat penitipan anak Anda pada pukul 7:00 pagi dan harus kembali dari penjemputan pagi pada pukul 12:00 siang untuk istirahat makan siang.
Hari ini adalah 13 Februari 2024, dan pengemudi memiliki tugas berikut:
- Menjemput gunung Bern di dekat Coit Tower.
- Menjemput Chihuahua di South Sunset Playground Park.
- Mengantar kedua ke pusat penitipan di Mission Dolores Park.
Anda memerlukan rute yang meminimalkan waktu yang dihabiskan di dalam mobil van, sekaligus memenuhi persyaratan penjemputan dan pengantaran.
Sebelum memulai
Untuk menjalankan kode dalam skenario contoh ini, Anda harus menyelesaikan petunjuk di Menyiapkan Route Optimization API terlebih dahulu.
1. Pilih pendekatan pengoptimalan rute
Route Optimization API memiliki beberapa metode yang dapat Anda pilih, bergantung pada kompleksitas masalah pengoptimalan Anda.
Karena skenario penitipan ini adalah permintaan kecil dan sederhana, gunakan
metode pemblokiran, seperti optimizeTours, yang dengan cepat memberikan hasil
untuk permintaan kecil. Untuk mengetahui informasi selengkapnya tentang metode Route Optimization API, lihat Endpoint sinkron dan asinkron.
Gunakan URL berikut untuk membuat permintaan HTTP POST ke optimizeTours
metode:
https://routeoptimization.googleapis.com/v1/projects/PROJECT_OR_ID:optimizeTours
Anda juga perlu menetapkan setelan waktu tunggu dan batas waktu agar singkat untuk mengurangi waktu tunggu yang tidak perlu. Untuk skenario penitipan ini, pengoptimal tidak memerlukan banyak waktu untuk merespons permintaan Anda, jadi gunakan setelan berikut:
- Tetapkan parameter
timeoutke 2 detik. - Biarkan setelan batas waktu pada default, yaitu 60 detik untuk permintaan REST.
2. Buat isi pesan permintaan
Setelah memilih metode optimizeTours pemblokiran dan menentukan setelan waktu tunggu
dan batas waktu, langkah berikutnya adalah membuat isi pesan permintaan.
Untuk skenario ini, permintaan adalah pesan OptimizeToursRequest yang dienkode sebagai JSON di REST API.
Untuk membuat pesan permintaan, ikuti langkah-langkah berikutnya:
Mulai dengan struktur permintaan dasar, yang adalah sebagai berikut:
{ "timeout": ..., "model": { "shipments": [...], "vehicles": [...], "globalStartTime": "...", "globalEndTime": "..." } }Untuk mengetahui informasi selengkapnya tentang struktur, lihat panduan konsep utama untuk Struktur dasar (ShipmentModel, Shipment, dan Vehicle).
Tentukan pengiriman. Di kolom
shipments, tambahkan pesanShipmentuntuk setiap yang perlu dijemput dan diantar pada pagi hari. Di sini Anda menentukan lokasi dan waktu penjemputan pilihan setiap pemilik serta lokasi dan waktu pusat penitipan untuk mengantar.Untuk setiap, buat
VisitRequestuntuk penjemputan dan yang lain untuk pengiriman, yang untuk skenario ini disebut sebagai pengantaran penitipan.Dalam penjemputan, tetapkan
arrivalWaypointke lokasi penjemputan (Coit Tower untuk gunung Bern atau South Sunset Playground Park untuk Chihuahua) dantimeWindowske waktu penjemputan yang diminta pemilik (07.30 hingga 09.30).Dalam pengiriman, atur
arrivalWaypointke pusat penitipan anak dantimeWindowsuntuk waktu pengantaran yang dibutuhkan (9:30 AM hingga 11:30 AM).
Untuk mengetahui informasi selengkapnya tentang periode waktu, lihat Periode waktu.
Anda dapat menggunakan kolom
labeluntuk menambahkan ID untuk setiap pengiriman, seperti " gunung Bern" dan "Chihuahua". Hal ini dapat membantu Anda mengidentifikasi pengiriman dalam respons.
Untuk mengetahui informasi selengkapnya tentang cara menentukan pengiriman, lihat Pengiriman.
Tentukan kendaraan. Di kolom
vehicles, tambahkanVehiclepesan untuk satu van Anda dengan pusat penitipan anak sebagai titik awal dan akhir, biaya upah pengemudi, dan jam operasional untuk van tersebut.Atur
startWaypointdanendWaypointuntuk van ke lokasi awal dan akhir hari, yaitu pusat penitipan anak di dekat Mission Dolores Park.Untuk meminimalkan biaya operasi, Anda harus menentukan batasan biaya bisnis Anda. Tetapkan parameter biaya
costPerHourke 27, yaitu jumlah yang Anda bayar kepada pengemudi untuk mengendarai mobil van penitipan. Untuk mengetahui informasi selengkapnya tentang parameter biaya, lihat Model biaya.Untuk memastikan pengoptimal membuat rute dalam jam operasional van, tentukan
startTimeWindowske rentang yang dapat diterima bagi pengemudi untuk mulai mengoperasikan van danendTimeWindowske rentang yang dapat diterima bagi pengemudi untuk kembali ke pusat penitipan anak. Untuk mengetahui informasi selengkapnya tentang periode waktu, lihat Periode waktu.
Untuk mengetahui informasi selengkapnya tentang cara menentukan kendaraan, lihat Kendaraan.
Tetapkan periode waktu global. Jendela waktu global mewakili kerangka waktu kapan van dapat melakukan penjemputan dan pengantaran untuk tempat penitipan anak Anda sepanjang hari. Untuk skenario ini, tetapkan
globalStartTimeke 07.00 danglobalEndTimeke 19.00 untuk 13 Februari 2024, yang mewakili jam operasional penitipan Anda.
3. Kirim permintaan
Berikut adalah permintaan curl sederhana berdasarkan skenario penitipan dan menggunakan metode optimizeTours pemblokiran.
Sebelum mengirim permintaan, ganti PROJECT_NUMBER_OR_ID dalam contoh kode dengan project ID Google Cloud Anda.
curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
--data @- << EOM
{
"timeout": "2s",
"model": {
"shipments": [
{
"pickups": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.802395,
"longitude": -122.405822
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T07:30:00Z",
"endTime": "2024-02-13T09:30:00Z"
}
]
}
],
"deliveries": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T09:30:00Z",
"endTime": "2024-02-13T11:30:00Z"
}
]
}
],
"label": "Bernese mountain dog"
},
{
"pickups": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.738067,
"longitude": -122.498593
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T07:30:00Z",
"endTime": "2024-02-13T09:30:00Z"
}
]
}
],
"deliveries": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T09:30:00Z",
"endTime": "2024-02-13T11:30:00Z"
}
]
}
],
"label": "Chihuahua"
}
],
"vehicles": [
{
"startWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"endWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"costPerHour": 27,
"startTimeWindows": [
{
"startTime": "2024-02-13T07:00:00Z",
"endTime": "2024-02-13T07:15:00Z"
}
],
"endTimeWindows": [
{
"startTime": "2024-02-13T11:45:00Z",
"endTime": "2024-02-13T12:00:00Z"
}
]
}
],
"globalStartTime": "2024-02-13T07:00:00Z",
"globalEndTime": "2024-02-13T19:00:00Z"
}
}
EOM
Parameter permintaan yang digunakan dalam permintaan
Tabel berikut menjelaskan parameter permintaan yang digunakan dalam isi permintaan skenario contoh. Anda dapat memfilter konten menurut induk atau menurut penelusuran teks.
| Induk | Parameter | Jenis Properti | Deskripsi |
|---|---|---|---|
OptimizeToursRequest |
model |
objek (ShipmentModel) |
Ini adalah inti dari permintaan Anda. Ini adalah satu objek tempat Anda
menentukan seluruh masalah, termasuk semua yang perlu dijemput dan
diantar (shipments)
serta mobil van dalam fleet Anda
(vehicles).
Anggap saja ini sebagai cetak biru lengkap untuk masalah yang perlu Anda optimalkan. |
timeout |
Durasi | Parameter ini menentukan waktu maksimum server bekerja pada a permintaan sebelum menampilkan respons. Gunakan parameter ini untuk mempersingkat waktu tunggu Anda. Untuk permintaan kecil dan cepat, seperti skenario penitipan ini, tetapkan nilai ini ke 2 detik. | |
ShipmentModel |
shipments[] |
array objek (Shipment) |
Ini adalah array objek yang setiap objeknya mewakili yang perlu dijemput atau diantar. |
vehicles[] |
array objek (Vehicle) |
Ini adalah array objek yang setiap objeknya menentukan kendaraan dalam fleet Anda. Di sinilah Anda menjelaskan resource, seperti mobil van yang melakukan penjemputan dan pengantaran. Anda harus menentukan setidaknya satu kendaraan untuk mendapatkan rute yang dioptimalkan. | |
globalStartTime |
Stempel waktu | Ini adalah waktu paling awal yang memungkinkan untuk terjadinya peristiwa apa pun di seluruh model Anda. Parameter ini mempersempit masalah pengoptimalan dari waktu ke waktu, yang sangat penting untuk perhitungan traffic dan perutean yang akurat. Untuk skenario penitipan ini, tetapkan parameter ini ke waktu paling awal pengemudi dapat mengoperasikan mobil van untuk hari itu, yaitu pukul 07.00 untuk 13 Februari 2024. | |
globalEndTime |
Stempel waktu | Ini adalah waktu paling akhir yang memungkinkan untuk terjadinya peristiwa apa pun di seluruh model Anda. Untuk skenario penitipan ini, tetapkan parameter ini ke waktu saat mobil van diperkirakan akan mengakhiri operasinya, yaitu pukul 19.00 untuk Februari 13, 2024. | |
Shipment |
pickups[] |
array objek (VisitRequest) |
Ini adalah daftar semua opsi penjemputan yang memungkinkan untuk pengiriman. Pengoptimal memilih opsi terbaik untuk menyelesaikan masalah Anda. Untuk skenario penitipan ini, cantumkan lokasi penjemputan dan periode waktu yang diberikan setiap pemilik untuk setiap. |
deliveries[] |
array objek (VisitRequest) |
Ini adalah daftar semua opsi pengantaran yang memungkinkan untuk pengiriman. Pengoptimal memilih opsi terbaik untuk menyelesaikan masalah Anda. Untuk skenario penitipan ini, cantumkan lokasi fasilitas penitipan dan periode waktu saat pengemudi harus kembali untuk makan siang untuk setiap. | |
label |
string | Ini adalah ID untuk pengiriman tertentu dalam permintaan Anda. Anda dapat menentukan label dalam permintaan untuk memudahkan pembacaan respons. Untuk skenario penitipan ini, gunakan string deskriptif seperti "Chihuahua", " gunung Bern", atau nama untuk mencocokkan solusi dengan input Anda saat Anda menerima respons API. | |
VisitRequest |
arrivalWaypoint[] |
objek (Waypoint) |
Ini adalah lokasi kunjungan tertentu di rute. Anda dapat menentukannya
menggunakan koordinat lintang dan bujur, ID tempat, atau arah. Dalam
skenario penitipan ini, tetapkan parameter ini ke lokasi yang diberikan oleh pemilik untuk
pickups
dan ke alamat pusat penitipan untuk
deliveries. |
timeWindows[] |
array objek (TimeWindow) |
Ini adalah array objek yang menentukan batasan waktu untuk penjemputan atau pengantaran. Untuk skenario ini, gunakan parameter ini untuk menentukan periode penjemputan untuk setiap dan periode yang dapat diterima untuk mengantar ke pusat penitipan. | |
Vehicle |
startWaypoint[] |
objek (Waypoint) |
Ini adalah lokasi awal rute kendaraan, yang ditentukan dengan koordinat lintang dan bujur atau ID tempat. Parameter ini memberi tahu pengoptimal tempat kendaraan harus memulai rute. Jika Anda tidak menentukan titik jalan ini pengoptimal akan memilih salah satu penjemputan atau pengantaran sebagai lokasi awal. Untuk skenario penitipan ini, karena pengemudi memulai hari di fasilitas penitipan, gunakan koordinat untuk Mission Dolores Park. |
endWaypoint[] |
objek (Waypoint) |
Ini adalah tujuan akhir rute kendaraan, yang ditentukan dengan koordinat lintang dan bujur atau ID tempat. Parameter ini memberi tahu the pengoptimal tempat kendaraan harus mengakhiri rute. Jika Anda tidak menentukan titik jalan ini pengoptimal akan memilih salah satu penjemputan atau pengantaran sebagai akhir rute. Untuk skenario penitipan ini, karena pengemudi harus mengakhiri hari di fasilitas penitipan, gunakan koordinat untuk Mission Dolores Park. | |
costPerHour |
angka | Ini adalah biaya yang dikeluarkan untuk setiap jam penggunaan kendaraan, terlepas dari apakah kendaraan tersebut sedang bepergian atau berhenti. Untuk skenario penitipan ini, gunakan parameter ini untuk memodelkan upah per jam pengemudi. | |
startTimeWindows[] |
array objek (TimeWindow) |
Ini adalah periode yang dapat diterima agar pengemudi dapat mulai mengendarai mobil van untuk penjemputan pagi. | |
endTimeWindows[] |
array objek (TimeWindow) |
Ini adalah periode yang dapat diterima agar pengemudi dapat selesai mengendarai mobil van dan parkir kembali di pusat penitipan. |