Siklus proses rencana rute

Halaman ini menjelaskan siklus proses rencana rute menggunakan Route Optimization API, mulai dari mengidentifikasi kebutuhan perutean Anda hingga menyelesaikan rencana rute terintegrasi dalam sistem Anda.

Saat mengikuti tahapan rencana rute, Anda dapat mencapai tujuan berikut:

  • Memetakan operasi armada: Terjemahkan armada fisik, batasan kompleks, dan tujuan bisnis Anda ke dalam kode untuk API.
  • Mengoptimalkan rencana rute untuk bisnis Anda: Pahami cara menyempurnakan rencana rute agar dapat memenuhi sasaran dan meningkatkan operasi harian Anda.
  • Deploy ke produksi: Terapkan rencana rute Anda dengan menyertakannya dalam operasi sehari-hari Anda.

Diagram berikut menunjukkan masa aktif rencana rute.

Diagram alur siklus proses rencana rute yang dijelaskan dalam teks di bawah

Fase penerapan rencana rute terjadi saat Anda pertama kali mengintegrasikan API atau saat persyaratan bisnis Anda berubah secara signifikan. Panduan ini mencakup tahap 1 hingga 5.

Fase operasi harian lebih ringan, dan penyempurnaan minimal. Panduan ini mencakup tahap 2 hingga 4.

Tahapan siklus proses rute adalah sebagai berikut:

  1. Tentukan cakupan masalah Anda: Identifikasi dan atur tujuan, resource, tugas, dan batasan Anda untuk mendapatkan gambaran lengkap tentang operasi Anda sebelum Anda mulai menggunakan API.
  2. Memetakan data Anda: Terjemahkan realitas bisnis Anda ke dalam parameter API sehingga rencana rute mencerminkan cara Anda ingin armada beroperasi.
  3. Buat permintaan dan dapatkan rencana rute: Masukkan data Anda ke API dan dapatkan rencana rute yang dioptimalkan.
  4. Sempurnakan rencana rute Anda: Uji rencana rute Anda dan lakukan iterasi dengan menyesuaikan batasan dan tujuan untuk memastikan rencana rute tersebut mencakup semua kebutuhan Anda.
  5. Integrasikan rencana rute: Hubungkan rencana rute ke sistem yang ada untuk memberikan navigasi yang dapat ditindaklanjuti.

Menentukan cakupan masalah Anda

Sebelum menggunakan API, Anda perlu mengatur detail operasi sehari-hari ke dalam kategori data yang jelas. Dengan begitu, Anda dapat memulai proses penerapan dengan memahami secara jelas sumber daya dan tugas saat ini, batasan yang mempengaruhinya, dan tujuan yang ingin Anda capai dengan armada Anda.

Mengidentifikasi resource dan tugas Anda

Langkah penting saat merencanakan rencana rute adalah mengidentifikasi sumber daya dan tugas Anda, yaitu kendaraan dan pengiriman.

Kendaraan Pengiriman
  • Jumlah: Berapa banyak kendaraan yang Anda miliki?
  • Lokasi: Di mana kendaraan memulai dan mengakhiri perjalanan?
  • Waktu: Berapa jam kerja pengemudi kendaraan?
  • Kapasitas: Berapa batas kemampuan kendaraan Anda?
  • Biaya: Berapa biaya untuk menjalankan armada Anda?
  • Lokasi: Di mana lokasi pengambilan dan pengiriman?
  • Permintaan: Berapa berat atau ukuran paket?
  • Batasan: Apakah ada jangka waktu tertentu untuk pengiriman?
  • Waktu layanan: Berapa lama pengemudi perlu parkir dan menurunkan barang?
  • Persyaratan: Apakah pengiriman memerlukan jenis kendaraan atau pengemudi tertentu?

Identifikasi batasan Anda

Batasan Anda adalah batas dan pembatasan tentang cara Anda dapat menggunakan kendaraan dan cara Anda harus menangani pengiriman. Data ini menentukan sebagian besar operasi Anda dan sangat penting saat membuat rencana rute yang dioptimalkan.

