چرخه حیات طرح مسیر

این صفحه، چرخه حیات یک طرح مسیر را با استفاده از API بهینه‌سازی مسیر، از شناسایی نیازهای مسیریابی شما شروع کرده و با یک طرح مسیر یکپارچه در سیستم شما به پایان می‌رساند.

وقتی مراحل طرح مسیر را دنبال می‌کنید، می‌توانید به اهداف زیر دست یابید:

  • نقشه عملیات ناوگان خود را ترسیم کنید: ناوگان فیزیکی، محدودیت‌های پیچیده و اهداف تجاری خود را به کدی برای API تبدیل کنید.
  • بهینه‌سازی برنامه‌های مسیر برای کسب‌وکارتان: بفهمید که چگونه برنامه مسیر خود را اصلاح کنید تا بتواند به اهدافتان برسد و عملیات روزانه‌تان را بهبود بخشد.
  • استقرار در محیط تولید: با گنجاندن طرح مسیر خود در عملیات روزمره، آن را پیاده‌سازی کنید.

نمودار زیر طول عمر یک طرح مسیر را نشان می‌دهد.

نمودار جریانی از طول عمر یک طرح مسیر که در متن زیر توضیح داده شده است

مرحله پیاده‌سازی یک طرح مسیر زمانی اتفاق می‌افتد که شما برای اولین بار API را ادغام می‌کنید یا زمانی که نیازهای کسب‌وکار شما به طور قابل توجهی تغییر می‌کند. این مرحله مراحل ۱ تا ۵ را پوشش می‌دهد.

مرحله عملیات روزانه سبک‌تر است و اصلاحات در آن حداقل است. این مرحله مراحل ۲ تا ۴ را پوشش می‌دهد.

مراحل عمر یک مسیر به شرح زیر است:

  1. محدوده مشکل خود را مشخص کنید: اهداف، منابع، وظایف و محدودیت‌های خود را شناسایی و سازماندهی کنید تا قبل از شروع استفاده از API، تصویر کاملی از عملیات خود داشته باشید.
  2. داده‌های خود را ترسیم کنید: واقعیت کسب‌وکار خود را به پارامترهای API تبدیل کنید تا نقشه مسیر، نحوه عملکرد ناوگان شما را منعکس کند.
  3. ایجاد یک درخواست و دریافت نقشه مسیر: داده‌های خود را در API وارد کنید و نقشه مسیر بهینه خود را دریافت کنید.
  4. طرح مسیر خود را اصلاح کنید: طرح مسیر خود را آزمایش کنید و با تنظیم محدودیت‌ها و اهداف خود، آن را تکرار کنید تا مطمئن شوید که تمام نیازهای شما را پوشش می‌دهد.
  5. یکپارچه‌سازی طرح مسیر: طرح مسیر را به سیستم‌های موجود خود متصل کنید تا ناوبری کاربردی ارائه شود.

مشکل خود را بررسی کنید

قبل از استفاده از API، باید جزئیات عملیات روزانه خود را در دسته‌های داده‌ای واضح سازماندهی کنید. این به شما امکان می‌دهد فرآیند پیاده‌سازی خود را با شفافیت در مورد منابع و وظایف فعلی خود، محدودیت‌های آنها و اهدافی که می‌خواهید با ناوگان خود به آنها دست یابید، آغاز کنید.

منابع و وظایف خود را مشخص کنید

یک گام مهم هنگام برنامه‌ریزی برای مسیر، شناسایی منابع و وظایف شما، یعنی وسایل نقلیه و محموله‌هایتان است.

وسایل نقلیه محموله‌ها
  • تعداد: چند وسیله نقلیه دارید؟
  • مکان‌ها: وسایل نقلیه از کجا شروع و به کجا ختم می‌شوند؟
  • زمان: ساعات کاری رانندگان وسایل نقلیه چقدر است؟
  • ظرفیت: محدودیت‌های وسایل نقلیه شما چیست؟
  • هزینه‌ها: هزینه‌های اداره ناوگان شما چقدر است؟
  • مکان‌ها: نقاط تحویل و دریافت سفارش کجا هستند؟
  • خواسته‌ها: وزن یا اندازه بسته‌ها چقدر است؟
  • محدودیت‌ها: آیا بازه‌های زمانی خاصی برای تحویل وجود دارد؟
  • زمان سرویس: راننده چه مدت زمان برای پارک کردن و تخلیه بار نیاز دارد؟
  • الزامات: آیا حمل و نقل به نوع وسیله نقلیه یا راننده خاصی نیاز دارد؟

محدودیت‌های خود را شناسایی کنید

محدودیت‌های شما، محدودیت‌هایی در مورد نحوه استفاده از وسایل نقلیه و نحوه مدیریت محموله‌هایتان هستند. آن‌ها اکثر عملیات شما را تعیین می‌کنند و هنگام ایجاد یک برنامه مسیر بهینه، حیاتی هستند.

محدودیت‌ها به طور کلی به دو دسته تقسیم می‌شوند:

