این صفحه، چرخه حیات یک طرح مسیر را با استفاده از API بهینهسازی مسیر، از شناسایی نیازهای مسیریابی شما شروع کرده و با یک طرح مسیر یکپارچه در سیستم شما به پایان میرساند.
وقتی مراحل طرح مسیر را دنبال میکنید، میتوانید به اهداف زیر دست یابید:
- نقشه عملیات ناوگان خود را ترسیم کنید: ناوگان فیزیکی، محدودیتهای پیچیده و اهداف تجاری خود را به کدی برای API تبدیل کنید.
- بهینهسازی برنامههای مسیر برای کسبوکارتان: بفهمید که چگونه برنامه مسیر خود را اصلاح کنید تا بتواند به اهدافتان برسد و عملیات روزانهتان را بهبود بخشد.
- استقرار در محیط تولید: با گنجاندن طرح مسیر خود در عملیات روزمره، آن را پیادهسازی کنید.
نمودار زیر طول عمر یک طرح مسیر را نشان میدهد.
مرحله پیادهسازی یک طرح مسیر زمانی اتفاق میافتد که شما برای اولین بار API را ادغام میکنید یا زمانی که نیازهای کسبوکار شما به طور قابل توجهی تغییر میکند. این مرحله مراحل ۱ تا ۵ را پوشش میدهد.
مرحله عملیات روزانه سبکتر است و اصلاحات در آن حداقل است. این مرحله مراحل ۲ تا ۴ را پوشش میدهد.
مراحل عمر یک مسیر به شرح زیر است:
- محدوده مشکل خود را مشخص کنید: اهداف، منابع، وظایف و محدودیتهای خود را شناسایی و سازماندهی کنید تا قبل از شروع استفاده از API، تصویر کاملی از عملیات خود داشته باشید.
- دادههای خود را ترسیم کنید: واقعیت کسبوکار خود را به پارامترهای API تبدیل کنید تا نقشه مسیر، نحوه عملکرد ناوگان شما را منعکس کند.
- ایجاد یک درخواست و دریافت نقشه مسیر: دادههای خود را در API وارد کنید و نقشه مسیر بهینه خود را دریافت کنید.
- طرح مسیر خود را اصلاح کنید: طرح مسیر خود را آزمایش کنید و با تنظیم محدودیتها و اهداف خود، آن را تکرار کنید تا مطمئن شوید که تمام نیازهای شما را پوشش میدهد.
- یکپارچهسازی طرح مسیر: طرح مسیر را به سیستمهای موجود خود متصل کنید تا ناوبری کاربردی ارائه شود.
مشکل خود را بررسی کنید
قبل از استفاده از API، باید جزئیات عملیات روزانه خود را در دستههای دادهای واضح سازماندهی کنید. این به شما امکان میدهد فرآیند پیادهسازی خود را با شفافیت در مورد منابع و وظایف فعلی خود، محدودیتهای آنها و اهدافی که میخواهید با ناوگان خود به آنها دست یابید، آغاز کنید.
منابع و وظایف خود را مشخص کنید
یک گام مهم هنگام برنامهریزی برای مسیر، شناسایی منابع و وظایف شما، یعنی وسایل نقلیه و محمولههایتان است.
| وسایل نقلیه | محمولهها |
|---|---|
|
|
محدودیتهای خود را شناسایی کنید
محدودیتهای شما، محدودیتهایی در مورد نحوه استفاده از وسایل نقلیه و نحوه مدیریت محمولههایتان هستند. آنها اکثر عملیات شما را تعیین میکنند و هنگام ایجاد یک برنامه مسیر بهینه، حیاتی هستند.
محدودیتها به طور کلی به دو دسته تقسیم میشوند:
| محدودیتهای سخت | محدودیتهای نرم |
|---|---|
| اینها محدودیتهایی هستند که نمیتوان آنها را شکست . برای مثال، یک کامیون نمیتواند وزنی بیشتر از حداکثر ظرفیت خود حمل کند، و یک راننده نمیتواند پس از تعطیلی فروشگاه، اجناس را تحویل بگیرد. | اینها ترجیحاتی هستند که در صورت لزوم، معمولاً با هزینه جریمه، قابل نقض هستند . برای مثال، ممکن است ترجیح دهید کامیون را فقط تا ۸۰٪ ظرفیت بارگیری کنید یا قبل از زمان هدف تحویل دهید، اما برای رسیدن به مسیر بهتر، با عبور از این محدودیتها مشکلی ندارید. |
محدودیتهای رایج عبارتند از:
- محدودیتهای ظرفیت: حداکثر وزن، حجم یا تعداد اقلامی که یک وسیله نقلیه میتواند حمل کند.
- پنجرههای زمانی: بازههای زمانی خاصی که یک مکان برای بازدید باز است، یا ساعات شیفت خاص یک راننده.
- هزینهها: هزینهی راهاندازی یک وسیلهی نقلیه یا صرف نظر کردن از یک محموله. یکی از اهداف اصلی API، ایجاد یک برنامهی مسیر مقرونبهصرفه است.
- استراحت راننده: دورههای استراحت راننده که معمولاً طبق قوانین کار پس از تعداد مشخصی از ساعات کاری الزامی است.
اهداف تجاری خود را تعیین کنید
وقتی منابع و وظایف و محدودیتهای آنها را مشخص کردید، وقت آن است که مشخص کنید کدام معیارها برای کسب و کار شما بیشترین اهمیت را دارند. این اهداف با محدودیتها همراه هستند و به شما کمک میکنند تا هنگام برنامهریزی یک مسیر، تصمیم بگیرید چه چیزی بیشترین اهمیت را دارد.
در ادامه به نمونههایی از اهداف کسب و کار اشاره شده است:
| اندازه ناوگان | فاصله | زمان | هزینه |
|---|---|---|---|
| آیا میخواهید تعداد وسایل نقلیه مورد استفاده را به حداقل برسانید، یا از ناوگان کامل خود برای زودتر تمام کردن روز کاری استفاده کنید؟ | آیا کوتاهترین مسیر را برای صرفهجویی در مصرف سوخت میخواهید، یا مسیر سریعتری را ترجیح میدهید که ممکن است به دلیل استفاده از بزرگراهها طولانیتر باشد؟ | آیا میخواهید کل ساعات کاری را به حداقل برسانید، یا رسیدن به زمانهای خاص را در اولویت قرار دهید که میتواند زمان صرف شده در مسیر را طولانیتر کند؟ | آیا میخواهید هزینههای عملیاتی مانند دستمزد و سوخت را به حداقل برسانید، یا برای رسیدن به ضربالاجلهای سختگیرانه، هزینههای بالاتری را بپذیرید؟ |
دادههای خود را نقشهبرداری کنید
پس از جمعآوری دادهها، آنها را طوری نگاشت کنید که با ویژگیهای API مطابقت داشته باشند. این کار به بهینهساز تمام اطلاعات لازم برای بازگرداندن یک طرح مسیر را میدهد که واقعیت کسبوکار شما را در نظر میگیرد.
از پارامترهای جداول بعدی برای ترسیم منابع، وظایف، محدودیتها و اهدافی که در بخش «محدوده مشکل شما» ترسیم کردهاید، استفاده کنید.
نگاشت متغیر
| مفهوم دنیای واقعی | پارامتر API | توضیحات |
|---|---|---|
| راننده یا وسیله نقلیه | model.vehicles[] | نشان دهنده یک وسیله نقلیه واحد در ناوگان شما است. |
| مکانهای انبار | vehicles[].startWaypointvehicles[].endWaypoint | مکانی که وسیله نقلیه مسیر خود را از آنجا شروع و به آنجا ختم میکند. |
| ساعات کاری شما | model.globalStartTimemodel.globalEndTime | زودترین زمان شروع و دیرترین زمان پایان برای کل عملیات ناوگان. |
| وظیفه یا بسته | model.shipments[] | نشان دهنده یک شغل است. میتواند pickup ، delivery یا هر دو باشد. |
| محل وظیفه | pickups[].arrivalWaypointdeliveries[].arrivalWaypoint | موقعیت جغرافیایی که کار در آن انجام میشود. |
| زمان سرویس | pickups[].durationdeliveries[].duration | زمان صرف شده در محل انجام کار (مثلاً تخلیه بار)، بدون احتساب زمان سفر. |
نگاشت محدودیت
| محدودیت دنیای واقعی | پارامتر API | توضیحات |
|---|---|---|
| ظرفیت خودرو | vehicles[].loadLimits | محدودیت سخت یا نرم برای ظرفیت وسیله نقلیه را تعیین میکند. اگر loadDemand یک محموله از محدودیت باقی مانده تجاوز کند، به آن اختصاص داده نمیشود. |
| اندازه بسته | shipments[].loadDemands | میزان ظرفیت وسیله نقلیهای که یک محموله مصرف میکند. |
| محدودیت وسیله نقلیه | shipments[].allowedVehicleIndices | یک محموله را محدود میکند، بنابراین فقط توسط وسایل نقلیه یا رانندگان خاص قابل برداشت یا تحویل است. |
| ساعات کاری موجود | shipments[].pickups[].timeWindows یا shipments[].deliveries[].timeWindows | ساعات موجود برای بازدید از یک مکان را تنظیم میکند. اگر وسیله نقلیه نتواند در این بازه زمانی برسد، ارسال انجام نمیشود. |
| محدودیت طول شیفت | vehicles[].routeDurationLimit | صرف نظر از زمان پایان سراسری، برای مدت زمان کارکرد یک درایور خاص، محدودیت زمانی سخت یا نرم تعیین میکند (برای مثال، حداکثر ۸ ساعت). |
| استراحت راننده | vehicles[].breakRule | قوانین استراحت خاصی را اعمال میکند، مانند استراحتهای اجباری پس از ساعات کاری مشخص. |
| محدودیتهای جادهای | vehicles[].travelMode | نحوه سفر را مشخص میکند (برای مثال، DRIVE یا BICYCLE ). این مورد مسیر را به جادههای قانونی محدود میکند و سرعتهای مورد استفاده برای محاسبه زمان سفر را تعیین میکند. |
نقشهبرداری عینی
| هدف دنیای واقعی | پارامتر API | توضیحات |
|---|---|---|
| به حداقل رساندن اندازه ناوگان | vehicles[].fixedCost | هزینهای یکباره برای استفاده از یک وسیله نقلیه اعمال میکند. هزینه ثابت بالا، یک مسیر را مجبور میکند تا استفاده از وسایل نقلیه کمتر را به افزایش مسافت کل یا زمان کار ترجیح دهد. |
| فاصله را به حداقل برسانید | vehicles[].costPerKilometer | برای هر کیلومتر طی شده هزینهای اعمال میکند. مسیرهای کوتاهتر را در اولویت قرار میدهد تا در مصرف سوخت و استهلاک صرفهجویی شود. |
| به حداقل رساندن کل زمان | vehicles[].costPerHour | برای هر ساعت فعال بودن وسیله نقلیه (شامل زمان سفر و انتظار) هزینهای اعمال میکند. اولویت را به تکمیل سریعتر میدهد. |
| به حداقل رساندن زمان رانندگی | vehicles[].costPerTraveledHour | هزینهای را بهطور خاص برای زمان صرفشده برای حرکت اعمال میکند. این هزینه بین معطل شدن در ترافیک (گران) و منتظر ماندن در ایستگاه (بهطور بالقوه ارزانتر) تمایز قائل میشود. |
| اولویت دادن به برخی وظایف | shipments[].penaltyCost | در صورت رد شدن از یک محموله خاص، هزینهای اعمال میشود. تنظیم این مقدار بالا تضمین میکند که وظایف حیاتی نسبت به وظایف اختیاری در اولویت قرار میگیرند. |
درخواست را ایجاد کنید و پاسخ دریافت کنید
استفاده از API بهینهسازی مسیر برای تولید یک طرح مسیر شامل مراحل زیر است:
- محیط خود را پیکربندی کنید: پروژه Google Cloud خود را راهاندازی کنید، API را فعال کنید و احراز هویت را پیکربندی کنید. برای دستورالعملها، به شروع به کار مراجعه کنید. فقط باید یک بار این مرحله را دنبال کنید.
- ارسال درخواست: بدنه درخواست را با استفاده از نگاشت داده تعریف شده در بخش قبلی بسازید. برای اطلاعات در مورد نقاط پایانی، هدرها و قالببندی درخواست، به بخش «ایجاد درخواست API» مراجعه کنید.
- درک پاسخ: وقتی پاسخی از API دریافت کردید، طرح مسیر و معنای هر پارامتر را درک کنید. به بخش تفسیر پاسخ مراجعه کنید.
برنامه مسیر خود را اصلاح کنید
تبدیل لجستیک دنیای واقعی به هزینهها و محدودیتهای API کار پیچیدهای است. طرح اولیه مسیر شما ممکن است با اهداف تجاری یا انتظارات راننده مطابقت نداشته باشد. اصلاح طرح مسیر شما فرآیندی تکراری از آزمایش مسیرهای برگشتی و تنظیم پارامترها تا زمانی است که به تنظیماتی برسید که اهداف شما را محقق کند.
تنظیم اهداف و محدودیتها
اگر طرح مسیر تولید شده نیازهای شما را برآورده نمیکند، میتوانید پارامترهای خاصی را برای دستیابی به نتایج متفاوت تغییر دهید. محدود کردن یا کاهش پارامترها، نحوه حل اهداف متناقض در طرح مسیر را تغییر میدهد و کاهش پارامترها راهی کارآمد برای کشف پارامترهایی است که باعث ایجاد خطا در طرحهای مسیر شما میشوند.
جدول زیر مشکلات رایج مسیریابی و پارامترهایی را که میتوانید برای حل آنها تنظیم کنید، فهرست میکند.
| سناریو | پارامتر | تنظیم | توضیحات |
|---|---|---|---|
| یک محموله مهم از قلم افتاده است | shipments[].penaltyCost | ارزش آن را افزایش دهید، یا هزینههای جریمه را به سایر محمولهها اضافه کنید | اگر حمل و نقل اختیاری است، هزینه جریمه آن را افزایش دهید تا در اولویت قرار گیرد. اگر حمل و نقل اجباری است (هزینه جریمه ندارد)، هزینههای جریمه را به سایر محمولههای کماهمیتتر اضافه کنید. این کار آنها را اختیاری میکند که باعث آزاد شدن زمان و ظرفیت وسیله نقلیه برای محموله مهم میشود. |
| به دلیل زمانبندی، ارسال انجام نشد | softStartTime / softEndTime | پنجرههای زمانی نرم اضافه کنید | پنجرههای زمانی سخت، وظایفی را که حتی یک دقیقه تأخیر دارند، رها میکنند. پنجرههای زمانی نرم به راننده این امکان را میدهند که با پرداخت «هزینه» کمی خارج از برنامه به مقصد برسد، نه اینکه در انجام وظیفه شکست بخورد. |
| به دلیل وزن، ارسال انجام نشد | loadLimits[].softMaxLoad و costPerUnitAbove | اضافه کردن تقاضاهای بار نرم | به وسیله نقلیه اجازه میدهد تا کمی از ظرفیت ایدهآل خود (برای جریمه) فراتر رود، بدون اینکه بستهای را پشت سر بگذارد. |
| به دلیل بار اضافی ناوگان، ارسال محموله متوقف شد | model.vehicles[] یا shipments[].timeWindows | اضافه کردن وسایل نقلیه یا پنجرههای زمانی استراحت | اگر محمولههای زیادی برای ناوگان فعلی وجود دارد، به خصوص در ساعات اوج ترافیک، وسایل نقلیه بیشتری اضافه کنید یا بازههای تحویل را گسترش دهید تا حجم کار پخش شود. |
| مسیرها خیلی طولانی یا ناکارآمد هستند | vehicles[].costPerKilometer / costPerHour | هزینهها را اضافه کنید یا ارزش آنها را افزایش دهید | به API میگوید که سفر گران است و آن را تشویق میکند که توقفهای دور و منزوی را حذف کند تا مسیرهای تنگتری برای ناوگان ایجاد شود. |
| تعویض دنده راننده خیلی طولانی است | vehicles[].routeDurationLimit یا model.vehicles[] | اضافه کردن محدودیتهای مدت زمان، یا اضافه کردن وسایل نقلیه و محدودیتها | یک محدودیت زمانی مشخص (مثلاً ۸ ساعت) برای کل زمانی که یک راننده در جاده صرف میکند، اعمال میکند. اضافه کردن وسایل نقلیه به تنهایی مسیرها را کوتاه نمیکند، مگر اینکه محدودیتهای مدت زمان را نیز اعمال کنید تا حلکننده را مجبور به توزیع حجم کار در ناوگان بزرگتر کنید. |
بهروزرسانی نقشه مسیر
شما اغلب نیاز دارید که یک طرح مسیر را بهروزرسانی کنید در حالی که پایه را ثابت نگه دارید، مانند اضافه کردن یک وانت به برنامه راننده فعال. برای انجام این کار، از پارامترهای تزریق استفاده کنید، که به API یک شروع بر اساس راهحل قبلی شما ارائه میدهند و به آن اجازه میدهند تا طرح موجود را تغییر دهد به جای اینکه یک طرح جدید را از ابتدا محاسبه کند.
در ادامه روشهای مختلفی که میتوانید یک طرح مسیر را با پارامترهای تزریق بهروزرسانی کنید، آمده است:
- مسیرهای پاسخ قبلی را به فیلد
injectedFirstSolutionRoutesدرخواست جدید خود منتقل کنید. این کار جستجوی بهینهسازی را سرعت میبخشد و برای برنامهریزی مجدد قبل از شروع عملیات روزانه، مانند ادغام محمولههای دقیقه نودی، مفید است. - با استفاده از فیلد
injectedSolutionConstraintمیزان تغییر را کنترل کنید. این مورد زمانی مفید است که عملیات در حال انجام باشد و به شما امکان میدهد توالی فعلی درایور را حفظ کنید یا بخشهایی از طرح را که قبلاً اجرا شدهاند، اصلاح کنید. - با تنظیم مقدار
interpretInjectedSolutionsUsingLabelsرویtrue، مطمئن شوید که مسیر بهروزرسانیشده به وسیله نقلیه صحیح اختصاص داده شده است. این کار در آزمایشها هنگام اضافه یا حذف کردن محمولهها و وسایل نقلیه مفید است، زیرا مسیرها را با استفاده از برچسبها به جای شاخصها مطابقت میدهد. این امر مستلزم منحصر به فرد بودن همه برچسبهای وسیله نقلیه و محموله است.
برنامه مسیر خود را ادغام کنید
طرح مسیر نهایی شما یک شیء دادهای است که نشاندهنده مدیریت بهینه منابع و وظایف شما، ضمن پیروی از محدودیتها و اهدافتان است. با ادغام این طرح مسیر در سیستم خود، از آن در عملیات روزانه خود استفاده کنید. این معمولاً شامل تجسم طرح مسیر شما برای مدیران ناوگان و ارسال دستورالعملهای مرحله به مرحله به رانندگان است.
تجسم
برای اینکه مدیران ناوگان بتوانند برنامه مسیر شما را تأیید و نظارت کنند، میتوانید برنامه مسیر خود را به روشهای زیر تجسم کنید:
برای اینکه مدیران ناوگان بتوانند برنامه مسیر شما را تأیید و نظارت کنند، میتوانید آن را روی نقشه داشبورد نمایش دهید. بسته به مرحله توسعه فعلی خود، میتوانید برنامه مسیر خود را به روشهای زیر تجسم کنید:
- کاوش بدون کد: میتوانید از برنامهی متنباز بهینهسازی مسیر (Route Optimization) استفاده کنید تا ببینید API چگونه دادههای شما را به مسیرهای فیزیکی روی نقشه تبدیل میکند. این برنامهی وب به عنوان یک ابزار اکتشافی عمل میکند که به شما امکان میدهد سناریوهایی بسازید، پارامترهای محدودیت را تنظیم کنید و قبل از نوشتن هرگونه کد، نقشههای مسیر حاصل را به صورت بصری ارائه دهید.
- نمایش ترتیب بازدید: شما میتوانید ترتیب بازدیدها را به صورت نقاط شمارهگذاری شده روی نقشه نشان دهید تا بهینهسازی و برنامههای اعزام خود را در سیستم خودتان ارزیابی کنید. برای انجام این کار، آرایه
visitsرا در داخل هر مسیر از پاسخ API پیدا کنید. موارد موجود در این آرایه دقیقاً همانطور که راننده باید آنها را اجرا کند، مرتب شدهاند. میتوانید در این لیست تکرار کنید، ازshipmentIndexبرای بازیابی مختصات مکان برای هر ایستگاه استفاده کنید و از کتابخانه نقشهبرداری خود برای نمایش نشانگرهای شمارهگذاری شده روی نقشه بر اساس ترتیب آنها در لیست استفاده کنید. - رسم مسیر فیزیکی: میتوانید مسیر دقیق برنامهریزیشده را روی نقشه تجسم کنید تا بفهمید چرا بهینهساز یک توالی خاص را انتخاب کرده است. این چندخطی، مسیر مورد نظر برای برنامهریزی و ارزیابی را نشان میدهد، نه مسیر بلادرنگ طیشده توسط یک راننده. در درخواست خود مقدار
populatePolylines: trueرا تنظیم کنید تا یک فیلدencodedPolylineبرای هر مسیر دریافت کنید و آن را با استفاده از متدgoogle.maps.geometry.encoding.decodePath()از API جاوا اسکریپت Maps رمزگشایی کنید.
ارسال به رانندگان
شما میتوانید با استفاده از Navigation SDK، قابلیت نوبتگیری را در برنامهی رانندگی خود ادغام کنید، یا لینکهای عمیقی به برنامهی مصرفکنندهی Google Maps ارائه دهید.
- کیت توسعه نرمافزار ناوبری (Navigation SDK): اگر یک برنامه درایور سفارشی دارید، میتوانید کیت توسعه نرمافزار ناوبری (Navigation SDK) را برای اندروید یا iOS برای راهنمایی گام به گام درون برنامهای ادغام کنید. میتوانید اطلاعات وظیفه را از پاسخ API در سیستم خود ادغام کرده و از SDK برای ناوبری استفاده کنید. برای ارسال مسیرها از پاسخ API به SDK،
populateTransitionPolylines: trueدر درخواست خود تنظیم کنید. این کار برای هر انتقال در پاسخ، یکrouteTokenایجاد میکند. - موتور ناوگان : برای مدیریت پیشرفته ناوگان، میتوانید برنامه مسیر تولید شده توسط API را به موتور ناوگان وارد کنید تا اجرای مسیر را به صورت بلادرنگ رصد کنید. در حالی که API یک چندخطی از مسیر مورد نظر را برای ارزیابی ارائه میدهد، موتور ناوگان توالی بازدیدهای برنامهریزی شده شما را با ردیابی زنده خودرو جفت میکند.