Batasan umumnya dikelompokkan ke dalam dua kategori:

Batasan berat Batasan ringan
Ini adalah batas yang tidak dapat dilanggar. Misalnya, truk tidak dapat membawa beban yang melebihi kapasitas maksimumnya, dan pengemudi tidak dapat melakukan pengambilan setelah toko tutup. Ini adalah preferensi yang dapat dilanggar jika perlu, biasanya dengan biaya penalti. Misalnya, Anda mungkin lebih memilih memuat truk hanya hingga 80% kapasitas, atau melakukan pengiriman sebelum waktu target, tetapi Anda tidak keberatan melampaui batas ini untuk mendapatkan rute yang lebih baik.

Batasan umum meliputi:

  • Batas kapasitas: Berat, volume, atau jumlah item maksimum yang dapat dibawa kendaraan.
  • Periode waktu: Slot waktu tertentu saat lokasi buka untuk dikunjungi, atau jam kerja tertentu pengemudi.
  • Biaya: Biaya menjalankan kendaraan atau melewati pengiriman. Salah satu tujuan utama API ini adalah membuat rencana rute yang hemat biaya.
  • Istirahat pengemudi: Periode istirahat pengemudi yang biasanya diwajibkan oleh hukum ketenagakerjaan setelah jumlah jam kerja tertentu.

Menetapkan tujuan bisnis Anda

Setelah Anda menetapkan resource dan tugas serta batasannya, saatnya menetapkan metrik yang paling penting bagi bisnis Anda. Tujuan ini sejalan dengan batasan, dan membantu Anda memutuskan hal yang paling penting saat merencanakan rute.

Berikut beberapa contoh tujuan bisnis:

Ukuran armada Jarak Waktu Biaya
Apakah Anda ingin meminimalkan jumlah kendaraan yang digunakan, atau menggunakan seluruh armada untuk menyelesaikan hari kerja lebih awal? Apakah Anda ingin jalur terpendek untuk menghemat bahan bakar, atau Anda lebih memilih rute yang lebih cepat yang mungkin lebih panjang karena penggunaan jalan tol? Apakah Anda ingin meminimalkan total jam kerja, atau memprioritaskan tiba pada waktu tertentu yang dapat memperpanjang waktu yang dihabiskan di rute? Apakah Anda ingin meminimalkan biaya operasional seperti upah dan bahan bakar, atau menerima biaya yang lebih tinggi untuk memenuhi tenggat waktu yang ketat?

Memetakan data Anda

Setelah mengumpulkan data, petakan data tersebut agar sesuai dengan properti API. Hal ini memberi pengoptimal semua informasi untuk menampilkan rencana rute yang mempertimbangkan kondisi bisnis Anda.

Gunakan parameter dalam tabel berikutnya untuk memetakan resource, tugas, batasan, dan tujuan yang Anda petakan di bagian Tentukan cakupan masalah Anda.

Pemetaan variabel

Konsep dunia nyata Parameter API Deskripsi
Pengemudi atau kendaraan model.vehicles[] Mewakili satu kendaraan dalam armada Anda.
Lokasi depot vehicles[].startWaypoint
vehicles[].endWaypoint
Lokasi tempat kendaraan memulai dan mengakhiri rutenya.
Jam buka Anda model.globalStartTime
model.globalEndTime
Waktu mulai paling awal dan waktu berakhir paling akhir untuk operasi seluruh armada.
Tugas atau paket model.shipments[] Mewakili tugas. Dapat berupa pickup, delivery, atau keduanya.
Lokasi tugas pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
Lokasi geografis tempat tugas dilakukan.
Waktu layanan pickups[].duration
deliveries[].duration
Waktu yang dihabiskan di lokasi untuk menyelesaikan tugas (misalnya, menurunkan muatan), tidak termasuk waktu perjalanan.

Pemetaan batasan

