Siklus proses rencana rute

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

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

  • Petakan operasi armada Anda: Terjemahkan armada fisik, batasan kompleks, dan sasaran 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.

Diagram berikut menunjukkan siklus proses rencana rute.

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

Fase implementasi 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 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 tersebut mencakup semua kebutuhan Anda.
  5. Mengintegrasikan 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 kejelasan tentang resource 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 kendaraan Anda?
  • Biaya: Berapa biaya untuk menjalankan armada Anda?
  • Lokasi: Di mana titik pengambilan dan pengiriman?
  • Permintaan: Berapa berat atau ukuran paketnya?
  • Batasan: Apakah ada periode waktu tertentu untuk pengiriman?
  • Waktu servis: Berapa lama waktu yang dibutuhkan pengemudi untuk parkir dan menurunkan barang?
  • Persyaratan: Apakah pengiriman memerlukan jenis kendaraan atau pengemudi tertentu?

Mengidentifikasi batasan Anda

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

Batasan umumnya dikelompokkan dalam dua kategori:

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

Batasan umum mencakup:

  • Batas kapasitas: Berat, volume, atau jumlah item maksimum yang dapat diangkut oleh kendaraan.
  • Periode waktu: Slot waktu tertentu saat lokasi buka untuk kunjungan, atau jam shift tertentu dari 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 tenaga kerja setelah jumlah jam kerja tertentu.

Menetapkan tujuan bisnis Anda

Setelah Anda menetapkan resource dan tugas serta batasannya, inilah 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 adalah 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 menginginkan jalur terpendek untuk menghemat bahan bakar, atau lebih memilih rute yang lebih cepat, tetapi mungkin lebih panjang karena menggunakan jalan raya? Apakah Anda ingin meminimalkan total jam kerja, atau memprioritaskan kedatangan pada waktu tertentu yang dapat memperpanjang waktu yang dihabiskan dalam 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 memperhitungkan realitas 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 depo vehicles[].startWaypoint
vehicles[].endWaypoint
Lokasi tempat kendaraan memulai dan mengakhiri rutenya.
Jam buka bisnis Anda model.globalStartTime
model.globalEndTime
Waktu mulai paling awal dan waktu berakhir paling akhir untuk seluruh operasi 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 longgar untuk kapasitas kendaraan. Jika loadDemand pengiriman melebihi batas yang tersisa, pengiriman tersebut 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 periode ini, pengiriman akan dilewati.
Batas durasi giliran kerja vehicles[].routeDurationLimit Menetapkan batas ketat atau longgar untuk 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 di 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 mengurangi 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 bergerak. Hal ini membedakan antara terjebak macet (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.

Membuat permintaan dan mendapatkan respons

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

  1. Konfigurasikan lingkungan Anda: Siapkan project Google Cloud, aktifkan API, dan konfigurasikan 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 ke dalam biaya dan batasan API adalah tugas yang kompleks. Rencana rute awal Anda mungkin tidak sesuai dengan tujuan bisnis atau ekspektasi pengemudi. Menyempurnakan rencana rute adalah proses iteratif untuk menguji rute yang ditampilkan dan menyesuaikan parameter hingga Anda menemukan penyiapan yang mencapai sasaran Anda.

Menyesuaikan tujuan dan batasan

Jika rencana rute yang dihasilkan tidak memenuhi kebutuhan, Anda dapat mengubah parameter tertentu untuk mendapatkan hasil yang berbeda. Memperketat atau melonggarkan parameter akan mengubah cara sasaran yang bertentangan diselesaikan dalam rencana rute, dan melonggarkan parameter adalah cara yang efisien untuk menemukan parameter yang menyebabkan error dalam rencana rute Anda.

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

Skenario Parameter Penyesuaian Deskripsi
Pengiriman penting dilewati shipments[].penaltyCost Tingkatkan nilainya, atau tambahkan biaya penalti ke pengiriman lain Jika pengiriman bersifat opsional, tingkatkan biaya penalti untuk memprioritaskannya. Jika pengiriman bersifat wajib (tidak memiliki biaya penalti), tambahkan biaya penalti ke pengiriman lain yang kurang penting. Hal ini membuat pengiriman tersebut bersifat opsional, sehingga waktu dan kapasitas kendaraan dapat digunakan untuk pengiriman penting.
Pengiriman dilewati karena waktu softStartTime / softEndTime Menambahkan periode waktu fleksibel Periode waktu yang ketat akan membatalkan tugas yang terlambat satu menit. Jendela waktu fleksibel memungkinkan pengemudi tiba sedikit di luar jadwal dengan membayar "biaya" daripada gagal dalam penugasan.
Pengiriman dilewati karena berat loadLimits[].softMaxLoad dan costPerUnitAbove Menambahkan permintaan beban ringan Memungkinkan kendaraan sedikit melebihi kapasitas idealnya (dengan penalti) daripada meninggalkan paket.
Pengiriman dilewati karena kelebihan muatan armada model.vehicles[] atau shipments[].timeWindows Menambahkan kendaraan atau melonggarkan periode waktu Jika ada terlalu banyak pengiriman untuk armada saat ini, terutama selama jam puncak, tambahkan lebih banyak kendaraan atau perluas periode pengiriman untuk menyebarkan beban kerja.
Rute terlalu panjang atau tidak efisien vehicles[].costPerKilometer / costPerHour Menambahkan biaya atau meningkatkan nilainya Memberi tahu API bahwa perjalanan memerlukan biaya yang mahal, sehingga mendorongnya untuk menghapus perhentian yang jauh dan terisolasi guna membuat rute yang lebih efisien untuk 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 mempersingkat rute, kecuali jika Anda juga menerapkan batas durasi untuk memaksa pemecah masalah mendistribusikan workload ke 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 titik awal berdasarkan solusi Anda sebelumnya, sehingga API dapat mengubah rencana yang ada, bukan menghitung rencana baru dari awal.

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

  • Teruskan rute dari respons sebelumnya ke kolom injectedFirstSolutionRoutes permintaan baru Anda. Hal ini mempercepat penelusuran pengoptimalan dan berguna untuk perencanaan ulang sebelum operasi harian dimulai, seperti mengintegrasikan pengiriman di menit-menit terakhir.
  • 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 untuk pengelola armada dan mengirimkan petunjuk belokan demi belokan kepada pengemudi.

Visualisasi

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

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

  • Menjelajahi 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 melalui daftar ini, menggunakan shipmentIndex untuk mengambil koordinat lokasi untuk setiap perhentian, dan menggunakan library pemetaan untuk merender penanda bernomor pada 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 mewakili 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 navigasi 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 akan 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 eksekusi rute secara real time. Meskipun API menyediakan polyline jalur yang dimaksudkan untuk evaluasi, Fleet Engine memasangkan urutan kunjungan yang direncanakan dengan pelacakan kendaraan secara live.