محدودیت‌های سخت محدودیت‌های نرم
اینها محدودیت‌هایی هستند که نمی‌توان آنها را شکست . برای مثال، یک کامیون نمی‌تواند وزنی بیشتر از حداکثر ظرفیت خود حمل کند، و یک راننده نمی‌تواند پس از تعطیلی فروشگاه، اجناس را تحویل بگیرد. اینها ترجیحاتی هستند که در صورت لزوم، معمولاً با هزینه جریمه، قابل نقض هستند . برای مثال، ممکن است ترجیح دهید کامیون را فقط تا ۸۰٪ ظرفیت بارگیری کنید یا قبل از زمان هدف تحویل دهید، اما برای رسیدن به مسیر بهتر، با عبور از این محدودیت‌ها مشکلی ندارید.

محدودیت‌های رایج عبارتند از:

  • محدودیت‌های ظرفیت: حداکثر وزن، حجم یا تعداد اقلامی که یک وسیله نقلیه می‌تواند حمل کند.
  • پنجره‌های زمانی: بازه‌های زمانی خاصی که یک مکان برای بازدید باز است، یا ساعات شیفت خاص یک راننده.
  • هزینه‌ها: هزینه‌ی راه‌اندازی یک وسیله‌ی نقلیه یا صرف نظر کردن از یک محموله. یکی از اهداف اصلی API، ایجاد یک برنامه‌ی مسیر مقرون‌به‌صرفه است.
  • استراحت راننده: دوره‌های استراحت راننده که معمولاً طبق قوانین کار پس از تعداد مشخصی از ساعات کاری الزامی است.

اهداف تجاری خود را تعیین کنید

وقتی منابع و وظایف و محدودیت‌های آنها را مشخص کردید، وقت آن است که مشخص کنید کدام معیارها برای کسب و کار شما بیشترین اهمیت را دارند. این اهداف با محدودیت‌ها همراه هستند و به شما کمک می‌کنند تا هنگام برنامه‌ریزی یک مسیر، تصمیم بگیرید چه چیزی بیشترین اهمیت را دارد.

در ادامه به نمونه‌هایی از اهداف کسب و کار اشاره شده است:

اندازه ناوگان فاصله زمان هزینه
آیا می‌خواهید تعداد وسایل نقلیه مورد استفاده را به حداقل برسانید، یا از ناوگان کامل خود برای زودتر تمام کردن روز کاری استفاده کنید؟ آیا کوتاه‌ترین مسیر را برای صرفه‌جویی در مصرف سوخت می‌خواهید، یا مسیر سریع‌تری را ترجیح می‌دهید که ممکن است به دلیل استفاده از بزرگراه‌ها طولانی‌تر باشد؟ آیا می‌خواهید کل ساعات کاری را به حداقل برسانید، یا رسیدن به زمان‌های خاص را در اولویت قرار دهید که می‌تواند زمان صرف شده در مسیر را طولانی‌تر کند؟ آیا می‌خواهید هزینه‌های عملیاتی مانند دستمزد و سوخت را به حداقل برسانید، یا برای رسیدن به ضرب‌الاجل‌های سختگیرانه، هزینه‌های بالاتری را بپذیرید؟

داده‌های خود را نقشه‌برداری کنید

پس از جمع‌آوری داده‌ها، آن‌ها را طوری نگاشت کنید که با ویژگی‌های API مطابقت داشته باشند. این کار به بهینه‌ساز تمام اطلاعات لازم برای بازگرداندن یک طرح مسیر را می‌دهد که واقعیت کسب‌وکار شما را در نظر می‌گیرد.

از پارامترهای جداول بعدی برای ترسیم منابع، وظایف، محدودیت‌ها و اهدافی که در بخش «محدوده مشکل شما» ترسیم کرده‌اید، استفاده کنید.

نگاشت متغیر

مفهوم دنیای واقعی پارامتر API توضیحات
راننده یا وسیله نقلیه model.vehicles[] نشان دهنده یک وسیله نقلیه واحد در ناوگان شما است.
مکان‌های انبار vehicles[].startWaypoint
vehicles[].endWaypoint
مکانی که وسیله نقلیه مسیر خود را از آنجا شروع و به آنجا ختم می‌کند.
ساعات کاری شما model.globalStartTime
model.globalEndTime
زودترین زمان شروع و دیرترین زمان پایان برای کل عملیات ناوگان.
وظیفه یا بسته model.shipments[] نشان دهنده یک شغل است. می‌تواند pickup ، delivery یا هر دو باشد.
محل وظیفه pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
موقعیت جغرافیایی که کار در آن انجام می‌شود.
زمان سرویس pickups[].duration
deliveries[].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 بهینه‌سازی مسیر برای تولید یک طرح مسیر شامل مراحل زیر است:

  1. محیط خود را پیکربندی کنید: پروژه Google Cloud خود را راه‌اندازی کنید، API را فعال کنید و احراز هویت را پیکربندی کنید. برای دستورالعمل‌ها، به شروع به کار مراجعه کنید. فقط باید یک بار این مرحله را دنبال کنید.
  2. ارسال درخواست: بدنه درخواست را با استفاده از نگاشت داده تعریف شده در بخش قبلی بسازید. برای اطلاعات در مورد نقاط پایانی، هدرها و قالب‌بندی درخواست، به بخش «ایجاد درخواست API» مراجعه کنید.
  3. درک پاسخ: وقتی پاسخی از 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 یک چندخطی از مسیر مورد نظر را برای ارزیابی ارائه می‌دهد، موتور ناوگان توالی بازدیدهای برنامه‌ریزی شده شما را با ردیابی زنده خودرو جفت می‌کند.