Batasan dunia nyata Parameter API Deskripsi
Kapasitas kendaraan vehicles[].loadLimits Menetapkan batas ketat atau fleksibel untuk kapasitas kendaraan. Jika loadDemand pengiriman melebihi batas yang tersisa, pengiriman tidak akan ditetapkan.
Ukuran paket shipments[].loadDemands Jumlah kapasitas kendaraan yang digunakan pengiriman.
Pembatasan kendaraan shipments[].allowedVehicleIndices Membatasi pengiriman sehingga hanya dapat diambil atau dikirim oleh kendaraan atau pengemudi tertentu.
Jam buka shipments[].pickups[].timeWindows atau shipments[].deliveries[].timeWindows Menetapkan jam yang tersedia untuk mengunjungi lokasi. Jika kendaraan tidak dapat tiba dalam jangka waktu ini, pengiriman akan dilewati.
Batas panjang shift vehicles[].routeDurationLimit Menetapkan batas keras atau lunak pada durasi kerja pengemudi tertentu (misalnya, maksimal 8 jam), terlepas dari waktu berakhir global.
Istirahat pengemudi vehicles[].breakRule Menerapkan aturan istirahat tertentu, seperti istirahat wajib setelah jam kerja tertentu.
Pembatasan jalan vehicles[].travelMode Menentukan mode perjalanan (misalnya, DRIVE atau BICYCLE). Hal ini membatasi rute ke jalan yang sah dan menentukan kecepatan yang digunakan untuk menghitung waktu perjalanan.

Pemetaan tujuan

Tujuan dunia nyata Parameter API Deskripsi
Meminimalkan ukuran armada vehicles[].fixedCost Menerapkan biaya satu kali untuk penggunaan kendaraan. Biaya tetap yang tinggi memaksa rute untuk memprioritaskan penggunaan lebih sedikit kendaraan daripada meningkatkan total jarak atau waktu kerja.
Meminimalkan jarak vehicles[].costPerKilometer Menerapkan biaya untuk setiap kilometer yang ditempuh. Memprioritaskan rute yang lebih pendek untuk menghemat bahan bakar dan keausan.
Meminimalkan total waktu vehicles[].costPerHour Menerapkan biaya untuk setiap jam kendaraan aktif (termasuk waktu perjalanan dan waktu tunggu). Memprioritaskan penyelesaian yang lebih cepat.
Meminimalkan waktu mengemudi vehicles[].costPerTraveledHour Menerapkan biaya khusus untuk waktu yang dihabiskan untuk pindah. Hal ini membedakan antara duduk di tengah kemacetan (mahal) dan menunggu di halte(berpotensi lebih murah).
Memprioritaskan tugas tertentu shipments[].penaltyCost Menerapkan biaya jika pengiriman tertentu dilewati. Menetapkan nilai ini ke tinggi memastikan tugas penting diprioritaskan daripada tugas opsional.

Buat permintaan dan dapatkan respons

Penggunaan Route Optimization API untuk membuat rencana rute melibatkan langkah-langkah berikut:

  1. Konfigurasi lingkungan Anda: Siapkan project Google Cloud Anda, aktifkan API, dan konfigurasi autentikasi. Untuk mengetahui petunjuknya, lihat Memulai. Anda hanya perlu mengikuti langkah ini satu kali.
  2. Kirim permintaan: Buat isi permintaan menggunakan pemetaan data yang ditentukan di bagian sebelumnya. Untuk mengetahui informasi tentang endpoint, header, dan pemformatan permintaan, lihat Membuat permintaan API.
  3. Pahami respons: Setelah mendapatkan respons dari API, pahami rencana rute dan arti setiap parameter. Lihat Menafsirkan respons.

Menyempurnakan rencana rute

Menerjemahkan logistik dunia nyata menjadi biaya dan batasan API adalah tugas yang kompleks. Rencana rute awal Anda mungkin tidak sesuai dengan tujuan bisnis atau ekspektasi pengemudi. Memperbaiki rencana rute adalah proses iteratif untuk menguji rute yang ditampilkan dan menyesuaikan parameter hingga Anda menemukan penyiapan yang mencapai tujuan Anda.

Menyesuaikan tujuan dan batasan

Jika rencana rute yang dibuat tidak sesuai dengan kebutuhan Anda, Anda dapat mengubah parameter tertentu untuk mendapatkan hasil yang berbeda. Memperketat atau melonggarkan parameter mengubah cara tujuan yang bertentangan diselesaikan dalam rencana rute, dan melonggarkan parameter adalah cara yang efisien untuk menemukan parameter yang menyebabkan kesalahan dalam rencana rute Anda.

Tabel berikut mencantumkan masalah perutean umum dan parameter yang dapat Anda sesuaikan untuk menyelesaikannya.

Skenario Parameter Penyesuaian Deskripsi
Pengiriman penting dilewati shipments[].penaltyCost Meningkatkan nilainya, atau menambahkan biaya penalti ke pengiriman lain Jika pengiriman bersifat opsional, tingkatkan biaya penaltinya untuk memprioritaskannya. Jika pengiriman bersifat wajib (tidak memiliki biaya penalti), tambahkan biaya penalti ke pengiriman lainnya yang kurang penting. Hal ini membuat pengiriman tersebut bersifat opsional, sehingga waktu dan kapasitas kendaraan dapat digunakan untuk pengiriman yang penting.
Pengiriman dilewati karena waktu softStartTime / softEndTime Menambahkan periode waktu fleksibel Periode waktu yang ketat akan membatalkan tugas yang terlambat satu menit. Jendela fleksibel memungkinkan pengemudi tiba sedikit di luar jadwal dengan membayar "biaya" daripada gagal menyelesaikan tugas.
Pengiriman dilewati karena berat loadLimits[].softMaxLoad dan costPerUnitAbove Menambahkan permintaan pemuatan ringan Memungkinkan kendaraan sedikit melebihi kapasitas idealnya (dengan penalti) daripada meninggalkan paket.
Pengiriman dilewati karena kelebihan beban armada model.vehicles[] atau shipments[].timeWindows Menambahkan kendaraan atau periode waktu relaksasi Jika ada terlalu banyak pengiriman untuk armada saat ini, terutama selama jam puncak, tambahkan lebih banyak kendaraan atau perluas periode pengiriman untuk mendistribusikan beban kerja.
Rute terlalu panjang atau tidak efisien vehicles[].costPerKilometer / costPerHour Menambahkan biaya atau meningkatkan nilainya Memberi tahu API bahwa perjalanan mahal, sehingga mendorongnya untuk menghilangkan perhentian yang jauh dan terpencil untuk membuat rute yang lebih ketat bagi armada.
Shift pengemudi terlalu panjang vehicles[].routeDurationLimit atau model.vehicles[] Menambahkan batas durasi, atau menambahkan kendaraan dan batas Menerapkan batas ketat (misalnya, 8 jam) pada total waktu yang dihabiskan pengemudi di jalan. Menambahkan kendaraan saja tidak akan memperpendek rute kecuali jika Anda juga menerapkan batas durasi untuk memaksa pemecah masalah mendistribusikan workload di seluruh armada yang lebih besar.

Memperbarui rencana rute

Anda sering kali perlu memperbarui rencana rute sambil mempertahankan basis yang sama, seperti menambahkan penjemputan ke jadwal pengemudi yang aktif. Untuk melakukannya, gunakan parameter injeksi, yang memberikan API awal berdasarkan solusi sebelumnya, sehingga API dapat mengubah paket yang ada, bukan menghitung paket baru dari awal.

Berikut adalah berbagai cara untuk memperbarui rencana perjalanan dengan parameter injeksi:

  • Teruskan rute dari respons sebelumnya ke kolom injectedFirstSolutionRoutes permintaan baru Anda. Hal ini mempercepat penelusuran pengoptimalan dan berguna untuk merencanakan ulang sebelum operasi harian dimulai, seperti mengintegrasikan pengiriman mendadak.
  • Kontrol tingkat perubahan menggunakan kolom injectedSolutionConstraint. Hal ini berguna saat operasi sudah berlangsung, sehingga Anda dapat mempertahankan urutan pengemudi saat ini atau memperbaiki bagian rencana yang telah dijalankan.
  • Pastikan rute yang diperbarui tetap ditetapkan ke kendaraan yang benar dengan menetapkan interpretInjectedSolutionsUsingLabels ke true. Hal ini berguna dalam eksperimen saat menambahkan atau menghapus pengiriman dan kendaraan, karena mencocokkan rute menggunakan label, bukan indeks. Hal ini mengharuskan semua label kendaraan dan pengiriman bersifat unik.

Mengintegrasikan rencana rute Anda

Rencana rute akhir Anda adalah objek data yang merepresentasikan pengelolaan sumber daya dan tugas yang dioptimalkan, sekaligus mengikuti batasan dan tujuan Anda. Gunakan rencana rute ini dalam operasi harian Anda dengan mengintegrasikannya ke dalam sistem Anda. Hal ini biasanya melibatkan visualisasi rencana rute Anda untuk pengelola armada dan mengirimkan petunjuk belokan demi belokan kepada pengemudi.

Visualisasi

Untuk mengizinkan pengelola armada memverifikasi dan memantau rencana rute Anda, Anda dapat memvisualisasikan rencana rute dengan cara berikut:

Untuk mengizinkan pengelola armada memverifikasi dan memantau rencana rute Anda, Anda dapat menampilkannya di peta dasbor. Bergantung pada tahap pengembangan saat ini, Anda dapat memvisualisasikan rencana rute dengan cara berikut:

  • Jelajahi tanpa kode: Anda dapat menggunakan aplikasi Pengoptimalan Rute open source untuk melihat cara API menerjemahkan data Anda menjadi jalur fisik di peta. Aplikasi web ini berfungsi sebagai alat eksplorasi yang memungkinkan Anda membuat skenario, menyesuaikan parameter batasan, dan merender rencana rute yang dihasilkan secara visual sebelum menulis kode apa pun.
  • Menampilkan urutan kunjungan: Anda dapat menampilkan urutan kunjungan sebagai titik bernomor di peta untuk mengevaluasi rencana pengoptimalan dan pengiriman di sistem Anda sendiri. Untuk melakukannya, temukan array visits di dalam setiap rute respons API. Item dalam array ini diurutkan persis seperti yang harus dilakukan pengemudi. Anda dapat melakukan iterasi pada daftar ini, menggunakan shipmentIndex untuk mengambil koordinat lokasi setiap perhentian, dan menggunakan library pemetaan untuk merender penanda bernomor di peta berdasarkan urutannya dalam daftar.
  • Menggambar rute fisik: Anda dapat memvisualisasikan jalur yang direncanakan secara tepat di peta untuk memahami alasan pengoptimal memilih urutan tertentu. Polyline ini merepresentasikan jalur yang dimaksudkan untuk perencanaan dan evaluasi, bukan rute real-time yang diambil oleh pengemudi. Tetapkan populatePolylines: true dalam permintaan Anda untuk mendapatkan kolom encodedPolyline untuk setiap rute, dan dekode menggunakan metode google.maps.geometry.encoding.decodePath() dari Maps JavaScript API.

Mengirim ke pengemudi

Anda dapat mengintegrasikan rute belokan demi belokan ke dalam aplikasi pengemudi menggunakan Navigation SDK, atau menyediakan deep link ke aplikasi pelanggan Google Maps.

  • Navigation SDK: Jika memiliki aplikasi pengemudi kustom, Anda dapat mengintegrasikan Navigation SDK for Android atau iOS untuk panduan belokan demi belokan dalam aplikasi. Anda dapat mengintegrasikan informasi tugas dari respons API ke dalam sistem dan menggunakan SDK untuk navigasi. Untuk meneruskan rute dari respons API ke SDK, tetapkan populateTransitionPolylines: true dalam permintaan Anda. Tindakan ini menghasilkan routeToken untuk setiap transisi dalam respons.
  • Fleet Engine: Untuk pengelolaan armada lanjutan, Anda dapat mengimpor rencana rute yang dihasilkan oleh API ke Fleet Engine untuk memantau pelaksanaan rute secara real time. Meskipun API menyediakan polyline jalur yang dimaksudkan untuk evaluasi, Fleet Engine menyandingkan urutan kunjungan yang direncanakan dengan pelacakan kendaraan live.